学习:http://www.cnblogs.com/jiangzhengjun/p/4292428.html
说明:
异常处理机制可以有效避免 dump发生,
-
向上抛出异常
如果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.
时间: 2024-10-08 20:00:21