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

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

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

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

ОбъектСобытиеПараметрПример
ClassPre/Post eventXppPrePostArgsПолучить значения аргументов (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;

ClassPre/Post eventXppPrePostArgsSalesLineType salesLineType = args.getThis() as SalesLineType; 
FormInitializedxFormRunFormDataSource purchLine = sender.dataSource(formDataSourceStr([formname],[table]));
FormDataSourceFormDataSourceFormDataSource formDS = sender.formRun().dataSource(formDataSourceStr(EcoResProductDetailsExtended, MHSmartATPItemSettings));
MHSmartATPItemSettings smartATPItemSettings = formDS.cursor();
FormDataSource FieldFormDataObjectFormDataSource formDS = sender.datasource();
PurchLine purchLine = formDS.cursor();
FormForm ControlFormControlFormRun formRun;
FormControl formControl;
formRun = sender.formRun();
formControl = FormRun.design().controlName(formControlStr(<form name>, <control name>));
someVariable = formControl.valueStr();
FormonClickedFormControl 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();

FormPre/Post eventXppPrePostArgsFormRun formRun = args.getThis();
FormDataSource formDSLogisticsPostalAddress = formRun.dataSource(formDataSourceStr(LogisticsPostalAddress, LogisticsPostalAddress));
LogisticsPostalAddress logisticsPostalAddress = formDSLogisticsPostalAddress.cursor();
TableonDeleteCommonPurchLine purchLine = sender as PurchLine;
TableModified Field ValueCommonTableName itemSettings = sender as TableName;
ModifyFieldValueEventArgs fieldEvent = e as ModifyFieldValueEventArgs;

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

TableValidateFieldValueCommon/DataEventArgsValidateFieldValueEventArgs fieldEvent = e;
boolean isValid;
PurchLine purchLine = sender as PurchLine;

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

TablePre/Post eventXppPrePostArgsPurchLine purchLine = args.getThis() as PurchLine;

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

 

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

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

Подписаться

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *