Miklix

Actualitzeu el valor de la dimensió financera del codi X++ al Dynamics 365

Publicat: 5 de març del 2025, a les 19:28:30 UTC

En aquest article s'explica com actualitzar un valor de dimensió financera del codi X++ al Dynamics 365, inclòs un exemple de codi.


Aquesta pàgina es va traduir automàticament de l'anglès per tal de fer-la accessible al màxim de persones possible. Malauradament, la traducció automàtica encara no és una tecnologia perfeccionada, de manera que es poden produir errors. Si ho prefereixes, pots veure la versió original en anglès aquí:

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

La informació d'aquesta publicació es basa en el Dynamics 365. També hauria de funcionar al Dynamics AX 2012, però no l'he provat explícitament.

Recentment, em van encarregar d'actualitzar el valor d'una sola dimensió financera basant-se en una lògica de formulari.

Com probablement ja sabeu, atès que les dimensions financeres del Dynamics AX 2012 s'emmagatzemen en taules separades i es fan referència a través d'un RecId, normalment en un camp DefaultDimension.

Tot el marc per gestionar les dimensions és una mica complex i sovint em trobo havent de tornar a llegir la documentació sobre ell, potser perquè no és una cosa amb la qual treballo tan sovint.

De totes maneres, actualitzar un camp en un conjunt de dimensions existent és una cosa que apareix amb freqüència, així que vaig pensar que faria un escrit de la meva recepta preferida ;-)


Un mètode d'utilitat estàtica podria semblar així:

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

El mètode retorna un nou (o el mateix) DimensionDefault RecId, de manera que si actualitzeu un valor de dimensió per a un registre, que és probablement l'escenari més comú, us heu d'assegurar d'actualitzar el camp de dimensió d'aquest registre amb el valor nou.

Comparteix a BlueskyComparteix a FacebookComparteix a LinkedInComparteix a TumblrComparteix a XComparteix a LinkedInPin a Pinterest

Mikkel Bang Christensen

Sobre l'autor

Mikkel Bang Christensen
Mikkel és el creador i propietari de miklix.com. Té més de 20 anys d'experiència com a programador/desenvolupador de programari informàtic professional i actualment treballa a temps complet per a una gran corporació informàtica europea. Quan no fa blocs, dedica el seu temps lliure a una gran varietat d'interessos, aficions i activitats, que fins a cert punt es poden reflectir en la varietat de temes tractats en aquest lloc web.