ABAP的自定义异常处理如何实现

ABAP的自定义异常处理如何实现,第1张

我之前看过的一篇文章,转给你 希望帮助到你。

1、异常分类

从sap 6.10开始,abap的异常分为两类:1)基于异常类的异咐如常,2)非类异哗简纯常。非乱咐类异常又分为系统定义异常(如:被0除异常)和用户自定义异常(用户自定义函数中由exception语句定义,raise语句产生的异常)。

异常有的是可以截获处理,用户可以截获做相应处理,系统将可以继续执行程序。如果用户不处理,系统将产生错误,并停止执行程序。有的异常为不可截获的错误异常,系统将直接产生错误,并停止执行程序。

2、异常处理语句

基于类异常相关语句:

a)TRY.

... guarded section

CATCH cx11 ... cx1n [INTO ex1].

... handlers for exceptions cx11 to cx1n

CATCH cx21 ... cx2m [INTO ex2].

... handlers for exceptions cx21 bis cx2m

... other handlers

CLEANUP.

... cleanup block

ENDTRY.

b)RAISE EXCEPTION TYPE class.

c)RAISING cx1 ... cxn

非类异常相关语句:

a)catch system-exceptions ARITHMETIC_ERRORS = 4.

....

endcatch.

c) raise (In function or method)

3、异常截获处理方法

Handling exceptions using/with exception classes 截获处理方法

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.

Handling exceptions as catchable runtime errors (向后兼容6.10)

此异常处理sap建议使用try...endtry代替(错误和异常类对应关系参见第5部分)。

data RESULT type I.

catch system-exceptions ARITHMETIC_ERRORS = 4.

RESULT = 1 / 0.

endcatch.

if SY-SUBRC = 4.

...

endif.

4、代码样例

a)RAISING cx1 ... cxn

form adbc_exists_view using view_name type dd25l-viewname

changing subrc type sy-subrc

raising cx_sql_exception.

data: stmt type string,

ref type ref to data,

stmt_ref type ref to cl_sql_statement,

res_ref type ref to cl_sql_result_set,

cnt type sy-tabix.

subrc = 4.

create object stmt_ref.

get reference of view_name into ref.

stmt_ref->set_param( ref ).

stmt = 'select count(*) from user_views where view_name = ?'.

res_ref = stmt_ref->execute_query( stmt ).

* Host-Variable zur Ergebnisaufnahme zuordnen

get reference of cnt into ref.

res_ref->set_param( ref ).

res_ref->next( ).

if cnt = 1.

subrc = 0.

endif.

res_ref->close( ).

endform.

form exists_view usingview_name type dd25l-viewname

changing subrc type sy-subrc.

try.

perform adbc_exists_view(sdb4fora)

using view_name

changing subrc.

catch cx_sql_exception.

subrc = 8.

endtry.

endform.

b)基于类的异常代码样例

5、错误与异常类对应关系

Exception group: ARITHMETIC_ERRORS

Class-based Exceptions Definition

*----------------------------------------------------------------------*

* CLASS class_exception DEFINITION

*----------------------------------------------------------------------*

* All Exception Class must inherit from Class CX_ROOT or its subclass

*----------------------------------------------------------------------*

CLASS class_exception DEFINITION INHERITING FROM cx_static_check.

PUBLIC SECTION.

METHODS write_msg.

ENDCLASS."CX_SAMPLE_EXCEPTION DEFINITION

Class-based Exceptions Implementation

*----------------------------------------------------------------------*

* CLASS class_exception IMPLEMENTATION

*----------------------------------------------------------------------*

CLASS class_exception IMPLEMENTATION.

METHOD write_msg.

WRITE / 'Method of Class class_exception'.

ENDMETHOD.":

ENDCLASS."class_exception IMPLEMENTATION

Class main Definition

*----------------------------------------------------------------------*

* CLASS main DEFINITION

*----------------------------------------------------------------------*

CLASS main DEFINITION.

PUBLIC SECTION.

* This method use the class exceptions class_exception

* to deal with error. To do this we use the statement RAISING

METHODS action RAISING class_exception.

ENDCLASS."main DEFINITION

Class main Implementation

*----------------------------------------------------------------------*

* CLASS main IMPLEMENTATION

*----------------------------------------------------------------------*

CLASS main IMPLEMENTATION.

METHOD action.

* Here we're raising an exception that should be Treated by

* exception class class_exception

RAISE EXCEPTION TYPE class_exception.

ENDMETHOD."action

ENDCLASS."main IMPLEMENTATION

Defining Objects

DATA o_exception TYPE REF TO class_exception.

DATA o_main TYPE REF TO main.

Instance Creation

START-OF-SELECTION.

CREATE OBJECT o_main.

Calling Methods

* The statement TRY must be used to define a block that CATCH the exceptions

TRY.

o_main->action( ).

* The Statement CATCH define a block that catches the exceptions of the

* exception class class_exception

CATCH class_exception.

WRITE / 'Exception Caught'.

ENDTRY.

* The statement TRY must be used to define a block that CATCH the exceptions

TRY.

o_main->action( ).

* The Statement CATCH define a block that catches the exceptions of the

* exception class class_exception

CATCH class_exception INTO o_exception.

WRITE / 'Exception Caught'.

o_exception->write_msg( ).

ENDTRY.

ABAP--关于ABAP流程处理的一些命令的说明(stop,exit,return,check,reject)

Stop 命令

使用该命令的程序位置

INITIALIZATION, AT

SELECTION-SCREEN, START-OF-SELECTION和GET

事件中

处理说明

1、 当在INITIALIZATION事件执行该命令,系统将直接触发应用服务器和客户端屏幕元素的发送;

2、 在其他事件中将直接触发END-OF-SELECTION事件的执行,如果不想执行END-OF-SELECTION,请使用RETURN或者 EXIT.

注意事项

EXIT命令

使用该命令的程序位置

用于循环和程序模块中:DO和其他处理模块中(event block, dialog module,procedure (function module, method, subroutine))...ENDDO,WHILE...ENDWHILE,LOOP...ENDLOOP,SELECT...ENDSELECT

处理说明

1、 循环处理中,EXIT只跳出当前的循环;

2、 在START-OF-SELECTION, GET,END-OF-SELECTION事件中,将直接触发List输出,将不执行END-OF-SELECTION事件如果没有List输出,系统将直接返回选择屏幕;

3、 对于procedure系统返回调用处;

注意事项

Sap推荐EXIT只是用于循环哗销处理,对于处理模块请使用Return。

RETURN命令

使用该命令的程序位置

用于处理模块中(eventblock, dialog module, procedure (function module, method, subroutine))

处理说明

1、 对于procedure ,RETURN将无条件退出当前的处理模块,不影响后续模块的执行;

2、 对于START-OF-SELECTION, GET,END-OF-SELECTION事件中,将直接触发List输出,将不执行END-OF-SELECTION事件如果没有List输出,系统将直接返回选择屏幕;

注意事项

RETURN不管存在多少层次的循环,将直接退出当前处理模块,这乱让游一点和EXIT不同

CHECK命令

使用该命令的程序位置

用于循环和程序模块中:DO和其他处理模块中(event block,dialog module, procedure (function module, method, subroutine))...ENDDO,WHILE...ENDWHILE,LOOP...ENDLOOP,SELECT...ENDSELECT

处理说明

1、 循环处理中,CHECK只是不执行本次循环的后续处理,继续调到下一次循环;

2、 在START-OF-SELECTION, GET,END-OF-SELECTION事件中,只是中断本事件滑差内的后续代码的执行 ,不影响其他后续模块的处理,这和EXIT,RETURN是不同的;

3、 对于没有循环procedure系统返回调用处;

4、 对逻辑数据库的GET事件,系统退出本次纪录和子节点的读取处理,将继续下一条纪录的处理;

注意事项

Sap推荐CHECK只是用于循环处理,对于处理模块请使用Return。

REJECT命令

使用该命令的程序位置

用于逻辑数据库的GET处理事件中

处理说明

REJECT的处理类似CHECK,但和CHECK不同的是:REJECT如果在循环内也同样退出本次的处理,而CHECK只是退出循环,不退出处理

注意事项

这句话会结束当前主调程序去执则租行事务码<Tcod>,局盯芦并且会将主调程序从internal sessions中删除,而被调用Tcode将会桐带在该 external session 中新开一个 internal session再运行,并且被调程序执行后,并不会回到主调程序调用处继续往下执行,而是the system returns tothe area menu from which the original program in the call stack was started. ~摘自:SAP师太


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12441039.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存