2017-08-09 10 views
0

作成したグリッドに複数のデータソースを結合しようとしています。 グリッドはCaseDetail形式であり、グリッド上の他のグループと同じテーブルを使用します。 したがって、テーブル名ではなくデータソース名に基づいて結合を使用する必要があります。AX 2012フォームの名前でデータソースに結合する

親とEcoResProductTranslation(EcoResProductTranslationComplaints) - 子供が存在します(InventTableComplaints)。

public void executeQuery() 
{ 
    QueryBuildDataSource qbdsIT, qbdsERPTC; 

    qbdsIT = InventTableComplaint_DS.queryBuildDataSource(); 
    qbdsERPTC = qbdsIT.addDataSource(tableNum(EcoResProductTranslation), "EcoResProductTranslationComplaint"); 

    qbdsERPTC.addLink(fieldNum(InventTable, Product), fieldNum(EcoResProductTranslation, Product)); 

    qbdsERPTC.joinMode(JoinMode::OuterJoin); 
    qbdsERPTC.fetchMode(QueryFetchMode::One2One); 

    super(); 
} 

しかし、それは動作しません:私は何をしようとしている

は、子データソースにこのコードを追加することです。 可能ですか?

+0

フォームにすでに存在する場合、別のデータソースを追加するために 'addDataSource'を実行しているようです。 –

答えて

1

executeQueryメソッドでテーブル関係を定義しないでください。代わりにinitメソッドでは、正確に1回実行されます。あなたは(JoinSourceとして及びJoinModeとしてOuterJoinInventTableComplaintを使用して)形式でデータソースを定義した場合、あなたはどちらかinit方法でそれを行う必要はありませんが、テーブルのリレーションとして提供されない場合は、リンクを定義する必要があります。

public void init() 
{ 
    qbdsIT = InventTableComplaint_DS.queryBuildDataSource(); 
    qbdsERPTC = EcoResProductTranslationComplaint_ds.queryBuildDataSource(); 
    qbdsERPTC.clearLinks(); 
    qbdsERPTC.addLink(fieldNum(InventTable, Product), fieldNum(EcoResProductTranslation, Product)); 
    super(); 
} 

InventTable(各言語に対応)にはEcoResProductTranslationの複数のレコードが存在する可能性がありますので、グリッドにInventTableの「複製」で終わることがあります。

+0

最後に、親データソース(InventTableの上のもの)に翻訳を挿入し、フォームに何も参加しないことに基づいてソリューションを完成させました。しかし、あなたの解決策は、関係がどこから来るのかをより良く理解することができました。広告。あなたは正しいです、私は 'qbdsERPTC'に' QueryBuildRange'を追加する必要があります – dreptak

関連する問題