2016-09-19 6 views
0

Visual Studioを使用し、C#でクエリサービス用のコードを記述することで、複雑なユーザー定義のAIFクエリサービスを作成します。私は2つのカスタムテーブルを使用しています。そのうちの1つはヘッダーで、もう1つはラインテーブルです。テーブルの両方を使用してクエリのフィールドを追加し、適切な範囲を適用して正常に動作します。今、私はこれらの2つのテーブルの間の関係を作成したいので、私は関係に基づいてデータをフェッチすることができます。Dynamics AX 2012 AIF QueryServiceからC# - 複数のテーブル間のリレーションシップと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を参照してください。

次のいずれかの

  • は、子データソースにYesに関係プロパティを設定します。

か:

  • 次の手順を実行して、関係を追加します。
    1. 子データソースには何のために関係プロパティを設定します。
    2. [関係]ノードを右クリックし、[新しい関係]をクリックします。
    3. Fieldプロパティの親データソースからフィールドを選択します。
    4. RelatedFieldプロパティの子データソースからフィールドを選択します。
    5. すべての変更を保存します。

その後、OData Query Serviceを使用してクエリのデータにアクセスすることができます。

this questionも参照してください。

+0

Axapta AOTを使用してリレーションを作成していません。私がする必要があるのは、AIFクエリサービスを使用してC#でユーザー定義のクエリを作成することだけです。私はC#で完全なコードを書いているが、私は関係を作ることができないか、2つのテーブル間を結合することができない。 –

+0

コードを表示します。 –

+0

回答が更新されました。 –

0

のGaurav、あなたのコードで

は、あなたがデータソースの階層構造を作成していません。したがって、関係は機能しません。次のようなエラーが発生します。ルートデータソースにリレーションシップを追加することはできません。私はすでにAXコミュニティで私の回答を共有していました。ここにリンクがあります: https://community.dynamics.com/ax/f/33/p/212065/573674#573674

これは動作します。

関連する問題