Архитектура SysOperation появилась в MS DAX 2012, она позволяет создать логику приложения, которая поддерживает выполнение, как в интерактивном, так и пакетном режиме. Данная архитектура представляет интерфейс, с помощью которого пользователь может настроить входные параметры. Также архитектура SysOperation может быть интегрирована с пакетным сервером для пакетной обработки задач, это обеспечивает повышение производительности операций. SysOperationFramework обеспечивает поддержку запросов, сериализации параметров и т.д.
SysOperationFramework основан на архитектуре MVC (Model View Controller) с изоляцией параметров (Model), диалогового окна (View) и службы (Controller) для исполняемого кода.
SysOperationFramework предназначен заменить архитектуру RunBase поэтому в MS DAX 2012 рекомендуется использовать SysOperation для создания бизнес логики, требующей пакетной обработки.
Ключевые объекты архитектуры SysOpertion
— Service. Класс Service наследуется от класса SysOperationServiceBase и содержит бизнес логику.
— Data Contract. Класс DataContract это класс модели, определяющий атрибуты, которые могут быть отображены в диалоговом окне в виде полей.
— Controller. Класс Controller наследуется от класса SysOperationServiceController и содержит информацию о режиме выполнения, диалоговом окне и т.д.
— UIBuilder. Класс UIBuilder наследуется от класса SysOperationAutomaticUIBuilder и используется для детальной настройки отображения полей в диалоговом окне.
Пример использования архитектуры SysOperation
Класс Controller
public class TestSysOperationControllerClass extends SysOperationServiceController
{
}
public void new()
{
super();
this.parmClassName(classStr(TestSysOperationServiceClass)); //указываем класс service
this.parmMethodName(methodStr(TestSysOperationServiceClass, process)); //указываем метод класса service, который является точкой входа
}
public static void main(Args args)
{
TestSysOperationControllerClass controller;
controller = new TestSysOperationControllerClass();
controller.startOperation();
}
Класс Service
public class TestSysOperationServiceClass extends SysOperationServiceBase
{
}
//на входе метода указывается контракт в случае если он существует
public void process(TestSysOperationDataContractClass _contract)
{
info(strFmt("Select date %1, year %2",
_contract.parmDateValue(),
_contract.parmYearValue()));
}
Класс DataContract
[DataContractAttribute, //атрибут указываеющий что класс является контрактом
SysOperationContractProcessingAttribute(classStr(TestSysOperationUIBuilderClass))] //атрибут указывающий на ссылку на класс UIBuilder
public class TestSysOperationDataContractClass
{
TransDate dateValue;
Year yearValue;
}
[DataMemberAttribute, //атрибут указывающий что метод является полем
SysOperationLabelAttribute('Date'), //метка поля
SysOperationHelpTextAttribute('Enter a date'), //подсказка поля
SysOperationDisplayOrderAttribute('1') //порядок вывода поля на форму
]
public TransDate parmDateValue(TransDate _dateValue = dateValue)
{
dateValue = _dateValue;
return dateValue;
}
[DataMemberAttribute,
SysOperationControlVisibilityAttribute(false) //настройка видлимости поля на форме
]
public Year parmYearValue(Year _yearValue = yearValue)
{
yearValue = _yearValue;
return yearValue;
}
Класс UIBuilder
public class TestSysOperationUIBuilderClass extends SysOperationAutomaticUIBuilder
{
DialogField dateField;
}
public void postBuild()
{
super();
dateField = this.bindInfo().getDialogField(this.dataContractObject(),
methodStr(TestSysOperationDataContractClass, parmDateValue));
}
public void postRun()
{
super();
//переопределение метода у поля Date
dateField.registerOverrideMethod(methodstr(FormDateControl, modified),
methodstr(TestSysOperationUIBuilderClass, modifiedDateValue), this);
}
//метод переопределения modified
public void modifiedDateValue(FormDateControl _ctrl)
{
TestSysOperationDataContractClass contract;
if (_ctrl.dateValue())
{
contract = this.getRdlContractInfo().dataContractObject();
contract.parmYearValue(year(_ctrl.dateValue()));
}
}
Все комментарии
Чтобы оставить комментарий, необходимо войти или зарегистрироваться.
Пока нет комментариев. Будьте первым!