Brug af en forespørgsel i en SysOperation-datakontraktklasse i Dynamics AX 2012
Udgivet: 16. februar 2025 kl. 01.21.39 UTC
Sidst opdateret: 12. januar 2026 kl. 08.47.05 UTC
Denne artikel gennemgår detaljerne om, hvordan man tilføjer en brugerkonfigurerbar og filtrerbar forespørgsel til 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
Oplysningerne i dette indlæg er baseret på Dynamics AX 2012 R3. De er muligvis ikke gyldige for andre versioner. (Opdatering: Jeg kan bekræfte, at dette også fungerer på Dynamics 365 for Operations)
Jeg glemmer altid detaljerne om, hvordan man specificerer og initialiserer en forespørgsel i SysOperation-frameworket. Jeg gætter på, at de fleste af de batchjob, jeg har lavet, ikke er baseret på brugerkonfigurerbare forespørgsler, men nu og da har jeg brug for at lave sådan et batchjob, så dette indlæg er også til min egen reference.
Først gemmes forespørgslen pakket i en streng i datakontraktklassen. Dens parm-metode skal dekoreres med attributten AifQueryTypeAttribute, således (i dette eksempel har jeg brugt SalesUpdate-forespørgslen, men du kan erstatte denne med enhver AOT-forespørgsel):
DataMemberAttribute,
AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
;
packedQuery = _packedQuery;
return packedQuery;
}
Hvis du ønsker, at forespørgslen i stedet skal bestemmes af controllerklassen, kan du også bruge en tom streng. I så fald skal du også implementere et par hjælpemetoder (som du sandsynligvis alligevel bør implementere for din egen bekvemmelighed, når du har brug for at få adgang til forespørgslen):
{
;
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
public void setQuery(Query _query)
{
;
packedQuery = SysOperationHelper::base64Encode(_query.pack());
}
Hvis du har brug for at initialisere forespørgslen (f.eks. tilføje intervaller), skal du implementere en initQuery-metode:
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
Du skal sørge for at kalde denne metode fra controller-klassen.
Yderligere læsning
Hvis du kunne lide dette indlæg, kan du måske også lide disse forslag:
- Brug af SysExtension Framework til at finde ud af, hvilken underklasse der skal instantieres i Dynamics AX 2012
- Fejl "Ingen metadataklasse defineret for datakontraktobjekt" i Dynamics AX 2012
- Slet en juridisk enhed (virksomhedskonti) i Dynamics AX 2012
