2016-10-27 13 views
1

私は、Sales TableとSales Lineテーブルをクエリのデータソースとして使用するクエリを持っています。クエリ実行セクションで、販売注文に複数の販売回線が接続されている場合、販売回線の結果をどのようにループするのですか?X ++ QueryBuilderネストされた結果

static void TestQuery(Args _args) 

{ 

    SalesTable salesTable; 
    SalesLine salesLine; 
    QueryBuildRange  querybuildrange; 
    utcDateTime   mutcDateTime; 
    date     mDate; 

    QueryRun queryrun = new QueryRun(new Query()); 
    QueryBuildDataSource datasourceA = queryrun.query().addDataSource(tableNum(SalesTable)); 
    QueryBuildDataSource datasourceB = datasourceA.addDataSource(tableNum(SalesLine)); 

    mDate  = str2Date("25/09/2016", 123); 
    mutcDateTime = DateTimeUtil::newDateTime(mDate,0); 
    querybuildrange = datasourceA.addRange(FieldNum(SalesTable, CreatedDateTime)); 
    querybuildrange.value(strFmt('>%1', mutcDateTime)); 

    datasourceB.relations(true); // Link on SalesId 
    datasourceB.joinMode(JoinMode::ExistsJoin); 

    info(datasourceA.toString());  // This is the full query 

    while (queryrun.next()) 
    { 
     salesTable = queryrun.get(tableNum(SalesTable)); 
     salesLine = queryrun.get(tableNum(SalesLine)); 
     info(salesTable.SalesId); 
     info(salesline.Name); 
    } 
} 

答えて

2

あなたがInnerJoinを使用する必要があるときは、ExistsJoinsを使用しています。

変更

datasourceB.joinMode(JoinMode::ExistsJoin);

datasourceB.joinMode(JoinMode::InnerJoin);

また、このラインは、あなたがたときに、レコードヘクタールチェックするqueryRun.changed(...)メソッドを使用することができます変更されました。このように:

while (queryrun.next()) 
{ 
    if (queryrun.changed(tableNum(SalesTable))) 
    { 
     salesTable = queryrun.get(tableNum(SalesTable)); 
    } 

    salesLine = queryrun.get(tableNum(SalesLine)); 
    info(salesTable.SalesId); 
    info(salesline.Name); 
} 
+0

あなたの答えはありがとう、私は助けてくれてありがとう! –

+0

ようこそ。それが正しい場合は、正しい答えをマークすることができます... –

関連する問題