Rychlý přehled Dynamics AX 2012 SysOperation Framework
Vydáno: 15. února 2025 v 22:33:04 UTC
Poslední aktualizace: 12. ledna 2026 v 8:38:45 UTC
Tento článek poskytuje rychlý přehled (neboli tahák) o tom, jak implementovat třídy zpracování a dávkové úlohy v rámci SysOperation v aplikacích 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 aplikaci Dynamics AX 2012 R3. Pro jiné verze mohou, ale nemusí být platné. (Aktualizace: Mohu potvrdit, že informace v tomto článku platí i pro Dynamics 365 for Operations.)
Tento příspěvek slouží pouze jako rychlý přehled a tahák. Pokud s frameworkem SysOperation teprve začínáte, důrazně doporučuji přečíst si také bílou knihu od Microsoftu na toto téma. Zde uvedené informace mohou být užitečné, pokud si potřebujete jen rychle osvěžit znalosti o různých třídách zapojených do vývoje operací s tímto frameworkem.
Existují různé 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)
- Controller (musí rozšířit SysOperationServiceController)
Kromě toho mohu implementovat také 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ý kontrakt obsahuje datové členy potřebné pro vaši operaci. Lze jej porovnat s typickým makrem CurrentList definovaným v frameworku RunBase, ale implementovaný jako třída. Datový kontrakt by měl rozšiřovat SysOperationDataContractBase, ale bude fungovat i v případě, že ne. Výhodou rozšíření nadřazené tří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ý člen. Pro každý datový člen je třeba implementovat metodu parm a označit jej atributem DataMemberAttribute, aby framework věděl, o jaký datový člen se jedná. To mu umožní automaticky vytvořit dialogové okno za vás.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
Servis
Třída služeb je třída, která obsahuje samotnou obchodní logiku. Nezabývá se zobrazováním dialogů, dávkovým zpracováním ani ničím podobným – to je odpovědností třídy kontroleru. Oddělením této třídy je pravděpodobnější, že navrhnete svůj kód dobře a vytvoříte více opakovaně použitelného kódu.
Stejně jako třída datového kontraktu 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 nadřazená třída poskytuje některé informace o kontextu dávky. Metoda, která spouští operaci (tj. spouští obchodní logiku), musí jako vstup přijímat objekt vaší třídy datového kontraktu a měla by být dekorována atributem [SysEntryPointAttribute]. Například:
{
}
S metodou nazvanou run:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
Ovladač
Třída controlleru zajišťuje provádění a dávkové zpracování operací. Také zajišťuje, aby byl kód spuštěn v CIL pro maximální výkon. Třída controlleru obvykle dědí z třídy SysOperationServiceController, ačkoli existují i další možnosti.
{
}
Konstruktor nadřazené tří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. Metodu konstrukce vašeho kontroleru byste tedy mohli implementovat takto:
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
Pak hlavní metoda třídy MyController může být jednoduchá jako
{
;
MyController::construct().startOperation();
}
A v podstatě máte hotovo. Výše uvedený příklad je samozřejmě velmi jednoduchý a framework obsahuje nepřeberné množství dalších možností a možností, ale toto slouží jako rychlý přehled, pokud si potřebujete osvěžit znalosti, když jste framework nějakou dobu nepoužívali.
Další čtení
Pokud se vám tento příspěvek líbil, mohly by se vám líbit i tyto návrhy:
- Identifikace třídy dokumentu a dotazu pro službu AIF v Dynamics AX 2012
- Formátování řetězce pomocí maker a strFmt v Dynamics AX 2012
- Chyba „Pro objekt smlouvy dat není definována žádná třída metadat“ v Dynamics AX 2012
