|
28.02.2011, 07:47 | #1 |
Участник
|
Информация об ошибке пакетного задания
Доброго времени суток.
Как в AX2009 можно получить подробную информацию о причинах ошибки, когда пакетное задание отображается в журнале пакетных заданий со статусом "Ошибка"? Спасибо. Версия ядра 5.0.1000.52 Последний раз редактировалось Evgenius; 28.02.2011 в 07:49. |
|
28.02.2011, 08:50 | #2 |
MCT
|
Основное / Запросы / Пакетное задание, далее кнопка Журнал пакетных заданий, далее кнопка Журнал
__________________
Sometimes there is a moment as you are awakening - when you become aware of the real world around you, - but you are still dreaming. - You may think you can fly but you do better not try. |
|
|
За это сообщение автора поблагодарили: kornix (3). |
28.02.2011, 13:14 | #3 |
Участник
|
Цитата:
Это означает, что я заглядывал в журнал пакетных заданий. Меня интересует хоть что-то, кроме слова "Ошибка" (уточню: я даже видел и нажимал кнопку "Журнал", при нажатии ничего не происходит) Последний раз редактировалось Evgenius; 28.02.2011 в 13:18. |
|
28.02.2011, 13:18 | #4 |
MCP
|
Цитата:
Т.е. кнопка "Журнал" - имеется ввиду не журнал пакетных заданий, она выводит лог в infolog. Упс... прошу прощения, опередили, пропустил :-/ |
|
28.02.2011, 12:22 | #5 |
Участник
|
Удобнее будет модернизировать метод serverProcessFinishedJobs() в классе BatchRun и получать содержимое информационного сообщения из кнопки "Журнал" сразу в уведомлении об ошибке, которое приходит на электронную почту или во всплывающем окне. Чтоб лишний раз не лазить по формам пакетных заданий.
__________________
Дмитрий |
|
28.02.2011, 13:16 | #6 |
Участник
|
Цитата:
Сообщение от Damn
Удобнее будет модернизировать метод serverProcessFinishedJobs() в классе BatchRun и получать содержимое информационного сообщения из кнопки "Журнал" сразу в уведомлении об ошибке, которое приходит на электронную почту или во всплывающем окне. Чтоб лишний раз не лазить по формам пакетных заданий.
Последний раз редактировалось Evgenius; 28.02.2011 в 13:23. |
|
28.02.2011, 13:26 | #7 |
MCP
|
|
|
28.02.2011, 13:37 | #8 |
Участник
|
|
|
28.02.2011, 13:43 | #9 |
MCP
|
Цитата:
Попробуйте запустить пакет вручную как "частный" пакет от себя, поставьте точку останова в методе pack и unpack вашего класса и посмотрите корректно ли сохраняются параметры при запаковке и распаковке класса. P.S. А класс который не оставил сообщения стандартный или свой? |
|
28.02.2011, 13:44 | #10 |
Участник
|
|
|
28.02.2011, 16:20 | #11 |
Участник
|
После очередного перезапуска сервера (третьего) и ручного изменения статуса на "В ожидании" задание запустилось.
Теперь имеет место знакомое дурацкое сообщение "Ошибка вызова статического метода ClrObject", которое может означать очень много что. Нет ли способа вот об этой ошибке "вызова метода ClrObject" узнавать какие-либо подробности? И заодно уже вопрос: как отлаживать код, выполняющийся в пакетных заданиях - только путем создания джоба (job) и его запуска в клиенте, или можно напрямую? |
|
28.02.2011, 17:11 | #12 |
MCP
|
Цитата:
Основное - Переодические операции - Пакет - Обработка, в диалоге указываете выбранную пакетную группу и ставите галку "частный". А вот по поводу текста сообщения, при его создании у вас наверняка появилась запись в системных сообщениях, если найти его по дате и времени - увидите более полное содержимое ошибки. Более полное описание из Ax получить можно, но тут для каждого com придется писать свой обработчик ошибок, и не для каждого получится.. Например, тут обсуждалась похожая ошибка, ее причину установить достаточно проблематично. |
|
|
За это сообщение автора поблагодарили: Poleax (2), Evgenius (1). |
28.02.2011, 17:35 | #13 |
Участник
|
Цитата:
Сообщение от kornix
Отлаживать код пакетных заданий можно при помощи частных пакетов: При запуске ставите галку "Частный", указываете пакетную группу, затем:
Основное - Переодические операции - Пакет - Обработка, в диалоге указываете выбранную пакетную группу и ставите галку "частный". А вот по поводу текста сообщения, при его создании у вас наверняка появилась запись в системных сообщениях, если найти его по дате и времени - увидите более полное содержимое ошибки. Более полное описание из Ax получить можно, но тут для каждого com придется писать свой обработчик ошибок, и не для каждого получится.. Например, тут обсуждалась похожая ошибка, ее причину установить достаточно проблематично. А насчет остального: CLR и COM вещи разные. И в журналах windows мне ни разу не удавалось ничего найти.. Там ошибки вызова объектов CLR точно отражаются, не читали чего-ндь про это? С одной стороны, вроде бы должны - это ведь исключения в приложении .Net, но почему-то ни разу не отыскалось ни фига. Последний раз редактировалось Evgenius; 28.02.2011 в 17:38. |
|
28.02.2011, 17:55 | #14 |
Участник
|
При исполнении CLR кода в аксапте перехват ошибок CLR происходит несколько иначе чем ошибки X++. Поэтому в логах пакетного задания не будет никакой информации, лишь сама пакетная задача переводится в статус "ошибка".
При использовании вызовов CLR методов придется всегда, в явном выиде ошибки перехватывать и парсить, иначе понять причины ошибки нельзя. Вот пример, как получить описание ошибки вызванной исполнением CLR кода: X++: System.Exception exception; ; try { ... CLR } catch (Exception::CLRError) { exception = CLRInterop::getLastException(); while (exception) { error(exception.get_Message()); exception = exception.get_InnerException(); } throw error("Операция отменена"); } |
|
|
За это сообщение автора поблагодарили: Evgenius (1). |
28.02.2011, 18:07 | #15 |
Участник
|
Цитата:
Сообщение от someOne
При исполнении CLR кода в аксапте перехват ошибок CLR происходит несколько иначе чем ошибки X++. Поэтому в логах пакетного задания не будет никакой информации, лишь сама пакетная задача переводится в статус "ошибка".
При использовании вызовов CLR методов придется всегда, в явном выиде ошибки перехватывать и парсить, иначе понять причины ошибки нельзя. Вот пример, как получить описание ошибки вызванной исполнением CLR кода: X++: System.Exception exception; ; try { ... CLR } catch (Exception::CLRError) { exception = CLRInterop::getLastException(); while (exception) { error(exception.get_Message()); exception = exception.get_InnerException(); } throw error("Операция отменена"); } Пример - то, что нужно. |
|
28.02.2011, 17:41 | #16 |
Участник
|
Цитата:
X++: try { } catch (Exception::CLRError) { throw error( AifUtil::getClrErrorMessage()); }
__________________
Дмитрий |
|
|
За это сообщение автора поблагодарили: kornix (1), Evgenius (1). |
28.02.2011, 17:50 | #17 |
MCP
|
|
|
28.02.2011, 18:12 | #18 |
Участник
|
|
|
|
|