Rýchly prehľad Dynamics AX 2012 SysOperation Framework
Publikované: 15. februára 2025 o 22:35:40 UTC
Posledná aktualizácia: 12. januára 2026 o 8:39:06 UTC
Tento článok poskytuje rýchly prehľad (alebo ťahák) o tom, ako implementovať triedy spracovania a dávkové úlohy v rámci SysOperation v systémoch 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 systéme Dynamics AX 2012 R3. Môžu, ale nemusia byť platné pre iné verzie. (Aktualizácia: Môžem potvrdiť, že informácie v tomto článku sú platné aj pre systém Dynamics 365 for Operations)
Tento príspevok slúži len ako rýchly prehľad a ťahák. Ak ste v oblasti SysOperation nováčikom, dôrazne vám odporúčam prečítať si aj bielu knihu spoločnosti Microsoft na túto tému. Informácie tu uvedené môžu byť užitočné, ak si potrebujete len rýchlo osviežiť znalosti o rôznych triedach zapojených do vývoja operácií s týmto frameworkom.
Existujú variácie, ale keď používam tento framework, zvyčajne implementujem tri triedy:
- Dátová zmluva (mala by rozšíriť SysOperationDataContractBase)
- Služba (mala by rozšíriť SysOperationServiceBase)
- Kontrolér (musí rozšíriť SysOperationServiceController)
Okrem toho môžem implementovať aj triedu UIBuilder (musí rozšíriť SysOperationUIBuilder), ale to je potrebné iba v prípade, že dialógové okno musí byť z nejakého dôvodu pokročilejšie, ako to, čo framework generuje automaticky.
Zmluva o údajoch
Dátová zmluva obsahuje dátové členy potrebné pre vašu operáciu. Dá sa porovnať s typickým makrom CurrentList definovaným v rámci RunBase, ale implementovať ju treba ako triedu. Dátová zmluva by mala rozširovať SysOperationDataContractBase, ale bude fungovať aj v prípade, že to tak nebude. Výhodou rozšírenia nadtriedy 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ý člen. Pre každý dátový člen musíte implementovať metódu parm a označiť ho atribútom DataMemberAttribute, aby framework vedel, o aký člen ide. To mu umožní automaticky vytvoriť dialógové okno za vás.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
Služba
Trieda služieb je trieda, ktorá obsahuje samotnú obchodnú logiku. Nezaoberá sa zobrazovaním dialógov, dávkovým spracovaním ani ničím podobným – to je zodpovednosť triedy kontroléra. Oddelením tejto triedy je pravdepodobnejšie, že navrhnete svoj kód dobre a vytvoríte viac opakovane použiteľného kódu.
Rovnako ako trieda dátových kontraktov, ani trieda služieb nemusí dediť od ničoho konkrétneho, ale mala by dediť od triedy SysOperationServiceBase, aspoň ak očakávate, že služba bude spustená ako dávková úloha, pretože nadtrieda poskytuje niektoré informácie o dávkovom kontexte. Metóda, ktorá spúšťa operáciu (t. j. spúšťa obchodnú logiku), musí ako vstup prijať objekt vašej triedy dátových kontraktov a mala by byť ozdobená atribútom [SysEntryPointAttribute]. Napríklad:
{
}
S metódou s názvom run:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
Ovládač
Trieda kontroléra zabezpečuje vykonávanie a dávkové spracovanie vašej operácie. Taktiež zabezpečuje, aby sa kód vykonával v jazyku CIL pre maximálny výkon. Trieda kontroléra zvyčajne dedí z triedy SysOperationServiceController, hoci existujú aj iné možnosti.
{
}
Konštruktor nadtriedy berie ako parametre názov triedy, názov metódy a (voliteľné) režim vykonávania. Názvy tried a metód by mali byť názvom vašej servisnej triedy a metódy, ktorá by sa na nej mala spustiť. Metódu konštrukcie vášho kontroléra teda môžete implementovať takto:
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
Hlavná metóda triedy MyController potom môže byť jednoduchá ako
{
;
MyController::construct().startOperation();
}
A v podstate ste hotoví. Vyššie uvedený príklad je samozrejme veľmi jednoduchý a framework obsahuje množstvo ďalších možností a možností, ale toto slúži ako rýchly prehľad, ak si potrebujete osviežiť vedomosti, keď ste framework dlhšie nepoužívali.
Ďalšie čítanie
Ak sa vám tento príspevok páčil, možno sa vám budú páčiť aj tieto návrhy:
- Rozdiel medzi data() a buf2Buf() v Dynamics AX 2012
- Formátovanie reťazca pomocou makra a strFmt v Dynamics AX 2012
- Ako iterovať cez prvky Enum z kódu X++ v Dynamics AX 2012
