现在回答为时已晚,我认为您可能已经找到了一些解决方案。无论如何,这里是我对 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 };