Monday 30 March 2020

Cancel Sales lines delivery Remainder in D365 F&O


 public static boolean cancelSalesLineDeliveryRemainder(SalesId _salesId, SalesExternalItemId _revnId)
    {
        SalesLine   salesLine;
        boolean     ret;
       
        ttsBegin;
         // You can use your query to find sales line.
        select salesLine
            // index salesLineIdx
            where salesLine.SalesId         == _salesId
                && salesLine.ExternalItemId == _revnId 
                && salesLine.SalesQty       == 1
                && salesLine.SalesStatus    == SalesStatus::Delivered;

        if (salesLine)
        {
            //Note don't use SalesUpdateRemain::updateDeliveryRemainder(salesLine, 0, 0) as this method is deprecated in D365 FSCM
            ret = SalesUpdateRemain::construct().updateDeliverRemainder(salesLine, 0, 0, 0);
        }
        ttsCommit;
       
        return ret;
    }

Cancel DeliveryNote (or Packing Slip) in D365 F&O


public void cancelDeliveryNote(SalesId _salesId)
    {
        CustPackingSlipJour  custPackingSlipJour;
        boolean                       isCancelEnabled;
        boolean                       isCorrectionEnabled;
       
        select firstonly custPackingSlipJour
            order by PackingSlipId desc
                // PackingSlipIdx
                where custPackingSlipJour.SalesId == _salesId;

        [isCancelEnabled, isCorrectionEnabled] = CustPackingSlipJourFormHelper::areCancelCorrectButtonsEnabled(custPackingSlipJour);

        if (isCancelEnabled == true)
        {
            Args args = new Args();
            args.record(custPackingSlipJour);
            new MenuFunction(menuitemActionStr(SalesFormLetter_PackingSlipCancel), MenuItemType::Action).run(args);
        }
    }

Tuesday 24 March 2020

Create display value for default dimension. in D365 FO

public static void main(Args _args)
    {
        str                        dimMainAcc, dimCostCenter, dimDivision, dimLocation;
        CustTable            custTable = CustTable::find("SL0008"); // Add the CustAccount value.

        DimensionAttributeValueSetStorage   davss = DimensionAttributeValueSetStorage::find(custTable.DefaultDimension);
        int                                 i;

        for (i= 1; i <= davss.elements(); i++)
        {
             //You can add/update dimension values as per the dimension structure in the system.
            if (DimensionAttribute::find(davss.getAttributeByIndex(i)).Name == "MainAccount")
            {
                dimMainAcc = davss.getDisplayValueByIndex(i);
            }
            if (DimensionAttribute::find(davss.getAttributeByIndex(i)).Name == "CostCenter")
            {
                dimCostCenter = davss.getDisplayValueByIndex(i);
            }
            if (DimensionAttribute::find(davss.getAttributeByIndex(i)).Name == "Division")
            {
                dimDivision = davss.getDisplayValueByIndex(i);
            }
            if (DimensionAttribute::find(davss.getAttributeByIndex(i)).Name == "Location")
            {
                dimLocation = davss.getDisplayValueByIndex(i);
            }
        }

        str dimStorageValue = "-" + dimMainAcc + "-" + dimCostCenter + "-" + dimDivision + "-" + dimLocation;

        Info(dimStorageValue);
    }

Insert/Update or remove the default dimension value in D365 FSCM via x++

Use below method to insert/update the dimension values, just pass the parameter values to the method and it will return the updated value: p...