Miklix

Utilização de uma consulta numa classe de contrato de dados SysOperation no Dynamics AX 2012

Publicado: 16 de fevereiro de 2025 às 01:23:03 UTC
Última atualização: 12 de janeiro de 2026 às 08:47:17 UTC

Este artigo aborda os detalhes sobre como adicionar uma consulta configurável e filtrável pelo utilizador a uma classe de contrato de dados SysOperation no Dynamics AX 2012 (e no Dynamics 365 for Operations)


Esta página foi traduzida automaticamente do inglês para a tornar acessível ao maior número possível de pessoas. Infelizmente, a tradução automática ainda não é uma tecnologia aperfeiçoada, pelo que podem ocorrer erros. Se preferir, pode ver a versão original em inglês aqui:

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

A informação neste artigo baseia-se no Dynamics AX 2012 R3. Pode ou não ser válida para outras versões. (Atualização: Posso confirmar que isto também funciona no Dynamics 365 para Operações)

Parece que me esqueço sempre dos detalhes sobre como especificar e inicializar uma consulta no framework SysOperation. Acho que a maioria dos trabalhos em lote que tenho feito não se baseiam em consultas configuráveis pelo utilizador, mas de vez em quando preciso mesmo de fazer um trabalho em lote, por isso este post é também para minha própria referência.

Primeiro, na classe de contrato de dados, a consulta será armazenada numa cadeia de caracteres. O seu método parm deve ser decorado com o atributo AifQueryTypeAttribute, assim (neste exemplo usei a consulta SalesUpdate, mas pode substituí-la por qualquer consulta AOT):

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

    packedQuery = _packedQuery;
    return packedQuery;
}

Se quiseres que a consulta seja decidida pela classe controller, também podes usar uma string vazia. Nesse caso, também precisas de implementar alguns métodos auxiliares (que provavelmente deves implementar na mesma para tua conveniência quando precisares de aceder à consulta):

public Query getQuery()
{
    ;

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

public void setQuery(Query _query)
{
    ;

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

Se precisares de inicializar a consulta (por exemplo, adicionar intervalos), deves implementar um método initQuery:

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

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Tens de garantir que chamas este método a partir da classe controlador.

Leitura adicional

Se gostou deste post, também pode gostar destas sugestões:


Partilhar no BlueskyPartilhar no FacebookPartilhar no LinkedInPartilhar no TumblrPartilhar em XPartilhar no LinkedInFixar no Pinterest

Mikkel Christensen

Sobre o autor

Mikkel Christensen
Mikkel é o criador e proprietário do miklix.com. Tem mais de 20 anos de experiência como programador informático/desenvolvedor de software profissional e trabalha atualmente a tempo inteiro para uma grande empresa europeia de TI. Quando não está a escrever no blogue, dedica o seu tempo livre a um vasto leque de interesses, passatempos e actividades, que podem, em certa medida, refletir-se na variedade de tópicos abordados neste sítio Web.