Miklix

Een query gebruiken in een SysOperation Data Contract-klasse in Dynamics AX 2012

Gepubliceerd: 16 februari 2025 om 01:23:00 UTC

In dit artikel worden de details besproken over het toevoegen van een door de gebruiker configureerbare en filterbare query aan een SysOperation-gegevenscontractklasse in Dynamics AX 2012 (en Dynamics 365 voor 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 kan wel of niet geldig zijn voor andere versies. (Update: ik kan bevestigen dat dit ook werkt op Dynamics 365 for Operations)

Ik lijk altijd de details te vergeten over hoe je een query specificeert en initialiseert in het SysOperation-framework. Ik denk dat de meeste batchjobs die ik heb gemaakt niet gebaseerd zijn op door de gebruiker configureerbare query's, maar af en toe moet ik zo'n batchjob maken, dus deze post is ook voor mijn eigen referentie.

Ten eerste wordt de query in de data contract class opgeslagen in een string. De parm methode moet worden gedecoreerd met het AifQueryTypeAttribute kenmerk, zoals hier (in dit voorbeeld heb ik de SalesUpdate query gebruikt, maar u kunt deze vervangen door elke AOT query):

[
    DataMemberAttribute,
    AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
    ;

    packedQuery = _packedQuery;
    return packedQuery;
}

Als u wilt dat de query in plaats daarvan door de controllerklasse wordt bepaald, kunt u ook een lege string gebruiken. In dat geval moet u ook een aantal helpermethoden implementeren (die u waarschijnlijk toch zou moeten implementeren voor uw eigen gemak wanneer u 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 bereiken toevoegen), moet u een initQuery-methode implementeren:

public void initQuery()
{
    Query queryLocal = this.getQuery();
    ;

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Zorg ervoor dat u deze methode aanroept vanuit de controllerklasse.

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

Mikkel Bang Christensen

Over de auteur

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