Rychlý přehled Dynamics AX 2012 SysOperation Framework
Vydáno: 15. února 2025 v 22:33:04 UTC
Tento článek poskytuje rychlý přehled (nebo cheat sheet) o tom, jak implementovat třídy zpracování a dávkové úlohy v rámci SysOperation v Dynamics AX 2012 a Dynamics 365 for Operations.
Dynamics AX 2012 SysOperation Framework Quick Overview
Informace v tomto příspěvku jsou založeny na Dynamics AX 2012 R3. Může a nemusí platit pro jiné verze. (Aktualizace: Mohu potvrdit, že informace v tomto článku platí také pro Dynamics 365 for Operations)
Tento příspěvek je míněn pouze jako rychlý přehled a podvodný list. Pokud jste v rámci SysOperation noví, důrazně doporučuji, abyste si také přečetli bílou knihu společnosti Microsoft na toto téma. Zde uvedené informace mohou být užitečné, pokud si jen potřebujete rychle oprášit různé třídy zapojené do vývoje operací s tímto rámcem.
Existují varianty, ale když používám framework, obvykle implementuji tři třídy:
- Datová smlouva (měla by rozšířit SysOperationDataContractBase)
- Služba (měla by rozšířit SysOperationServiceBase)
- Řadič ( musí rozšířit SysOperationServiceController)
Kromě toho mohu také implementovat třídu UIBuilder ( musí rozšířit SysOperationUIBuilder), ale to je nutné pouze v případě, že dialog z nějakého důvodu musí být pokročilejší než to, co framework generuje automaticky.
Smlouva o datech
Datová smlouva obsahuje datové členy potřebné pro vaši operaci. Lze jej porovnat s typickým makrem CurrentList definovaným v rámci RunBase, ale implementováno jako třída. Smlouva o datech by měla rozšířit SysOperationDataContractBase, ale bude fungovat, i když ne. Výhodou rozšíření supertřídy je, že poskytuje některé informace o relaci, které se mohou hodit.
class MyDataContract extends SysOperationDataContractBase
{
ItemId itemId;
}
V tomto příkladu je itemId datovým členem. Musíte implementovat metodu parm pro každý datový člen a označit jej pomocí DataMemberAttribute, aby framework věděl, co to je. To umožňuje frameworku automaticky vytvořit dialog za vás.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
Servis
Třída služby je třída, která obsahuje skutečnou obchodní logiku. Nezabývá se zobrazováním dialogů, dávkovým zpracováním nebo čímkoli podobného – to je odpovědností třídy kontroléru. Když to oddělíte, je pravděpodobnější, že svůj kód dobře navrhnete a vytvoříte více znovupoužitelný kód.
Stejně jako třída datové smlouvy nemusí třída služby dědit od ničeho konkrétního, ale měla by dědit od třídy SysOperationServiceBase, alespoň pokud očekáváte, že služba bude spuštěna jako dávková úloha, protože super třída poskytuje určité informace o kontextu dávky. Metoda, která spouští operaci (tj. spouští obchodní logiku), musí mít jako vstup objekt vaší třídy datové smlouvy a měla by být ozdobena [SysEntryPointAttribute]. Například:
{
}
s metodou nazvanou run:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
Ovladač
Třída řadiče se stará o provádění a dávkové zpracování vaší operace. Také zajišťuje, že kód je spouštěn v CIL pro maximální výkon. Třída řadiče obvykle dědí z třídy SysOperationServiceController, i když existují i jiné možnosti.
{
}
Konstruktor supertřídy bere jako parametry název třídy, název metody a (volitelně) režim provádění. Názvy tříd a metod by měly být názvem vaší servisní třídy a metody, která by na ní měla být spuštěna. Můžete tedy implementovat metodu konstrukce vašeho ovladače takto:
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
Pak může být hlavní metoda třídy MyController tak jednoduchá jako
{
;
MyController::construct().startOperation();
}
A v podstatě máte hotovo. Výše uvedené je samozřejmě velmi jednoduchý příklad a framework obsahuje nepřeberné množství dalších možností a možností, ale toto slouží jako rychlý přehled, pokud potřebujete oprášit, když jste framework nějakou dobu nepoužívali.