Auto submit and Confirm purchase order in batch through code in X++ in D365F&O.

 Hi Viewers,

Here is the code used for create new return order, auto submit workflow if any and confirm PO in batch.


public void createAndConfirmReturnOrder(str _workOrderId)
    {
        PurchTable purchTable, returnPurchTable;
        VersioningPurchaseOrder versioningPO;

        purchTable = PurchTable::find(_workOrderId);


        ttsbegin;

        returnPurchTable.initValue(PurchaseType::ReturnItem);
        returnPurchTable.initFromPurchTable(purchTable);
        returnPurchTable.OrderAccount = purchTable.OrderAccount;
        returnPurchTable.initFromVendTable();
        returnPurchTable.initFromVendTableMandatoryFields();
        returnPurchTable.ReturnItemNum = _workOrderId;
        returnPurchTable.DefaultDimension = purchTable.DefaultDimension;
        returnPurchTable.PurchId = NumberSeq::newGetNum(PurchParameters::numRefPurchId()).num();

        if (returnPurchTable.validateWrite())
        {
            returnPurchTable.insert();
        }

        this.processReturnPurchLine(returnPurchTable, _workOrderId);

        ttscommit;

        ttsbegin;

        // If Change Requests are required, submit the request.
        if (returnPurchTable.ChangeRequestRequired)
        {
            versioningPO = VersioningPurchaseOrder::newPurchaseOrder(returnPurchTable);
            versioningPO.submitChangeRequest();
            versioningPO.approveChangeRequest(); // auto approve change
        }
        ttscommit;
        
        this.purchaseOrderConfirm(returnPurchTable.PurchId);

    }

 public void purchaseOrderConfirm(PurchId _purchId)
    {
        PurchFormLetter             purchFormLetter;
        PurchFormletterParmData     purchFormLetterParmData;
        PurchParmUpdate             purchParmUpdate;
        PurchParmTable              purchParmTable;
        PurchTable                  purchTable;
 
        purchTable = PurchTable::find(_purchId);
 
        ttsBegin;
 
        purchFormLetterParmData = PurchFormletterParmData::newData(DocumentStatus::PurchaseOrder,
                                                               VersioningUpdateType::Initial);
 
        purchFormLetterParmData.parmOnlyCreateParmUpdate(true);
        purchFormLetterParmData.createData(false);
        purchParmUpdate = purchFormLetterParmData.parmParmUpdate();
 
        purchParmTable.clear();
        purchParmTable.TransDate                = DateTimeUtil::getSystemDate(DateTimeUtil::getUserPreferredTimeZone());
        purchParmTable.DocumentDate             = DateTimeUtil::getSystemDate(DateTimeUtil::getUserPreferredTimeZone());
        purchParmTable.Ordering                 = DocumentStatus::PurchaseOrder;
        purchParmTable.ParmJobStatus            = ParmJobStatus::Waiting;
        purchParmTable.initFromPurchTable(purchTable);
        purchParmTable.ParmId                   = purchParmUpdate.ParmId;
        purchParmTable.insert();
 
        purchFormLetter = PurchFormLetter::construct(DocumentStatus::PurchaseOrder);
        purchFormLetter.transDate(DateTimeUtil::getSystemDate(DateTimeUtil::getUserPreferredTimeZone()));
        purchFormLetter.proforma(false);
        purchFormLetter.specQty(PurchUpdate::All);
        purchFormLetter.purchTable(purchTable);
        purchFormLetter.parmInBatch(true);
 
        purchFormLetter.parmParmTableNum(purchParmTable.ParmId);
        purchFormLetter.parmId(purchParmTable.ParmId);
        purchFormLetter.purchParmUpdate(purchFormLetterParmData.parmParmUpdate());

        purchFormLetter.batchInfo().parmBatchExecute(NoYes::Yes);
        purchFormLetter.batchInfo().doBatch();

        ttsCommit;
    }

Thanks for reading! Like this post if you found it helpful. 😀😀
And let me know your thoughts in the comments below.😇😇

Comments

Popular posts from this blog

In ax D365F&O post packing slip from shipment through code x++.

Multi select lookup in UI Builder class in D365F&O through x++ code.

Cancel Post packing slip from all Shipments in D365 F&O through X++