Показать сообщение отдельно
Старый 16.05.2019, 17:17   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,867 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Использование modifiedFieldValue() и modifiedField(). Как правильно.
Привет всем.

Попалась ссылка с описанием багов при использовании табличного метода modifiedFieldValue().
https://bkdynamics-ax.blogspot.com/2...ifference.html
Стал проверять, нашлось много интересного.

Axapta 2012 R3 CU13

1. При обычной работе в p-code при вызове super() из modifiedField() идет вызов modifiedFieldValue().

2. В стандартном коде есть места где идет вызов modifiedFieldValue(), соответственно если написать код в modifiedField() то в некоторых сценариях он никогда не вызовется.

3. Если табличка Table1 из иерархии наследования то super() в методе modifiedField() вызывает modifiedField() родительской таблички, и т.д. пока не дойдет вызов до корневой таблички. Super() корневой таблички вызывает Table1.modifiedFieldValue(), чей super() передает вызов в modifiedFieldValue() родительской и.т.д. пока не дойдем до корневой таблички в иерархии.


4. При работе в CIL п.1 не выполняется, что может приводить к отличиям в работе пакетных заданий от обычного запуска через p-code. (Об этом и было сообщение у индусов https://bkdynamics-ax.blogspot.com/2...ifference.html )

5. Пункт 3 работает с багами. Параметр _fieldName в метод modifiedFieldValue() передается как 'UNKNOWN'. Если наследования табличек нет то все ок.


В общем, какая-то жуть.


Вопросы:
а. Для чего был введен метод modifiedFieldValue ?

б. Куда правильнее помещать свой кастомизированный код, в modifiedField или в modifiedFieldValue ?

в. Какой из методов лучше вызывать из кода в случае необходимости. ModifiedField или modifiedFieldValue ?

г. Как быть с п.4 ? Как для CIL кода обойти баг ? (Или это не баг а так и задумано. Тогда в чем смысл ?)

д. Что делать с п.5 ? Как обойти багу ?


е. Как обстоят дела с Dynamics 365 ? Там поведение такое же или другое ?


Для иллюстрации приложил проект.
Класс пакетник, можно запусить в p-code можно в CIL и сравнить результаты в инфологе.

Вызов в p-code
Нажмите на изображение для увеличения
Название: Bad_PCode.png
Просмотров: 166
Размер:	108.8 Кб
ID:	12312

Вызов в CIL
Нажмите на изображение для увеличения
Название: Bad_CIL.png
Просмотров: 206
Размер:	81.3 Кб
ID:	12313
Вложения
Тип файла: zip PKoz_TestModifiedMethod_2012_upgrade_2019_05_16__17_09_All.zip (3.4 Кб, 157 просмотров)
За это сообщение автора поблагодарили: sukhanchik (10), gl00mie (5).