Особенности классов EventHandler для разных объектов

Category: Статьи Post Date: 18.06.2020

За 6 месяцев изучения того, как перейти с AX 2012 X++ на D365 X++, одна из проблем с которой я столкнулся – это большое количество конструкций кода для доступа к свойствам/источникам данным вызывающего метода при подписке на разные события или методы. Поэтому я стал документировать их каждый раз когда сталкивался с новыми. Поскольку я уверен, этот список далеко не полный, так как я коснулся только вершины айсберга, когда дело доходило до событий на полях. Тем не менее я подумал, что самое время опубликовать эту информацию в качестве справочной. Скорее всего есть более эффективные способы сделать некоторые вещи, однако я публикую это как отправную точку.

Я буду обновлять этот пост, по мере роста моего опыта работы с D365FO

Объект Событие Параметр Пример
Class Pre/Post event XppPrePostArgs Получить значения аргументов (args) и параметров из метода, который был расширен.

Parm 1 = Object Parm 2 = Common
PurchCreateFromSalesOrder callingClass = args.getThis() as PurchCreateFromSalesOrder;
Object callerObject = args.getArgNum(1) as Object;
Common callerRecord = args.getArgNum(2) as Common;

Class Pre/Post event XppPrePostArgs SalesLineType salesLineType = args.getThis() as SalesLineType; 
Form Initialized xFormRun FormDataSource purchLine = sender.dataSource(formDataSourceStr([formname],[table]));
Form DataSource FormDataSource FormDataSource formDS = sender.formRun().dataSource(formDataSourceStr(EcoResProductDetailsExtended, MHSmartATPItemSettings));
MHSmartATPItemSettings smartATPItemSettings = formDS.cursor();
Form DataSource Field FormDataObject FormDataSource formDS = sender.datasource();
PurchLine purchLine = formDS.cursor();
Form Form Control FormControl FormRun formRun;
FormControl formControl;
formRun = sender.formRun();
formControl = FormRun.design().controlName(formControlStr(<form name>, <control name>));
someVariable = formControl.valueStr();
Form onClicked FormControl  FormRun formRun = sender.formRun();
FormDataSource formDSSalesTable = formRun.dataSource(formDataSourceStr(SalesTable, SalesTable));
FormDataSource formDSSalesLine = formRun.dataSource(formDataSourceStr(SalesTable, SalesLine));

SalesTable salesTable = formDSSalesTable.cursor();
SalesLine salesLine = formDSSalesLine.cursor();

Form Pre/Post event XppPrePostArgs FormRun formRun = args.getThis();
FormDataSource formDSLogisticsPostalAddress = formRun.dataSource(formDataSourceStr(LogisticsPostalAddress, LogisticsPostalAddress));
LogisticsPostalAddress logisticsPostalAddress = formDSLogisticsPostalAddress.cursor();
Table onDelete Common PurchLine purchLine = sender as PurchLine;
Table Modified Field Value Common TableName itemSettings = sender as TableName;
ModifyFieldValueEventArgs fieldEvent = e as ModifyFieldValueEventArgs;

  //проверить какое поле было изменено
  switch(fieldEvent.parmFieldName())
        {
            case fieldStr([tablename], [fieldname]):
            …выполнить какое-либо действие
            break;
        }

Table ValidateFieldValue Common/DataEventArgs ValidateFieldValueEventArgs fieldEvent = e;
boolean isValid;
PurchLine purchLine = sender as PurchLine;

//вызвать «checkFailed»
isValid = checkFailed(“
Ошибка в событии“);
//
сохранить результат
fieldEvent.parmValidateResult(isValid);

Table Pre/Post event XppPrePostArgs PurchLine purchLine = args.getThis() as PurchLine;

Стоит отметить, когда дело касается доступа к какому-либо элементу на форме, в этом случае ключевым моментом является доступ к объекту FormRun. Если у вас есть доступ к этому объекту, то вы можете получить доступ ко всему общедоступному в форме, например к элементам управления или источникам данных.

 

Оригинал статьи можно найти по ссылке.

Подписывайтесь на канал @d365neti в Telegram

Подписаться

Leave a Reply