|
![]() |
#1 |
Участник
|
В аксапте была табличка лога sysutilelementslog или как то так.
Там логировалис используемые юзером формы и очеты. Несложной доработкой можно обобщить до классов. Тем самым еще сузить область поисков. |
|
![]() |
#2 |
Участник
|
Цитата:
Несложной это какой? за созданием форм слежение из \xClassFactory\formRunClass сделано. Как бэ системой поддерживается.. А класс на что зацепится? |
|
![]() |
#3 |
Участник
|
Я в 4-ку перетаскивал из 2009-й
Еще добавил тут \Classes\RunBase\new \Classes\ClassFactory\createClass помогает для Runbase а также для всего что по менюитем запускается. Конечно это не все классы охватывает но очень многое. Также можно вот это применить это одна из идей, которую я хочу пропихнуть в АХ 2012. Ошибка с транзакциями! |
|
![]() |
#4 |
Участник
|
В итоге xSession::xppCallStack() оказался совершенно бесполезным в поиске проблемы.
Самым простым и действенным получилось в onEventGoingIdle показать модальное окно после проверки ttsLevel. С третьей попытки пользователь таки прочитал сообщение и позвонил) Проблема была на форме LedgerJournalTable. Ктото у нас на modified одного из полей сделал LedgerJournalTable_ds.write(). А во write на форме: X++: ttsbegin; super(); journalFormTable.datasourceWritePost(); ttscommit; По мне write() в коде не выглядит каким то уж криминалом. А вот реакция системы с бросанием кода, но без отката транзакции - непонятно.. Предполагается что? Написать еще дополнительно проверку validateWite перед wite? |
|
|
За это сообщение автора поблагодарили: S.Kuskov (5). |
![]() |
#5 |
Участник
|
|
|
![]() |
#6 |
Участник
|
Да все это выглядит как ересь. Затыкание багов(фитчей) ядра. По мне LedgerJournalTable_ds.write() уже должно включать весь сервис. Оно и включает, но как-то "не так". Или должна быть функция у DS которая аналог Ctrl+S.
Кстати вместо LedgerJournalTable_ds.write() я написал element.task(#taskSave) и все заработало аналогично Ctrl+S. Тогда сначала formRun запускает validateWrite, а потом только write. И тогда все срабатывает более менее адекватно. Но по итого приходится разобраться зачем все это писали, и видимо вынесу ваще все что хотели сделать на update таблицы. И дело с концом.. Но в любом случае, работа исключений в validateWrite на форме - подкинула нежданчик.. Последний раз редактировалось Perc; 01.11.2021 в 14:32. |
|
|
За это сообщение автора поблагодарили: Logger (3). |
![]() |
#7 |
Участник
|
|
|
![]() |
#8 |
Участник
|
Цитата:
исключение типа info, выполнение обрывается, транзакция не откатывается системой. Но при этом если запихать вызов ds.write в try catch - то в catch ловится ttslevel уже ноль. Т.е. чтобы система сама откатила транзакцию достаточно поместить вызов в try. Это в 4-ке. В 12-ке проверил - такой проблемы нет. Точно в таком же случае - транзакция абортируется в любом варианте. Посмотрел стандартный sys-код в 4ке в этой же форме. MS проблему учитывали и писали с validateWrite: X++: void fieldModifiedBlockUserGroupId() { if (! journalTable_ds.validateWrite()) return; journalTable_ds.write(); journalTable_ds.refresh(); } |
|
|
За это сообщение автора поблагодарили: sukhanchik (2). |
![]() |
#9 |
Участник
|
Цитата:
Сам факт проверки заполнения этих полей происходит автоматически при вызове validateWrite(). Внутри super().Т.е. перехватить эту проверку - невозможно Если надо перехватить проверку на mandatory, то это только "в лоб" до вызова validateWrite() или внутри до вызова super(). Т.е. тупо так X++: if (!common.Field1) { warinig("Укажите значение поля"); } else if (common.vaidateWrite()) { common.write(); }
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... Последний раз редактировалось Владимир Максимов; 03.11.2021 в 10:04. |
|
![]() |
#10 |
Участник
|
Цитата:
А вот это и странно. Разве там нет обработки того, что вернет super() ? Должно быть как-то так X++: boolean validateWrite() { boolean ret; ret = super(); // Внутри проверка полей со свойством mandatory = Yes if (ret) { // здесь пользовательские проверки } return ret; }
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
![]() |
#11 |
Участник
|
Цитата:
Это не исключение - это инфолог. Просто сообщение.
Последний раз редактировалось Perc; 03.11.2021 в 11:06. |
|
Теги |
стек вызовов, транзакции |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|