Miklix

Ús d'una consulta en una classe de contracte de dades SysOperation al Dynamics AX 2012

Publicat: 5 de març del 2025, a les 19:30:08 UTC
Última actualització: 12 de gener del 2026, a les 8:47:44 UTC

Aquest article explica els detalls sobre com afegir una consulta configurable i filtrable per l'usuari a una classe de contracte de dades SysOperation al Dynamics AX 2012 (i al Dynamics 365 for Operations).


Aquesta pàgina es va traduir automàticament de l'anglès per tal de fer-la accessible al màxim de persones possible. Malauradament, la traducció automàtica encara no és una tecnologia perfeccionada, de manera que es poden produir errors. Si ho prefereixes, pots veure la versió original en anglès aquí:

Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012

La informació d'aquesta publicació es basa en el Dynamics AX 2012 R3. Pot ser vàlida o no per a altres versions. (Actualització: puc confirmar que això també funciona al Dynamics 365 for Operations)

Sempre m'oblido dels detalls sobre com especificar i inicialitzar una consulta al framework SysOperation. Suposo que la majoria de les tasques per lots que he estat fent no es basen en consultes configurables per l'usuari, però de tant en tant necessito fer una tasca per lots d'aquest tipus, així que aquesta publicació també és per a la meva pròpia referència.

Primer, a la classe de contracte de dades, la consulta s'emmagatzemarà empaquetada en una cadena. El seu mètode parm ha d'estar decorat amb l'atribut AifQueryTypeAttribute, així (en aquest exemple he utilitzat la consulta SalesUpdate, però podeu substituir-la per qualsevol consulta AOT):

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

    packedQuery = _packedQuery;
    return packedQuery;
}

Si voleu que la consulta la decideixi la classe controladora, també podeu utilitzar una cadena buida. En aquest cas, també heu d'implementar un parell de mètodes auxiliars (que probablement hauríeu d'implementar de totes maneres per a la vostra pròpia comoditat quan necessiteu accedir a la consulta):

public Query getQuery()
{
    ;

    return new Query(SysOperationHelper::base64Decode(packedQuery));
}

public void setQuery(Query _query)
{
    ;

    packedQuery = SysOperationHelper::base64Encode(_query.pack());
}

Si necessiteu inicialitzar la consulta (per exemple, afegir rangs), heu d'implementar un mètode initQuery:

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

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Cal assegurar-se de cridar aquest mètode des de la classe controlador.

Lectures addicionals

Si t'ha agradat aquesta publicació, també et poden agradar aquests suggeriments:


Comparteix a BlueskyComparteix a FacebookComparteix a LinkedInComparteix a TumblrComparteix a XComparteix a LinkedInPin a Pinterest

Mikkel Christensen

Sobre l'autor

Mikkel Christensen
Mikkel és el creador i propietari de miklix.com. Té més de 20 anys d'experiència com a programador/desenvolupador de programari informàtic professional i actualment treballa a temps complet per a una gran corporació informàtica europea. Quan no fa blocs, dedica el seu temps lliure a una gran varietat d'interessos, aficions i activitats, que fins a cert punt es poden reflectir en la varietat de temes tractats en aquest lloc web.