云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

轻量服务器_域名注册时间_新用户

小七 141 0

下面的代码序列重复了引发和处理基于类的异常的众所周知的原则:

类cx\u demo定义继承自cx\u static\u check.

ENDCLASS.

类cls定义.

PUBLIC SECTION.

类方法meth引发cx\u demo.

ENDCLASS.

类cls实现.

METHODmeth.

RAISE EXCEPTION TYPE cx\u demo.

ENDMETHOD.

ENDCLASS.

START-OF-SELECTION.

TRY.

cls=>meth().

CATCH cx\u demo INTO DATA(exc.

cl\u demo\u output=>display(`Handling`&

cl\u abap\u classdescr=>get\u class\u name(p\u object=exc)).

ENDTRY.

要完成,还应显示清除的含义:

class cx\u demo 0定义继承自cx\u静态\u检查。

ENDCLASS.

CLASS cx\u demo1定义继承自cx\u静态\u检查。

ENDCLASS.

START-OF-SELECTION.

DATA(exception)=`cx\u demo1`.

cl\u demou input=>request(CHANGING field=exception.

DATA exc TYPE REF TO cx\u static \u check.

exc=COND#(exception=`cx\u demo0`时,则为NEW cx\u demo0()

ELSE NEW cx\u demo1())。

TRY.

TRY.

RAISE EXCEPTION exc.

CATCH cx\u demo0.

cl\u demo\u output=>write('Catching cx\u demo0')。

CLEANUP.

cl\u demo\u output=>write('CLEANUP')。

ENDTRY.

CATCH cx\u demo1.

cl\u demo\u output=>write('Catching cx\u demo1')。

ENDTRY.

cl\u demo\u output=>display()。

在本例中,您可以决定是否引发类cx\u demo0或cx\u demo1的异常。cx\u demo0在内部处理,cx\u demo1在外部TRY块中处理。在后一种情况下,在离开内部TRY块之前,执行CLEANUP块,从而提供清理内部TRY块的机会。这里没有显示的是额外的,淘客模板,也可以用来清理。

众所周知的事实,因为6.10版(哈欠)。7.02版引入的RETRY和RESUME可能不太为人所知。

使用RETRY,您将退出CATCH块并跳回当前TRY控制结构的TRY语句,以便重试整个TRY块。当然你要小心,这个异常不会一次又一次的重复出现,否则你会陷入一个无休止的循环中。

类cx\u demo定义继承自cx\u static\u check。

ENDCLASS。

类cls定义。

PUBLIC SECTION。

类数据标志类型abap\u bool。

类方法meth提升cx\u demo。

ENDCLASS。

类cls实现。

方法方法

如果flag=abap\u false。

cl\u demo\u输出=>写入(`Raising`.)。

RAISE异常类型cx\u demo。

ENDIF。

ENDMETHOD。

ENDCLASS。

开始选择。

TRY。

cls=>方法()。

捕获cx\u demo。

cl\u demo\u输出=>写入(`Handling`.)。

cls=>flag=abap\u true。

重试。

ENDTRY。

cl\u demo\u输出=>显示().

如果缺少某个先决条件(这里是一个标志),则会引发异常。在处理过程中,先决条件被完全填充,TRY块的保护区被重复执行,

使用RESUME退出CATCH块,在引发异常的语句之后继续处理。前提条件是:

类cx\u demo定义继承自cx\u static\u check.

ENDCLASS.

类cls定义.

PUBLIC SECTION.

类METHODS meth rising RESUMABLE(cx\u demo).

ENDCLASS.

类cls实现.

方法meth.

cl\u demo\u output=>write(`rising`.).

rise RESUMABLE EXCEPTION TYPEcx\u demo.

clu demo\u output=>write('Resuming…')。

ENDMETHOD.

ENDCLASS.

START-OF-SELECTION.

TRY.

cls=>meth()。

CATCH-BEFORE-diswind cx\u demo.

clu demo\u output=>write(`Handling`.)。

RESUME.

ENDTRY.

clu demo\u output=>display()。

这里提供的信息可能对您有用。

有关更多信息,好评返现,请参阅基于类的异常。

我已经使用可恢复的异常很长时间了,我发现它们非常有用。

演示程序demo\u CATCH\u EXCEPTION真的帮助我理解了释放前的行为,淘大客,RESUME et al.

PS-我还没有看到任何标准SAP类使用可恢复异常,尽管

DEMO\u CATCH\u EXCEPTION

我调用了一个RESTful Web服务,有时如果服务器进入睡眠状态,第一次尝试连接就会失败(第一次尝试会唤醒它,所以第二次尝试就可以了)。重试在这些情况下是很好的-确保我只重试一次,但是

你能分享一个可恢复的用例吗?

我在这里讨论过:我在哪里使用可恢复异常?

是的,如前所述,云产品,出现可恢复异常的原因是为了让调用程序控制错误是否致命。

我在较低级别方法中对表进行循环时使用可恢复,例如需要过帐的文档表。如果一个文档有错误,我会提出一个异常并在上层方法中捕获它,云服务器怎么样,但仍然希望继续处理其他文档。

顺便说一下,我希望在较低版本中看到7.50中新的T100消息处理。有没有可能?