首页 > 代码库 > ABAP抓取异常的方法:try,endtry

ABAP抓取异常的方法:try,endtry

学习:http://www.cnblogs.com/jiangzhengjun/p/4292428.html

 

说明:

异常处理机制可以有效避免 dump发生,

 

  1. 向上抛出异常

 

如果Form中出现了运行时错误,但Form签名又没有使用RAISING向上抛,则程序会直接挂掉,所以最好是向上抛

 

FORM subform RAISING cx_static_check cx_dynamic_check.
...

 

ENDFORM.

 

 

 

:异常类是系统预先定义好的全局类或者是由用户自定义的局部或全局的类。
在sap6.10版本里,exception classes已经取代了catchable runtime errors
基于类的异常exception classes 捕获

 

  • 一、CX_ROOT

    四个方法:

    IF_MESSAGE~GET_TEXT           获取文本
    IF_MESSAGE~GET_LONGTEXT  获取长文本
    CONSTRUCTOR                           构建函数
    GET_SOURCE_POSITION           获取源代码位置

  • 技术分享

    技术分享

 CX_ROOT Constant Public Type SOTR_CONC

技术分享

 

  • 二、cx_sy_arithmetic_error
    四个方法 《-》 相同

    IF_MESSAGE~GET_TEXT
    IF_MESSAGE~GET_LONGTEXT
    GET_SOURCE_POSITION
    CONSTRUCTOR

 技术分享

 

 

  • 1.抓取数据库操作异常,

 

*&使用异常类:cx_root
  DATA: lo_root1        TYPE REF TO cx_root.
 
 TRY.
      INSERT zmdm_matnr FROM  ls_zmdm_matnr.
    CATCH cx_root INTO lo_root1 .

  ENDTRY.

 

  • 2.抓取除法异常,
*&方法一
DATA myref TYPE REF TO cx_sy_arithmetic_error.
DATA err_text TYPE string.
DATA result TYPE i.
TRY.
    result = 1 / 0.
CATCH cx_sy_arithmetic_error INTO myref.
    err_text = myref->get_text( ).
ENDTRY.
这个写法与java是相似的

  

*&方法二、(新式的)

DATA result TYPE p DECIMALS 2.
  DATA oref TYPE REF TO cx_root.
  DATA text TYPE string.
  DATA i TYPE i.

  TRY .
      i = 1 / 0.
  CATCH cx_root INTO oref.
      text = oref->get_text( ).
      WRITE: --- , text.
      RAISE EXCEPTION oref.”注:如果有此句,则不能放在Function中,否则报:Old and class-based exceptions must not be used the same time
  ENDTRY.

 

  • 3.抓取上传数值类型字段异常,(防止上传过程系统dump)
 DATA: O_CX  TYPE  REF  TO  CX_ROOT.
DATA:LS_UPLOAD-MENGE TYPE STRING,
LS_OUTPUT-MENGG TYPE MENGE_D. TRY . MOVE LS_UPLOAD-MENGE TO LS_OUTPUT-MENGE. CATCH CX_ROOT INTO O_CX. LV_MSG = O_CX->IF_MESSAGE~GET_TEXT( ). CONCATENATE LS_OUTPUT-MESG LV_MSG INTO LS_OUTPUT-MESG SEPARATED BY ‘;‘. ENDTRY.

IF LS_UPLOAD-MENGE  = ‘AAA‘.

   LV_MSG   =   无法将参数 ‘AAA‘ 解释为数字

ENDIF.

 

 

 

ABAP抓取异常的方法:try,endtry