Miklix

Uppdatera Financial Dimension Value från X++ Code i Dynamics 365

Publicerad: 16 februari 2025 kl. 12:01:37 UTC

Den här artikeln förklarar hur du uppdaterar ett ekonomiskt dimensionsvärde från X++-kod i Dynamics 365, inklusive ett kodexempel.


Denna sida har maskinöversatts från engelska för att göra den tillgänglig för så många som möjligt. Tyvärr är maskinöversättning ännu inte en fulländad teknik, så fel kan uppstå. Om du föredrar det kan du se den engelska originalversionen här:

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

Informationen i det här inlägget är baserad på Dynamics 365. Det ska även fungera i Dynamics AX 2012, men jag har inte uttryckligen testat det.

Jag fick nyligen i uppdrag att uppdatera värdet av en enda finansiell dimension baserat på någon formlogik.

Som du säkert vet, eftersom Dynamics AX 2012 finansiella dimensioner lagras i separata tabeller och refereras till genom ett RecId, vanligtvis i ett DefaultDimension-fält.

Hela ramverket för att hantera dimensioner är något komplext och jag kommer ofta på mig själv med att behöva läsa dokumentation om det igen, kanske för att det inte är något jag jobbar med så ofta.

Hur som helst, att uppdatera ett fält i en befintlig dimensionsuppsättning är något som dyker upp ofta, så jag tänkte skriva upp mitt favoritrecept ;-)


En statisk verktygsmetod kan se ut så här:

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

Metoden returnerar en ny (eller samma) DimensionDefault RecId, så om du uppdaterar ett dimensionsvärde för en post - vilket förmodligen är det vanligaste scenariot - bör du se till att uppdatera dimensionsfältet på den posten med det nya värdet.

Dela på BlueskyDela på FacebookDela på LinkedInDela på TumblrDela på XDela på LinkedInFäst på Pinterest

Mikkel Bang Christensen

Om författaren

Mikkel Bang Christensen
Mikkel är skaparen och ägaren av miklix.com. Han har över 20 års erfarenhet som professionell datorprogrammerare/mjukvaruutvecklare och är för närvarande heltidsanställd på ett stort europeiskt IT-bolag. När han inte bloggar ägnar han sin fritid åt en mängd olika intressen, hobbies och aktiviteter, vilket i viss mån kan återspeglas i de olika ämnen som behandlas på den här webbplatsen.