Miklix

Bruke en spørring i en SysOperation-datakontraktklasse i Dynamics AX 2012

Publisert: 16. februar 2025 kl. 01:22:56 UTC
Sist oppdatert: 13. september 2025 kl. 22:52:55 UTC

Denne artikkelen går gjennom detaljene om hvordan du legger til en brukerkonfigurerbar og filtrerbar spørring i en SysOperation-datakontraktklasse i Dynamics AX 2012 (og Dynamics 365 for Operations)


Denne siden er maskinoversatt fra engelsk for å gjøre den tilgjengelig for så mange som mulig. Dessverre er maskinoversettelse ennå ikke en fullkommen teknologi, så det kan forekomme feil. Hvis du foretrekker det, kan du se den engelske originalversjonen her:

Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012

Informasjonen i dette innlegget er basert på Dynamics AX 2012 R3. Det kan være gyldig for andre versjoner. (Oppdatering: Jeg kan bekrefte at dette også fungerer på Dynamics 365 for Operations)

Jeg ser alltid ut til å glemme detaljene om hvordan du spesifiserer og initialiserer en spørring i SysOperation-rammeverket. Jeg antar at de fleste batch-jobbene jeg har gjort ikke er basert på brukerkonfigurerbare spørringer, men nå og da må jeg lage en slik batch-jobb, så dette innlegget er også for min egen referanse.

For det første, i datakontraktklassen, lagres spørringen pakket i en streng. Parm-metoden må dekoreres med AifQueryTypeAttributt-attributtet, slik (i dette eksemplet har jeg brukt SalesUpdate-spørringen, men du kan erstatte dette med en hvilken som helst AOT-spørring):

[
    DataMemberAttribute,
    AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
    ;

    packedQuery = _packedQuery;
    return packedQuery;
}

Hvis du vil at spørringen skal bestemmes av kontrollerklassen i stedet, kan du også bruke en tom streng. I så fall må du også implementere et par hjelpemetoder (som du sannsynligvis bør implementere uansett for din egen bekvemmelighet når du trenger tilgang til spørringen):

public Query getQuery()
{
    ;

    return new Query(SysOperationHelper::base64Decode(packedQuery));
}

public void setQuery(Query _query)
{
    ;

    packedQuery = SysOperationHelper::base64Encode(_query.pack());
}

Hvis du trenger å initialisere spørringen (for eksempel legge til områder), bør du implementere en initQuery-metode:

public void initQuery()
{
    Query queryLocal = this.getQuery();
    ;

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Du må sørge for å kalle denne metoden fra kontrollerklassen.

Videre lesing

Hvis du likte dette innlegget, kan du også like disse forslagene:


Del på BlueskyDel på FacebookDel på LinkedInDel på TumblrDel på XDel på LinkedInFest på Pinterest

Mikkel Christensen

Om forfatteren

Mikkel Christensen
Mikkel er skaperen og eieren av miklix.com. Han har over 20 års erfaring som profesjonell dataprogrammerer/programvareutvikler og er for tiden ansatt på fulltid i et stort europeisk IT-selskap. Når han ikke blogger, bruker han fritiden sin på en lang rekke interesser, hobbyer og aktiviteter, noe som til en viss grad kan gjenspeiles i de mange ulike temaene som dekkes på dette nettstedet.