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
Post a Comment