Controller in SysOperation framework in D365 F&O
Answer:
Controller in SysOperation framework in D365 F&O
Controller: As the name implies, this class has great responsibility for initiating the operation. This class holds all the information regarding execution mode; it should show a progress form or dialog. It is best practice not to write the whole business login in the Controller class itself. That's why, in this demo, we have created one service class to write our business logic, and that service class reference is provided in this controller class main method.
class CustBalanceController extends SysOperationServiceController { str packedQuery; CustBalanceDataContract contract; /// /// Sets the query ranges based on caller. /// /// /// The hold theQuery object of the service. /// public void setRanges() { QueryBuildRange queryBuildRange; QueryBuildDataSource queryBuildDataSource; FormDataSource custTableDS; CustTable custTable; str range; Query _query; contract = this.getDataContractObject() as CustBalanceDataContract; _query = contract.getQuery(); if (this.parmArgs() && this.parmArgs().caller() && this.parmArgs().dataset() == tableNum(CustTable)) { custTableDS = FormDataUtil::getFormDataSource (this.parmArgs().record()); if (_query && custTableDS) { // build range for (custTable = custTableDS.getFirst(true) ? custTableDS.getFirst(true): custTableDS.cursor(); custTable; custTable = custTableDS.getNext()) { range = range == '' ? custTable.AccountNum : range + ',' + custTable.AccountNum; } if (range) { queryBuildDataSource = _query.dataSourceTable(tableNum(CustTable)); // check for QueryBuildDataSource if (queryBuildDataSource) { // clear the old range,and then add it queryBuildDataSource.clearRanges(); if (!queryBuildRange) { queryBuildRange =queryBuildDataSource.addRange (fieldNum(CustTable, AccountNum)); } queryBuildRange.value(range); } } } } contract .setQuery(_query); } public static void main(Args _args) { CustBalanceController controller = new CustBalanceController(classStr(CustBalanceService), methodStr(CustBalanceService,processData), SysOperationExecutionMode::Synchronous); controller.parmArgs(_args); controller.setRanges(); controller.startOperation(); } }
Here, we extend the SysOperationServiceController class to inherit controller capabilities. The main method is used to create an instance of the controller class, where we specify the service class and service method which need to be called to execute the business logic. The setRanges() method is called to specify ranges based on the caller.
Related Articles:
This section is dedicated exclusively to Questions & Answers. For an in-depth exploration of X++ Programming Language, click the links and dive deeper into this subject.
Join Our telegram group to ask Questions
Click below button to join our groups.