Брзи преглед Динамицс АКС 2012 СисОператион Фрамеворк
Објављено: 15. фебруар 2025. 22:40:47 UTC
Последње ажурирано: 12. јануар 2026. 08:40:23 UTC
Овај чланак пружа кратак преглед (или подсетник) о томе како имплементирати класе обраде и пакетне задатке у SysOperation оквиру у Dynamics AX 2012 и Dynamics 365 for Operations.
Dynamics AX 2012 SysOperation Framework Quick Overview
Информације у овом посту су засноване на Dynamics AX 2012 R3. Могу, али и не морају бити важеће за друге верзије. (Ажурирање: Могу да потврдим да информације у овом чланку важе и за Dynamics 365 for Operations)
Овај пост је замишљен само као кратак преглед и подсетник. Ако сте нови у SysOperation фрејмворку, топло вам препоручујем да прочитате и Мајкрософтову белу књигу на ту тему. Информације овде могу бити корисне ако вам је потребно само брзо упознавање са различитим класама укљученим у развој операција помоћу овог фрејмворка.
Постоје варијације, али када користим фрејмворк, обично имплементирам три класе:
- Уговор о подацима (требало би да прошири SysOperationDataContractBase)
- Услуга (требало би да прошири SysOperationServiceBase)
- Контролер (мора проширити SysOperationServiceController)
Поред тога, могу имплементирати и UIBuilder класу (мора проширити SysOperationUIBuilder), али то је неопходно само ако дијалог из неког разлога мора бити напреднији од онога што фрејмворк аутоматски генерише.
Уговор о подацима
Уговор о подацима садржи чланове података потребне за вашу операцију. Може се упоредити са типичним макроом CurrentList дефинисаним у RunBase оквиру, али је уместо тога имплементиран као класа. Уговор о подацима би требало да проширује SysOperationDataContractBase, али ће радити чак и ако не проширује. Предност проширења надкласе је у томе што пружа неке информације о сесији које могу бити корисне.
class MyDataContract extends SysOperationDataContractBase
{
ItemId itemId;
}
У овом примеру, itemId је члан података. Потребно је да имплементирате parm метод за сваки члан података и означите га са DataMemberAttribute како би фрејмворк знао шта је то. Ово омогућава фрејмворку да аутоматски изгради дијалог за вас.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
Услуга
Класа сервиса је класа која садржи стварну пословну логику. Она се не бави приказивањем дијалога, групном обрадом или било чим сличним – то је одговорност класе контролера. Одвајањем овога, већа је вероватноћа да ћете добро дизајнирати свој код и направити више кода за вишекратну употребу.
Као и класа уговора о подацима, класа сервиса не мора да наслеђује ништа посебно, али би требало да наслеђује од класе SysOperationServiceBase, барем ако очекујете да ће сервис бити покренут као пакетни задатак, јер надкласа пружа неке информације о пакетном контексту. Метода која покреће операцију (тј. покреће пословну логику) мора да узме објекат ваше класе уговора о подацима као улаз и требало би да буде украшена са [SysEntryPointAttribute]. На пример:
{
}
Са методом под називом run:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
Контролер
Класа контролера обрађује извршавање и групну обраду ваше операције. Такође осигурава да се код извршава у CIL-у за максималне перформансе. Класа контролера обично наслеђује класу SysOperationServiceController, иако постоје и друге опције.
{
}
Конструктор надкласе узима име класе, име методе и (опционо) режим извршавања као параметре. Имена класе и методе треба да буду име ваше сервисне класе и методе која треба да се покрене на њој. Дакле, можете имплементирати методу конструкције вашег контролера овако:
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
Тада главна метода класе MyController може бити једноставна као
{
;
MyController::construct().startOperation();
}
И у основи сте завршили. Горе наведено је очигледно веома једноставан пример и фрејмворк садржи мноштво других опција и могућности, али ово служи као кратак преглед ако вам је потребно освежење знања када нисте користили фрејмворк неко време.
Даље читање
Ако сте уживали у овом посту, можда ће вам се свидети и ови предлози:
- Коришћење СисЕктенсион Фрамеворк-а да бисте сазнали коју подкласу треба инстанцирати у Динамицс АКС 2012
- Форматирање низа помоћу макроа и стрФмт-а у Динамицс АКС 2012
- Грешка „За објекат уговора о подацима није дефинисана класа метаподатака“ у Динамицс АКС 2012
