Miklix

Актуализирайте стойността на финансовото измерение от X++ Code в Dynamics 365

Публикувано: 16 февруари 2025 г. в 12:00:55 ч. UTC

Тази статия обяснява как да актуализирате стойност на финансово измерение от X++ код в Dynamics 365, включително пример за код.


Тази страница е машинно преведена от английски език, за да бъде достъпна за възможно най-много хора. За съжаление машинният превод все още не е съвършена технология, така че могат да възникнат грешки. Ако предпочитате, можете да видите оригиналната версия на английски език тук:

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

Информацията в тази публикация е базирана на Dynamics 365. Трябва да работи и в Dynamics AX 2012, но не съм го тествал изрично.

Наскоро ми беше възложено да актуализирам стойността на едно финансово измерение въз основа на някаква логика на формата.

Както вероятно знаете, тъй като финансовите измерения на Dynamics AX 2012 се съхраняват в отделни таблици и се препращат чрез RecId, обикновено в поле DefaultDimension.

Цялата рамка за работа с измерения е донякъде сложна и често се оказва, че трябва да препрочитам документацията за нея, може би защото не е нещо, с което работя толкова често.

Както и да е, актуализирането на поле в съществуващ набор от измерения е нещо, което се появява често, така че реших да напиша любимата си рецепта ;-)


Метод за статична помощ може да изглежда така:

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

Методът връща нов (или същия) DimensionDefault RecId, така че ако актуализирате стойност на измерение за запис - което вероятно е най-често срещаният сценарий - трябва да се уверите, че сте актуализирали полето за измерение на този запис с новата стойност.

Споделете в BlueskyСподелете във FacebookСподелете в LinkedInСподелете в TumblrСподелете в XСподелете в LinkedInЗакачи в Пинтерест

Микел Банг Кристенсен

За автора

Микел Банг Кристенсен
Микел е създател и собственик на сайта miklix.com. Той има над 20 години опит като професионален компютърен програмист/разработчик на софтуер и в момента работи на пълен работен ден в голяма европейска ИТ корпорация. Когато не пише в блога, той прекарва свободното си време в широк спектър от интереси, хобита и дейности, които до известна степен могат да бъдат отразени в разнообразието от теми, обхванати в този уебсайт.