Wednesday, 19 August 2026

How to Confirm a Purchase Order in D365 Finance & Operations Using X++

In Microsoft Dynamics 365 Finance & Operations, a Purchase Order can be confirmed programmatically using the standard PurchFormLetter framework.

This is useful when you need to confirm a Purchase Order from custom business logic, batch processes, integrations, or custom forms without manually clicking Confirm from the Purchase Order form.

The following method accepts a PurchTable record and confirms the Purchase Order using the standard D365 F&O framework.


public static PurchTable confirmPurchaseOrder(PurchTable _purchTable)

{

    PurchFormLetter          purchFormLetter;

    PurchFormletterParmData  purchFormLetterParmData;

    PurchParmUpdate          purchParmUpdate;

    PurchParmTable           purchParmTable;


    ttsBegin;


    // Create parameter data for Purchase Order confirmation

    purchFormLetterParmData = PurchFormletterParmData::newData(

        DocumentStatus::PurchaseOrder,

        VersioningUpdateType::Initial);


    purchFormLetterParmData.parmOnlyCreateParmUpdate(true);

    purchFormLetterParmData.createData(false);


    purchParmUpdate = purchFormLetterParmData.parmParmUpdate();


    // Populate PurchParmTable

    purchParmTable.clear();


    purchParmTable.TransDate =

        DateTimeUtil::getSystemDate(DateTimeUtil::getUserPreferredTimeZone());


    purchParmTable.DocumentDate =

        DateTimeUtil::getSystemDate(DateTimeUtil::getUserPreferredTimeZone());


    purchParmTable.Ordering              = DocumentStatus::PurchaseOrder;

    purchParmTable.ParmJobStatus         = ParmJobStatus::Waiting;

    purchParmTable.PurchId               = _purchTable.PurchId;

    purchParmTable.PurchName             = _purchTable.PurchName;

    purchParmTable.DeliveryName          = _purchTable.DeliveryName;

    purchParmTable.DeliveryPostalAddress = _purchTable.DeliveryPostalAddress;

    purchParmTable.OrderAccount          = _purchTable.OrderAccount;

    purchParmTable.CurrencyCode          = _purchTable.CurrencyCode;

    purchParmTable.InvoiceAccount        = _purchTable.InvoiceAccount;

    purchParmTable.ParmId                = purchParmUpdate.ParmId;


    purchParmTable.insert();


    // Create Purchase Order confirmation

    purchFormLetter = PurchFormLetter::construct(

        DocumentStatus::PurchaseOrder);


    purchFormLetter.transDate(

        DateTimeUtil::getSystemDate(

            DateTimeUtil::getUserPreferredTimeZone()));


    purchFormLetter.proforma(false);

    purchFormLetter.specQty(PurchUpdate::All);

    purchFormLetter.purchTable(_purchTable);


    purchFormLetter.parmParmTableNum(purchParmTable.ParmId);

    purchFormLetter.parmId(purchParmTable.ParmId);

    purchFormLetter.purchParmUpdate(

        purchFormLetterParmData.parmParmUpdate());


    // Execute the confirmation

    purchFormLetter.run();


    ttsCommit;


    return _purchTable;

}

No comments:

Post a Comment

How to Confirm a Purchase Order in D365 Finance & Operations Using X++

In Microsoft Dynamics 365 Finance & Operations, a Purchase Order can be confirmed programmatically using the standard PurchFormLetter f...