异常是在程序执行期间出现的问题。 当异常发生时,程序的正常流程中断,程序应用程序异常终止,这是不推荐的,因此这些异常将被处理。

异常提供了一种将控制从程序的一个部分转移到另一个部分的方法。 ABAP异常处理建立在三个关键字 - RAISE,TRY,CATCH和CLEANUP。 假设块将引发异常,则方法使用TRY和CATCH关键字的组合捕获异常。 TRY - CATCH块放置在可能生成异常的代码周围。 以下是使用TRY - CATCH的语法:

TRY.
Try Block <Code that raises an exception> CATCH
Catch Block <exception handler M>
. . .
. . .
. . .
CATCH
Catch Block <exception handler R>CLEANUP. Cleanup block <to restore consistent state>ENDTRY.

RAISE - 提出异常,表示发生了一些异常情况。 通常,异常处理程序会尝试修复错误或找到替代解决方案。

TRY - TRY块包含要处理其异常的应用程序编码。 此语句块按顺序处理。 它可以包含进一步的控制结构和程序调用或其他ABAP程序。 它后面是一个或多个catch块。

CATCH - 程序在要处理问题的程序中的地方使用异常处理程序捕获异常。 CATCH关键字表示捕获异常。

CLEANUP - 每当在TRY块中发生异常,而TRY块未被同一TRY - ENDTRY结构的处理程序捕获时,将执行CLEANUP块的语句。 在CLEANUP子句中,系统可以将对象恢复到一致状态或释放外部资源。 也就是说,可以对TRY块的上下文执行清除工作。

提出异常

可以在方法中的任何点,函数模块,子例程等提出异常。 有两种方式可以引发异常:

  • ABAP运行时系统引发的异常。

    例如,Y = 1 / 0.这将导致类型CX_SY_ZERODIVIDE的运行时错误。

  • 程序员提出的异常。

    同时提升和创建异常对象。 使用第一个方案中已存在的异常对象来引发异常。 语法是:RAISE EXCEPTION exep。

捕捉异常

处理程序用于捕获异常。

让我们来看看一段代码片段:

DATA: result TYPE P LENGTH 8 DECIMALS 2,
exref TYPE REF TO CX_ROOT,
msgtxt TYPE STRING.
PARAMETERS: Num1 TYPE I, Num2 TYPE I.
TRY.
result = Num1 / Num2.
CATCH CX_SY_ZERODIVIDE INTO exref.
msgtxt = exref→GET_TEXT( ). CATCH CX_SY_CONVERSION_NO_NUMBER INTO exref.
msgtxt = exref→GET_TEXT( ).

在上面的代码片段中,我们试图将Num1除以Num2,得到一个float类型变量的结果。

可以生成两种类型的异常。

  • 数字转换错误。

  • 除以零异常。 处理程序捕获CX_SY_CONVERSION_NO_NUMBER异常以及CX_SY_ZERODIVIDE异常。 这里异常类的GET_TEXT()方法用于获取异常的描述。

异常的属性

这里是异常的五个属性和方法:

编号 属性和说明
1

Textid

用于定义异常的不同文本,并且也影响方法get_text的结果。

2

Previous

此属性可以存储原始异常,允许您构建异常链。

3

get_text

这将根据异常的系统语言将文本表示作为字符串返回。

4

get_longtext

这会将异常的文本表示的长变体作为字符串返回。

5

get_source_position

给出引发异常的程序名和行号。

例子

REPORT ZExceptionsDemo.
PARAMETERS Num_1 TYPE I. DATA res_1 TYPE P DECIMALS 2.
DATA orf_1 TYPE REF TO CX_ROOT.
DATA txt_1 TYPE STRING. start-of-selection.
Write: / 'Square Root and Division with:', Num_1.
write: /. TRY.
IF ABS( Num_1 ) > 150.
RAISE EXCEPTION TYPE CX_DEMO_ABS_TOO_LARGE.
ENDIF.TRY.
res_1 = SQRT( Num_1 ).
Write: / 'Result of square root:', res_1.
res_1 = 1 / Num_1. Write: / 'Result of division:', res_1.
CATCH CX_SY_ZERODIVIDE INTO orf_1.
txt_1 = orf_1→GET_TEXT( ).
CLEANUP.
CLEAR res_1.
ENDTRY. CATCH CX_SY_ARITHMETIC_ERROR INTO orf_1.
txt_1 = orf_1→GET_TEXT( ).CATCH CX_ROOT INTO orf_1.
txt_1 = orf_1→GET_TEXT( ).
ENDTRY.
IF NOT txt_1 IS INITIAL.
Write / txt_1.
ENDIF.
Write: / 'Final Result is:', res_1.

在此示例中,如果数字大于150,则引发异常CX_DEMO_ABS_TOO_LARGE。 上面的代码为数字160生成以下输出。

Square Root and Division with: 160
The absolute value of number is too high
Final Result is:  0.00

SAP ABAP 异常处理相关推荐

  1. 视频教程-SAP ABAP 开发入门-其他

    SAP ABAP 开发入门 16年IT行业从业经验,本科学机械工程及自动化专业,毕业后转行IT行业至今:期间取得北航软件学院软件工程专业硕士学位:工作期间主要从事过项目实施,软件开发工作:擅长系统架构 ...

  2. 每日一个 ChatGPT 使用小技巧系列之2 - 用 ChatGPT 研读 SAP ABAP BAPI 的实现源代码

    本系列之前的文章: 与其整天担心 AI 会取代程序员,不如先让 AI 帮助自己变得更强大 每日一个 ChatGPT 使用小技巧系列之1 - 给出提纲或者素材,让 ChatGPT 帮你写作 正好昨天有朋 ...

  3. SAP ABAP 因系统维护使ABAP语法不再被支持导致使用很久的程序报错问题之分析

    SAP ABAP 因系统维护使ABAP语法不再被支持导致使用很久的程序报错问题之分析 所在项目客户的一家工厂上线已经超过半年,其业务部门提出一个使用了半年的RF枪程序,突然不能使用了.程序直接Dump ...

  4. SAP ABAP FM AC_DOCUMENT_RECORD 研习

    SAP ABAP FM AC_DOCUMENT_RECORD 研习 如下物料凭证号4904373511/2018,对应的财务凭证号32000006184如下: 如何从ABAP的角度用某个functio ...

  5. 《SAP ABAP 开发入门》课程正式发布

    首先,课程还没有全部做完,这次课程采用的是连载的方式,目前已经完成第二章共计8个课时.以后打算每周至少更新2个课时,在每周三和周六必定更新.当然如果时间允许的话,我会加快课程的制作. 课程购买地址 & ...

  6. [转]SAP ABAP中使用Read_Text函数读取项目文本的方法

    SAP ABAP中使用Read_Text函数读取项目文本的方法 使用Read_Text函数来读取文本内容.需要找到相关参数. 下面以采购订单为例: 双击文本,进入文本编辑器. 转到->表头. 显 ...

  7. SAP ABAP技能树

    分枝介绍 从难易程度以及普及程度来进行了大概的分类,从基础,到中级到高级的技能,纯是根据本人的判断进行分类,不代表任何官方的意见. 基础部分 主要涵盖了开发语言基本的需要掌握的技能,纯粹从技术的角度以 ...

  8. 【MM系列】SAP ABAP 编辑字段出现:对象编辑中的错误

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 编辑字段出现: ...

  9. SAP ABAP 平台新的编程模型

    ABAP 编程语言的演变 在过去 40 多年中开发的所有 SAP 功能中,大部分都是用 ABAP 编写的.ABAP 编程语言是我们的旗舰语言,并且已经证明它是开发业务应用程序的经过验证的强大平台. 多 ...

最新文章

  1. 回首2013 展望2014
  2. iOS - iOS 适配
  3. 线程 信号量 java_JAVA多线程-Semaphore信号量
  4. 一个关于native sql的程序
  5. 如何使用HTML5,CSS3和PHP创建一个联系表格
  6. 037_Unicode对照表三
  7. 流媒体服务器 php,nginx 流媒体服务器 FFmpeg 截图
  8. VGAE(Variational graph auto-encoders)论文及代码解读
  9. 脸盲分不清公司的程序员,同事教我一招,果然好用
  10. 找回密码forget_password
  11. 组合命令行生成工具pict
  12. Docker概述 官方文档 Google翻译
  13. Suricata工控规则研究
  14. 计算机算力英语怎么说,MIT警告深度学习正逼近算力极限,突破瓶颈会让人类成为上帝?...
  15. 上传航测影像就能土方计算?!0基础倾斜摄影土方计算流程
  16. 中科大计算机电子信息,中国科学技术大学电子工程与信息科学系
  17. python工资津贴的计算和排序-Python:如何排序(sort)
  18. 社区,v2ex;天才,livid and SAI
  19. 2016年关总结 让爱更有力量
  20. java控制订单过期时间_订单自动过期实现方案

热门文章

  1. 社交营销产品设计思考
  2. 亚马逊生鲜的产品质疑!国外设计师怎么分析用户体验(中英图文对照版)
  3. 2015年度最全微课堂笔记精华包
  4. java版b2b2c社交电商spring cloud分布式微服务(七)springboot开启声明式事务
  5. 移动硬盘格式化了的资料找回方法
  6. Android Scroller用法
  7. 简述c#之sealed 修饰符
  8. HashMap多线程并发问题分析
  9. unlink与close关系
  10. 【crunch bang】 tint2-用来控制桌面的布局