定义数据结构
定义要与 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