0

我想创建一个复杂的用户定义的 AIF 查询服务,方法是使用 Visual Studio 并用 C# 编写查询服务的代码。我正在使用两个自定义表,其中一个是标题,一个是行表。我通过使用两个表在查询中添加了字段,并应用了适当的范围,它工作正常。现在我想在这两个表之间建立一个关系,这样我就可以根据关系获取数据。

请帮助我了解如何在 AIF 查询服务中的多个表之间建立关系。

query.DataSources = new QueryDataSourceMetadata[2];    
query.Name = "AXCustomerInfo";    
QueryDataSourceMetadata custTableDS = new QueryDataSourceMetadata();    
custTableDS.Name = "CustTable";    
custTableDS.Table = "CustTable";    
custTableDS.Enabled = true;    
query.DataSources[0] = custTableDS;    
custTableDS.DynamicFieldList = false;    
custTableDS.Fields = new QueryDataFieldMetadata[1];  
QueryDataFieldMetadata accountNum;    
accountNum = new QueryDataFieldMetadata();    
accountNum.FieldName = "AccountNum";
accountNum.SelectionField = SelectionField.Database;    
custTableDS.Fields[0] = accountNum;
custTableDS.HasRelations = true;
custTableDS.JoinMode =JoinMode.InnerJoin;
QueryDataSourceMetadata dirPartyTableDS = new QueryDataSourceMetadata();
dirPartyTableDS.Name = "DirPartyTable";
dirPartyTableDS.Table = "DirPartyTable";    
dirPartyTableDS.Enabled = true;    
query.DataSources[1] = dirPartyTableDS;    
dirPartyTableDS.DynamicFieldList = false;    
dirPartyTableDS.Fields = new QueryDataFieldMetadata[1];        
QueryDataFieldMetadata name;    
name = new QueryDataFieldMetadata();    
name.FieldName = "Name";    
name.SelectionField = SelectionField.Database;    
dirPartyTableDS.Fields[0] = name;    
dirPartyTableDS.HasRelations = false;        
result = client.ExecuteQuery(query, ref paging);
foreach (DataRow row in result.Tables[0].Rows)    
{    
    Console.WriteLine(String.Format("{0}", row[0]));
    foreach (DataRow row1 in result.Tables[1].Rows)
    {    
        Console.WriteLine(String.Format("{0}", row1[0]));
    }
}
4

2 回答 2

0

高拉夫

在您的代码中,您没有创建数据源的层次结构。因此,关系将不起作用。您将收到如下错误:您无法添加与根数据源的关系。我已经在 AX 社区分享了我的回复。这是链接: https ://community.dynamics.com/ax/f/33/p/212065/573674#573674

这将起作用。

于 2016-10-28T05:59:14.767 回答
0

了解如何将多个数据源添加到查询中。

任何一个:

  • 在子数据源上将 Relations 属性设置为 Yes。

或者:

  • 通过执行以下操作添加关系:
    1. 在子数据源上将 Relations 属性设置为 No。
    2. 右键单击关系节点,然后单击新建关系。
    3. 从字段属性中的父数据源中选择一个字段。
    4. 从相关字段属性的子数据源中选择一个字段。
    5. 保存所有修改。

然后,您可以使用OData Query Service访问查询的数据。

另请参阅此问题

于 2016-09-19T10:20:54.077 回答