Брз преглед на Dynamics AX 2012 SysOperation Framework
Објавено: 5 март 2025, во 19:53:46 UTC
Последно ажурирано: 12 јануари 2026, во 08:40:33 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 е член на податоци. Треба да имплементирате метод parm за секој член на податоци и да го означите со DataMemberAttribute за да може рамката да знае што е тоа. Ова ѝ овозможува на рамката автоматски да го изгради дијалогот за вас.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
Услуга
Класата на услуги е класата што ја содржи вистинската деловна логика. Не се занимава со прикажување дијалози, обработка на серии или нешто слично - тоа е одговорност на класата контролер. Со одвојување на ова, поголема е веројатноста дека ќе го дизајнирате вашиот код добро и ќе направите код што ќе биде повеќекратно употреблив.
Како и класата договор за податоци, класата на услуги не треба да наследува од ништо конкретно, но треба да наследи од класата SysOperationServiceBase, барем ако очекувате дека услугата ќе се извршува како batch job, бидејќи супер класата обезбедува некои информации за batch контекстот. Методот што ја започнува операцијата (т.е. ја извршува деловната логика) мора да земе објект од вашата класа договор за податоци како влез и треба да биде украсен со [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();
}
И во основа сте готови. Горенаведеното е очигледно многу едноставен пример и рамката содржи мноштво други опции и можности, но ова служи како брз преглед ако ви треба освежување кога не сте ја користеле рамката подолго време.
Дополнително читање
Ако ви се допадна овој пост, можеби ќе ви се допаднат и овие предлози:
- Како да се повторуваат над елементите на Enum од кодот X++ во Dynamics AX 2012
- Грешка „Нема дефинирана класа на метаподатоци за објект на договор за податоци“ во Dynamics AX 2012
- Идентификување класа на документи и барање за услуга AIF во Dynamics AX 2012
