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

Aquest article repassa els detalls sobre com afegir una consulta filtrable i configurable 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 Dynamics AX 2012 R3. Pot ser vàlid o no per a altres versions. (Actualització: puc confirmar que això també funciona al Dynamics 365 for Operations)

Sempre em sembla que oblido els detalls sobre com especificar i inicialitzar una consulta al marc SysOperation. Suposo que la majoria de treballs per lots que he estat fent no es basen en consultes configurables per l'usuari, però de tant en tant necessito fer un treball per lots, així que aquesta publicació també és per a la meva pròpia referència.

En primer lloc, 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 del controlador, també podeu utilitzar una cadena buida. En aquest cas, també haureu d'implementar un parell de mètodes d'ajuda (que probablement haureu d'implementar de totes maneres per a la vostra 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 intervals), hauríeu d'implementar un mètode initQuery:

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

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Heu d'assegurar-vos de cridar aquest mètode des de la classe del controlador.

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

Mikkel Bang Christensen

Sobre l'autor

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