Miklix

Оновлення значення фінансового параметра з коду X++ у Dynamics 365

Опубліковано: 16 лютого 2025 р. о 12:01:41 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;
}

Цей метод повертає новий (або той самий) RecId DimensionDefault, тому в разі оновлення значення параметра для запису (що, мабуть, є найпоширенішим сценарієм), обов'язково оновіть поле розміру в цьому записі новим значенням.

Поділитися на BlueskyПоділіться на FacebookПоділіться на LinkedInПоділіться на TumblrПоділитися на XПоділіться на LinkedInЗакріпити на Pinterest

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

Про автора

Міккель Банг Крістенсен
Міккель - творець і власник сайту miklix.com. Він має понад 20 років досвіду роботи професійним програмістом/розробником програмного забезпечення і наразі працює на повну ставку у великій європейській ІТ-корпорації. У вільний від ведення блогу час він присвячує різноманітним інтересам, хобі та захопленням, що певною мірою відображається на різноманітності тем, які висвітлюються на цьому сайті.