Tuesday, 23 August 2022

Allocate multiple number sequence while creating the purchase order in d365 F&O

1. Create a new Table to manage Number sequence Code with CodeID and  add the relation to Number sequence Code with NumberSequenceTable like as a Fixed asset Table

2. Create a new form to manage CodeID and number sequence code Fields 

3. Create a CodeID Field that needs to add to the purchcreateOrder form and PurchTable form 

4. Purchase order number sequence should be set to manual from procurement and sourcing -> parameters-> number sequence form 

5. Create two new classes which extend the standard forms 

 /// <summary>

/// This class is a COC of PurchCreateOrder form

/// </summary>

[ExtensionOf(formDataFieldStr(PurchCreateOrder, PurchTable, TSSSourceApplicationCode))]

final class PurchCreateOrderFormDSField_TSS_Extension

{

    public NumberSeq           purchIdNumberSeq;

    public PurchId             purchIdAllocated;


    /// <summary>

    /// This method is used to modify the values

    /// </summary>

    public void modified()

    {

        FormDataObject dataObject = any2Object(this) as FormDataObject;

        FormDataSource ds = dataObject.datasource();

        PurchTable     purchTable = ds.cursor();

        #Define.empty('')


        next modified();

                

        if (purchIdNumberSeq)

        {

            purchIdNumberSeq.abort();

        }

        

        if (purchTable.TSSSourceApplicationCode)

        {

            purchIdNumberSeq =  NumberSeq::newGetNumFromId(TSSPurcTSSurceApplication::find(purchTable.TSSSourceApplicationCode).NumberSequencecode, true);

            if (purchIdNumberSeq)

            {

                PurchTable.purchid = purchIdNumberSeq.num();

                if (PurchTable.purchid)

                {

                    purchIdAllocated   = PurchTable.purchid;

                    ds.object(fieldNum(PurchTable, PurchId)).allowEdit(false);

                }

                else

                {

                    ds.object(fieldNum(PurchTable, PurchId)).allowEdit(true);

                }

            }

            

        }

        else 

        {

            PurchTable.purchid = #empty;

            ds.object(fieldNum(PurchTable, PurchId)).allowEdit(false);

        }


        if (purchIdNumberSeq)

        {

            element.parmPurchIdNumberSeq(purchIdNumberSeq);

        }

    }


}


-----------------------------------------------------------------------------------------------

/// <summary>

/// This class is a COC of PurchCreateOrder form

/// </summary>

[ExtensionOf(formStr(PurchCreateOrder))]

final class PurchCreateOrderFrom_TSS_Extension

{

    public NumberSeq purchIdNumberSeq;


    /// <summary>

    /// this mthod is use to pass the parm values

    /// </summary>

    /// <param name = "_numberSeq">_numberSeq</param>

    /// <returns>NumberSeq</returns>

    public NumberSeq parmPurchIdNumberSeq(NumberSeq  _numberSeq)

    {

        purchIdNumberSeq = _numberSeq;


        return purchIdNumberSeq;

    }


    /// <summary>

    /// This method is called with we close the form

    /// </summary>

    public void close()

    {

        if (! PurchTable.RecId && purchIdNumberSeq)

        {

            purchIdNumberSeq.abort();

        }

       else if  if (PurchTable.RecId && purchIdNumberSeq)

      {

             purchIdNumberSeq.used();

       }

        next close();

    }


    /// <summary>

    /// This method is used to run the logic

    /// </summary>

    void run()

    {

        next run();


        PurchTable_ds.object(fieldNum(PurchTable, PurchId)).allowEdit(false);

    }


}

No comments:

Post a Comment

validate offsetLedgerDimension in d365 FO

 /// <summary> /// This class is used to validate offsetLedgerDimension /// </summary> class PNG_InventMovValidateOffsetLedgerDi...