Брз преглед на Dynamics AX 2012 SysOperation Framework
Објавено: 5 март 2025, во 19:53:46 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, силно предлагам да ја прочитате и белата книга на Microsoft на оваа тема. Информациите овде може да бидат корисни ако ви треба само брзо четкање за различните класи вклучени во развојот на операции со оваа рамка.
Има варијации, но кога ја користам рамката, обично имплементирам три класи:
- Договор за податоци (треба да го продолжи SysOperationDataContractBase)
- Услуга (треба да го прошири SysOperationServiceBase)
- Контролер ( мора да го прошири SysOperationServiceController)
Дополнително, може и да имплементирам класа UIBuilder ( мора да го прошири SysOperationUIBuilder), но тоа е потребно само ако дијалогот поради некоја причина треба да биде понапреден од она што рамката автоматски го генерира.
Договор за податоци
Договорот за податоци ги содржи членовите на податоци потребни за вашата работа. Може да се спореди со типичното макро CurrentList дефинирано во рамката RunBase, но наместо тоа имплементирано како класа. Договорот за податоци треба да го продолжи SysOperationDataContractBase, но ќе работи дури и ако не го прави тоа. Предноста на проширувањето на супер класата е тоа што обезбедува некои информации за сесијата што може да бидат корисни.
class MyDataContract extends SysOperationDataContractBase
{
ItemId itemId;
}
Во овој пример, itemId е податочен член. Треба да имплементирате парм метод за секој податочен член и да го означите со 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();
}
И во основа сте готови. Горенаведеното е очигледно многу едноставен пример и рамката содржи плејада други опции и можности, но ова служи како брз преглед ако ви треба четкање кога не сте ја користеле рамката некое време.