Reference article : https://community.dynamics.com/ax/f/microsoft-dynamics-ax-forum/188732/how-to-add-two-links-between-two-datasource-in-x-query
Here’s a job I just wrote.
static void Job1(Args _args)
{
Query q;
QueryBuildDataSource qbds;
QueryBuildRange qbr;
QueryRun qr;
str value;
InventJournalTrans inventJournalTrans;
InventTransOrigin inventTransOrigin;
;
q = new Query();
qbds = q.addDataSource(tableNum(InventJournalTable));
qbr = qbds.addRange(fieldNum(InventJournalTable, JournalType));
qbr.value(SysQuery::value(InventJournalType::Transfer));
qbds = qbds.addDataSource(tableNum(InventJournalTrans));
qbds.relations(true);
qbds.fetchMode(QueryFetchMode::One2Many);
qbds = qbds.addDataSource(tableNum(InventTransOrigin));
qbr = qbds.addRange(fieldNum(InventTransOrigin, InventTransId));
value = strFmt("((%1.INVENTTRANSID == %2.INVENTTRANSID) || (%1.INVENTTRANSID == %2.TOINVENTTRANSID))",
qbds.name(), qbds.parentDataSource().name());
qbr.value(value);
qr = new QueryRun(q);
while (qr.next())
{
inventJournalTrans = qr.get(tableNum(InventJournalTrans));
inventTransOrigin = qr.get(tableNum(InventTransOrigin));
info(strFmt("%1 %2", inventJournalTrans.RecId, inventTransOrigin.RecId));
}
}
It produces the following query.
SELECT *
FROM InventJournalTable(InventJournalTable_1)
WHERE ((JournalType = 2))
JOIN *
FROM InventJournalTrans(InventJournalTrans_1)
ON InventJournalTable.JournalId = InventJournalTrans.JournalId
JOIN *
FROM InventTransOrigin(InventTransOrigin_1)
ON ((((InventTransOrigin_1.INVENTTRANSID == InventJournalTrans_1.INVENTTRANSID)
|| (InventTransOrigin_1.INVENTTRANSID == InventJournalTrans_1.TOINVENTTRANSID))))
The results show that I get 2 InventTransOrigin records for every InventJournalTrans record.
Message (02:26:39 am)
5637144945 5637145368
5637144945 5637145369
5637145018 5637145448
5637145018 5637145449
Leave a comment