Dynamics AX 2012 SysOperation Framework Rask oversikt
Publisert: 15. februar 2025 kl. 22:35:28 UTC
Denne artikkelen gir en rask oversikt (eller jukseark) om hvordan du implementerer behandlingsklasser og batchjobber i SysOperation-rammeverket i Dynamics AX 2012 og Dynamics 365 for Operations.
Dynamics AX 2012 SysOperation Framework Quick Overview
Informasjonen i dette innlegget er basert på Dynamics AX 2012 R3. Det kan være eller ikke være gyldig for andre versjoner. (Oppdatering: Jeg kan bekrefte at informasjonen i denne artikkelen også er gyldig for Dynamics 365 for Operations)
Dette innlegget er bare ment som en rask oversikt og jukseark. Hvis du er ny på SysOperation-rammeverket, anbefaler jeg sterkt at du leser Microsofts hvitbok om emnet også. Informasjonen her kan være nyttig hvis du bare trenger en rask oppfriskning av de forskjellige klassene som er involvert i å utvikle operasjoner med dette rammeverket.
Det finnes variasjoner, men når jeg bruker rammeverket implementerer jeg vanligvis tre klasser:
- Datakontrakt (bør forlenge SysOperationDataContractBase)
- Tjenesten (bør utvide SysOperationServiceBase)
- Kontroller ( må utvide SysOperationServiceController)
I tillegg kan jeg også implementere en UIBuilder-klasse ( må utvide SysOperationUIBuilder), men det er bare nødvendig hvis dialogen av en eller annen grunn må være mer avansert enn det rammeverket genererer automatisk.
Datakontrakt
Datakontrakten inneholder datamedlemmene som trengs for driften din. Den kan sammenlignes med den typiske CurrentList-makroen som er definert i RunBase-rammeverket, men implementert som en klasse i stedet. Datakontrakten bør utvide SysOperationDataContractBase, men vil fungere selv om den ikke gjør det. Fordelen med å utvide superklassen er at den gir noe øktinformasjon som kan være nyttig.
class MyDataContract extends SysOperationDataContractBase
{
ItemId itemId;
}
I dette eksemplet er itemId et datamedlem. Du må implementere en parm-metode for hvert datamedlem og merke det med DataMemberAttribute slik at rammeverket vet hva det er. Dette gjør det mulig for rammeverket å automatisk bygge dialogen for deg.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
Service
Tjenesteklassen er klassen som inneholder selve forretningslogikken. Det er ikke opptatt av å vise dialoger, batchbehandling eller noe lignende – det er kontrollklassens ansvar. Ved å skille dette er det mer sannsynlig at du designer koden din godt og lager mer gjenbrukbar kode.
I likhet med datakontraktsklassen trenger ikke serviceklassen å arve fra noe spesielt, men den bør arve fra SysOperationServiceBase-klassen, i alle fall hvis du forventer at tjenesten skal kjøres som en batch-jobb, da superklassen gir en del informasjon om batch-konteksten. Metoden som starter operasjonen (dvs. kjører forretningslogikken) må ta et objekt av datakontraktklassen som input og skal være dekorert med [SysEntryPointAttribute]. For eksempel:
{
}
med en metode kalt run:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
Kontroller
Kontrollerklassen håndterer utførelse og batchbehandling av operasjonen din. Den sørger også for at koden kjøres i CIL for maksimal ytelse. Kontrollerklassen arver vanligvis fra SysOperationServiceController-klassen, selv om det også finnes andre alternativer.
{
}
Konstruktøren av superklassen tar et klassenavn, metodenavn og (valgfritt) utførelsesmodus som parametere. Klasse- og metodenavnene skal være navnet på tjenesteklassen din og metoden som skal kjøres på den. Så du kan implementere kontrollerens konstruksjonsmetode slik:
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
Da kan hovedmetoden til MyController-klassen være så enkel som
{
;
MyController::construct().startOperation();
}
Og du er i grunnen ferdig. Ovennevnte er åpenbart et veldig enkelt eksempel og rammeverket inneholder en mengde andre alternativer og muligheter, men dette fungerer som en rask oversikt hvis du trenger en pensel opp når du ikke har brukt rammeverket på en stund.