Miklix

Actualizar el valor de la dimensión financiera desde el código X++ en Dynamics 365

Publicado: 16 de febrero de 2025, 12:01:02 UTC

Este artículo explica cómo actualizar un valor de dimensión financiera desde el código X++ en Dynamics 365, incluido un ejemplo de código.


Esta página ha sido traducida automáticamente del inglés para hacerla accesible al mayor número de personas posible. Lamentablemente, la traducción automática no es todavía una tecnología perfeccionada, por lo que pueden producirse errores. Si lo prefiere, puede consultar la versión original en inglés aquí:

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

La información de esta publicación se basa en Dynamics 365. También debería funcionar en Dynamics AX 2012, pero no lo he probado explícitamente.

Recientemente me asignaron la tarea de actualizar el valor de una única dimensión financiera en base a cierta lógica formal.

Como probablemente sepa, desde Dynamics AX 2012 las dimensiones financieras se almacenan en tablas separadas y se hace referencia a ellas a través de un RecId, generalmente en un campo DefaultDimension.

Todo el marco para manejar dimensiones es algo complejo y a menudo me encuentro teniendo que releer la documentación al respecto, quizás porque no es algo con lo que trabajo tan a menudo.

De todos modos, actualizar un campo en un conjunto de dimensiones existente es algo que surge con frecuencia, así que pensé en escribir un artículo sobre mi receta favorita ;-)


Un método de utilidad estática podría verse así:

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étodo devuelve un nuevo (o el mismo) DimensionDefault RecId, por lo que si actualiza un valor de dimensión para un registro (que probablemente sea el escenario más común), debe asegurarse de actualizar el campo de dimensión en ese registro con el nuevo valor.

Compartir en BlueskyCompartir en FacebookCompartir en LinkedInCompartir en TumblrCompartir en XCompartir en LinkedInPin en Pinterest

Mikkel Bang Christensen

Sobre el autor

Mikkel Bang Christensen
Mikkel es el creador y propietario de miklix.com. Tiene más de 20 años de experiencia como programador informático profesional y desarrollador de software, y actualmente trabaja a tiempo completo para una gran empresa europea de TI. Cuando no está escribiendo en su blog, dedica su tiempo libre a una gran variedad de intereses, aficiones y actividades, que en cierta medida pueden verse reflejados en la variedad de temas tratados en este sitio web.