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