Brzi pregled Dynamics AX 2012 SysOperation Framework
Objavljeno: 15. veljače 2025. u 22:37:35 UTC
Zadnje ažuriranje: 12. siječnja 2026. u 08:40:14 UTC
Ovaj članak pruža kratki pregled (ili podsjetnik) o tome kako implementirati klase obrade i serijsku obradu zadataka u SysOperation okviru u sustavima Dynamics AX 2012 i Dynamics 365 for Operations.
Dynamics AX 2012 SysOperation Framework Quick Overview
Informacije u ovom postu temelje se na Dynamics AX 2012 R3. Mogu, ali i ne moraju biti važeće za druge verzije. (Ažuriranje: Mogu potvrditi da su informacije u ovom članku važeće i za Dynamics 365 for Operations)
Ovaj post je zamišljen samo kao kratki pregled i podsjetnik. Ako ste novi u SysOperation frameworku, toplo vam preporučujem da pročitate i Microsoftovu bijelu knjigu o toj temi. Informacije ovdje mogu biti korisne ako vam je samo potrebno kratko upoznavanje s različitim klasama uključenim u razvoj operacija s ovim frameworkom.
Postoje varijacije, ali kada koristim framework, obično implementiram tri klase:
- Ugovor o podacima (treba proširiti SysOperationDataContractBase)
- Usluga (treba proširiti SysOperationServiceBase)
- Kontroler (mora proširiti SysOperationServiceController)
Osim toga, mogu implementirati i klasu UIBuilder (mora proširiti SysOperationUIBuilder), ali to je potrebno samo ako dijalog iz nekog razloga mora biti napredniji od onoga što okvir automatski generira.
Ugovor o podacima
Ugovor podataka sadrži podatkovne članove potrebne za vašu operaciju. Može se usporediti s tipičnom makronaredbom CurrentList definiranom u RunBase okviru, ali implementiranom kao klasa. Ugovor podataka trebao bi proširivati SysOperationDataContractBase, ali će raditi čak i ako ne proširi. Prednost proširenja nadklase je što pruža neke informacije o sesiji koje mogu biti korisne.
class MyDataContract extends SysOperationDataContractBase
{
ItemId itemId;
}
U ovom primjeru, itemId je podatkovni član. Morate implementirati parm metodu za svaki podatkovni član i označiti ga s DataMemberAttribute kako bi okvir znao što je to. To omogućuje okviru da automatski izgradi dijalog za vas.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
Servis
Servisna klasa je klasa koja sadrži stvarnu poslovnu logiku. Ne bavi se prikazivanjem dijaloga, skupnom obradom ili bilo čime sličnim - to je odgovornost klase kontrolera. Odvajanjem ovoga, veća je vjerojatnost da ćete dobro dizajnirati svoj kod i napraviti više koda za višekratnu upotrebu.
Kao i klasa ugovora o podacima, klasa usluge ne mora nasljeđivati ništa posebno, ali bi trebala nasljeđivati klasu SysOperationServiceBase, barem ako očekujete da će se usluga izvršavati kao batch job, budući da nadklasa pruža neke informacije o batch kontekstu. Metoda koja pokreće operaciju (tj. pokreće poslovnu logiku) mora uzeti objekt vaše klase ugovora o podacima kao ulaz i treba biti ukrašena s [SysEntryPointAttribute]. Na primjer:
{
}
S metodom pod nazivom run:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
Kontroler
Klasa kontrolera upravlja izvršavanjem i batch obradom vaše operacije. Također osigurava da se kod izvršava u CIL-u za maksimalne performanse. Klasa kontrolera obično nasljeđuje klasu SysOperationServiceController, iako postoje i druge opcije.
{
}
Konstruktor nadklase uzima naziv klase, naziv metode i (opcionalno) način izvršavanja kao parametre. Nazivi klase i metode trebaju biti nazivi vaše servisne klase i metode koja bi se trebala izvršavati na njoj. Dakle, metodu konstrukcije vašeg kontrolera možete implementirati ovako:
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
Tada glavna metoda klase MyController može biti jednostavna kao
{
;
MyController::construct().startOperation();
}
I u osnovi ste gotovi. Gore navedeno je očito vrlo jednostavan primjer, a okvir sadrži mnoštvo drugih opcija i mogućnosti, ali ovo služi kao brzi pregled ako vam je potrebno osvježiti znanje kada neko vrijeme niste koristili okvir.
Dodatno čitanje
Ako vam se svidio ovaj post, možda će vam se svidjeti i ovi prijedlozi:
- Korištenje okvira SysExtension za otkrivanje koju podklasu instancirati u Dynamics AX 2012
- Kako iterirati preko elemenata enuma iz X++ koda u Dynamics AX 2012
- Oblikovanje niza s makronaredbom i strFmt u Dynamics AX 2012
