Miklix

Como iterar sobre os elementos de um Enum do código X++ no Dynamics AX 2012

Publicado: 15 de fevereiro de 2025 às 23:10:53 UTC

Este artigo explica como enumerar e executar um loop sobre os elementos de uma enumeração base no Dynamics AX 2012, incluindo um exemplo de código X++.


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:

How to Iterate Over the Elements of an Enum from X++ Code 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.

Recentemente, eu estava criando um formulário que precisava exibir um valor para cada elemento em um enum. Em vez de criar manualmente os campos (e então precisar manter o formulário se o enum for modificado), decidi implementá-lo dinamicamente para que ele adicionasse automaticamente os campos ao design em tempo de execução.

No entanto, logo descobri que iterar sobre os valores de uma enumeração, embora seja fácil quando você sabe como, é um pouco confuso.

Obviamente, você precisa começar com a classe DictEnum. Como você verá, essa classe tem vários métodos para obter informações como nome e rótulo tanto do índice quanto do valor.

A diferença entre index e value é que index é um número de elemento na enumeração, se os elementos da enumeração fossem numerados sequencialmente a partir de zero, enquanto value é a propriedade "value" real do elemento. Como a maioria das enumerações tem valores numerados sequencialmente a partir de 0, o index e o value de um elemento frequentemente serão os mesmos, mas certamente não sempre .

Mas como você sabe quais valores um enum tem? É aqui que fica confuso. A classe DictEnum tem um método chamado values(). Você pode esperar que esse método retorne uma lista dos valores do enum, mas isso obviamente seria muito fácil, então, em vez disso, ele retorna o número de valores que o enum contém. No entanto, o número de valores não tem nada a ver com os valores reais, então você precisa usar esse número como base para chamar os métodos baseados em índice, não os baseados em valor.

Se ao menos tivessem chamado esse método de indexes(), teria sido menos confuso ;-)

Tenha em mente também que os valores de enumeração (e aparentemente esses "índices") começam em 0, diferentemente dos índices de array e container no X++, que começam em 1, então para fazer um loop pelos elementos em uma enumeração você pode fazer algo assim:

DictEnum dictEnum = new DictEnum(enumNum(SalesStatus));
Counter  c;
;

for (c = 0; c < dictEnum.values(); c++)
{
    info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}

Isso produzirá o símbolo e o rótulo de cada elemento na enumeração para o infolog.

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.