Я попытался отправить jcl из программы cics. Задание было выполнено без проблем. Токен ID был возвращён, задание выполнено, и класс вывода доступен в спуле. Затем я попытался прочитать класс вывода задания из cics, но был возвращён код состояния 13 (не найдено). Токен ID не возвращается! Может кто-нибудь помочь? Можете ли вы прислать пример кода, который использует команды exec cics open input и exec cics read? Большое спасибо.
Ответ
Конечно! Давайте разберемся с вашей проблемой и предоставим код для работы с CICS, чтобы вы могли открыть и прочитать файл в спуле.
Проблема с CICS и спул-файлом
Ошибка 13 (not found), которую вы получаете, скорее всего, указывает на то, что CICS не может найти указанный спул-файл. Это может быть связано с тем, что вы не передаете правильный идентификатор токена, использованного при отправке JCL, или файл еще не доступен для чтения.
Для начала, убедитесь, что:
- Вы правильно получаете и сохраняете идентификатор токена после отправки работы.
- Результаты работы JCL доступны в момент, когда вы пытаетесь их прочитать из программы CICS.
- Ваши права на доступ к спулу настроены корректно.
Пример кода для работы с exec CICS
Вот пример, который показывает, как вы можете использовать команду EXEC CICS OPEN INPUT
и EXEC CICS READ
для чтения спул-файла:
IDENTIFICATION DIVISION.
PROGRAM-ID. ReadSpoolFile.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
CICS IS CICS.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-TOKEN-ID PIC X(8).
01 WS-SPOOL-FILE-NAME PIC X(20) VALUE 'YOUR_SPOOL_FILE_NAME'.
01 WS-RECORD PIC X(80).
01 WS-STATUS PIC X(4).
PROCEDURE DIVISION.
MAIN-PARAGRAH.
EXEC CICS
OPEN INPUT WS-SPOOL-FILE-NAME
ID(WS-TOKEN-ID)
RESP(WS-STATUS)
END-EXEC
IF WS-STATUS NOT = '0000'
DISPLAY 'Ошибка открытия файла: ' WS-STATUS
EXIT PROGRAM
END-IF
PERFORM UNTIL WS-STATUS = 'E37' *> E37 - конец файла
EXEC CICS
READ WS-SPOOL-FILE-NAME
INTO WS-RECORD
RESP(WS-STATUS)
END-EXEC
IF WS-STATUS = '0000'
DISPLAY 'Считанная запись: ' WS-RECORD
END-IF
END-PERFORM
EXEC CICS
CLOSE WS-SPOOL-FILE-NAME
RESP(WS-STATUS)
END-EXEC
IF WS-STATUS NOT = '0000'
DISPLAY 'Ошибка закрытия файла: ' WS-STATUS
END-IF
EXIT PROGRAM.
END PROGRAM ReadSpoolFile.
Пояснение коду
- TOКЕН ID: При открытии файла запоминаем токен в переменной
WS-TOKEN-ID
, чтобы использовать его в будущем, если это потребуется. - Чтение записей: Мы читаем записи в цикле до тех пор, пока не достигнем конца файла (код ошибки E37).
- Закрытие файла: В конце программы обязательно закройте файл, чтобы освободить ресурсы.
Рекомендации
- Проверьте, верно ли указано имя вашего спул-файла.
- Убедитесь, что ваша работа в спуле действительно выполняется и завершена.
- Проверьте сообщения об ошибках, чтобы лучше понять, что не так.
Если у вас возникнут дополнительные вопросы или понадобится помощь, не стесняйтесь обращаться! Удачи в работе с CICS!