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

Este artigo aborda os detalhes sobre como adicionar uma consulta configurável pelo utilizador 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 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

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

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

Primeiro, na classe de contrato de dados, a consulta será armazenada numa string. O seu método parm deve ser decorado com o atributo AifQueryTypeAttribute, assim (neste exemplo utilizei 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 pretender que a consulta seja decidida pela classe do controlador, também pode utilizar uma string vazia. Nesse caso, também precisa de implementar alguns métodos auxiliares (que provavelmente deve implementar de qualquer forma para sua própria conveniência quando precisar de aceder à consulta):

public Query getQuery()
{
    ;

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

public void setQuery(Query _query)
{
    ;

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

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

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

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Precisa de ter a certeza de chamar este método da classe do controlador.

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

Mikkel Bang Christensen

Sobre o autor

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