0

试图通过 c# 应用程序访问 AX 2012 QueryService,并且只想获取 CustomerID 和 Customername 字段。问题是,CustomerID 在 CustTable 中,而 CustomerName 在 DirPartyTable 中。

对文章或代码示例的任何帮助将不胜感激。

  1. 参考 QueryDataSourceMetadata 将连接放入这些表并获取数据。
  2. 有哪些选项以及何时使用 Relations 和 JoinMode?

我在 MSDN 中搜索,它只列出了属性名称和方法,并没有以代码示例的形式提供太多帮助。

4

2 回答 2

0

据我所知,您将要查询的两个表放入 QueryDataSourceMetadata 中。生成的数据集应包含两个表。(创建 QueryDataSourceMetadataObject 的示例代码在这里:http: //msdn.microsoft.com/EN-US/library/gg844682.aspx

对于要连接的表,您需要的属性是 ReturnFlatDataSet。(这可能会有所帮助:http: //msdn.microsoft.com/EN-US/library/gg841671.aspx

希望我能帮助您或为您指明正确的方向!

于 2013-07-19T08:50:58.157 回答
0

现在回答为时已晚,我认为您可能已经找到了一些解决方案。无论如何,这里是我对 AX 社区的回复的链接:

https://community.dynamics.com/ax/f/33/p/212065/573674#573674


我找到了两种从 c# 添加关系的方法。我已经评论了基于 AOT 表关系的第一种方法。在下面的代码中 QueryServiceReference 是 VS 中的服务引用名称。如果您只有 QueryService 引用但没有 MetaDataService 引用,则可以在所有行中删除它。这是代码:

query.DataSources = new QueryServiceReference.QueryDataSourceMetadata[1];

// Set the properties on Customers data source.
 customerDataSource = new QueryServiceReference.QueryDataSourceMetadata();
 customerDataSource.Name = "Customers";
 customerDataSource.Enabled = true;
 customerDataSource.FetchMode = QueryServiceReference.FetchMode.OneToOne;
 customerDataSource.Table = "CustTable";
 //customerDataSource.DynamicFieldList = false;

query.DataSources[0] = customerDataSource;


 QueryServiceReference.QueryDataSourceMetadata dirPartyTableDataSource = new QueryServiceReference.QueryDataSourceMetadata();
 dirPartyTableDataSource.Name = "DirPartyTable";
 dirPartyTableDataSource.Table = "DirPartyTable";
 dirPartyTableDataSource.Enabled = true;
 dirPartyTableDataSource.DynamicFieldList = true;


 customerDataSource.DataSources = new QueryServiceReference.QueryDataSourceMetadata[1] { dirPartyTableDataSource };
 QueryServiceReference.QueryRelationMetadata relation = new QueryServiceReference.QueryRelationMetadata();

 //this is also one way of setting the relation 
 //relation.JoinRelation = "DirPartyTable_FK"; //table relation defined in AOT
 //relation.JoinDataSource = customerDataSource.Name; //parent datasource name

relation.Table = "CustTable";//Parent table
 relation.Field = "Party"; 
 relation.RelatedTable = "DirPartyTable"; // child table
 relation.RelatedField = "RecId";
 relation.JoinDataSource = customerDataSource.Name; 
 dirPartyTableDataSource.Relations = new QueryServiceReference.QueryRelationMetadata[1] { relation };
于 2016-10-28T05:50:50.923 回答