Dynamics AX 2012 SysOperation Framework Rask oversikt
Publisert: 15. februar 2025 kl. 22:35:28 UTC
Sist oppdatert: 13. september 2025 kl. 22:52:55 UTC
Denne artikkelen gir en rask oversikt (eller jukseark) om hvordan du implementerer behandlingsklasser og satsvise jobber 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 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 på det sterkeste 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 er variasjoner, men når jeg bruker rammeverket implementerer jeg vanligvis tre klasser:
- Datakontrakt (bør utvide SysOperationDataContractBase)
- Service (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 operasjonen. Den kan sammenlignes med den typiske CurrentList-makroen som er definert i RunBase-rammeverket, men implementert som en klasse i stedet. Datakontrakten skal utvide SysOperationDataContractBase, men vil fungere selv om den ikke gjør det. Fordelen med å utvide superklassen er at den gir litt ø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 den med DataMemberAttribute slik at rammeverket vet hva det er. Dette gjør at rammeverket automatisk kan bygge dialogen for deg.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
Tjeneste
Serviceklassen er klassen som inneholder den faktiske forretningslogikken. Det er ikke opptatt av å vise dialoger, batchbehandling eller noe slikt – det er kontrollerklassens ansvar. Ved å skille dette er det mer sannsynlig at du utformer koden din godt og lager mer gjenbrukbar kode.
I likhet med datakontraktklassen trenger ikke tjenesteklassen å arve fra noe spesielt, men den bør arve fra SysOperationServiceBase-klassen, i det minste hvis du forventer at tjenesten skal kjøres som en satsvis jobb, siden superklassen gir litt informasjon om den satsvise konteksten. Metoden som starter operasjonen (dvs. kjører forretningslogikken) må ta et objekt fra datakontraktklassen som inndata og skal dekoreres med [SysEntryPointAttribute]. For eksempel:
{
}
Med en metode som kalles Kjør:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
Kontrolleren
Kontrollerklassen håndterer utførelse og batchbehandling av operasjonen din. Det 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 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 utgangspunktet 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 oppfriskning når du ikke har brukt rammeverket på en stund.
Videre lesing
Hvis du likte dette innlegget, kan du også like disse forslagene:
- Ringe AIF Document Services direkte fra X++ i Dynamics AX 2012
- Feil "Ingen metadataklasse definert for datakontraktobjekt" i Dynamics AX 2012
- Hvordan iterere over elementene til en Enum fra X++-kode i Dynamics AX 2012