Dynamics AX 2012 SysOperation Framework Snel overzicht
Gepubliceerd: 15 februari 2025 om 22:35:29 UTC
Laatst bijgewerkt: 12 januari 2026 om 08:38:56 UTC
Dit artikel biedt een snel overzicht (of beknopte handleiding) van hoe u verwerkingsklassen en batchtaken implementeert in het SysOperation-framework in Dynamics AX 2012 en Dynamics 365 for Operations.
Dynamics AX 2012 SysOperation Framework Quick Overview
De informatie in dit bericht is gebaseerd op Dynamics AX 2012 R3. Deze informatie is mogelijk niet geldig voor andere versies. (Update: Ik kan bevestigen dat de informatie in dit artikel ook geldig is voor Dynamics 365 for Operations.)
Dit bericht is slechts bedoeld als een snel overzicht en spiekbriefje. Als u nog niet bekend bent met 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 alleen een snelle opfrissing nodig hebt van 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:
- Gegevenscontract (moet SysOperationDataContractBase uitbreiden)
- Service (moet SysOperationServiceBase uitbreiden)
- Controller (moet SysOperationServiceController uitbreiden)
Daarnaast kan ik ook een UIBuilder-klasse implementeren (die SysOperationUIBuilder moet uitbreiden), maar dat is alleen nodig als het dialoogvenster om de 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 dan geïmplementeerd als een klasse. Het datacontract moet SysOperationDataContractBase uitbreiden, maar werkt ook als dat niet het geval is. Het voordeel van het uitbreiden van de superklasse is dat het bepaalde sessie-informatie bevat die nuttig kan zijn.
class MyDataContract extends SysOperationDataContractBase
{
ItemId itemId;
}
In dit voorbeeld is `itemId` een datalidd. Je moet voor elk datalidd een `parm`-methode implementeren en deze voorzien van het `DataMemberAttribute`, zodat het framework weet wat het is. Hierdoor kan het framework automatisch het dialoogvenster voor je genereren.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
Dienst
De serviceklasse is de klasse die de daadwerkelijke bedrijfslogica bevat. Deze klasse houdt zich niet bezig met het weergeven van dialoogvensters, batchverwerking of iets dergelijks – dat is de verantwoordelijkheid van de controllerklasse. Door dit te scheiden, is de kans groter dat je je code beter ontwerpt en dat je code herbruikbaarder maakt.
Net als de data contract-klasse hoeft de serviceklasse niet van iets specifieks te erven, maar het is wel aan te raden om van de SysOperationServiceBase-klasse te erven, tenminste als u verwacht dat de service als batchtaak wordt uitgevoerd, aangezien de superklasse informatie over de batchcontext biedt. De methode die de bewerking start (d.w.z. de bedrijfslogica uitvoert) moet een object van uw data contract-klasse als invoer accepteren en moet worden voorzien van het [SysEntryPointAttribute]. Bijvoorbeeld:
{
}
Met een methode genaamd run:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
Controller
De controllerklasse verzorgt de uitvoering en batchverwerking van uw bewerking. Het zorgt er ook voor dat de code in CIL wordt uitgevoerd voor maximale prestaties. De controllerklasse erft doorgaans van de SysOperationServiceController-klasse, hoewel er ook andere opties zijn.
{
}
De constructor van de superklasse neemt een klassenaam, een methodenaam en (optioneel) de uitvoeringsmodus als parameters. De klasse- en methodenaam moeten de naam van je serviceklasse en de naam van de methode die erop moet worden uitgevoerd zijn. Je zou de constructor-methode van je controller bijvoorbeeld als volgt kunnen implementeren:
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
De hoofdmethode van de klasse MyController kan dan heel eenvoudig zijn:
{
;
MyController::construct().startOperation();
}
En daarmee ben je in principe klaar. Bovenstaand is uiteraard een zeer eenvoudig voorbeeld en het framework bevat talloze andere opties en mogelijkheden, maar dit dient als een snel overzicht voor het geval je je geheugen wilt opfrissen wanneer je het framework een tijdje niet hebt gebruikt.
Verder lezen
Als je dit bericht leuk vond, vind je deze suggesties misschien ook interessant:
- Documentklasse en query identificeren voor AIF-service in Dynamics AX 2012
- Het SysExtension Framework gebruiken om erachter te komen welke subklasse u moet instantiëren in Dynamics AX 2012
- Stringopmaak met macro en strFmt in Dynamics AX 2012
