Miklix

Uso de una consulta en una clase de contrato de datos de SysOperation en Dynamics AX 2012

Publicado: 16 de febrero de 2025, 1:22:18 UTC
Última actualización: 12 de enero de 2026, 8:47:07 UTC

Este artículo analiza los detalles sobre cómo agregar una consulta filtrable y configurable por el usuario a una clase de contrato de datos SysOperation en Dynamics AX 2012 (y Dynamics 365 for Operations).


Esta página ha sido traducida automáticamente del inglés para hacerla accesible al mayor número de personas posible. Lamentablemente, la traducción automática no es todavía una tecnología perfeccionada, por lo que pueden producirse errores. Si lo prefiere, puede consultar la versión original en inglés aquí:

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

La información de esta publicación se basa en Dynamics AX 2012 R3. Puede que no sea válida para otras versiones. (Actualización: Confirmo que también funciona en Dynamics 365 for Operations).

Siempre olvido los detalles sobre cómo especificar e inicializar una consulta en el framework SysOperation. Supongo que la mayoría de los trabajos por lotes que he estado creando no se basan en consultas configurables por el usuario, pero de vez en cuando necesito crear uno, así que esta publicación también es para mi propia referencia.

Primero, en la clase del contrato de datos, la consulta se almacenará empaquetada en una cadena. Su método parm debe estar decorado con el atributo AifQueryTypeAttribute, como se muestra a continuación (en este ejemplo usé la consulta SalesUpdate, pero puede reemplazarla con cualquier consulta AOT):

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

    packedQuery = _packedQuery;
    return packedQuery;
}

Si prefiere que la consulta la decida la clase controladora, también puede usar una cadena vacía. En ese caso, también necesita implementar un par de métodos auxiliares (que probablemente debería implementar de todos modos para su comodidad al acceder a la consulta):

public Query getQuery()
{
    ;

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

public void setQuery(Query _query)
{
    ;

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

Si necesita inicializar la consulta (por ejemplo, agregar rangos), debe implementar un método initQuery:

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

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Debe asegurarse de llamar a este método desde la clase del controlador.

Lectura adicional

Si te ha gustado esta publicación, puede que también te gusten estas sugerencias:


Compartir en BlueskyCompartir en FacebookCompartir en LinkedInCompartir en TumblrCompartir en XCompartir en LinkedInPin en Pinterest

Mikkel Christensen

Sobre el autor

Mikkel Christensen
Mikkel es el creador y propietario de miklix.com. Tiene más de 20 años de experiencia como programador informático profesional y desarrollador de software, y actualmente trabaja a tiempo completo para una gran empresa europea de TI. Cuando no está escribiendo en su blog, dedica su tiempo libre a una gran variedad de intereses, aficiones y actividades, que en cierta medida pueden verse reflejados en la variedad de temas tratados en este sitio web.