Miklix

Брзи преглед Динамицс АКС 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, али ће радити чак и ако не проширује. Предност проширења надкласе је у томе што пружа неке информације о сесији које могу бити корисне.

[DataContractAttribute]
class MyDataContract extends SysOperationDataContractBase
{
    ItemId itemId;
}

У овом примеру, itemId је члан података. Потребно је да имплементирате parm метод за сваки члан података и означите га са DataMemberAttribute како би фрејмворк знао шта је то. Ово омогућава фрејмворку да аутоматски изгради дијалог за вас.

[DataMemberAttribute]
public ItemId parmItemId(ItemId _itemId = itemId)
{
    ;

    itemId = _itemId;
    return itemId;
}


Услуга

Класа сервиса је класа која садржи стварну пословну логику. Она се не бави приказивањем дијалога, групном обрадом или било чим сличним – то је одговорност класе контролера. Одвајањем овога, већа је вероватноћа да ћете добро дизајнирати свој код и направити више кода за вишекратну употребу.

Као и класа уговора о подацима, класа сервиса не мора да наслеђује ништа посебно, али би требало да наслеђује од класе SysOperationServiceBase, барем ако очекујете да ће сервис бити покренут као пакетни задатак, јер надкласа пружа неке информације о пакетном контексту. Метода која покреће операцију (тј. покреће пословну логику) мора да узме објекат ваше класе уговора о подацима као улаз и требало би да буде украшена са [SysEntryPointAttribute]. На пример:

class MyService extends SysOperationServiceBase
{
}

Са методом под називом run:

[SysEntryPointAttribute]
public void run(MyDataContract _dataContract)
{
    // run business logic here
}


Контролер

Класа контролера обрађује извршавање и групну обраду ваше операције. Такође осигурава да се код извршава у CIL-у за максималне перформансе. Класа контролера обично наслеђује класу SysOperationServiceController, иако постоје и друге опције.

class MyController extends SysOperationServiceController
{
}

Конструктор надкласе узима име класе, име методе и (опционо) режим извршавања као параметре. Имена класе и методе треба да буду име ваше сервисне класе и методе која треба да се покрене на њој. Дакле, можете имплементирати методу конструкције вашег контролера овако:

public static MyController construct()
{
    ;

    return new MyController(classStr(MyService),
    methodStr(MyService, run));
}

Тада главна метода класе MyController може бити једноставна као

public static void main(Args _args)
{
    ;

    MyController::construct().startOperation();
}

И у основи сте завршили. Горе наведено је очигледно веома једноставан пример и фрејмворк садржи мноштво других опција и могућности, али ово служи као кратак преглед ако вам је потребно освежење знања када нисте користили фрејмворк неко време.

Даље читање

Ако сте уживали у овом посту, можда ће вам се свидети и ови предлози:


Поделите на БлуескиПоделите на ФејсбукуДелите на ЛинкедИнуПодели на Тумблр-уПодели на КсДелите на ЛинкедИнуПин на Пинтерест-у

Миккел Цхристенсен

О аутору

Миккел Цхристенсен
Миккел је креатор и власник миклик.цом. Има преко 20 година искуства као професионални компјутерски програмер/програмер софтвера и тренутно је запослен са пуним радним временом у великој европској ИТ корпорацији. Када не пише блог, своје слободно време проводи на широком спектру интересовања, хобија и активности, што се у извесној мери може одразити на разноврсност тема обрађених на овој веб страници.