AX 2012 SysOperation Framework vs RunBaseBatch
The in AX 2012 the RunBaseBatch Framework has been replaced
with SysOperation framework formally known as Business Operation Framework. We can
still use the RunBaseBatch framework in AX 2012, but is recommended to use
SysOperation Framework.
SysOperation
Concepts:
1.
Data
Contract Class:
a.
This class is used for holding the input data.
As the name indicates this class is used to take the inputs from the user and
will store in to variables.
b.
This class must be [DataContractAttribute]
before declaration.
i.
Eg: [DataContractAttribute]
class MKTestDataContract
{
}
c.
This class must contain same number of parm
methods as the number of input fields.
d.
All parm methods must start with
[DataMemberAttribute]
i.
Eg: [DataMemberAttribute]
public int parmAge(int _age= age)
{
age = _age;
return age;
}
2.
Service
Operation Classes:
a.
This class is used to run the business logic
for the data contract class, we can say it is similar to “run’ method in the
RunBaseBatch Framwork.
b.
This class must be extend “SysOperationServiceController”.
c.
It should override “New” method and also
have ‘main’ and “construct” methods.
Ex:
In the below example we will create a dialog to take inputs
from user and display info log.
Inputs: First Name, Last Name, DOB and age.
1.
First
create Data Contract class as below.
[DataContractAttribute]
class MKTestDataContract
{
str fName;
str lName;
int age;
TransDate dob;
NoYesId dobcheck;
}
2.
Add parm
methods for the above input variables.
[DataMemberAttribute]
public str parmfName(str _fname = fName)
{
fName = _fname;
return fName;
}
[DataMemberAttribute]
public str parmlName(str _lName=lName)
{
lName = _lName;
return lName;
}
[DataMemberAttribute]
public TransDate parmDOB(TransDate _dob=
dob)
{
dob = _dob;
return dob;
}
[DataMemberAttribute]
public int parmAge(int _age= age)
{
age = _age;
return age;
}
[DataMemberAttribute]
public NoYesId parmDobcheck(NoYesId _dobcheck=dobcheck)
{
dobcheck = _dobcheck;
return dobcheck;
}
3.
Now we
will create a serviceOperation class, which will extend
SysOperationServiceController
class MKTestBatchServiceOperation extends
SysOperationServiceController
{
}
4.
Override
New method.
public void new(IdentifierName _className = '',
IdentifierName _methodName = '',
SysOperationExecutionMode _executionMode = 0)
{
super();
this.parmClassName(_className);
this.parmMethodName(_methodName);
this.parmExecutionMode(_executionMode);
}
5.
Create a
method to run the business logic as Run method in the RunBaseBatch.
public void runMyLogic(MKTestDataContract
_datacontract)
{
VendTable lVentTable;
str name;
TransDate ldob;
int lage;
name = _datacontract.parmfName()
+ " " + _datacontract.parmlName();
ldob =
_datacontract.parmDOB();
lage =
_datacontract.parmAge();
info(strFmt("%1 : %2 : %3",name, ldob, lage));
}
6.
Create a
construct method
public static MKTestBatchServiceOperation
construct()
{
ClassName className;
MethodName runMethodName;
SysOperationExecutionMode exeMode =
SysOperationExecutionMode::Synchronous;
MKTestBatchServiceOperation mkServiceOperation;
className = classStr(MKTestBatchServiceOperation);
runMethodName = methodStr(MKTestBatchServiceOperation, runMyLogic);
mkServiceOperation = new
MKTestBatchServiceOperation(className,runMethodName,exeMode);
mkServiceOperation.parmDialogCaption("Mallik say SysOperation
Batch");
return mkServiceOperation;
}
7.
Now
we will create a main method which will call the sysOperationServiceController
method “startOperation”.
public static void main(Args _args)
{
MKTestBatchServiceOperation mkServiceOperation;
mkServiceOperation =
MKTestBatchServiceOperation::construct();
mkServiceOperation.startOperation();
}
8.
Generate
Incremental CIL. This is required as it will be executed on AOS server.
9.
Run
the above class and enter inputs and see output J!!!!..
Mallik
1 comment:
Very useful, thank you very much. Nice place to start with this complicated framework.
Petr Široký
Post a Comment