SAP ABAP 异常处理
异常是在程序执行期间出现的问题。 当异常发生时,程序的正常流程中断,程序应用程序异常终止,这是不推荐的,因此这些异常将被处理。
异常提供了一种将控制从程序的一个部分转移到另一个部分的方法。 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 异常处理相关推荐
- 视频教程-SAP ABAP 开发入门-其他
SAP ABAP 开发入门 16年IT行业从业经验,本科学机械工程及自动化专业,毕业后转行IT行业至今:期间取得北航软件学院软件工程专业硕士学位:工作期间主要从事过项目实施,软件开发工作:擅长系统架构 ...
- 每日一个 ChatGPT 使用小技巧系列之2 - 用 ChatGPT 研读 SAP ABAP BAPI 的实现源代码
本系列之前的文章: 与其整天担心 AI 会取代程序员,不如先让 AI 帮助自己变得更强大 每日一个 ChatGPT 使用小技巧系列之1 - 给出提纲或者素材,让 ChatGPT 帮你写作 正好昨天有朋 ...
- SAP ABAP 因系统维护使ABAP语法不再被支持导致使用很久的程序报错问题之分析
SAP ABAP 因系统维护使ABAP语法不再被支持导致使用很久的程序报错问题之分析 所在项目客户的一家工厂上线已经超过半年,其业务部门提出一个使用了半年的RF枪程序,突然不能使用了.程序直接Dump ...
- SAP ABAP FM AC_DOCUMENT_RECORD 研习
SAP ABAP FM AC_DOCUMENT_RECORD 研习 如下物料凭证号4904373511/2018,对应的财务凭证号32000006184如下: 如何从ABAP的角度用某个functio ...
- 《SAP ABAP 开发入门》课程正式发布
首先,课程还没有全部做完,这次课程采用的是连载的方式,目前已经完成第二章共计8个课时.以后打算每周至少更新2个课时,在每周三和周六必定更新.当然如果时间允许的话,我会加快课程的制作. 课程购买地址 & ...
- [转]SAP ABAP中使用Read_Text函数读取项目文本的方法
SAP ABAP中使用Read_Text函数读取项目文本的方法 使用Read_Text函数来读取文本内容.需要找到相关参数. 下面以采购订单为例: 双击文本,进入文本编辑器. 转到->表头. 显 ...
- SAP ABAP技能树
分枝介绍 从难易程度以及普及程度来进行了大概的分类,从基础,到中级到高级的技能,纯是根据本人的判断进行分类,不代表任何官方的意见. 基础部分 主要涵盖了开发语言基本的需要掌握的技能,纯粹从技术的角度以 ...
- 【MM系列】SAP ABAP 编辑字段出现:对象编辑中的错误
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 编辑字段出现: ...
- SAP ABAP 平台新的编程模型
ABAP 编程语言的演变 在过去 40 多年中开发的所有 SAP 功能中,大部分都是用 ABAP 编写的.ABAP 编程语言是我们的旗舰语言,并且已经证明它是开发业务应用程序的经过验证的强大平台. 多 ...
最新文章
- 回首2013 展望2014
- iOS - iOS 适配
- 线程 信号量 java_JAVA多线程-Semaphore信号量
- 一个关于native sql的程序
- 如何使用HTML5,CSS3和PHP创建一个联系表格
- 037_Unicode对照表三
- 流媒体服务器 php,nginx 流媒体服务器 FFmpeg 截图
- VGAE(Variational graph auto-encoders)论文及代码解读
- 脸盲分不清公司的程序员,同事教我一招,果然好用
- 找回密码forget_password
- 组合命令行生成工具pict
- Docker概述 官方文档 Google翻译
- Suricata工控规则研究
- 计算机算力英语怎么说,MIT警告深度学习正逼近算力极限,突破瓶颈会让人类成为上帝?...
- 上传航测影像就能土方计算?!0基础倾斜摄影土方计算流程
- 中科大计算机电子信息,中国科学技术大学电子工程与信息科学系
- python工资津贴的计算和排序-Python:如何排序(sort)
- 社区,v2ex;天才,livid and SAI
- 2016年关总结 让爱更有力量
- java控制订单过期时间_订单自动过期实现方案