Dynamics AX 2012 SysOperation Framework Brzi pregled
Objavljeno: 15. februar 2025. u 22:37:33 UTC
Posljednje ažurirano: 12. januar 2026. u 08:40:12 UTC
Ovaj članak pruža kratak pregled (ili podsjetnik) o tome kako implementirati klase obrade i paketne poslove u SysOperation okviru u Dynamics AX 2012 i Dynamics 365 for Operations.
Dynamics AX 2012 SysOperation Framework Quick Overview
Informacije u ovom postu zasnovane su na Dynamics AX 2012 R3. Mogu, ali i ne moraju biti važeće za druge verzije. (Ažuriranje: Mogu potvrditi da informacije u ovom članku vrijede i za Dynamics 365 for Operations)
Ovaj post je zamišljen samo kao kratak pregled i podsjetnik. Ako ste novi u svijetu SysOperation frameworka, toplo vam preporučujem da pročitate i Microsoftovu bijelu knjigu na tu temu. Informacije ovdje mogu biti korisne ako vam je potrebno samo kratko upoznavanje s različitim klasama uključenim u razvoj operacija s ovim frameworkom.
Postoje varijacije, ali kada koristim ovaj framework, obično implementiram tri klase:
- Ugovor o podacima (treba proširiti SysOperationDataContractBase)
- Usluga (treba proširiti SysOperationServiceBase)
- Kontroler (mora proširiti SysOperationServiceController)
Pored toga, mogu implementirati i UIBuilder klasu (mora proširiti SysOperationUIBuilder), ali to je potrebno samo ako dijalog iz nekog razloga mora biti napredniji od onoga što framework automatski generira.
Ugovor o podacima
Ugovor o podacima sadrži članove podataka potrebne za vašu operaciju. Može se uporediti s tipičnim makrom CurrentList definiranim u RunBase okviru, ali implementiranim kao klasa. Ugovor o podacima 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 član podataka. Potrebno je implementirati parm metodu za svaki član podataka i označiti ga sa DataMemberAttribute kako bi framework znao šta je to. Ovo omogućava frameworku da automatski izgradi dijalog za vas.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
Usluga
Servisna klasa je klasa koja sadrži stvarnu poslovnu logiku. Ne bavi se prikazivanjem dijaloga, grupnom obradom ili bilo čime sličnim – to je odgovornost klase kontrolera. Odvajanjem ovoga, veća je vjerovatnoća 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 od klase SysOperationServiceBase, barem ako očekujete da će se usluga izvršavati kao batch job, jer 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 dekorirana sa [SysEntryPointAttribute]. Na primjer:
{
}
S metodom pod nazivom run:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
Kontroler
Klasa kontrolera se bavi izvršavanjem i grupnom obradom vaših operacija. 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 (opciono) 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 završili. Gore navedeno je očigledno 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 niste koristili okvir neko vrijeme.
Dodatno čitanje
Ako vam se svidio ovaj post, možda će vam se svidjeti i ovi prijedlozi:
- Greška "No metadata class defined for data contract object" in Dynamics AX 2012
- Korištenje upita u klasi ugovora podataka SysOperation u Dynamics AX 2012
- Izbrišite pravno lice (nalozi kompanije) u Dynamics AX 2012
