Dynamics AX 2012 SysOperation Framework Vinnige oorsig
Gepubliseer: 15 Februarie 2025 om 22:37:32 UTC
Laas opgedateer: 12 Januarie 2026 om 08:40:09 UTC
Hierdie artikel bied 'n vinnige oorsig (of spiekbrief) oor hoe om verwerkingsklasse en bondeltake in die SysOperation-raamwerk in Dynamics AX 2012 en Dynamics 365 for Operations te implementeer.
Dynamics AX 2012 SysOperation Framework Quick Overview
Die inligting in hierdie plasing is gebaseer op Dynamics AX 2012 R3. Dit mag dalk geldig wees vir ander weergawes, maar ook nie. (Opdatering: Ek kan bevestig dat die inligting in hierdie artikel ook geldig is vir Dynamics 365 for Operations)
Hierdie plasing is slegs bedoel as 'n vinnige oorsig en spiekbrief. As jy nuut is met die SysOperation-raamwerk, stel ek sterk voor dat jy ook Microsoft se witboek oor die onderwerp lees. Die inligting hier kan nuttig wees as jy net 'n vinnige opfris nodig het oor die verskillende klasse wat betrokke is by die ontwikkeling van bewerkings met hierdie raamwerk.
Daar is variasies, maar wanneer ek die raamwerk gebruik, implementeer ek tipies drie klasse:
- Datakontrak (moet SysOperationDataContractBase uitbrei)
- Diens (moet SysOperationServiceBase uitbrei)
- Kontroleerder (moet SysOperationServiceController uitbrei)
Daarbenewens kan ek ook 'n UIBuilder-klas implementeer (moet SysOperationUIBuilder uitbrei), maar dit is slegs nodig as die dialoog om een of ander rede meer gevorderd moet wees as wat die raamwerk outomaties genereer.
Datakontrak
Die datakontrak bevat die datalede wat vir jou operasie benodig word. Dit kan vergelyk word met die tipiese CurrentList-makro wat in die RunBase-raamwerk gedefinieer is, maar eerder as 'n klas geïmplementeer word. Die datakontrak behoort SysOperationDataContractBase uit te brei, maar sal werk selfs al doen dit nie. Die voordeel van die uitbreiding van die superklas is dat dit sessie-inligting verskaf wat handig kan wees.
class MyDataContract extends SysOperationDataContractBase
{
ItemId itemId;
}
In hierdie voorbeeld is die itemId 'n datalid. Jy moet 'n parm-metode vir elke datalid implementeer en dit met die DataMemberAttribute merk sodat die raamwerk weet wat dit is. Dit stel die raamwerk in staat om die dialoog outomaties vir jou te bou.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
Diens
Die diensklas is die klas wat die werklike besigheidslogika bevat. Dit is nie gemoeid met die vertoon van dialoë, bondelverwerking of enigiets van die aard nie – dit is die verantwoordelikheid van die beheerderklas. Deur dit te skei, is jy meer geneig om jou kode goed te ontwerp en meer herbruikbare kode te maak.
Soos die datakontrakklas, hoef die diensklas nie van enigiets spesifieks te erf nie, maar dit moet van die SysOperationServiceBase-klas erf, ten minste as jy verwag dat die diens as 'n bondeltaak uitgevoer sal word, aangesien die superklas inligting oor die bondelkonteks verskaf. Die metode wat die bewerking begin (d.w.s. die besigheidslogika uitvoer) moet 'n objek van jou datakontrakklas as invoer neem en moet versier word met die [SysEntryPointAttribute]. Byvoorbeeld:
{
}
Met 'n metode genaamd run:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
Kontroleerder
Die beheerderklas hanteer die uitvoering en bondelverwerking van jou bewerking. Dit maak ook seker dat die kode in CIL uitgevoer word vir maksimum werkverrigting. Die beheerderklas erf tipies van die SysOperationServiceController-klas, hoewel daar ook ander opsies is.
{
}
Die konstruktor van die superklas neem 'n klasnaam, metodenaam en (opsioneel) uitvoeringsmodus as parameters. Die klas- en metodename moet die naam van jou diensklas en die metode wees wat daarop uitgevoer moet word. Jy kan dus jou beheerder se konstrukmetode soos volg implementeer:
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
Dan kan die hoofmetode van die MyController-klas so eenvoudig wees soos
{
;
MyController::construct().startOperation();
}
En jy is basies klaar. Bogenoemde is natuurlik 'n baie eenvoudige voorbeeld en die raamwerk bevat 'n oorvloed ander opsies en moontlikhede, maar dit dien as 'n vinnige oorsig as jy 'n opknapping nodig het wanneer jy die raamwerk 'n rukkie nie gebruik het nie.
Verdere Leeswerk
As jy hierdie plasing geniet het, sal jy dalk ook van hierdie voorstelle hou:
- Gebruik 'n navraag in 'n SysOperation-datakontrakklas in Dynamics AX 2012
- Vee 'n Regsentiteit (Maatskappyrekeninge) in Dynamics AX 2012 uit
- Identifisering van dokumentklas en navraag vir AIF-diens in Dynamics AX 2012
