Een query gebruiken in een SysOperation Data Contract-klasse in Dynamics AX 2012
Gepubliceerd: 16 februari 2025 om 01:23:00 UTC
Laatst bijgewerkt: 12 januari 2026 om 08:47:14 UTC
In dit artikel wordt uitgelegd hoe u een door de gebruiker configureerbare en filterbare query kunt toevoegen aan een SysOperation-gegevenscontractklasse in Dynamics AX 2012 (en Dynamics 365 for Operations).
Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012
De informatie in dit bericht is gebaseerd op Dynamics AX 2012 R3. Het is mogelijk dat deze niet geldig is voor andere versies. (Update: Ik kan bevestigen dat dit ook werkt in Dynamics 365 for Operations)
Ik vergeet steeds weer hoe ik een query moet specificeren en initialiseren in het SysOperation-framework. De meeste batchtaken die ik maak, zijn niet gebaseerd op door de gebruiker configureerbare queries, maar zo nu en dan heb ik er wel een nodig. Deze blogpost is dus ook voor mijn eigen naslagwerk.
Ten eerste wordt de query in de data contract-klasse opgeslagen als een string. De `parm`-methode moet worden voorzien van het `AifQueryTypeAttribute`-attribuut, zoals hieronder weergegeven (in dit voorbeeld heb ik de `SalesUpdate`-query gebruikt, maar u kunt deze vervangen door elke andere AOT-query):
DataMemberAttribute,
AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
;
packedQuery = _packedQuery;
return packedQuery;
}
Als je wilt dat de query door de controllerklasse wordt bepaald, kun je ook een lege string gebruiken. In dat geval moet je ook een paar hulpmethoden implementeren (wat je waarschijnlijk sowieso zou moeten doen voor je eigen gemak wanneer je de query nodig hebt):
{
;
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
public void setQuery(Query _query)
{
;
packedQuery = SysOperationHelper::base64Encode(_query.pack());
}
Als u de query moet initialiseren (bijvoorbeeld om bereiken toe te voegen), moet u een initQuery-methode implementeren:
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
Je moet ervoor zorgen dat je deze methode vanuit de controllerklasse aanroept.
Verder lezen
Als je dit bericht leuk vond, vind je deze suggesties misschien ook interessant:
- Documentklasse en query identificeren voor AIF-service in Dynamics AX 2012
- Dynamics AX 2012 SysOperation Framework Snel overzicht
- Het SysExtension Framework gebruiken om erachter te komen welke subklasse u moet instantiëren in Dynamics AX 2012
