定义数据结构

定义要与 API 配合使用的数据结构时,必须构建该结构以接收 API 返回的内容。 以下是显示定义数据结构的不正确和正确方法的程序示例。 您可以通过使用 IBM提供的数据结构而不是创建自己的数据结构来防止错误。

有关包含在 QSYSINC 库中的 IBM提供的数据结构的信息,请参阅 包含文件和 QSYSINC 库

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

不正确的程序示例: 定义数据结构

当运行定义数据结构的程序时,它将执行以下操作:

  • 创建用户空间
  • 检索活动作业的列表
  • 显示作业名的第一部分
  • 删除保存数据的用户空间

在此示例中,未正确定义要与 QUSLJOB API 配合使用的数据结构。 未正确定义的变量是 JNAME 和 USRNAM。 JNAME 长度定义为 1 到 12 , USRNAM 长度定义为 13 到 20。 这显示在 (1)中。 显示的数据 (JNAME 变量) 将不正确。 正确的编码显示在 (2)上。


 *****************************************************************
 *
 *Program Name: PGM1
 *
 *Program Language:  RPG
 *
 *Description: This sample program illustrates the incorrect
 *             way of defining data structures.
 *
 *Header Files Included: QUSEC - Error Code Parameter
 *                       QUSGEN - User Space Format for Generic Header
 *
 *APIs Used:  QUSCRTUS  - Create User Space
 *            QUSLJOB   - List Job
 *            QUSRTVUS  - Retrieve User Space
 *            QUSDLTUS  - Delete User Space
 *****************************************************************
 * THIS PROGRAM WILL CREATE THE NECESSARY SPACE AND THEN CALL
 * THE QUSLJOB API TO GET A LIST OF ALL ACTIVE JOBS ON THE SYSTEM.
 * THE FIRST JOB NAME/USER WILL BE DISPLAYED TO THE USER.
 *
 * BRING IN THE USER SPACE GENERIC HEADER
I/COPY QSYSINC/QRPGSRC,QUSGEN
 * BRING IN THE ERROR STRUCTURE FROM QSYSINC
I/COPY QSYSINC/QRPGSRC,QUSEC
 ** JOB NAME STRUCTURE FOR CALLING QUSLJOB
IJOBNAM     DS
I I            '*ALL      '              1  10 JOB
I I            '*ALL      '             11  20 USER
I I            '*ALL  '                 21  26 JOBNUM
 ** JOBL0100 FORMAT RETURNED FROM QUSLJOB API
 ** INCORRECTLY CODE THE JNAME/USRNAM LENGTHS
IRECVR     DS
I                                        1  12 JNAME        (1)
I                                       13  20 USRNAM       (1)
I                                       21  26 JOBNBR
I                                       27  42 JOBID
I                                       43  52 JSTAT
I                                       53  53 JTYPE
I                                       54  54 JSUBT
I                                       55  56 RESRV
 **
ISPCNAM      DS
I I            'SPCNAME   '              1  10 SPC
I I            'QTEMP     '             11  20 LIB
** OTHER ASSORTED VARIABLES
I           DS
I I            2000                  B   1   40SIZ
I I                                  B   5   80START
I I                                  B   9  120LENDTA
I I            X'00'                    13   13INTVAL
 *
 * SET UP TO ACCEPT EXCEPTIONS
C                    Z-ADD*ZEROS    QUSBNB
 *
 * CREATE THE SPACE TO HOLD THE DATA
C                    CALL 'QUSCRTUS'
C                    PARM           SPCNAM
C                    PARM 'EXT_ATTR'EXTATR 10
C                    PARM           SIZ
C                    PARM           INTVAL
C                    PARM '*ALL    'PUBAUT 10
C                    PARM 'TEXT DSC'TXTDSC 50
C                    PARM '*YES    'REPLAC 10
C                    PARM           QUSBN
 *
 * CALL THE API TO LIST THE ACTIVE JOBS
C                    CALL 'QUSLJOB'
C                    PARM           SPCNAM
C                    PARM 'JOBL0100'FORMAT  8
C                    PARM           JOBNAM
C                    PARM '*ACTIVE 'STAT   10
C                    PARM           QUSBN
 *
 * RETRIEVE THE OFFSET OF THE FIRST LIST ENTRY FROM THE SPACE
C                    Z-ADD1         START
C                    Z-ADD140       LENDTA
C                    CALL 'QUSRTVUS'
C                    PARM           SPCNAM
C                    PARM           START
C                    PARM           LENDTA
C                    PARM           QUSBP
C                    PARM           QUSBN
 *
 * RETRIEVE THE FIRST LIST ENTRY
C           QUSBPQ   ADD  1         START
C                    Z-ADD56        LENDTA
C                    CALL 'QUSRTVUS'
C                    PARM           SPCNAM
C                    PARM           START
C                    PARM           LENDTA
C                    PARM           RECVR
C                    PARM           QUSBN
 *
 * DISPLAY THE JOB NAME
C                    DSPLY          JNAME  
 ****************************
 * When displayed, JNAME    *
 * will look something like *
 * 'QCPF       QS'          *
 ****************************
 * DELETE THE SPACE THAT HELD THE DATA
C                    CALL 'QUSDLTUS'
C                    PARM           SPCNAM
C                    PARM           QUSBN
 **
C                    SETON                     LR

正确的程序示例: 定义数据结构

以下程序使用从 QSYSINC 库提供的数据结构。 使用此数据结构时,可以防止在创建数据结构时发生错误。 如果数据结构从发行版更改为发行版,那么不必对程序进行更新。 如果将新字段添加到数据结构中,并且您 希望 使用该字段,那么必须 更新应用程序。 QSYSINC 数据结构的复制显示在 (2)中。


 *
 *
 *****************************************************************
 *
 *Program Name: PGM2
 *
 *Program Language:  RPG
 *
 *Description: This sample program illustrates the correct
 *             way of defining data structures.
 *
 *Header Files Included: QUSEC - Error Code Parameter
 *                       QUSGEN - User Space Format for Generic Header
 *                       QUSLJOB - List Job API
 *
 *APIs Used:  QUSCRTUS  - Create User Space
 *            QUSLJOB   - List Job
 *            QUSRTVUS  - Retrieve User Space
 *            QUSDLTUS  - Delete User Space
 *
 *
 * THIS PROGRAM WILL CREATE THE NECESSARY SPACE AND THEN CALL
 * THE QUSLJOB API TO GET A LIST OF ALL ACTIVE JOBS ON THE SYSTEM.
 * THE FIRST JOB NAME/USER WILL BE DISPLAYED TO THE USER.
 *
I/COPY QSYSINC/QRPGSRC,QUSGEN
I/COPY QSYSINC/QRPGSRC,QUSEC
I/COPY QSYSINC/QRPGSRC,QUSLJOB                             (2)
 ** JOB NAME STRUCTURE FOR CALLING QUSLJOB
IJOBNAM    DS
I I            '*ALL      '              1  10 JOB
I I            '*ALL      '             11  20 USER
I I            '*ALL'                   21  26 JOBNUM
 ** JOBL0100 FORMAT RETURNED FROM QUSLJOB API
 **
 **
ISPCNAM     DS
I I            'SPCNAME   '              1  10 SPC
I I            'QTEMP     '             11  20 LIB
 ** OTHER ASSORTED VARIABLES
I           DS
I I            2000                  B   1   40SIZ
I I                                  B   5   80START
I I                                  B   9  120LENDTA
I I            X'00'                    13  13 INTVAL
 *
 * SET UP TO ACCEPT EXCEPTIONS
C                    Z-ADD*ZEROS    QUSBNB
 *
 * CREATE THE SPACE TO HOLD THE DATA
C                    CALL 'QUSCRTUS'
C                    PARM           SPCNAM
C                    PARM 'EXT_ATTR'EXTATR 10
C                    PARM           SIZ
C                    PARM           INTVAL
C                    PARM '*ALL    'PUBAUT 10
C                    PARM 'TEXT DSC'TXTDSC 50
C                    PARM '*YES    'REPLAC 10
C                    PARM           QUSBN
 *
 * CALL THE API TO LIST THE ACTIVE JOBS
C                    CALL 'QUSLJOB'
C                    PARM           SPCNAM
C                    PARM 'JOBL0100'FORMAT  8
C                    PARM           JOBNAM
C                    PARM '*ACTIVE 'STAT   10
C                    PARM           QUSBN
 *
 * RETRIEVE THE OFFSET OF THE FIRST LIST ENTRY FROM THE SPACE
C                    Z-ADD1         START
C                    Z-ADD140       LENDTA
C                    CALL 'QUSRTVUS'
C                    PARM           SPCNAM
C                    PARM           START
C                    PARM           LENDTA
C                    PARM           QUSBP
C                    PARM           QUSBN
 *
 * RETRIEVE THE FIRST LIST ENTRY
C          QUSBPQ    ADD  1         START
C                    Z-ADD56        LENDTA
C                    CALL 'QUSRTVUS'
C                    PARM           SPCNAM
C                    PARM           START
C                    PARM           LENDTA
C                    PARM           QUSDD
C                    PARM           QUSBN
 *
 * DISPLAY THE JOB NAME
C                    DSPLY          QUSDDB  
 *************************
 *  Correct job name     *
 *  will now show as     *
 *  'QCPF      '         *
 *************************
 * DELETE THE SPACE THAT HELD THE DATA
C                    CALL 'QUSDLTUS'
C                    PARM           SPCNAM
C                    PARM           QUSBN
 **
C                    SETON                     LR