调用函数后获得的错误消息代表什么意义?

本文详细介绍了在ABAP中如何通过指定EXCEPTION段来处理函数模块调用时可能出现的各种异常情况。通过一个具体的示例,展示了如何设置异常对应的数字,并在程序中如何依据这些数字进行异常处理。

发现很多人对这个基础问题还都搞不清楚,这里解释一下。

在 ABAP 的很多函数模块中都定义了异常(EXCEPTIONS 选项卡)。如果在程序中使用 CALL FUNCTION '<fm_name>' 的时候,指定了 EXCEPTION 段,并且将每个异常都对应了一个数字,则在函数模块调用中出现异常时,就会把该异常对应的数字填写到系统变量 sy-subrc 中。这样说比较抽象,看看下面这个例子就很容易明白了 

ContractedBlock.gifExpandedBlockStart.gifCode
CALL FUNCTION 'GUI_DOWNLOAD'
  EXPORTING
*   BIN_FILESIZE                    =
    filename                        
=
*   FILETYPE                        = 'ASC'
*   APPEND                          = ' '
*   WRITE_FIELD_SEPARATOR           = ' '
*   HEADER                          = '00'
*   TRUNC_TRAILING_BLANKS           = ' '
*   WRITE_LF                        = 'X'
*   COL_SELECT                      = ' '
*   COL_SELECT_MASK                 = ' '
*   DAT_MODE                        = ' '
*   CONFIRM_OVERWRITE               = ' '
*   NO_AUTH_CHECK                   = ' '
*   CODEPAGE                        = ' '
*   IGNORE_CERR                     = ABAP_TRUE
*   REPLACEMENT                     = '#'
*   WRITE_BOM                       = ' '
*   TRUNC_TRAILING_BLANKS_EOL       = 'X'
*   WK1_N_FORMAT                    = ' '
*   WK1_N_SIZE                      = ' '
*   WK1_T_FORMAT                    = ' '
*   WK1_T_SIZE                      = ' '
*   WRITE_LF_AFTER_LAST_LINE        = ABAP_TRUE
*   SHOW_TRANSFER_STATUS            = ABAP_TRUE
* IMPORTING
*   FILELENGTH                      =
  tables
    data_tab                        
=
*   FIELDNAMES                      =
  EXCEPTIONS
    FILE_WRITE_ERROR                = 1
    NO_BATCH                        = 2
    GUI_REFUSE_FILETRANSFER         = 3
    INVALID_TYPE                    = 4
    NO_AUTHORITY                    = 5
    UNKNOWN_ERROR                   = 6
    HEADER_NOT_ALLOWED              = 7
    SEPARATOR_NOT_ALLOWED           = 8
    FILESIZE_NOT_ALLOWED            = 9
    HEADER_TOO_LONG                 = 10
    DP_ERROR_CREATE                 = 11
    DP_ERROR_SEND                   = 12
    DP_ERROR_WRITE                  = 13
    UNKNOWN_DP_ERROR                = 14
    ACCESS_DENIED                   = 15
    DP_OUT_OF_MEMORY                = 16
    DISK_FULL                       = 17
    DP_TIMEOUT                      = 18
    FILE_NOT_FOUND                  = 19
    DATAPROVIDER_EXCEPTION          = 20
    CONTROL_FLUSH_ERROR             = 21
    OTHERS                          = 22
          .
IF sy
-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

 

这里,EXCEPTIONS 后面有 22 个异常,其中前 21 个是函数模块中定义的,最后一个 OTHER 是 SAP 规定的处理上述未包含的情况的。如果在函数执行中,发生了文件未找到异常(FILE_NO_FOUND),则 sy-subrc 的值就是19,在后面的 IF 结构中,就可以对 sy-subrc 为 19 的情况提示一下 “没有找到文件!”。

需要注意的是,数字和异常的对应是可以在程序代码里修改的,比如我们删除了 DP_OUT_OF_MEMORY 这个异常,并且把后面的数字都提前,变成:

ContractedBlock.gifExpandedBlockStart.gifCode
   DISK_FULL                       = 16
   DP_TIMEOUT                      
= 17
   FILE_NOT_FOUND                  
= 18
   DATAPROVIDER_EXCEPTION          
= 19
   CONTROL_FLUSH_ERROR             
= 20
   OTHERS                          
= 21
          .

 

则出现 FILE_NO_FOUND 时,sy-subrc 的值就是 18,后续处理判断也要相应修改。

手工添加异常语句比较麻烦,建议使用代码编辑器中的“模式”按钮添加函数模块调用,只需要输入函数名称,系统会根据它的定义自动为你生成完整的调用代码,非常方便。

一般来说,异常的名称就能说明具体问题,如果不能完全说明,还可以到函数定义中,点击每个异常最后的按钮查看其长文本。

转载于:https://www.cnblogs.com/qiangsheng/archive/2009/04/23/1442216.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值