Передача значения в программу Cobol через Parm с использованием данных в последовательном файле

#cobol #jcl

#cobol #jcl

Вопрос:

Я настраиваю JCL, который будет передавать значение даты, поступающее из последовательного файла (имеет одну запись) (пример 20190320), в parm, как показано ниже:

//ШАГ 1 EXEC PGM=ABC,PARM=’20190320′

Я пытаюсь передать значение PARM со значением даты, содержащимся внутри последовательного файла.

Ответ №1:

Предполагая, что ваша программа COBOL уже содержит инструкции по извлечению информации, переданной из JCL с помощью PARM , вы можете использовать PARMDD параметр в сочетании с инструкцией DD для выполнения задачи. Оператор DD предназначен для определения последовательного файла с PARM данными.

 //STEP1    EXEC PGM=ABC,PARMDD=MYINPUT
//MYINPUT  DD DISP=SHR,DSN=MY.PARM.INPUT
//SYSOUT   DD SYSOUT=*
  

Dataset MY.PARM.INPUT может иметь значение date.

В принципе, вы не можете передать более 100 байт данных, используя параметр PARM. PARMDD обычно предпочтительнее, если вы хотите передать данные > 100 байт.

Надеюсь, это поможет.

Ответ №2:

Вы не можете сделать это в одном задании. Опции включают

  • Изменение программы ABC для чтения из файла
  • Написание программы /rexx для чтения файла и вызова программы ABC
  • Прочитайте файл и сгенерируйте новое задание, которое вызывает ABC с датой, которую вы только что прочитали. Это можно было бы сделать в скрипте rexx.
  • Некоторые системы планирования могут поддерживать это.

Пожалуйста, предоставьте немного больше информации

  • Какую систему планирования использует ваша компания
  • Является ли программа ABC локально написанной программой??? это можно изменить
  • Является ли задание частью пакетного потока, запускаемого автоматически или отправляемого пользователем.

Отправка вручную

Если задание отправляется вручную, вы могли бы

  • Напишите скрипт Rexx, используя адаптацию файла ISPF для генерации и отправки JCL
  • Макрос Rexx для обновления и отправки JCL

Макрос редактирования ISPF

ты мог бы

 // set DATE=$Date$ 
//STEP1 EXEC PGM=ABC,PARM='amp;date' 
  

в журнале JCL
и попросите макрос редактирования rexx

  • прочитайте файл
  • замените все на amp;date
  • Я бы использовал те же переменные, что и Controlm

С JCL

 // set DATE=$Date$ 
//STEP1 EXEC PGM=ABC,PARM='amp;date' 
  

макрос редактирования будет выглядеть следующим образом

    /* rexx */
  ADDRESS ISREDIT 'macro'
  Address TSO "EXECIO 1 DISKR indd"
  pull date
  ADDRESS ISREDIT "r $date$" date 
  ADDRESS ISREDIT "cancel"
  

Макрос редактирования должен находиться в библиотеках SYSPROC или SYSEXEC. Если
Макрос называется ChgDate, вы бы просто

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

1. Я не хочу вносить изменения в программу ABC на Cobol. Задание отправляется вручную в тесте. Я не планирую планировать это в рабочей среде. (В рабочей среде значение поступает через переменные Control-M). Моя цель — уменьшить нагрузку на передачу значений символьных параметров вручную при запуске в тесте.

2. Я бы написал скрипт REXX, который считывает файл и создает JCL для программы COBOL или динамически выделяет все необходимые DDS и вызывает его.