Создание поля поиска для финансового измерения в 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);
}