Dynamics AX 2012 SysOperation Framework Brzi pregled
Objavljeno: 15. februar 2025. u 22:37:33 UTC
Ovaj članak pruža brzi pregled (ili varalicu) o tome kako implementirati klase obrade i batch poslove u SysOperation okviru u Dynamics AX 2012 i Dynamics 365 for Operations.
Dynamics AX 2012 SysOperation Framework Quick Overview
Informacije u ovom postu su zasnovane na Dynamics AX 2012 R3. Može ili ne mora vrijediti 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 brzi pregled i varalica. Ako ste novi u SysOperation frameworku, toplo vam predlažem da pročitate i Microsoftov bijeli papir na tu temu. Informacije ovdje mogu biti korisne ako vam je potrebno samo brzo osvježavanje različitih klasa uključenih u razvoj operacija s ovim okvirom.
Postoje varijacije, ali kada koristim okvir obično implementiram tri klase:
- Ugovor o podacima (treba proširiti SysOperationDataContractBase)
- Service (treba proširiti SysOperationServiceBase)
- Kontroler (mora proširiti SysOperationServiceController)
Dodatno, također mogu implementirati UIBuilder klasu (mora proširiti SysOperationUIBuilder), ali to je potrebno samo ako dijalog iz nekog razloga mora biti napredniji od onoga što okvir generira automatski.
Ugovor o podacima
Ugovor o podacima sadrži članove podataka potrebne za vašu operaciju. Može se uporediti sa tipičnim CurrentList makro definisanim u RunBase frameworku, ali implementiran kao klasa umjesto toga. Ugovor o podacima bi trebao proširiti SysOperationDataContractBase, ali će raditi čak i ako to ne učini. Prednost proširenja super klase je u tome što pruža neke informacije o sesiji koje mogu biti korisne.
class MyDataContract extends SysOperationDataContractBase
{
ItemId itemId;
}
U ovom primjeru, itemId je član podataka. Morate implementirati parm metodu za svaki član podataka i označiti ga sa DataMemberAttribute tako da okvir zna šta je to. Ovo omogućava frameworku da automatski napravi dijalog za vas.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
Usluga
Klasa usluga je klasa koja sadrži stvarnu poslovnu logiku. Ne bavi se prikazivanjem dijaloga, batch obradom ili bilo čime sličnom - to je odgovornost klase kontrolera. Razdvajanjem 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 servisa ne mora nasljeđivati od bilo čega posebnog, ali bi trebala nasljeđivati od klase SysOperationServiceBase, barem ako očekujete da će servis biti pokrenut kao batch posao, jer super klasa pruža neke informacije o kontekstu serije. Metoda koja pokreće operaciju (tj. pokreće poslovnu logiku) mora uzeti objekt vaše klase ugovora podataka kao ulaz i treba biti ukrašena sa [SysEntryPointAttribute]. Na primjer:
{
}
metodom koja se zove run:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
Kontrolor
Klasa kontrolera obrađuje izvršenje i batch obradu vaše operacije. Također osigurava da se kod izvršava u CIL-u za maksimalne performanse. Klasa kontrolera obično nasljeđuje od klase SysOperationServiceController, iako postoje i druge opcije.
{
}
Konstruktor super klase uzima ime klase, ime metode i (opciono) način izvršenja kao parametre. Imena klasa i metoda bi trebala biti ime vaše servisne klase i metode koja bi trebala biti pokrenuta na njoj. Dakle, možete implementirati metodu konstrukcije vašeg kontrolera 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 si gotov. Gore navedeno je očigledno vrlo jednostavan primjer i okvir sadrži mnoštvo drugih opcija i mogućnosti, ali ovo služi kao brzi pregled ako vam je potrebno osvježavanje kada niste koristili framework neko vrijeme.