如何运行一个命令,将JOB提交给QBATCH,然后获取JOB号以供稍后在CL PGM中使用



我尝试创建一个向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,也许你应该看看它。

返回值
ValueSpawn()成功。返回的值是子进程号
-1Spawn()不成功。errno变量被设置为指示错误。

我很抱歉我不能给你一个例子,因为我用这个API编写的唯一代码是为我的公司。但整个想法是,你可以生成几个进程并获得这些进程id。使用此进程id可以查看是否仍处于活动状态。

最新更新