Miklix

Aktualizuj wartość wymiaru finansowego z kodu X++ w Dynamics 365

Opublikowano: 16 lutego 2025 12:01:27 UTC

W tym artykule wyjaśniono, jak zaktualizować wartość wymiaru finansowego z kodu X++ w usłudze Dynamics 365, podając także przykład kodu.


Ta strona została przetłumaczona maszynowo z języka angielskiego, aby była dostępna dla jak największej liczby osób. Niestety, tłumaczenie maszynowe nie jest jeszcze dopracowaną technologią, więc mogą wystąpić błędy. Jeśli wolisz, możesz wyświetlić oryginalną angielską wersję tutaj:

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

Informacje w tym poście odnoszą się do Dynamics 365. Powinno to również działać w Dynamics AX 2012, ale nie testowałem tego bezpośrednio.

Niedawno powierzono mi zadanie zaktualizowania wartości jednego wymiaru finansowego w oparciu o pewną formę logiczną.

Jak prawdopodobnie wiesz, w systemie Dynamics AX 2012 wymiary finansowe są przechowywane w oddzielnych tabelach i odwoływane za pomocą RecId, zwykle w polu DefaultDimension.

Cały system obsługi wymiarów jest dość skomplikowany i często muszę ponownie przeczytać dokumentację, być może dlatego, że nie pracuję z tym zbyt często.

Tak czy inaczej, aktualizacja pola w istniejącym zestawie wymiarów to coś, co zdarza się często, więc pomyślałem, że napiszę o moim ulubionym przepisie ;-)


Metoda statyczna może wyglądać następująco:

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

Metoda zwraca nowy (lub ten sam) identyfikator DimensionDefault RecId, więc podczas aktualizowania wartości wymiaru dla rekordu (co jest prawdopodobnie najczęstszym scenariuszem) należy pamiętać o zaktualizowaniu pola wymiaru w tym rekordzie o nową wartość.

Udostępnij na BlueskyUdostępnij na FacebookuUdostępnij na LinkedInUdostępnij na TumblrUdostępnij na XUdostępnij na LinkedInPrzypnij na Pintereście

Mikkel Bang Christensen

O autorze

Mikkel Bang Christensen
Mikkel jest twórcą i właścicielem miklix.com. Ma ponad 20-letnie doświadczenie jako profesjonalny programista komputerowy / programista oprogramowania i jest obecnie zatrudniony na pełny etat w dużej europejskiej korporacji IT. Kiedy nie bloguje, poświęca swój wolny czas na szeroki wachlarz zainteresowań, hobby i aktywności, co może w pewnym stopniu znaleźć odzwierciedlenie w różnorodności tematów poruszanych na tej stronie.