我尝试创建一个向QBATCH提交JOB的命令,之后我想获得下一个命令
返回的JOB编号我尝试RTVJOBA,但它不正确
RTVJOBA检索我当前的USER JOB而提交的命令有不同的作业号
请帮我解决
我在这里附加了代码
PGM
DCL VAR(&TEMPFILE) TYPE(*CHAR) LEN(10)
DCL VAR(&LEVEL) TYPE(*CHAR) LEN(10)
DCL VAR(&USER ) TYPE(*CHAR) LEN(10)
DCL VAR(&JOB ) TYPE(*CHAR) LEN(10)
DCL VAR(&NBR ) TYPE(*CHAR) LEN(06)
DCL VAR(&SBMMSGQ) TYPE(*CHAR) LEN(10)
DCLF FILE(MLIB/PGM_LIST)
RTVJOBA USER(&USER)
RTVJOBA NBR(&NBR )
CHGVAR VAR(&TEMPFILE) VALUE(&USER || '01')
CHKOBJ OBJ(TEMPLIB/&TEMPFILE) OBJTYPE(*FILE)
MONMSG MSGID(CPF9801) +
EXEC(GOTO CMDLBL(NEXT1))
DLTF TEMPLIB/&TEMPFILE
NEXT1: CPYF FROMFILE(LIB/PGM_TEMP) +
TOFILE(TEMPLIB/&TEMPFILE) +
CRTFILE(*YES)
/* ADDLIBLE &LEVEL */
MONMSG MSGID(CPF2110) EXEC(GOTO CMDLBL(ERRMSG1))
MONMSG MSGID(CPF2103)
READ: RCVF RCDFMT(RECORD1)
MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(CLOSE))
COBLIST (&PGM_NAME) LEVEL(*FULL) /* submit a job to QBATCH */
RTVJOBA NBR(&NBR)
CPYSPLF FILE(&PGM_NAME) TOFILE(TEMPLIB/&TEMPFILE) +
JOB(&NBR/&USER/&PGM_NAME) +
MBROPT(*ADD) SPLNBR(*LAST)
GOTO READ
CLOSE: CLOSE
/* RMVLIBLE &LEVEL */
GOTO RETURN
ERRMSG1: SNDPGMMSG MSG('LIB NOT FOUND')
GOTO CLOSE
RETURN: RETURN
ENDPGM
在SBMJOB之后,您可以收到给出提交的作业编号的完成消息。你可以试试这个小程序,看看它是如何工作的。
/* Data structure with the first three replacement */
/* values of CPC1221 */
DCL VAR(&CPC1221MSG) TYPE(*CHAR) LEN(26)
DCL VAR(&jobname1) TYPE(*CHAR) STG(*DEFINED) +
LEN(10) DEFVAR(&CPC1221MSG 1)
DCL VAR(&jobuser2) TYPE(*CHAR) STG(*DEFINED) +
LEN(10) DEFVAR(&CPC1221MSG 11)
DCL VAR(&jobnum3) TYPE(*CHAR) STG(*DEFINED) +
LEN(6) DEFVAR(&CPC1221MSG 21)
SBMJOB CMD(DSPJOB OUTPUT(*PRINT)) JOBQ(QINTER)
RCVMSG PGMQ(*SAME) MSGTYPE(*COMP) RMV(*NO) +
MSGDTA(&CPC1221MSG)
sndpgmmsg (&jobname1 *cat &jobuser2 *cat &jobnum3)
我用来实现这一点的唯一方法是使用刷出API,也许你应该看看它。
我很抱歉我不能给你一个例子,因为我用这个API编写的唯一代码是为我的公司。但整个想法是,你可以生成几个进程并获得这些进程id。使用此进程id可以查看是否仍处于活动状态。返回值
ValueSpawn()成功。返回的值是子进程号
-1Spawn()不成功。errno变量被设置为指示错误。