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 сразу попадет ваше сообщение.
Последний вариант приемлем, если хочется сообщить пользователю об ошибке во всех подробностях (которые известны, зачастую, только в том месте, где она возникла).
Итог:
в Аксапте отсутствует иерархия исключений