За 6 месяцев изучения того, как перейти с AX 2012 X++ на D365 X++, одна из проблем с которой я столкнулся – это большое количество конструкций кода для доступа к свойствам/источникам данным вызывающего метода при подписке на разные события или методы. Поэтому я стал документировать их каждый раз когда сталкивался с новыми. Поскольку я уверен, этот список далеко не полный, так как я коснулся только вершины айсберга, когда дело доходило до событий на полях. Тем не менее я подумал, что самое время опубликовать эту информацию в качестве справочной. Скорее всего есть более эффективные способы сделать некоторые вещи, однако я публикую это как отправную точку.
Я буду обновлять этот пост, по мере роста моего опыта работы с D365FO
Объект | Событие | Параметр | Пример |
Class | Pre/Post event | XppPrePostArgs | Получить значения аргументов (args) и параметров из метода, который был расширен. Parm 1 = Object Parm 2 = 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(); |
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. Если у вас есть доступ к этому объекту, то вы можете получить доступ ко всему общедоступному в форме, например к элементам управления или источникам данных.
Оригинал статьи можно найти по ссылке.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.