使用错误代码参数

错误代码参数为您提供了一种方法来确定 API 是否迂到任何错误。 以下是显示错误代码参数的不正确和正确使用方式的程序示例。

本主题中的示例提供了用于创建用户空间的程序。

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

不正确的程序示例: 使用错误代码参数

此示例中显示的常见错误是使用错误代码结构向 API 指示不针对发现的错误发送异常消息。 此外,该示例不会检查错误代码结构以确定 API 调用是否成功。 为了演示错误代码结构的不当使用,在 QUSCRTUS API 的 replace 参数上使用了不正确的值。 替换参数是必需参数。 编码错误 (*XXXXXXX) 显示在不正确的位置 (1) ,也显示在正确的编码位置 (2)

不正确的 (3) 和正确的编码 (4) 都显示程序监视来自 API 调用的任何错误。 但是,在调用 QUSCRTUS API 之后,程序不会检查可用字节字段。

由于替换参数上存在错误,因此未创建所请求的用户空间。 但是,调用程序不知道这一点,如 (5)中所示。


 *****************************************************************
 *
 *Program Name: PGM1
 *
 *Program Language:  RPG
 *
 *Description: This sample program illustrates the incorrect
 *             way of using the error code parameter.
 *
 *Header Files Included: QUSEC - Error Code Parameter
 *
 *APIs Used:  QUSCRTUS - Create User Space
 *
 *****************************************************************
 * BRING IN THE ERROR STRUCTURE FROM QSYSINC
I/COPY QSYSINC/QRPGSRC,QUSEC
 **
ISPCNAM      DS
I I            'SPCNAME   '              1  10 SPC
I I            'PAM       '             11  20 LIB
 ** OTHER ASSORTED VARIABLES
I            DS
I I            2000                  B   1   40SIZ
I                                    B   5   80START
I I            X'00'                     9   9 INTVAL
 *
 * Initialize the bytes provided field (QUSBNDB) of the error code
 * structure.  Languages such as RPG and CL tend to initialize the bytes
 * provided field to blanks, which when passed to an API is viewed as a
 * very large (and incorrect) binary value.  If you receive CPF3CF1 when
 * calling an API, the bytes provided field should be the first field
 * you examine as part of problem determination.
C                     Z-ADD16        QUSBNB               (3)
 *
 * 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 'NO TEXT 'TXTDSC 50
C                     PARM '*XXXXXXX'REPLAC 10            (1)
C                     PARM           QUSBN
 ** Program does not check the error code parameter       (5)
 **
C                     SETON                     LR

正确的程序示例: 使用错误代码参数

您可以添加代码以帮助您发现程序中可能存在的错误。 在以下示例程序中,添加了代码以监视在错误代码参数 (QUSBN) 中传回的错误信息。 已添加 (6) 处的代码以检查任何消息的错误代码参数,并在发现任何错误时向用户显示异常标识。 错误编码的程序不会检查错误代码参数,如 (5)中所示。


 *****************************************************************
 *
 *Program Name: PGM2
 *
 *Program Language:  RPG
 *
 *Description: This sample program illustrates the correct
 *             way of using the error code parameter.
 *
 *Header Files Included: QUSEC - Error Code Parameter
 *
 *APIs Used:  QUSCRTUS - Create User Space
 *
 *****************************************************************
 * BRING IN THE ERROR STRUCTURE FROM QSYSINC
I/COPY QSYSINC/QRPGSRC,QUSEC
 **
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                                    B   5   80START
I I            X'00'                     9   9 INTVAL
 *
C                     Z-ADD16        QUSBNB              (4)
 *
 * 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 'NO TEXT 'TXTDSC 50
C                     PARM '*XXXXXXX'REPLAC 10           (2)
C                     PARM           QUSBN
 **
 * DISPLAY EXCEPTION IDENTIFIER TO THE USER
C           QUSBNC    IFGT *ZEROS                        (6)
C                     EXSR DSPERR
C                     END
 *
C                     SETON                      LR
 *
C             DSPERR  BEGSR
C                     DSPLY          QUSBND
C                     ENDSR