Miklix

Создание поля поиска для финансового измерения в Dynamics 365

Опубликовано: 16 февраля 2025 г. в 11:34:03 UTC

В этой статье объясняется, как создать поле поиска для финансового измерения в Dynamics 365 for Operations, включая пример кода X++.


Эта страница была переведена с английского языка для того, чтобы сделать ее доступной как можно большему числу людей. К сожалению, машинный перевод еще не является совершенной технологией, поэтому возможны ошибки. Если вы хотите, вы можете просмотреть оригинальную английскую версию здесь:

Creating a Lookup Field for a Financial Dimension in Dynamics 365

Информация в этой статье основана на Dynamics 365 for Operations, но большая ее часть также будет работать и в Dynamics AX 2012 (см. ниже).

Недавно мне поручили создать новое поле, в котором можно было бы указать одно финансовое измерение, в данном случае Продукт. Конечно, новое поле также должно иметь возможность поиска допустимых значений этого измерения.

Это немного сложнее, чем обычный поиск в таблице, но если вы знаете, как это сделать, то на самом деле это не так уж и сложно.

К счастью, стандартное приложение предоставляет удобную форму поиска (DimensionLookup), которую можно использовать для этой цели, если вы просто укажете, какой атрибут измерения следует искать.

Сначала нужно создать само поле формы. Оно может быть основано на поле таблицы или методе редактирования, не имеет значения для самого поиска, но так или иначе оно должно использовать расширенный тип данных DimensionValue.

Затем вам нужно создать обработчик событий OnLookup для поля. Чтобы создать обработчик событий, щелкните правой кнопкой мыши событие OnLookup для поля, затем выберите «Копировать метод обработчика событий». Затем вы можете вставить пустой метод обработчика событий в класс и редактировать его оттуда.

Примечание: большая часть этого будет работать и в Dynamics AX 2012, но вместо создания обработчика событий вы можете переопределить метод поиска поля формы.

Обработчик событий должен выглядеть примерно так (при необходимости замените имя формы и имя поля):

[
    FormControlEventHandler(formControlStr( MyForm,
                                            MyProductDimField),
                            FormControlEventType::Lookup)
]
public static void MyProductDimField_OnLookup(  FormControl _sender,
                                                FormControlEventArgs _e)
{
    FormStringControl   control;
    Args                args;
    FormRun             formRun;
    DimensionAttribute  dimAttribute;
    ;

    dimAttribute    =   DimensionAttribute::findByName('Product');
    args            =   new Args();
    args.record(dimAttribute);
    args.caller(_sender);
    args.name(formStr(DimensionLookup));
    formRun         =   classFactory.formRunClass(args);formRun.init();
    control         =   _sender as FormStringControl;
    control.performFormLookup(formRun);
}
Поделиться на BlueskyПоделиться на FacebookПоделиться на LinkedInПоделиться на TumblrПоделиться на XПоделиться на LinkedInЗакрепить на Pinterest

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

Об авторе

Миккель Банг Кристенсен
Миккель - создатель и владелец сайта miklix.com. Он имеет более чем 20-летний опыт работы в качестве профессионального программиста/разработчика программного обеспечения и в настоящее время работает на полную ставку в крупной европейской IT-корпорации. Когда он не ведет блог, то тратит свое свободное время на огромное количество интересов, хобби и занятий, что в некоторой степени отражается в разнообразии тем, освещаемых на этом сайте.