Створення поля підстановки для фінансового виміру в Dynamics 365
Опубліковано: 16 лютого 2025 р. о 11:34:11 UTC
У цій статті пояснюється, як створити поле підстановки для фінансового параметра в Dynamics 365 for Operations, включно з прикладом коду X++.
Creating a Lookup Field for a Financial Dimension in Dynamics 365
Інформація в цій публікації базується на Dynamics 365 for Operations, але більша її частина також працюватиме для Dynamics AX 2012 (див. нижче).
Нещодавно мені було доручено створити нове поле, в якому повинна бути можливість вказати єдиний фінансовий параметр, в даному випадку Product. Звичайно, нове поле також повинно мати можливість пошуку допустимих значень цього параметра.
Це трохи складніше, ніж звичайний пошук у таблиці, але якщо ви знаєте як, насправді все не так вже й погано.
На щастя, стандартна програма надає зручну форму пошуку (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);
}