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)
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):
{
;
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:
{
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:
- Ringe AIF Document Services direkte fra X++ i Dynamics AX 2012
- Feil "Ingen metadataklasse definert for datakontraktobjekt" i Dynamics AX 2012
- Forskjellen mellom data() og buf2Buf() i Dynamics AX 2012