Miklix

Financiële dimensiewaarde bijwerken vanuit X++-code in Dynamics 365

Gepubliceerd: 16 februari 2025 om 12:01:24 UTC

In dit artikel wordt uitgelegd hoe u een financiële dimensiewaarde vanuit X++-code in Dynamics 365 bijwerkt, inclusief een codevoorbeeld.


Deze pagina is machinaal uit het Engels vertaald om hem voor zoveel mogelijk mensen toegankelijk te maken. Helaas is machinevertaling nog geen geperfectioneerde technologie, dus er kunnen fouten optreden. Als je dat liever hebt, kun je hier de originele Engelse versie bekijken:

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

De informatie in dit bericht is gebaseerd op Dynamics 365. Het zou ook moeten werken in Dynamics AX 2012, maar ik heb het niet expliciet getest.

Onlangs kreeg ik de opdracht om de waarde van een enkele financiële dimensie bij te werken op basis van een bepaalde vormlogica.

Zoals u waarschijnlijk weet, worden financiële dimensies in Dynamics AX 2012 opgeslagen in afzonderlijke tabellen en wordt ernaar verwezen via een RecId, meestal in een DefaultDimension-veld.

Het hele raamwerk voor het verwerken van dimensies is nogal complex en ik moet de documentatie er vaak opnieuw over lezen, misschien omdat ik er niet zo vaak mee werk.

Hoe dan ook, het bijwerken van een veld in een bestaande dimensieset is iets dat vaak voorkomt, dus ik dacht dat ik mijn favoriete recept maar eens zou beschrijven ;-)


Een statische hulpprogrammamethode zou er als volgt uit kunnen zien:

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;
}

De methode retourneert een nieuwe (of dezelfde) DimensionDefault RecId. Als u dus een dimensiewaarde voor een record bijwerkt (wat waarschijnlijk het meest voorkomende scenario is), moet u ervoor zorgen dat u het dimensieveld in die record bijwerkt met de nieuwe waarde.

Delen op BlueskyDelen op FacebookDelen op LinkedInDelen op TumblrDelen op XDelen op LinkedInPin op Pinterest

Mikkel Bang Christensen

Over de auteur

Mikkel Bang Christensen
Mikkel is de bedenker en eigenaar van miklix.com. Hij heeft meer dan 20 jaar ervaring als professioneel computerprogrammeur/softwareontwikkelaar en werkt momenteel fulltime voor een groot Europees IT-bedrijf. Als hij niet blogt, besteedt hij zijn vrije tijd aan een breed scala aan interesses, hobby's en activiteiten, die tot op zekere hoogte weerspiegeld kunnen worden in de verscheidenheid aan onderwerpen op deze website.