Hitri pregled Dynamics AX 2012 SysOperation Framework
Objavljeno: 15. februar 2025 ob 10:35:42 pop. UTC
Ta članek nudi hiter pregled (ali goljufijo) o tem, kako implementirati razrede obdelave in paketna opravila v ogrodju SysOperation v programih Dynamics AX 2012 in Dynamics 365 for Operations.
Dynamics AX 2012 SysOperation Framework Quick Overview
Informacije v tej objavi temeljijo na Dynamics AX 2012 R3. Lahko velja ali ne velja za druge različice. (Posodobitev: lahko potrdim, da so informacije v tem članku veljavne tudi za Dynamics 365 for Operations)
Ta objava je mišljena le kot hiter pregled in goljufanje. Če ste novi v ogrodju SysOperation, toplo priporočam, da preberete tudi Microsoftovo belo knjigo o tej temi. Informacije tukaj so lahko uporabne, če potrebujete le hiter pregled različnih razredov, vključenih v razvoj operacij s tem ogrodjem.
Obstajajo različice, vendar ko uporabljam ogrodje, običajno implementiram tri razrede:
- Podatkovna pogodba (mora razširiti SysOperationDataContractBase)
- Storitev (mora razširiti SysOperationServiceBase)
- Krmilnik ( mora razširiti SysOperationServiceController)
Poleg tega lahko implementiram tudi razred UIBuilder ( mora razširiti SysOperationUIBuilder), vendar je to potrebno samo, če mora biti pogovorno okno iz nekega razloga naprednejše od tistega, kar samodejno ustvari ogrodje.
Podatkovna pogodba
Podatkovna pogodba vsebuje podatkovne člane, potrebne za vaše delovanje. Lahko ga primerjamo s tipičnim makrom CurrentList, ki je definiran v ogrodju RunBase, vendar je namesto tega implementiran kot razred. Podatkovna pogodba bi morala razširiti SysOperationDataContractBase, vendar bo delovala tudi, če ne. Prednost razširitve superrazreda je, da nudi nekaj informacij o seji, ki so lahko priročne.
class MyDataContract extends SysOperationDataContractBase
{
ItemId itemId;
}
V tem primeru je itemId podatkovni član. Za vsakega podatkovnega člana morate implementirati metodo parm in jo označiti z atributom DataMemberAttribute, da ogrodje ve, kaj je. To omogoča ogrodju, da samodejno zgradi pogovorno okno namesto vas.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
Storitev
Storitveni razred je razred, ki vsebuje dejansko poslovno logiko. Ne ukvarja se s prikazovanjem pogovornih oken, paketno obdelavo ali čim podobnim – to je odgovornost razreda krmilnika. Če to ločite, je večja verjetnost, da boste dobro oblikovali svojo kodo in naredili več kode za večkratno uporabo.
Tako kot razred podatkovne pogodbe tudi storitvenemu razredu ni treba dedovati od ničesar posebnega, vendar bi moral dedovati od razreda SysOperationServiceBase, vsaj če pričakujete, da se bo storitev izvajala kot paketno opravilo, saj superrazred zagotavlja nekaj informacij o paketnem kontekstu. Metoda, ki zažene operacijo (tj. zažene poslovno logiko), mora kot vhod sprejeti objekt vašega podatkovnega pogodbenega razreda in mora biti okrašena z [SysEntryPointAttribute]. Na primer:
{
}
z metodo, imenovano run:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
Krmilnik
Razred krmilnika skrbi za izvajanje in paketno obdelavo vaše operacije. Prav tako zagotavlja, da se koda izvaja v CIL za največjo zmogljivost. Razred krmilnika običajno podeduje razred SysOperationServiceController, čeprav obstajajo tudi druge možnosti.
{
}
Konstruktor nadrazreda kot parametre vzame ime razreda, ime metode in (neobvezno) način izvajanja. Imena razreda in metode bi morala biti ime vašega storitvenega razreda in metode, ki naj se na njem izvaja. Torej lahko implementirate konstruktivno metodo krmilnika takole:
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
Potem je lahko glavna metoda razreda MyController tako preprosta kot
{
;
MyController::construct().startOperation();
}
In v bistvu ste končali. Zgoraj je očitno zelo preprost primer in ogrodje vsebuje množico drugih možnosti in možnosti, vendar to služi kot hiter pregled, če potrebujete osvežitev, ko ogrodja nekaj časa niste uporabljali.