Sys Operation frame work is uses the MVC(Model view control) and enable the option in to expose the method using SysentryPointAtrribute[True], SysOperationFrame work is using in , SSRS contract to get input from user, Custom services, and batch job
SysEntryPoint[] is absolute in D365 and explain how the sysOperation works in the following:
How this work:
Base classes:
SysOperationServiceController // This base class extends to the Controller class
SysOperationDataContractBase // This base class extends to the Contract class.
SysOperationAutomaticUIBuilder // This base class extends to the UI Builder class
public static void main(Args _args)
{
ConWHSVehicleGroupChangeController controller;
controller = new ConWHSVehicleGroupChangeController(
classStr(ConWHSVehicleGroupChange),
methodStr(ConWHSVehicleGroupChange,
Run),
SysOperationExecutionMode::Synchronous);
controller.startOperation();
}
==
public static void main(Args _args)
{
ConWHSVehicleGroupChangeController controller;
ConWHSVehicleTable vehicle;
switch (_args.dataset())
{
case tableNum(ConWHSVehicleTable):
vehicle = _args.record();
break;
}
if(vehicle.RecId == 0)
{
//Active buffer required.
throw error ("@SYS25821");
}
controller = new ConWHSVehicleGroupChangeController(
classStr(ConWHSVehicleGroupChange),
methodStr(ConWHSVehicleGroupChange,
Run),
SysOperationExecutionMode::Synchronous);
ConWHSVehicleGroupChangeContract contract;
contract = controller.getDataContractObject('_contract');
if(!contract)
{
//Function %1 was called with an invalid value
throw error (
strFmt("@SYS23264",
classStr(ConWHSVehicleGroupChangeController)));
}
contract.VehicleGroupId(vehicle.VehicleGroupId);
contract.VehicleId(vehicle.VehicleId);
controller.startOperation();
if(FormDataUtil::isFormDataSource(vehicle))
{
//This will call the table's data source's research
// method to refresh the data from the table.
// The true parameter will keep the current record
FormDataUtil::getFormDataSource(vehicle).research(true);
}
}