SysOperation MultiThreading in D365 X++

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

1. PurchCalcTaxController 

2. PurchCalcTaxHandler

3. PurchCalcTaxBatchController

4. PurchCalcTaxBatchContract

5. PurchCalcTaxContract

[SysOperationJournaledParametersAttribute(true)]

class 69PurchCalcTaxController extends SysOperationServiceController

{


    public static void main(Args _args)

    {

        69PurchCalcTaxController::construct().startOperation();

    }


    public static 69PurchCalcTaxController construct()

    {

        69PurchCalcTaxController controller = new 69PurchCalcTaxController(

            classStr(69PurchCalcTax),

            methodStr(69PurchCalcTax, run));


        return controller;

    }


    /// <summary>

    /// provides caption for batch form

    /// </summary>

    /// <returns>caption : ClassDescription</returns>

    public ClassDescription caption()

    {

        ClassDescription ret;

        

        ret = super();


        ret = "@69S:OrigPurchTaxCalculation";

    

        return ret;

    }


    /// <summary>

    /// provides default caption

    /// </summary>

    /// <returns>default caption : ClassDescription</returns>

    protected ClassDescription defaultCaption()

    {

        ClassDescription ret;

    

        ret = super();


        ret = "@69S:OrigPurchTaxCalculation";

    

        return ret;

    }


}

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

class TCMPurchCalcTaxHandler extends SysOperationServiceBase

{

    public void process(TCMPurchCalcTaxBatchContract _contract)

    {

        BatchHeader                             batchHeader;

        TCMPurchCalcTaxController               controller;

        utcdatetime                             startDate,endDate,nextDate;

        PurchTable                              purchTable;

        TCMPurchCalcTaxContract                 contract;

        TCMPurchTaxCalc                         tcmPurchTaxCalc;

        DataAreaId                              dataAreaId;

        TCMPurchOverdueCalc                     tcmPurchOverdueCalc;


        if(this.isExecutingInBatch())

        {

            if(!batchHeader)

            {

                batchHeader = BatchHeader::construct(this.getCurrentBatchTask().BatchJobId);

            }

            

            dataAreaId = this.getCurrentBatchTask().company();

            

            ttsbegin;

            delete_from tcmPurchTaxCalc where tcmPurchTaxCalc.DataAreaId == dataAreaId;

            delete_from tcmPurchOverdueCalc where tcmPurchOverdueCalc.DataAreaId == dataAreaId;

            ttscommit;


            startDate = DateTimeUtil::newDateTime(any2Date(_contract.parmDate()),0);


            batchHeader.parmCaption("@TCMS:PurchTaxCalculation");


            endDate = DateTimeUtil::newDateTime(today(),0);


            while(startDate <= endDate)

            {

                controller = TCMPurchCalcTaxController::construct();


                contract   =  controller.getDataContractObject();


                contract.parmDate(startDate);

                contract.parmAddMonths(_contract.parmAddMonths());

                batchHeader.addRuntimeTask(controller, batchHeader.parmBatchHeaderId());


                startDate = DateTimeUtil::addMonths(startDate,_contract.parmAddMonths());

            }

            

            batchHeader.save();

        }

    }


}

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

/// <summary>

/// This contract class is created for statements of accounts  batch functionality

/// </summary>

[DataContractAttribute]

class TCMPurchCalcTaxContract

{

    utcdatetime strDate;

    //Bug 84726 : Start; Date 12/20/2022

    int addDays;

    //Bug 84726 : End; Date 12/20/2022


    [DataMemberAttribute, SysOperationControlVisibilityAttribute(true),

        //Bug 84726 : Start; Date 12/20/2022

        SysOperationLabelAttribute('@AccountsReceivable:StartDate'),

        SysOperationDisplayOrderAttribute('1')]

    //Bug 84726 : END; Date 12/20/2022]

    public utcdatetime parmDate(utcdatetime _strDate = strDate)

    {

        strDate = _strDate;


        return strDate;

    }


    //Bug 84726 : Start; Date 12/20/2022

    [DataMemberAttribute,

    SysOperationControlVisibilityAttribute(true),

    SysOperationLabelAttribute('@TCMS:AddMonth')]

    public int parmAddMonths(Int _addDays = addDays)

    {

        addDays = _addDays;

        return addDays;

    }

    //Bug 84726 : End; Date 12/20/2022


}

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

[SysOperationJournaledParametersAttribute(true)]

class TCMPurchCalcTaxBatchController extends SysOperationServiceController

{


    public static TCMPurchCalcTaxBatchController construct(SysOperationExecutionMode _executionMode = SysOperationExecutionMode::Synchronous)

    {

        TCMPurchCalcTaxBatchController controller = new TCMPurchCalcTaxBatchController();

        controller.parmExecutionMode(_executionMode);

        return controller;

    }


    protected void new()

    {

        super(classStr(TCMPurchCalcTaxHandler), methodStr(TCMPurchCalcTaxHandler, process), SysOperationExecutionMode::Synchronous);

    }


    public static void main (Args args)

    {

        TCMPurchCalcTaxBatchController controller = TCMPurchCalcTaxBatchController::construct();

        controller.parmArgs(args);

        controller.startOperation();

    }


    /// <summary>

    /// Indicates if the class must run in batch or not.

    /// Forces the slider in the dialog to true.

    /// </summary>

    /// <returns>True since this class must always run in batch.</returns>

    public boolean mustGoBatch()

    {

        return true;

    }


}

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

//Bug 84726 : Start; Date 12/20/2022

// <summary>

/// This contract class is created for statements of accounts  batch functionality

/// </summary>

[DataContractAttribute]

class TCMPurchCalcTaxBatchContract

{

    utcdatetime strDate;

    int addDays;


    [DataMemberAttribute, 

    SysOperationControlVisibilityAttribute(true),

    SysOperationLabelAttribute('@AccountsReceivable:StartDate'),

    SysOperationDisplayOrderAttribute('1')]

    //[DataMemberAttribute("Start date")]

    public utcdatetime parmDate(utcdatetime _strDate = strDate)

    {

        strDate = _strDate;

        return strDate;

    }


    [DataMemberAttribute, 

    SysOperationControlVisibilityAttribute(true),

    SysOperationLabelAttribute('@TCMS:AddMonth'),

    SysOperationDisplayOrderAttribute('2')]

    public int parmAddMonths(Int _addDays = addDays)

    {

        addDays = _addDays;

        return addDays;

    }


}

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

/// <summary>

/// This contract class is created for statements of accounts  batch functionality

/// </summary>

[DataContractAttribute]

class TCMPurchCalcTaxContract

{

    utcdatetime strDate;

    //Bug 84726 : Start; Date 12/20/2022

    int addDays;


    [DataMemberAttribute, SysOperationControlVisibilityAttribute(true),

        //Bug 84726 : Start; Date 12/20/2022

        SysOperationLabelAttribute('@AccountsReceivable:StartDate'),

        SysOperationDisplayOrderAttribute('1')]

   

    public utcdatetime parmDate(utcdatetime _strDate = strDate)

    {

        strDate = _strDate;


        return strDate;

    }

    [DataMemberAttribute,

    SysOperationControlVisibilityAttribute(true),

    SysOperationLabelAttribute('@TCMS:AddMonth')]

    public int parmAddMonths(Int _addDays = addDays)

    {

        addDays = _addDays;

        return addDays;

    }


}

Comments

Popular posts from this blog

Create ledger journals in D365FO using X++ + LedgerDimensionACType

Excel Import into D365 using x++ code

Sales invoice report