Miklix

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.


Tato stránka byla strojově přeložena z angličtiny, aby byla přístupná co největšímu počtu lidí. Strojový překlad bohužel ještě není dokonalá technologie, takže může dojít k chybám. Pokud si přejete, můžete si prohlédnout původní anglickou verzi zde:

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.

[DataContractAttribute]
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.

[DataMemberAttribute]
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:

class MyService extends SysOperationServiceBase
{
}

s metodou nazvanou run:

[SysEntryPointAttribute]
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.

class MyController extends SysOperationServiceController
{
}

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:

public static MyController construct()
{
    ;

    return new MyController(classStr(MyService),
    methodStr(MyService, run));
}

Pak může být hlavní metoda třídy MyController tak jednoduchá jako

public static void main(Args _args)
{
    ;

    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.

Sdílet na BlueskySdílejte na FacebookuSdílet na LinkedInSdílet na TumblrSdílet na XSdílet na LinkedInPřipnout na Pinterest

Mikkel Bang Christensen

O autorovi

Mikkel Bang Christensen
Mikkel je tvůrcem a majitelem webu miklix.com. Má více než 20 let zkušeností jako profesionální programátor/vývojář softwaru a v současné době pracuje na plný úvazek pro velkou evropskou IT společnost. Pokud zrovna nepíše blog, věnuje svůj volný čas široké škále zájmů, koníčků a aktivit, což se může do jisté míry odrážet v rozmanitosti témat na tomto webu.