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

Este artigo aborda os detalhes sobre como adicionar uma consulta configurável pelo usuário e filtrável a uma classe de contrato de dados SysOperation no Dynamics AX 2012 (e 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. 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 esqueço os detalhes sobre como especificar e inicializar uma consulta no framework SysOperation. Acho que a maioria dos trabalhos em lote que tenho feito não são baseados em consultas configuráveis pelo usuário, mas de vez em quando preciso fazer um trabalho em lote, então este post também é para minha própria referência.

Primeiro, na classe de contrato de dados, a consulta será armazenada em uma string. Seu método parm deve ser decorado com o atributo AifQueryTypeAttribute, assim (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 você quiser que a consulta seja decidida pela classe do controlador, você também pode usar uma string vazia. Nesse caso, você também precisa implementar alguns métodos auxiliares (que você provavelmente deve implementar de qualquer maneira 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 ter certeza de chamar esse método da classe do controlador.

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

Mikkel Bang Christensen

Sobre o autor

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