Miklix

Брзи преглед Динамицс АКС 2012 СисОператион Фрамеворк

Објављено: 15. фебруар 2025. 22:40:47 UTC

Овај чланак пружа кратак преглед (или варалицу) о томе како имплементирати класе обраде и групне послове у оквиру СисОператион у Динамицс АКС 2012 и Динамицс 365 фор Оператионс.


Ова страница је машински преведена са енглеског како би била доступна што већем броју људи. Нажалост, машинско превођење још увек није усавршена технологија, тако да може доћи до грешака. Ако желите, можете погледати оригиналну енглеску верзију овде:

Dynamics AX 2012 SysOperation Framework Quick Overview

Информације у овом посту су засноване на Динамицс АКС 2012 Р3. Може, али и не мора бити важеће за друге верзије. (Ажурирање: могу да потврдим да информације у овом чланку важе и за Динамицс 365 фор Оператионс)


Овај пост је само замишљен као брзи преглед и варалица. Ако сте нови у оквиру система СисОператион, топло предлажем да прочитате и Мицрософтову белу књигу на ову тему. Информације овде могу бити корисне ако вам је потребно само брзо да се упознате са различитим класама укљученим у развој операција са овим оквиром.

Постоје варијације, али када користим оквир, обично имплементирам три класе:

  • Уговор о подацима (треба да прошири СисОператионДатаЦонтрацтБасе)
  • Услуга (треба да прошири СисОператионСервицеБасе)
  • Контролер ( мора да прошири СисОператионСервицеЦонтроллер)

Поред тога, могу такође да имплементирам УИБуилдер класу ( мора да прошири СисОператионУИБуилдер), али то је неопходно само ако дијалог из неког разлога мора да буде напреднији од онога што оквир аутоматски генерише.


Уговор о подацима

Уговор о подацима садржи чланове података који су потребни за вашу операцију. Може се упоредити са типичним макроом ЦуррентЛист дефинисаним у РунБасе оквиру, али уместо тога имплементиран као класа. Уговор о подацима би требало да прошири СисОператионДатаЦонтрацтБасе, али ће радити чак и ако не ради. Предност проширења супер класе је у томе што пружа неке информације о сесији које могу бити корисне.

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

У овом примеру, итемИд је члан података. Морате да имплементирате парм метод за сваког члана података и означите га са ДатаМемберАттрибуте-ом тако да оквир зна шта је то. Ово омогућава оквиру да аутоматски направи дијалог за вас.

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

    itemId = _itemId;
    return itemId;
}


Услуга

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

Као и класа уговора података, класа услуге не мора да наследи ништа посебно, али би требало да наследи класу СисОператионСервицеБасе, барем ако очекујете да ће услуга бити покренута као пакетни посао, пошто супер класа пружа неке информације о пакетном контексту. Метода која покреће операцију (тј. покреће пословну логику) мора да узме објекат ваше класе уговора о подацима као улаз и треба да буде украшена са [СисЕнтриПоинтАттрибуте]. на пример:

class MyService extends SysOperationServiceBase
{
}

са методом која се зове рун:

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


Контролор

Класа контролера управља извршавањем и групном обрадом ваше операције. Такође осигурава да се код извршава у ЦИЛ-у за максималне перформансе. Класа контролера обично наслеђује класу СисОператионСервицеЦонтроллер, мада постоје и друге опције.

class MyController extends SysOperationServiceController
{
}

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

public static MyController construct()
{
    ;

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

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

public static void main(Args _args)
{
    ;

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

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

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

Миккел Банг Кристенсен

О аутору

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