Query with QBDS in RDP Report in D365fo X++

                                              Query with QBDS in D365fo X++

Code: 

public void processReport()
    {
        Query                   query;
        QueryBuildDataSource    qbds;
        QueryBuildDataSource    purchaseOrderQBDS;
        QueryBuildDataSource    purchaseReqLineQBDS;
        QueryBuildDataSource    purchaseOrderLineQBDS;
        QueryBuildDataSource    vendPackingSlipJourQBDS;
        QueryBuildDataSource    vendInvoiceJourQBDS;
        QueryBuildRange         qbr;
        QueryRun                queryRun;
        str                     range;

        dssl_contract   = this.parmDataContract();
        vendor          = dssl_contract.parmVendor();
        purchId         = dssl_contract.parmPurchaseOrder();
        packingSlipId   = dssl_contract.parmPackingSlipId();
        fromDate        = dssl_contract.parmFromDate();
        toDate          = dssl_contract.parmToDate();
        invoiceId       = dssl_contract.parmInvoiceId();
        voucher         = dssl_contract.parmVoucher();

        //Query
        query = new Query(this.parmQuery());
        qbds  = query.dataSourceTable(tableNum(PurchReqTable));                //Another Way Query
        //query = new Query();
        //custInvoiceJourQBDS  = query.addDataSource(tableNum(custInvoiceJour));

        if(fromDate || toDate)
        {
            utcdatetime _fromDate = DateTimeUtil::newDateTime(fromDate,0);
            utcdatetime _toDate   = DateTimeUtil::newDateTime(toDate,86400);
            qbr = SysQuery::findOrCreateRange(qbds, fieldNum(PurchReqTable, CreatedDateTime));
            range = SysQuery::range(_fromDate, _toDate);
            qbr.value(range);
        }
        

        purchaseReqLineQBDS       = qbds.addDataSource(tableNum(PurchReqLine));
        purchaseReqLineQBDS.addLink(fieldNum(PurchReqTable, RecId), fieldNum(PurchReqLine, PurchReqTable));
        purchaseReqLineQBDS.joinMode(JoinMode::OuterJoin);
        
        purchaseOrderLineQBDS       = purchaseReqLineQBDS.addDataSource(tableNum(PurchLine));
        purchaseOrderLineQBDS.addLink(fieldNum(PurchReqLine, LineRefId), fieldNum(PurchLine, PurchReqLineRefId));
        purchaseOrderLineQBDS.joinMode(JoinMode::OuterJoin);

        purchaseOrderQBDS           = purchaseOrderLineQBDS.addDataSource(tableNum(PurchTable));
        purchaseOrderQBDS.addLink(fieldNum(PurchLine, PurchId), fieldNum(PurchTable, PurchId));
        purchaseOrderQBDS.joinMode(JoinMode::OuterJoin);

        
        vendPackingSlipJourQBDS     = purchaseOrderQBDS.addDataSource(tableNum(VendPackingSlipJour));
        vendPackingSlipJourQBDS.addLink(fieldNum(PurchTable, PurchId), fieldNum(VendPackingSlipJour, PurchId));
        vendPackingSlipJourQBDS.joinMode(JoinMode::OuterJoin);

        
        vendInvoiceJourQBDS         = vendPackingSlipJourQBDS.addDataSource(tableNum(VendInvoiceJour));
        vendInvoiceJourQBDS.addLink(fieldNum(VendPackingSlipJour, PurchId), fieldNum(VendInvoiceJour, PurchId));
        vendInvoiceJourQBDS.joinMode(JoinMode::OuterJoin);

        if(purchId)
        {
            query.addQueryFilter(purchaseOrderQBDS, (fieldStr(PurchTable, PurchId))).value(SysQuery::value(PurchId));
        }
        if(vendor)
        {
            query.addQueryFilter(purchaseOrderQBDS, (fieldStr(PurchTable, OrderAccount))).value(SysQuery::value(vendor));
        }
        if(packingSlipId)
        {
            query.addQueryFilter(purchaseOrderQBDS, (fieldStr(VendPackingSlipJour, PackingSlipId))).value(SysQuery::value(PackingSlipId));
        }
        if(invoiceid)
        {
            query.addQueryFilter(purchaseOrderQBDS, (fieldStr(vendinvoicejour, invoiceid))).value(SysQuery::value(invoiceid));
        }
        if(voucher)
        {
            query.addQueryFilter(purchaseOrderQBDS, (fieldStr(vendinvoicejour, LedgerVoucher))).value(SysQuery::value(voucher));
        }
               

        queryRun = new QueryRun(query);
        while(queryRun.next())
        {
            PurchReqTable           purchReqTable;
            PurchReqLine            purchReqLine;
            PurchTable              PurchTable;
            PurchLine               purchLine;
            VendTable               vendTable;
            VendPackingSlipJour     vendPackingSlipJour;
            vendinvoicejour         vendinvoicejour;

            purchReqTable.clear();
            PurchReqLine.clear();
            PurchTable.clear();
            PurchLine.clear();
            vendPackingSlipJour.clear();
            vendinvoicejour.clear();
            vendTable.clear();
            P2PtempTable.clear();

            purchReqTable               =  queryRun.get(tableNum(PurchReqTable));
            PurchReqLine                =  queryRun.get(tableNum(PurchReqLine));
            PurchTable                  =  queryRun.get(tableNum(PurchTable));
            PurchLine                   =  queryRun.get(tableNum(PurchLine));
            vendPackingSlipJour         =  queryRun.get(tableNum(vendPackingSlipJour));
            vendinvoicejour             =  queryRun.get(tableNum(vendinvoicejour));
            vendTable                   =  VendTable::find(PurchTable.OrderAccount);


            container Reqcon   = this.getBulkApproverDate(purchReqTable.TableId, purchReqTable.RecId, 2);
            container Purchcon = this.getBulkApproverDate(PurchTable.TableId, PurchTable.RecId, 6);

            P2PtempTable.DSSL_VendorName                    = vendTable.name();
            P2PtempTable.DSSL_BusinessSegmentFD             = this.getDimensionDisplayValue(vendTable.DefaultDimension, "Segment");
            P2PtempTable.DSSL_PurchReqId                    = purchReqTable.PurchReqId;
            P2PtempTable.DSSL_DateOfCreationByUserPR        = purchReqTable.CreatedDateTime;
            P2PtempTable.DSSL_DateOfFirstApproverPR         = conPeek(Reqcon, 1);
            P2PtempTable.DSSL_DateOfSecondApproverPR        = conPeek(Reqcon, 2);

            P2PtempTable.DSSL_PurchId                       = PurchTable.PurchId;
            P2PtempTable.DSSL_DateOfCreationByUserPO        = PurchTable.CreatedDateTime;
            P2PtempTable.DSSL_DateOfSecondApproverPO        = conPeek(Purchcon, 2);
            P2PtempTable.DSSL_DateOfThirdApproverPO         = conPeek(Purchcon, 3);
            P2PtempTable.DSSL_DateOfFourthApproverPO        = conPeek(Purchcon, 4);
            P2PtempTable.DSSL_DateOfFifthApproverPO         = conPeek(Purchcon, 5);
            P2PtempTable.DSSL_DateOfSixthApproverPO         = conPeek(Purchcon, 6);

            P2PtempTable.DSSL_PackingSlipId                 = vendPackingSlipJour.PackingSlipId;
            P2PtempTable.DSSL_DateOfCreationByUserGRN       = vendPackingSlipJour.DeliveryDate;
            P2PtempTable.DSSL_DateOfFinalApproverGRN        = this.getFinalApproverDate(vendPackingSlipJour.TableId, vendPackingSlipJour.RecId);

            P2PtempTable.DSSL_InvoiceId                     = vendInvoiceJour.InvoiceId;
            P2PtempTable.DSSL_InvoiceDate                   = vendInvoiceJour.InvoiceDate;
            P2PtempTable.DSSL_PostingDate                   = vendInvoiceJour.DueDate;
            P2PtempTable.DSSL_TransDate                     = vendInvoiceJour.InvoiceDate;
            P2PtempTable.DSSL_SettlementVoucher             = vendInvoiceJour.LedgerVoucher;

            P2PtempTable.insert();
            

            
        }
    }

Comments