четверг, 27 сентября 2007 г.

X++: исключения, часть 1

[id:49]

Механизм исключений в Аксапте тесно связан с подсистемой Infolog. А синтаксис идентичен C++. Попробуем простейшее: static void BLG49_TryExceptions1() { try { throw Exception::Info; } catch(Exception::Error) { print 'Exception::Error'; } print 'End of Job'; pause; } Какой будет результат? Никакой. Причина: блок "catch(Exception::Error)" не будет ловить исключение типа "Exception::Info". А я то раньше наивно предполагал о наличии какой-то иерархии исключений с базовым классом и прочими вещями, как это сделано в .NET!
Но нет. В данном случае мой код не отлавливает исключение "Exception::Info", и оно попадает в лапы Аксапты. Это значит, что до строки "print ’End of Job’" дело не дойдет.

Кстати, с таким же успехом вместо: throw Exception::Info; вы могли бы написать: throw info('Information exception'); Во втором случае, в Infolog сразу попадет ваше сообщение.
Последний вариант приемлем, если хочется сообщить пользователю об ошибке во всех подробностях (которые известны, зачастую, только в том месте, где она возникла).

Итог:

в Аксапте отсутствует иерархия исключений

Комментариев нет: