Dynamics AX 2012 SysOperation Framework Brzi pregled
Objavio: 19. mart 2025. 21:30:59 UTC
Ovaj članak pruža brzi pregled (ili varalicu) o tome kako implementirati klase obrade i serijske poslove u okviru SisOperation u Dinamics AKS KSNUMKS i Dinamics KSNUMKS for Operations.
Dynamics AX 2012 SysOperation Framework Quick Overview
Informacije u ovom postu zasnovane su na Dynamics AX 2012 R3. Moguće je da nisu validne za druge verzije. (Ažuriranje: mogu potvrditi da su informacije u ovom članku takođe validne za Dynamics 365 for Operations)
Ovaj post je samo brz pregled i cheat sheet. Ako ste novi u SysOperation okviru, toplo vam savetujem da pročitate Microsoftov beli papir na ovu temu. Informacije ovde mogu biti korisne ako vam je samo potrebno brzo osvežavanje u vezi sa različitim klasama uključenim u razvoj operacija sa ovim okvirom.
Postoje varijacije, ali kada koristim okvir, obično implementiram tri klase:
- Data contract (treba da proširi SysOperationDataContractBase)
- Servis (treba da proširi SysOperationServiceBase)
- Kontroler (mora da proširi SysOperationServiceController)
Osim toga, možda ću implementirati i UIBuilder klasu (mora da proširi SysOperationUIBuilder), ali to je samo potrebno ako dijalog iz nekog razloga mora biti složeniji od onoga što okvir automatski generiše.
Data contract
Data contract sadrži članove podataka koji su potrebni za vašu operaciju. Može se uporediti sa tipičnim CurrentList makroom koji je definisan u RunBase okviru, ali implementiranim kao klasa. Data contract treba da proširi SysOperationDataContractBase, ali će raditi i ako to ne uradi. Prednost proširivanja nadklase je što ona pruža neke informacije o sesiji koje mogu biti korisne.
class MyDataContract extends SysOperationDataContractBase
{
ItemId itemId;
}
U ovom primeru, itemId je član podataka. Morate implementirati parm metodu za svakog člana podataka i označiti je sa DataMemberAttribute kako bi okvir znao šta je to. Ovo omogućava okviru da automatski izgradi dijalog za vas.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
Servis
Servis klasa je klasa koja sadrži stvarnu poslovnu logiku. Nije zadužena za prikazivanje dijaloga, batch procesiranje ili nešto slično – to je odgovornost kontrolerske klase. Razdvajanjem ovoga, verovatnije je da ćete dizajnirati svoj kod na pravi način i praviti ponovo upotrebljiv kod.
Kao i klasa data contract, servis klasa ne mora nasleđivati ništa posebno, ali treba da nasleđuje SysOperationServiceBase klasu, barem ako očekujete da će servis biti pokrenut kao batch posao, jer nadklasa pruža neke informacije o batch kontekstu. Metoda koja pokreće operaciju (tj. pokreće poslovnu logiku) mora uzeti objekat vaše data contract klase kao ulaz i treba biti dekorisana sa [SysEntryPointAttribute]. Na primer:
{
}
sa metodom koja se zove run:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
Kontroler
Kontrolerska klasa upravlja izvršenjem i batch procesiranjem vaše operacije. Takođe osigurava da se kod izvršava u CIL-u radi maksimalne performanse. Kontrolerska klasa obično nasleđuje SysOperationServiceController klasu, iako postoje i druge opcije.
{
}
Konstruktor nadklase prima ime klase, ime metode i (opciono) način izvršenja kao parametre. Ime klase i metode treba da budu ime vaše servis klase i metoda koja treba da se pokrene na njoj. Dakle, možete implementirati konstruktor vaše kontrolerske klase ovako:
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
Zatim, glavna metoda MyController klase može biti jednostavna kao
{
;
MyController::construct().startOperation();
}
I praktično ste gotovi. Ovo je očigledno vrlo jednostavan primer, a okvir sadrži mnogo drugih opcija i mogućnosti, ali ovo služi kao brz pregled ako vam je potrebno osvežavanje kada niste koristili okvir neko vreme.