Hi. I'm building an X++ Query based on this SQL Server query:
select .........
from CUSTINVOICETRANS custinvoicetrans
full outer join CUSTINVOICEJOUR custinvoicejour
on custinvoicetrans.invoiceid = custinvoicejour.invoiceid
full outer join CUSTTABLE custtable
on custinvoicejour.invoiceaccount = custtable.accountnum
inner join SALESTABLE salestable
on custinvoicetrans.SALESID = salestable.SALESID
inner join SALESLINE salesline
on custinvoicetrans.SalesId = salesline.SalesId and custinvoicetrans.ItemId = salesline.ItemId
left outer join (select shipmentid, transrefid,containerno, dataareaid from PWAustraliaRetailChild where dataAreaId1 = 'GF' and status = '9') f
on custinvoicetrans.salesid = f.TRANSREFID
where
custinvoicetrans.itemid<>''
and custinvoicetrans.DATAAREAID='GF'
...by the way, PWAustraliaRetailChild is a View. My X++ Query is as follows:
QueryBuildRange rangeInvoice;
QueryBuildRange rangeStatus;
QueryBuildDataSource q1,q2,q3;
q1 = query.addDataSource(tableNum(CustInvoiceTrans));
rangeInvoice = q1.addRange(fieldNum(CustInvoiceTrans, ItemId));
rangeInvoice.value(queryNotValue(strFmt('%1' ,"")));
rangeInvoice.status(2); //range status = hidden
//CustInvoiceTrans -> CustInvoiceJour
q2 = q1.addDataSource(tableNum(CustInvoiceJour));
q2.addLink(fieldNum(CustInvoiceTrans, InvoiceId),fieldNum(CustInvoiceJour, InvoiceId));
q2.joinMode(JoinMode::OuterJoin); //outer
//CustInvoiceJour -> CustTable
q3 = q2.addDataSource(tableNum(CustTable));
q3.addLink(fieldNum(CustInvoiceJour, InvoiceAccount),fieldNum(CustTable, AccountNum));
q3.joinMode(JoinMode::OuterJoin);
//CustInvoiceTrans -> SalesTable
q2 = q1.addDataSource(tableNum(SalesTable));
q2.addLink(fieldNum(CustInvoiceTrans, SalesId),fieldNum(SalesTable, SalesId));
q2.joinMode(JoinMode::InnerJoin);
//CustInvoiceTrans -> SalesLine
q2 = q1.addDataSource(tableNum(SalesLine));
q2.addLink(fieldNum(CustInvoiceTrans, SalesId),fieldNum(SalesLine, SalesId));
q2.addLink(fieldNum(CustInvoiceTrans, ItemId),fieldNum(SalesLine, ItemId));
q2.joinMode(JoinMode::InnerJoin);
//CustInvoiceTrans -> PWAustraliaRetailChild
q2 = q1.addDataSource(tableNum(PWAustraliaRetailChild));
q2.addLink(fieldNum(CustInvoiceTrans, SalesId), fieldNum(PWAustraliaRetailChild, transRefId));
q2.joinMode(JoinMode::OuterJoin);
//PWAustraliaRetailChild.status @ wmsshipment.status == 9
rangeStatus = q2.addRange(fieldNum(PWAustraliaRetailChild, status));
rangeStatus.value(strFmt('%1' ,9));
rangeStatus.status(2); //hidden
My X++ Query didn't return the same result as the SQL Server one. Can you please help me point out where I did wrong? I checked multiple times and I'm pretty sure I have linked all join fields correctly. Is it because I didn't create full outer join? How exactly to create full outer join? Because as far as my understanding, full outer join is not supported in AX.
Thank You.