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:

How to Disable “Advanced Filter or Sort” and Enforce Custom Filters on Any D365FO Form

 In Dynamics 365 Finance and Operations, users can apply filters through the “Advanced filter or sort” feature found under the Options tab...