Miklix

Oppdater økonomisk dimensjonsverdi fra X++-kode i Dynamics 365

Publisert: 16. februar 2025 kl. 12:01:22 UTC

Denne artikkelen forklarer hvordan du oppdaterer en økonomisk dimensjonsverdi fra X++-kode i Dynamics 365, inkludert et kodeeksempel.


Denne siden er maskinoversatt fra engelsk for å gjøre den tilgjengelig for så mange som mulig. Dessverre er maskinoversettelse ennå ikke en fullkommen teknologi, så det kan forekomme feil. Hvis du foretrekker det, kan du se den engelske originalversjonen her:

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

Informasjonen i dette innlegget er basert på Dynamics 365. Det skal også fungere i Dynamics AX 2012, men jeg har ikke eksplisitt testet det.

Jeg fikk nylig i oppgave å oppdatere verdien av en enkelt økonomisk dimensjon basert på en formlogikk.

Som du sikkert vet, siden Dynamics AX 2012 er økonomiske dimensjoner lagret i separate tabeller og referert til gjennom en RecId, vanligvis i et DefaultDimension-felt.

Hele rammeverket for håndtering av dimensjoner er noe komplekst og jeg opplever ofte at jeg må lese dokumentasjon om det på nytt, kanskje fordi det ikke er noe jeg jobber med så ofte.

Uansett, å oppdatere et felt i et eksisterende dimensjonssett er noe som dukker opp ofte, så jeg tenkte jeg skulle skrive en oppskrift på favorittoppskriften min ;-)


En statisk verktøymetode kan se slik ut:

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 returnerer en ny (eller samme) DimensionDefault RecId, så hvis du oppdaterer en dimensjonsverdi for en post - som sannsynligvis er det vanligste scenariet - bør du sørge for å oppdatere dimensjonsfeltet på den posten med den nye verdien.

Del på BlueskyDel på FacebookDel på LinkedInDel på TumblrDel på XDel på LinkedInFest på Pinterest

Mikkel Bang Christensen

Om forfatteren

Mikkel Bang Christensen
Mikkel er skaperen og eieren av miklix.com. Han har over 20 års erfaring som profesjonell dataprogrammerer/programvareutvikler og er for tiden ansatt på fulltid i et stort europeisk IT-selskap. Når han ikke blogger, bruker han fritiden sin på en lang rekke interesser, hobbyer og aktiviteter, noe som til en viss grad kan gjenspeiles i de mange ulike temaene som dekkes på dette nettstedet.