2016-09-19 84 views
0

我想通过使用Visual Studio并在C#中编写用于查询服务的代码来创建复杂的用户定义的AIF查询服务。我使用两个自定义表格,其中一个是标题,另一个是行表格。我在查询中添加了两个表格并应用适当的范围,并且工作正常。现在我想要在这两个表之间建立关系所以我可以基于关系来获取数据。Dynamics AX 2012通过C#的AIF QueryService - 多个表之间的关系和JoinMode用法

请帮我看看如何在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])); 
    } 
} 

回答

0

参见how to add multiple datasources to a query

或者:

  • 将关系属性是孩子的数据源。

或:

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

然后,您可以使用OData Query Service访问查询的数据。请参阅this question

+0

我不使用Axapta AOT来创建关系。我所要做的就是使用AIF查询服务在C#中创建用户定义的查询。我用C#编写了完整的代码,但我无法在两个表之间建立关系或连接。 –

+0

显示您的代码。 –

+0

更新的答案。 –

0

拉夫,

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

这将工作。