Существует два вида процедуры, каталогизированная процедура и процедура в потоке.
Каталогизированная процедура хранится в библиотечном элементе отдельно от исполняемого JCL. Эта отдельная библиотека расположена системой, просматривающей список таких библиотек, определенных ей в SYS1.PARMLIB
. Этот список может быть переопределен оператором JCLLIB
в исполняемом JCL. Вероятно, ваш магазин имеет стандартное место, где хранятся каталогизированные процедуры.
Процедуры In-Stream расположены в том же члене библиотеки, что и ваш JCL-исполнитель. Оператор PROC
должен находиться между вашей службой и оператором EXEC
, который выполняет именованный процесс. Процедура в потоке должна заканчиваться оператором PEND
.
Обычно используются символические параметры с процедурами, что делает их более гибкими.
Вы движетесь в правильном направлении ...
[jobcard is here]
//MYPROC PROC
//REPORTS EXEC PGM=IKJEFT01,PARM='SDSFINFO FTPSRV01 &OWNER &HIQUAL'
//SYSEXEC DD DSN=[rexx.is.here],DISP=(SHR,PASS)
//SYSTSPRT DD SYSOUT=A,HOLD=YES
//SYSTSIN DD DUMMY
// PEND
//*
//MYSTEP EXEC PROC=MYPROC,HIQUAL=ABC,OWNER=XYZ
... где материал в квадратных скобках должны быть предоставлены Вами. Это приведет к MyProc выполняется, как если бы вы жёстко ...
//REPORTS EXEC PGM=IKJEFT01,PARM='SDSFINFO FTPSRV01 XYZ ABC'
//SYSEXEC DD DSN=[rexx.is.here],DISP=(SHR,PASS)
//SYSTSPRT DD SYSOUT=A,HOLD=YES
//SYSTSIN DD DUMMY
Иногда прок кодируются со значениями по умолчанию для символьных параметров ...
//MYPROC PROC ENV='PROD'
//REPORTS EXEC PGM=IKJEFT01,PARM='SDSFINFO FTPSRV01 &OWNER &HIQUAL'
//SYSEXEC DD DSN=&ENV..REXX,DISP=(SHR,PASS)
//SYSTSPRT DD SYSOUT=A,HOLD=YES
//SYSTSIN DD DUMMY
... а иногда значение по умолчанию является документация ...
//MYPROC PROC ENV='SPECIFY_PROD_OR_TEST_OR_QA'
//REPORTS EXEC PGM=IKJEFT01,PARM='SDSFINFO FTPSRV01 &OWNER &HIQUAL'
//SYSEXEC DD DSN=&ENV..REXX,DISP=(SHR,PASS)
//SYSTSPRT DD SYSOUT=A,HOLD=YES
//SYSTSIN DD DUMMY
... принудительное выполнение JCL для обеспечения значения или ошибки JCL во время выполнения.
Обратите внимание, что с помощью инструкции SET
вы можете использовать символические параметры, не требуя процедуры, каталогизации или в потоке. Это ...
[jobcard is here]
// SET HIQUAL=ABC
// SET OWNER=XYZ
//*
//REPORTS EXEC PGM=IKJEFT01,PARM='SDSFINFO FTPSRV01 &OWNER &HIQUAL'
//SYSEXEC DD DSN=[rexx.is.here],DISP=(SHR,PASS)
//SYSTSPRT DD SYSOUT=A,HOLD=YES
//SYSTSIN DD DUMMY
//*
... даст те же результаты, что и в первом примере, без использования proc.
Как правило, существуют стандарты магазинов, к которым вы, как ожидается, будете придерживаться. Часто в магазинах мейнфреймов есть выделенная группа, функция которой заключается в том, чтобы запускать потоки производственных заданий, планируя сотни или тысячи таких потоков рабочих мест в день.
Официально то, что вы описали как _заменяемые параметры_, называются ** символическими параметрами **. Не путать с параметрами JCL (positional и Keyword), а также не путать с параметрами, переданными программам, написанным для чтения поля PARM оператора PGM. – MikeT
@MikeT спасибо, я изменил ответ за ваш комментарий. – cschneid