OPM RPG 中的示例: 打印 HOLD 值

此 OPM RPG 程序打印作业描述的 HOLD 值 (在 "创建作业描述" (CRTJOBD) 或 "更改作业描述" (CHGJOBD) 命令上指定)。

这与 OPM RPG 中的示例: 检索 HOLD 参数 (异常消息)OPM RPG 中的示例: 检索 HOLD 参数 (错误代码结构)中的程序类型相同。 名为 JOBDAPI 的程序将打印 HOLD 值 (如果找到) ,如 1中所示。 如果发生错误,那么程序会将包含错误消息标识的行打印到名为 QPRINT 的假脱机文件,如 2中所示。

注: 通过使用代码示例,您同意 代码许可证和免责声明信息的条款。

     F*****************************************************************
     F*****************************************************************
     F*
     F*Program Name: JOBDAPI
     F*
     F*Language:  OPM RPG
     F*
     F*Descriptive Name:  Get Job Description
     F*
     F*Description:  The following program prints out the name of
     F*              the job description or prints an error if the
     F*              API could not find the job description name
     F*              specified.
     F*
     F*
     F*Header Files Included: QUSEC - Error Code Parameter
     F*                       QWDRJOBD - Retrieve Job Description API
     F*
     F*****************************************************************
     F*****************************************************************
     F* JOBDAPIR - Print value of HOLD parameter using API
     F*    Uses error-code data structure
     F*
     FQPRINT  O   F     132     OF     PRINTER
     I*
     I* Error Code Parameter Include for the APIs
     I*
     I/COPY QSYSINC/QRPGSRC,QUSEC
     I*
     I* Retrieve Job Description API Include
     I*
     I/COPY QSYSINC/QRPGSRC,QWDRJOBD
     I*
     I*
     I* Dummy data structure used to declare binary field          (3)
     I*
     I            DS
     I I            390                   B   1   40RCVLEN
     I I            'JOBD0100'                5   12FORMAT
     C*
     C* Beginning of Mainline
     C*
     C* Two parameters are being passed into this program.
     C*
     C           *ENTRY    PLIST                           Parm list
     C                     PARM           JOBD   10        Job descrp
     C                     PARM           JOBDL  10        Jobd library
     C*
     C* Move the two parameters passed into LFNAM.
     C*
     C           JOBD      CAT  JOBDL     LFNAM  20        Qlfd name
     C*
     C* Error code parameter is set to 16.
     C*
     C                     Z-ADD16        QUSBNB           Bytes provid
     C*
     C* Instead of specifying 'QWCRJOBD', I could have used the
     C* constant QWDBGB that was defined in the QWDRJOBD include.
     C* Call the API
     C*
     C                     CALL 'QWDRJOBD'                 Parm list
     C                     PARM           QWDBH            Receiver Var.
     C                     PARM           RCVLEN           Length RCVVAR
     C                     PARM           FORMAT           Format Name
     C                     PARM           LFNAM            Qual. Job Desc
     C                     PARM           QUSBN            Error Code
     C* If no bytes available, API was successful; print HOLD value
     C           QUSBNC    IFEQ 0
     C                     EXCPTGOOD
     C                     ENDIF
     C* If some bytes available, API failed; print error message ID
     C           QUSBNC    IFGT 0
     C                     EXCPTBAD
     C                     ENDIF
     C* End of program
     C                     SETON                     LR
     C                     RETRN
     C*
     C* End of MAINLINE
     C**********************************************************************
     O*
     OQPRINT  E  106           GOOD
     O                                      'HOLD value - '
     O                         QWDBHN
     OQPRINT  E  106           BAD
     O                                      'Failed. Error ID - '
     O                         QUSBND

使用以下数据结构:

错误代码数据结构

这将定义所使用的两个二进制字段以及针对错误情况返回的消息标识。

检索作业描述数据结构

这将定义格式 JOBD0100,这是具有位置 77-86 中的保留字段的 390 字节数据结构。

虚拟数据结构

这包含用于接收器变量长度的字段。 该字段定义为二进制,并且在前 4 个字节中。 虚拟数据结构 (如 3中所示) 也包含格式字段。

使用此数据结构是因为 RPG 仅允许在数据结构的上下文中定义二进制变量。

程序检索传递的参数列表,并初始化要传递到 API 的字段。 调用 API 并将信息放入接收方变量数据结构 (如果找到了信息)。 如果发生错误并且提供了足够的空间来接收信息,那么 API 会将信息放在错误代码数据结构中。

根据是否发现任何错误,程序将打印两条不同行中的一条:


HOLD value - *NO  (1)

Failed. Error ID - CPF9801  (2)