Miklix

Atualizar valor da dimensão financeira do código X++ no Dynamics 365

Publicado: 16 de fevereiro de 2025 às 12:01:31 UTC

Este artigo explica como atualizar um valor de dimensão financeira do código X++ no Dynamics 365, incluindo um exemplo de código.


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:

Update Financial Dimension Value from X++ Code in Dynamics 365

As informações neste post são baseadas no Dynamics 365. Também devem funcionar no Dynamics AX 2012, mas não as testei explicitamente.

Recentemente, fui encarregado de atualizar o valor de uma única dimensão financeira com base em alguma lógica de formulário.

Como provavelmente sabe, desde o Dynamics AX 2012 as dimensões financeiras são armazenadas em tabelas separadas e referenciadas através de um RecId, normalmente num campo DefaultDimension.

Toda a estrutura para lidar com dimensões é algo complexa e muitas vezes vejo-me a ter de reler a documentação sobre a mesma, talvez porque não é algo com que trabalhe com tanta frequência.

De qualquer forma, atualizar um campo num conjunto de dimensões existente é algo que acontece com frequência, por isso pensei em escrever sobre a minha receita favorita ;-)


Um método utilitário estático poderia ser assim:

public static DimensionDefault updateDimension( DimensionDefault    _defaultDimension,
                                                Name                _dimensionName,
                                                DimensionValue      _dimensionValue)
{
    DimensionAttribute                  dimAttribute;
    DimensionAttributeValue             dimAttributeValue;
    DimensionAttributeValueSetStorage   dimStorage;
    DimensionDefault                    ret;
    ;

    ret             = _defaultDimension;

    ttsbegin;

    dimStorage      = DimensionAttributeValueSetStorage::find(_defaultDimension);
    dimAttribute    = DimensionAttribute::findByName(_dimensionName);

    if (_dimensionValue)
    {
        dimAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(  dimAttribute,
                                                                                        _dimensionValue,
                                                                                        true,
                                                                                        true);
        dimStorage.addItem(dimAttributeValue);
    }
    else
    {
        dimStorage.removeDimensionAttribute(dimAttribute.RecId);
    }

    ret = dimStorage.save();

    ttscommit;

    return ret;
}

O método retorna um novo (ou o mesmo) DimensionDefault RecId, pelo que, ao atualizar um valor de dimensão para um registo (o que é provavelmente o cenário mais comum), deve atualizar o campo de dimensão nesse registo com o novo valor.

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.