SysOperation Framework в MS DAX 2012
Архитектура 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())); } }
Comments
So empty here ... leave a comment!