Miklix

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).


Deze pagina is machinaal uit het Engels vertaald om hem voor zoveel mogelijk mensen toegankelijk te maken. Helaas is machinevertaling nog geen geperfectioneerde technologie, dus er kunnen fouten optreden. Als je dat liever hebt, kun je hier de originele Engelse versie bekijken:

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):

public Query getQuery()
{
    ;

    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:

public void initQuery()
{
    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:


Delen op BlueskyDelen op FacebookDelen op LinkedInDelen op TumblrDelen op XDelen op LinkedInPin op Pinterest

Mikkel Christensen

Over de auteur

Mikkel Christensen
Mikkel is de bedenker en eigenaar van miklix.com. Hij heeft meer dan 20 jaar ervaring als professioneel computerprogrammeur/softwareontwikkelaar en werkt momenteel fulltime voor een groot Europees IT-bedrijf. Als hij niet blogt, besteedt hij zijn vrije tijd aan een breed scala aan interesses, hobby's en activiteiten, die tot op zekere hoogte weerspiegeld kunnen worden in de verscheidenheid aan onderwerpen op deze website.