Thursday 29 December 2016

Code to cancel Sales order using SalesUpdateRemain class X++ AX 2012 R3

Note: In the below code, I am calling it from .Net using WCF parameter.

[SysEntryPointAttribute(true),
AifCollectionTypeAttribute('return', Types::String)]
public SalesId salesLineCancel(AMSSalesOrderContract _SOContract)
{
    boolean     ret;
    SalesId     lSalesID;
    SalesLine   lSalesLine;
    InventTrans     lInventTrans;
    str             errorStr;

    errorStr = this.validateInterfaceData(_SOContract);
    if ( errorStr!= "")
    {
        return errorStr;
    }
    try
    {
         /////////////////// CHANGE COMPANY/////////////////////
        changeCompany(_SOContract.company())
        {
            //Validate data
            errorStr = this.validateData(_SOContract);
            if (errorStr != "")
            {
                return errorStr;
            }

            ttsBegin;

            //Add your own logic to select and pass a specific sales line.
            lSalesLine.clear();
            if (literator != null)
            {
                lSalesLineContract = literator.value();
                /*select firstOnly forUpdate lSalesLine
                        where lSalesLine.PurchorderFormNum == lSalesLineContract.purchorderFormNum();*/
                select firstOnly forUpdate lSalesLine
                        where lSalesLine.SalesId == lSalesLineContract.salesId();
            }
            if(lSalesLine)
            {
                //lInventTrans    = InventTrans::findTransId(lSalesLine.InventTransId);
                if ( lSalesLine.SalesStatus != SalesStatus::Backorder)
                {
                   lSalesID = strFmt("@SYS4004577",lSalesLine.SalesId, lSalesLine.SalesStatus );
                    // ret         = SalesUpdateRemain::updateDeliveryRemainder(lSalesLine, 0, 0);
                }
                //Open order
                else
                {
                    //pass three parameters
                    //1.SalesLine buffer
                    //2.remainSalesPhysical, pass it as zero as you want to cancel full line
                    //3.remainInventPhysical, pass it as zero as you want to cancel full line
                    ret         = SalesUpdateRemain::updateDeliveryRemainder(lSalesLine, 0, 0);

                    if(ret)
                    {
                        lSalesID = strFmt("Sales Line # %1: of Sales id # %2 is Canceled",lSalesLine.LineNum, lSalesLine.SalesId);
                    }
                }

            }
            else
            {
                lSalesID = strFmt("Sales line not found/Invalid Line");
            }
            ttsCommit;
        }

    }
    catch
    {
        error("Sales line got exception while attempting to be cancelled.");
    }
    return lSalesID;
}

No comments:

Update NuGet package to new MS D365FO version

1. Import the NuGet package files from LCS for that particular version please take the PU version files only. a. Goto LCS-->Asset Libra...