Брзи преглед Динамицс АКС 2012 СисОператион Фрамеворк
Објављено: 15. фебруар 2025. 22:40:47 UTC
Овај чланак пружа кратак преглед (или варалицу) о томе како имплементирати класе обраде и групне послове у оквиру СисОператион у Динамицс АКС 2012 и Динамицс 365 фор Оператионс.
Dynamics AX 2012 SysOperation Framework Quick Overview
Информације у овом посту су засноване на Динамицс АКС 2012 Р3. Може, али и не мора бити важеће за друге верзије. (Ажурирање: могу да потврдим да информације у овом чланку важе и за Динамицс 365 фор Оператионс)
Овај пост је само замишљен као брзи преглед и варалица. Ако сте нови у оквиру система СисОператион, топло предлажем да прочитате и Мицрософтову белу књигу на ову тему. Информације овде могу бити корисне ако вам је потребно само брзо да се упознате са различитим класама укљученим у развој операција са овим оквиром.
Постоје варијације, али када користим оквир, обично имплементирам три класе:
- Уговор о подацима (треба да прошири СисОператионДатаЦонтрацтБасе)
- Услуга (треба да прошири СисОператионСервицеБасе)
- Контролер ( мора да прошири СисОператионСервицеЦонтроллер)
Поред тога, могу такође да имплементирам УИБуилдер класу ( мора да прошири СисОператионУИБуилдер), али то је неопходно само ако дијалог из неког разлога мора да буде напреднији од онога што оквир аутоматски генерише.
Уговор о подацима
Уговор о подацима садржи чланове података који су потребни за вашу операцију. Може се упоредити са типичним макроом ЦуррентЛист дефинисаним у РунБасе оквиру, али уместо тога имплементиран као класа. Уговор о подацима би требало да прошири СисОператионДатаЦонтрацтБасе, али ће радити чак и ако не ради. Предност проширења супер класе је у томе што пружа неке информације о сесији које могу бити корисне.
class MyDataContract extends SysOperationDataContractBase
{
ItemId itemId;
}
У овом примеру, итемИд је члан података. Морате да имплементирате парм метод за сваког члана података и означите га са ДатаМемберАттрибуте-ом тако да оквир зна шта је то. Ово омогућава оквиру да аутоматски направи дијалог за вас.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
Услуга
Класа услуге је класа која садржи стварну пословну логику. Не тиче се приказивања дијалога, групне обраде или било чега сличног – то је одговорност класе контролера. Ако ово одвојите, већа је вероватноћа да ћете добро дизајнирати свој код и направити код за вишекратну употребу.
Као и класа уговора података, класа услуге не мора да наследи ништа посебно, али би требало да наследи класу СисОператионСервицеБасе, барем ако очекујете да ће услуга бити покренута као пакетни посао, пошто супер класа пружа неке информације о пакетном контексту. Метода која покреће операцију (тј. покреће пословну логику) мора да узме објекат ваше класе уговора о подацима као улаз и треба да буде украшена са [СисЕнтриПоинтАттрибуте]. на пример:
{
}
са методом која се зове рун:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
Контролор
Класа контролера управља извршавањем и групном обрадом ваше операције. Такође осигурава да се код извршава у ЦИЛ-у за максималне перформансе. Класа контролера обично наслеђује класу СисОператионСервицеЦонтроллер, мада постоје и друге опције.
{
}
Конструктор супер класе узима име класе, име методе и (опционо) начин извршавања као параметре. Имена класа и метода треба да буду име ваше класе услуге и методе која треба да се покрене на њој. Дакле, можете применити метод конструкције вашег контролера овако:
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
Тада главни метод класе МиЦонтроллер може бити једноставан као
{
;
MyController::construct().startOperation();
}
И у основи сте готови. Горе наведено је очигледно веома једноставан пример и оквир садржи мноштво других опција и могућности, али ово служи као брзи преглед ако вам је потребно да се освежите када нисте користили оквир неко време.