Miklix

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

Publisert: 16. februar 2025 kl. 01:22:56 UTC

Denne artikkelen går over 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 eller ikke 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 batchjobbene jeg har laget ikke er basert på brukerkonfigurerbare spørringer, men nå og da trenger jeg å lage en slik batchjobb, så dette innlegget er også for min egen referanse.

For det første, i datakontraktklassen, vil spørringen bli lagret pakket i en streng. Parm-metoden må være dekorert med AifQueryTypeAttribute-attributtet, på samme måte (i dette eksemplet har jeg brukt SalesUpdate-spørringen, men du kan erstatte denne 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 å få 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.

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

Mikkel Bang Christensen

Om forfatteren

Mikkel Bang 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.