Rýchly prehľad Dynamics AX 2012 SysOperation Framework
Publikované: 15. februára 2025 o 22:35:40 UTC
Tento článok poskytuje rýchly prehľad (alebo cheat sheet) o tom, ako implementovať triedy spracovania a dávkové úlohy v rámci SysOperation v Dynamics AX 2012 a Dynamics 365 for Operations.
Dynamics AX 2012 SysOperation Framework Quick Overview
Informácie v tomto príspevku sú založené na Dynamics AX 2012 R3. Môže a nemusí platiť pre iné verzie. (Aktualizácia: Môžem potvrdiť, že informácie v tomto článku platia aj pre Dynamics 365 for Operations)
Tento príspevok je určený len ako rýchly prehľad a cheat. Ak ste novým rámcom SysOperation, dôrazne vám odporúčam, aby ste si prečítali aj bielu knihu spoločnosti Microsoft na túto tému. Tu uvedené informácie môžu byť užitočné, ak si potrebujete len rýchlo oprášiť rôzne triedy zapojené do vývoja operácií s týmto rámcom.
Existujú variácie, ale keď používam rámec, zvyčajne implementujem tri triedy:
- Dátová zmluva (mala by rozšíriť SysOperationDataContractBase)
- Služba (mala by rozšíriť SysOperationServiceBase)
- Controller ( musí rozšíriť SysOperationServiceController)
Okrem toho môžem implementovať aj triedu UIBuilder ( musí rozširovať SysOperationUIBuilder), ale to je potrebné len vtedy, ak musí byť dialóg z nejakého dôvodu pokročilejší ako to, čo framework generuje automaticky.
Dátová zmluva
Dátová zmluva obsahuje dátové členy potrebné pre vašu prevádzku. Možno ho porovnať s typickým makrom CurrentList definovaným v rámci RunBase, ale namiesto toho je implementované ako trieda. Zmluva o údajoch by mala rozšíriť SysOperationDataContractBase, ale bude fungovať, aj keď nie. Výhodou rozšírenia supertriedy je, že poskytuje niektoré informácie o relácii, ktoré môžu byť užitočné.
class MyDataContract extends SysOperationDataContractBase
{
ItemId itemId;
}
V tomto príklade je itemId dátovým členom. Musíte implementovať metódu parm pre každý dátový člen a označiť ho pomocou DataMemberAttribute, aby rámec vedel, čo to je. To umožňuje rámcu automaticky vytvoriť dialóg za vás.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
servis
Trieda služby je trieda, ktorá obsahuje skutočnú obchodnú logiku. Netýka sa zobrazovania dialógov, dávkového spracovania alebo čohokoľvek podobného – za to zodpovedá trieda ovládačov. Ak to oddelíte, je pravdepodobnejšie, že svoj kód dobre navrhnete a vytvoríte viac znovu použiteľný kód.
Rovnako ako trieda dátových zmlúv, trieda služby nemusí dediť z ničoho konkrétneho, ale mala by dediť z triedy SysOperationServiceBase, aspoň ak očakávate, že služba bude spustená ako dávková úloha, pretože super trieda poskytuje určité informácie o kontexte dávky. Metóda, ktorá spúšťa operáciu (tj spúšťa obchodnú logiku), musí brať ako vstup objekt vašej triedy kontraktu údajov a mala by byť ozdobená [SysEntryPointAttribute]. Napríklad:
{
}
s metódou nazvanou run:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
Ovládač
Trieda radiča sa stará o vykonávanie a dávkové spracovanie vašej operácie. Zabezpečuje tiež, že kód je spustený v CIL pre maximálny výkon. Trieda radiča zvyčajne dedí z triedy SysOperationServiceController, hoci existujú aj iné možnosti.
{
}
Konštruktor supertriedy berie ako parametre názov triedy, názov metódy a (voliteľne) režim vykonávania. Názvy tried a metód by mali byť názvom vašej servisnej triedy a metódy, ktorá by na nej mala byť spustená. Môžete teda implementovať metódu konštrukcie vášho ovládača takto:
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
Potom môže byť hlavná metóda triedy MyController taká jednoduchá ako
{
;
MyController::construct().startOperation();
}
A v podstate ste skončili. Vyššie uvedené je očividne veľmi jednoduchý príklad a framework obsahuje množstvo ďalších možností a možností, no toto slúži ako rýchly prehľad, ak si potrebujete oprášiť, keď ste framework nejaký čas nepoužívali.