Miklix

Dynamics AX 2012 SysOperation Framework Snel overzicht

Gepubliceerd: 15 februari 2025 om 22:35:29 UTC

Dit artikel biedt een snel overzicht (of spiekbriefje) van het implementeren van verwerkingsklassen en batchtaken in het SysOperation-framework in Dynamics AX 2012 en Dynamics 365 for Operations.


Deze pagina is machinaal uit het Engels vertaald om hem voor zoveel mogelijk mensen toegankelijk te maken. Helaas is machinevertaling nog geen geperfectioneerde technologie, dus er kunnen fouten optreden. Als je dat liever hebt, kun je hier de originele Engelse versie bekijken:

Dynamics AX 2012 SysOperation Framework Quick Overview

De informatie in dit bericht is gebaseerd op Dynamics AX 2012 R3. Het kan wel of niet geldig zijn voor andere versies. (Update: Ik kan bevestigen dat de informatie in dit artikel ook geldig is voor Dynamics 365 for Operations)


Deze post is alleen bedoeld als een snel overzicht en een cheat sheet. Als u nieuw bent in het SysOperation framework, raad ik u ten zeerste aan om ook de whitepaper van Microsoft over dit onderwerp te lezen. De informatie hier kan nuttig zijn als u gewoon even snel wat kennis wilt opdoen over de verschillende klassen die betrokken zijn bij het ontwikkelen van bewerkingen met dit framework.

Er zijn variaties, maar wanneer ik het framework gebruik, implementeer ik doorgaans drie klassen:

  • Datacontract (moet SysOperationDataContractBase uitbreiden)
  • Service (moet SysOperationServiceBase uitbreiden)
  • Controller ( moet SysOperationServiceController uitbreiden)

Daarnaast kan ik ook een UIBuilder-klasse implementeren ( ik moet SysOperationUIBuilder uitbreiden), maar dat is alleen nodig als de dialoog om een of andere reden geavanceerder moet zijn dan wat het framework automatisch genereert.


Gegevenscontract

Het datacontract bevat de dataleden die nodig zijn voor uw bewerking. Het kan worden vergeleken met de typische CurrentList-macro die is gedefinieerd in het RunBase-framework, maar in plaats daarvan als een klasse is geïmplementeerd. Het datacontract zou SysOperationDataContractBase moeten uitbreiden, maar zal ook werken als dat niet het geval is. Het voordeel van het uitbreiden van de superklasse is dat het wat sessie-informatie biedt die handig kan zijn.

[DataContractAttribute]
class MyDataContract extends SysOperationDataContractBase
{
    ItemId itemId;
}

In dit voorbeeld is de itemId een datalid. U moet een parm-methode implementeren voor elk datalid en deze taggen met de DataMemberAttribute, zodat het framework weet wat het is. Dit stelt het framework in staat om de dialoog automatisch voor u te bouwen.

[DataMemberAttribute]
public ItemId parmItemId(ItemId _itemId = itemId)
{
    ;

    itemId = _itemId;
    return itemId;
}


Dienst

De serviceklasse is de klasse die de daadwerkelijke bedrijfslogica bevat. Het houdt zich niet bezig met het weergeven van dialogen, batchverwerking of iets dergelijks – dat is de verantwoordelijkheid van de controllerklasse. Door dit te scheiden, is de kans groter dat u uw code goed ontwerpt en meer herbruikbare code maakt.

Net als de data contract class hoeft de service class niet van iets specifieks te erven, maar moet deze wel van de SysOperationServiceBase class erven, tenminste als u verwacht dat de service als batch job wordt uitgevoerd, aangezien de super class wat informatie over de batch context verschaft. De methode die de operatie start (d.w.z. de business logic uitvoert) moet een object van uw data contract class als input nemen en moet worden gedecoreerd met de [SysEntryPointAttribute]. Bijvoorbeeld:

class MyService extends SysOperationServiceBase
{
}

met een methode genaamd run:

[SysEntryPointAttribute]
public void run(MyDataContract _dataContract)
{
    // run business logic here
}


Beheerder

De controllerklasse behandelt de uitvoering en batchverwerking van uw bewerking. Het zorgt er ook voor dat de code wordt uitgevoerd in CIL voor maximale prestaties. De controllerklasse erft doorgaans van de SysOperationServiceController-klasse, hoewel er ook andere opties zijn.

class MyController extends SysOperationServiceController
{
}

De constructor van de superklasse neemt een klassenaam, methodenaam en (optioneel) uitvoeringsmodus als parameters. De klasse- en methodenamen moeten de naam zijn van uw serviceklasse en de methode die erop moet worden uitgevoerd. U kunt de constructmethode van uw controller dus als volgt implementeren:

public static MyController construct()
{
    ;

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

Dan kan de hoofdmethode van de MyController-klasse zo eenvoudig zijn als

public static void main(Args _args)
{
    ;

    MyController::construct().startOperation();
}

En je bent in principe klaar. Het bovenstaande is uiteraard een heel eenvoudig voorbeeld en het framework bevat een overvloed aan andere opties en mogelijkheden, maar dit dient als een snel overzicht als je een opfriscursus nodig hebt als je het framework een tijdje niet hebt gebruikt.

Delen op BlueskyDelen op FacebookDelen op LinkedInDelen op TumblrDelen op XDelen op LinkedInPin op Pinterest

Mikkel Bang Christensen

Over de auteur

Mikkel Bang Christensen
Mikkel is de bedenker en eigenaar van miklix.com. Hij heeft meer dan 20 jaar ervaring als professioneel computerprogrammeur/softwareontwikkelaar en werkt momenteel fulltime voor een groot Europees IT-bedrijf. Als hij niet blogt, besteedt hij zijn vrije tijd aan een breed scala aan interesses, hobby's en activiteiten, die tot op zekere hoogte weerspiegeld kunnen worden in de verscheidenheid aan onderwerpen op deze website.