Miklix

Usando uma consulta em uma classe de contrato de dados SysOperation no Dynamics AX 2012

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

Este artigo detalha como adicionar uma consulta configurável e filtrável pelo usuário 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 torná-la acessível ao maior número possível de pessoas. Infelizmente, a tradução automática ainda não é uma tecnologia aperfeiçoada, portanto, podem ocorrer erros. Se preferir, você pode visualizar a versão original em inglês aqui:

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

As informações neste post são baseadas no Dynamics AX 2012 R3. Elas podem ou não ser válidas para outras versões. (Atualização: Posso confirmar que isso também funciona no Dynamics 365 for Operations)

Parece que sempre me esqueço dos detalhes sobre como especificar e inicializar uma consulta no framework SysOperation. Imagino que a maioria dos jobs em lote que tenho criado não se baseia em consultas configuráveis pelo usuário, mas de vez em quando preciso criar um job em lote desse tipo, então este post também serve como minha própria referência.

Primeiro, na classe de contrato de dados, a consulta será armazenada compactada em uma string. Seu método `parm` deve ser decorado com o atributo `AifQueryTypeAttribute`, como mostrado abaixo (neste exemplo, usei a consulta `SalesUpdate`, mas você pode substituí-la por qualquer consulta AOT):

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

    packedQuery = _packedQuery;
    return packedQuery;
}

Se preferir que a consulta seja decidida pela classe controladora, você também pode usar uma string vazia. Nesse caso, você também precisará implementar alguns métodos auxiliares (que provavelmente você deveria implementar de qualquer forma para sua própria conveniência quando precisar acessar a consulta):

public Query getQuery()
{
    ;

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

public void setQuery(Query _query)
{
    ;

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

Se você precisar inicializar a consulta (por exemplo, adicionar intervalos), você deve implementar um método initQuery:

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

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Você precisa garantir que está chamando esse método a partir da classe controladora.

Leitura adicional

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


Compartilhe no BlueskyCompartilhe no FacebookCompartilhe no LinkedInCompartilhe no TumblrCompartilhar em XCompartilhe no LinkedInFixar no Pinterest

Mikkel Christensen

Sobre o autor

Mikkel Christensen
Mikkel é o criador e proprietário do miklix.com. Ele tem mais de 20 anos de experiência como programador de computador/desenvolvedor de software profissional e atualmente trabalha em tempo integral para uma grande empresa europeia de TI. Quando não está blogando, ele dedica seu tempo livre a uma grande variedade de interesses, hobbies e atividades, o que pode, até certo ponto, refletir-se na variedade de tópicos abordados neste site.