Замечание к документу "Что ж меня всё посылают-то? :) Не то имеется ввиду (+ идея в атаче)"   >>>   
Тема: Спасибо за ответы :) Продолжаем обсуждение (+)

Создан:Vlad Sh 08/31/2006 02:45 PM
Модифицирован:Vlad Sh 08/31/2006 09:01 PM
Папка:
06. Разработка Notes-приложений
Тип сообщения:
Нужна информация

Сообщение:
Andrew Aksenov
Я выложил обрезок того кода (саму идею), который есть и работает.
Доп. параметры здесь действительно не нужны, т.к. информацию о состоянии 'важных' объектов/переменных на момент ошибки я также пишу в лог другими функциями непосредственно перед вызовом WriteError.

Mitka Akulov
> когда в любой момент можно получить весь стек вызовов\вызывающую процедуру и т.д.,
Дим, посоветуй, как (если не вести этот стек самому в виде списка; или не определять их, поднимаясь вверх в вызывающие процедуры при ошибке)?

Ivan Tsibanenko
> Почему нельзя вместо «Msgbox ERRTEXT, 48, "Lotus Notes..."» написать «Error 12345, ERRTEXT» ?
Потому что в первый вызов WriteError (т.е. где произошла ошибка) мне нужно:
- и вывести сообщение об ошибке пользователю (Msgbox);
- и выйти в обработчик ошибок вызывающей процедуры - для этого я сам генерю тот Error ErrNumber, "Процесс прерван!" и предварительно забиваю его On Error Goto 0.
Если сделать так как предлагаете Вы, то я либо не выдам сообщения пользователю, либо не выйду в вызывающую процу... поэтому это сделано отдельно (сам об этом думал, но по другому не получается - это видно если погонять этот функционал в отладчике). Тем более я сам командую выходить ли мне вверх или нет последним параметром WriteError.

Вопрос мой собственно и заключался в том, как убрать этот параметр. А убрать его можно если автоматом определять, есть ли в вызывающей проце обработчик ошибок или нет (это уже проехали). Есть вариант передавать эту инфу (есть обработчик или нет) доп. процедурой при входе в каждую функцию, т.е. самому создавать стек этой инфы в виде списка, но это неудобно, т.к. во-1: придётся это вставлять везде, а во-2: может произойти рассогласование... например в опред. проце убрали/добавили обработчик, а инфу об этом поменять забыли...

Сейчас у меня это всё работает как на действии 2 примера, т.е. я так переделал все скрипты, что повторное сообщение (как на кнопке 3) не выскакивает.
С одной стороны хочется как лучше, а с другой - это дисциплинирует :) т.е. заставляет ставить обработчики в необходимых местах.


Ещё вопросы по ходу (неохота создавать ещё топик, т.к. это как раз в тему).
Во WriteError есть CASE, где обрабатываются ошибки 1111, 1222 (пользовательские), так вот одна - это критические ошибки (к разработчику), а другая - ошибки в настройках и проч. (к администратору).
Мне нужно критические ошибки отсылать разработчику, то бишь себе, но не у всех заказчиков сервера выставлены в инет. Можно ли это как-то ПРОГРАММНО определить? Т.е. можно ли что-то отправлять в данный момент или не стоит...
Ещё вопрос: есть своя база-лог. Но, к примеру, я не смог к ней подключиться (по каким причинам - сейчас не важно), в таком случае нужно записывать эту ошибку в лог сервера. Каким образом можно ПРОГРАММНО определить имя лога сервера и путь к нему? Просто писать log.nsf не подходит, т.к. наименование и путь могут изменить в notes.ini сервера, бывает и не такое...

Буду очень благодарен за любую инфу/ссылкам!


P.S. Про "Lotus Notes..."
Когда пишешь Error..., то LN выводит надпись без многоточия. Так писать - это старая привычка, так я всегда отличал свои, сгенерированные (к разработчику) ошибки от критических лотусовских. Для админстких там другие заголовки.

Иерархия документов данной дискуссии:
Возможно ли программно определить, есть ли обработчик ошибок в вызывающей процедуре? (Vlad Sh) (24.08.2006 15:31:28)
.... имхо, нет, обработчики ошибок - это контракт, т.е. устное соглашение. определить имя вызывающей процедуры можно GetThreadInfo(LSI_THREAD_CALLPROC) GetThreadInfo - документирована (-) (Mitka Akulov) (24.08.2006 15:36:17)
........ Всем спасибо. Жаль однако... (Vlad Sh) (28.08.2006 18:51:34)
............ 1. может и есть клоны бейсиков, где такое возможно. не встречал. 2. имхо, любая "нормальная" обработка ошибок - это контракт. (+) (Mitka Akulov) (28.08.2006 19:43:00)
................ Для того, чтобы корректно выходить в вызывающие процедуры (+) (Vlad Sh) (29.08.2006 15:47:18)
.................... Не нужно выводить дополнительное сообщение пользователю. Таким сообщением будет сама ошибка, её текст (см. Help по "Error"). (+) (Ivan Tsibanenko) (29.08.2006 16:57:40)
........................ Что ж меня всё посылают-то? :) Не то имеется ввиду (+ идея в атаче) (Vlad Sh) (29.08.2006 18:31:03)
............................ Спасибо за ответы :) Продолжаем обсуждение (+) (Vlad Sh) (31.08.2006 14:45:20)
................................ я коротко (+) (Mitka Akulov) (31.08.2006 15:01:15)
............................ Видимо, я всё ещё чего-то недопонимаю... Почему нельзя вместо «Msgbox ERRTEXT, 48, "Lotus Notes..."» написать «Error 12345, ERRTEXT» ? (-) (Ivan Tsibanenko) (31.08.2006 8:27:13)
............................ Думаю лучше добавить в процедуру WriteError еще несколько параметров ... (Andrew Aksenov) (31.08.2006 5:30:08)
................................ хм, или я торможу, или Вы всю эту ветку не прочли. зачем передавать "это" как параметры, когда в любой момент можно получить весь стек вызовов\вызывающую процедуру и т.д., (Mitka Akulov) (31.08.2006 8:09:48)
.... lsi_info(13) (+) (Gleb D. Nozdrachev; InterTrust) (25.08.2006 9:41:30)
........ Глеб, а для чего нуна lsi_info, если есть GetThreadInfo ? - может она что-то лучше больше умеет?(-) (Mitka Akulov) (25.08.2006 10:31:42)
............ Именно (+) (Gleb D. Nozdrachev; InterTrust) (25.08.2006 11:00:51)
................ нашел, не вдохновило, куча практически бесполезной инфы. Но, однако, спасибо. Updated: не польза есть ;) (Mitka Akulov) (25.08.2006 11:42:29)
.................... Стек. :) (-) (Gleb D. Nozdrachev; InterTrust) (25.08.2006 12:38:38)
........................ да это понятно, ну и там про память еще туда-сюда, остальное, лажа какая-то (Mitka Akulov) (25.08.2006 13:22:25)
............................ Будем надеяться на лучшее, м.б. когда-нибудь вместо лажи что-то хорошее появится ;) (-) (Vlad Sh) (29.08.2006 18:34:17)
................ Красота! Спасибо!!! тпху! Это был ответ на: я коротко (+) (Mitka Akulov) (31.08.2006 16:01:15) (Vlad Sh) (31.08.2006 15:10:40)
.................... Кстати, кто-нибудь заметил как работает Lsi_info(14) в агентах на сервере? (Vlad Sh) (10.03.2007 15:48:40)
........................ "Кто-нибудь" - да :) (+) (Gleb D. Nozdrachev; NotesSrv400) (12.03.2007 8:59:47)
................ Вроде уже больше 255. Спасибо! (+) (Andrew S Golembiovskiy) (31.08.2006 15:24:50)


Разработчикам и администраторам: курсы, книги, сертификация