Дополнение для страницы с описанием Обработки ошибок.
- mloony
- Автор темы
- Не в сети
- COM_KUNENA_SAMPLEDATA_RANK1
Меньше
Больше
- Сообщений: 1
- Спасибо получено: 0
12 дек 2014 16:14 #1
от mloony
COM_KUNENA_MESSAGE_CREATED_NEW
Написал небольшое описание блока CATCH.
Возможно текст будет полезен для дополнения текста на странице progress-abl.ru/index.php/abl/30-obrabotka-oshibok
Блок CATCH.
Синтаксис:
block-statements
CATCH error-variable AS [ CLASS ] error-class:
catch-logic
END [ CATCH ].
[ block-end-statement ]
block-statements - описание внешнего блока
Блок CATCH, помещенный внутри блока, обрабатывает происходящие
во внешнем блоке ошибки. CATCH подавляет системные сообщения во внешнем
блоке (не обязательно использовать NO-ERROR).
Блок CATCH можно использовать внутри блоков:
error-variable - переменная объект - экземпляр класса error-class.
Явное описание переменной не требуется.
error-class - один из встроенных классов ошибок:
Экземпляр класса имеет следующие методы и свойства:
Пример:
Возможно текст будет полезен для дополнения текста на странице progress-abl.ru/index.php/abl/30-obrabotka-oshibok
Блок CATCH.
Синтаксис:
block-statements
CATCH error-variable AS [ CLASS ] error-class:
catch-logic
END [ CATCH ].
[ block-end-statement ]
block-statements - описание внешнего блока
Блок CATCH, помещенный внутри блока, обрабатывает происходящие
во внешнем блоке ошибки. CATCH подавляет системные сообщения во внешнем
блоке (не обязательно использовать NO-ERROR).
Блок CATCH можно использовать внутри блоков:
- CATCH block (рекурсивно, блок CATCH внутри блока CATCH),
- DO (в конструкции DO TRANSACTION или DO ON ERROR, UNDO),
- FOR,
- REPEAT,
- В конце файла процедуры (.p procedure file),
- Внутри процедуры,
- Внутри функции определенной пользователем,
- Внутри методов, свойтв, конструкторов и деструкторов,
- ON,
- FINALLY.
error-variable - переменная объект - экземпляр класса error-class.
Явное описание переменной не требуется.
error-class - один из встроенных классов ошибок:
- Progress.Lang.SysError - для системных ошибок,
- Progress.Lang.AppError - для ошибок приложения,
- Progress.Lang.Error - интерфейс реализующий основные методы для классов ошибок.
Экземпляр класса имеет следующие методы и свойства:
- CallStack - свойство хранит стек вызовов в момент возникновения ошибки. (работает если SESSION:ERROR-STACK-TRACE = TRUE),
- NumMessages - свойство хранит колличество сообщений,
- Severity - свойтво для реализации ранжирования сообщений по степени серьезности,
- GetMessage(index) - метод возвращает текст сообщения ошибки,
- GetMessageNum(index) - метод возращает номер сообщения ошибки.
Пример:
DO ON ERROR UNDO:
DO ON ERROR UNDO:
FIND FIRST _user WHERE _user._Userid EQ "000000000" NO-LOCK.
MESSAGE _user._User-name.
CATCH eError AS Progress.Lang.Error:
MESSAGE "Нашли ошибку, передаем родителю." VIEW-AS ALERT-BOX.
UNDO, THROW eError.
/* UNDO - откатывает выполнение блока
THROW - "передает" ошибку родительскому блоку. */
END CATCH.
END. /* DO ON ERROR UNDO */
/* Сгенерированная оператором THROW ошибка обрабатывается в блоке родителе */
CATCH eError AS Progress.Lang.Error:
MESSAGE "Родитель нашел ошибку, передает родителю дальше." VIEW-AS ALERT-BOX.
UNDO, THROW eError. /* И ошибка передается следующему родителю */
END CATCH.
END. /* DO ON ERROR UNDO */
CATCH eError AS Progress.Lang.Error:
MESSAGE "Самый старший ее обработал." VIEW-AS ALERT-BOX.
MESSAGE COLOR "Bright-Red" eError:GetMessage(1) VIEW-AS ALERT-BOX.
/* Блоков CATCH много не бывает :)
Во вложенном блоке нельзя использовать имя объект такое же как и во внешнем блоке CATCH*/
CATCH internaleError AS Progress.Lang.Error:
UNDO, THROW internaleError.
END CATCH.
END CATCH.
FINALLY:
MESSAGE "Это сообщение появится последним в любом случае." VIEW-AS ALERT-BOX.
CATCH eError AS Progress.Lang.Error:
UNDO, THROW eError.
END CATCH.
END FINALLY.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- alex_sar
- Посетитель
16 дек 2014 09:41 #2
от alex_sar
COM_KUNENA_MESSAGE_REPLIED_NEW
Добрый день! Спасибо за дополнение. Добавил Вас в группу Editor, что должно позволить Вам самостоятельно внести Ваши дополнения с сохранением Вашего авторства.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Время создания страницы: 0.153 секунд