Я пытаюсь заставить RPG-программу сообщать более конкретные детали, когда вызов программы внутри нее идет не так, как надо. Исключение, которое я хочу отслеживать, не имеет ничего общего с плохой логикой программы, скажем, с делением на ноль. Я хочу проверить, произошел ли сбой вызова программы из-за проблемы с полномочиями или из-за того, что программа не найдена. Индикатор на 73-74 может только сказать, что есть исключение, а не его причина. Есть ли какие-либо возможные средства для обнаружения этого в RPG, как оператор MONMSG в программе CL?
Можно ли перехватить сообщение об ошибке, выдаваемое при вызове программы в программе RPG?
Ответы (2)
Существует два класса ошибок: Program и File. Ошибки программы — это такие вещи, как деление на ноль, ошибка CALL и т. д. Полный список находится по адресу Коды состояния программы. Эти коды ошибок очень грубые — если вы ЗВОНИТЕ PGMX и возникает проблема с правами доступа, вы получаете 00211. Если программы нет в списке библиотек, вы получаете 00211. Если программа завершается ненормально (скажем, из-за управляющего сообщения ) вы получите 00211. Если вам нужно узнать, почему CALL не удалось, вам нужно запросить журнал заданий / очередь программных сообщений.
Для файловых ошибок информация о файле структура запишет код ошибки. Ошибки файлов — это такие вещи, как нарушение реляционных ограничений или постоянная ошибка ввода-вывода. Опять же, эти коды состояния файла не очень детализированы, и если вам нужно знать, что у вас произошел сбой полномочий, вам нужно будет узнать это из журнала заданий.
Одно замечание об ошибках файлов. При написании собственного обработчика ошибок (ошибка исключения файла подпрограмма), вы должны знать, что этот обработчик не становится активным до тех пор, пока ПОСЛЕ того, как цикл не откроет файлы. Это означает, что если вы позволите циклу открывать файлы, вы не сможете отловить такие ошибки, как «файл отсутствует в списке библиотек» или «не авторизован для доступа к файлу». Чтобы отловить ошибки, возникающие при открытии, вам нужно открыть файлы самостоятельно, через опкод OPEN. Не забудьте их ЗАКРЫТЬ.
Используйте операции обработки ошибок и/или подпрограмма исключения программы и структура данных состояния программы для обнаружения и интерпретации определенных ошибок.