事件处理程序方法的异常处理

2020-08-31 20:24发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我有一个事件处理程序DELETE...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我有一个事件处理程序DELETE_LOCAL_AFTER_COMMIT,其代码如下:

方法delete_local_after_commit。 "行号1
循环到gt_del_obj_tab中INTO DATA(ls_del_obj_tab)。 " object_type
iv_delflag ='X'。
捕获cx_ilm_tadir_api INTO DATA(lx_error)。
引发异常lx_error。 10
ENDTRY。
ENDLOOP。
清除gt_del_obj_tab。
ENDMETHOD。

调用事件处理程序的代码如下:

尝试。
调用方法cl_ilm_tadir_api => delete_local_after_commit。
捕获cx_ilm_tadir_api INTO DATA(lx_error)。 "第18行

ENDTRY。

但是,在第n行中引发了异常。 10未排在第10行。 18.可能出什么问题了? (由于我的方法是事件处理程序,因此我什至无法向其添加异常类)

5条回答
能不能别闹
2020-08-31 21:00

可能您从CX_STATIC_CHECK或CX_DYNAMIC_CHECK继承了异常类,然后将其包装到CX_SY_NO_HANDLER类的异常中,因为[CLASS-] EVENTS 无法声明RAISING

ABAP文档-事件处理程序中基于类的异常中对此进行了解释

仅不包装从CX_NO_CHECK派生的异常类。

下面是测试代码,该代码将在以下三个变量中返回捕获的异常:

测试代码(使用Ctrl + Shift运行 + F10):

报告zzsro_test6b。

 CLASS lcl_situation定义。
   公共部分。
     事件something_happened导出值(异常)类型REF到cx_root。
 ENDCLASS。

 CLASS lcl_situation的实现。
 ENDCLASS。

 CLASS lcl_observer定义。
   公共部分。
     CLASS-METHODS if_something_happened发生的事件lcl_situation IMPORTING异常的something_happened。
 ENDCLASS。

 类别lcl_observer的实现。
   方法if_something_happened。
     RAISE EXCEPTION异常。
   终结法。
 ENDCLASS。

 类别lcx_no_check从cx_no_check继承。
 ENDCLASS。

 CLASS lcx_static_check从cx_static_check继承。
 ENDCLASS。

 类别lcx_dynamic_check从cx_dynamic_check继承。
 ENDCLASS。

 CLASS lcl_app定义。
   公共部分。
     CLASS-METHODS主要。
 ENDCLASS。

 类别lcl_app实施。
   方法主要。
     lcl_observer => if_something_happened(NEW lcx_no_check())。
   终结法。
 ENDCLASS。

 类别ltc_main定义
       用于检测
       持续时间短
       风险级别危害。
   专用部分。
     方法测试进行测试。
 ENDCLASS。

 类别ltc_main的实现。
   方法测试。
     尝试。
         lcl_observer => if_something_happened(NEW lcx_no_check())。
       捕获cx_root INTO DATA(lx_for_no_check)。
     ENDTRY。
     尝试。
         lcl_observer => if_something_happened(NEW lcx_static_check())。
       捕获cx_root INTO DATA(lx_for_static_check)。
     ENDTRY。
     尝试。
         lcl_observer => if_something_happened(NEW lcx_dynamic_check())。
       捕获cx_root INTO DATA(lx_for_dynamic_check)。
     ENDTRY。
     BREAK-POINT。 此处的调试器
   终结法。
 ENDCLASS。

一周热门 更多>