|
![]() |
#1 |
Участник
|
еще вариант - в update датасурса перед супером сравнивать этих значения полей с предыдущими (orig) и запрашивать коммент на все сразу
|
|
![]() |
#2 |
Боец
|
|
|
![]() |
#3 |
Участник
|
Цитата:
Я однажды такую ошибку допускил и меня EVGL за это страшно отругал ![]() Не повторяйте чужих ошибок... |
|
![]() |
#4 |
Участник
|
|
|
![]() |
#5 |
Участник
|
2 belugin: Коммент должен быть к каждому полю свой.
2 lev: Забыл сказать версия 2.5. В 2.5 нет метода modifiedField() на таблице! Даже если бы и был, то не ясно какие именно действия нужно выполнить. 2 ZVV: Такой вариант допустим, но не хотелось бы например в справочнике клиентов создавать какое-то поле для временного хранения комментов - как-то не очень красиво. Но вариант! 2 DSPIC: Ща попробую - отпишу. Всем спасибо за ответы! |
|
![]() |
#6 |
Участник
|
2 DSPIC: Попробовал! Во-первых код какой-то слишком большой получается (т.к. полей, которые нужно проверять около 15) - да и как-то не оптимально каждый раз проверять изменилось ли что-либо из них, но самое главное что validateWrite() вызывается один раз для всех полей - если например использовать для ввода комментария диалог, то после сохранения изменений в строке выскакивает сразу друг за другом несколько (столько, сколько полей мы изменили) диалоговых окон и не ясно куда какие комментарии вводить. Хотелось бы, чтобы запрос комментария выскакивал сразу после изменения поля (каждому полю свой).
|
|
![]() |
#7 |
Участник
|
Цитата:
X++: container loggedFields = [ fieldNum(T1, F1), fieldNum(T1, F2) ... ]; for(i=1; i<=conLen(loggedFields); i++) { fieldId = conPeek(loggedFields, i) if (record.(fieldId)!=record.orig().(fieldId)) changedFields += fieldId; } Цитата:
- да и как-то не оптимально каждый раз проверять изменилось ли что-либо из них, но самое главное что validateWrite() вызывается один раз для всех полей - если например использовать для ввода комментария диалог, то после сохранения изменений в строке выскакивает сразу друг за другом несколько (столько, сколько полей мы изменили) диалоговых окон
X++: Dialog d = new Dialog('comnnmants'); for(i=1;i<=conLen(changedFields);i++) { d.addField(typeId(Commant), fieldId2PName(record.table, conPeek(fields, i)); } Можно добавить новый таб с гридом с комментами по изменениями (хранить во временной таблице) |
|
![]() |
#8 |
Боец
|
Да, в этом русле, только для универсальности, loggedFields сделать не хардкодом в контэйнере, а создать на таблице группу и добавлять туда поля для логирования. Тогда решение будет легко мигрироваться а список полей для логирования легко кастомизироваться.
|
|