ABAP抓取异常的方法:try,endtry

学习:http://www.cnblogs.com/jiangzhengjun/p/4292428.html

说明:

异常处理机制可以有效避免 dump发生,

  1. 向上抛出异常

如果Form中出现了运行时错误,但Form签名又没有使用RAISING向上抛,则程序会直接挂掉,所以最好是向上抛

FORM subform RAISING cx_static_check cx_dynamic_check.
...

ENDFORM.

:异常类是系统预先定义好的全局类或者是由用户自定义的局部或全局的类。
在sap6.10版本里,exception classes已经取代了catchable runtime errors
基于类的异常exception classes 捕获
  • 一、CX_ROOT

    四个方法:

    IF_MESSAGE~GET_TEXT           获取文本
    IF_MESSAGE~GET_LONGTEXT  获取长文本
    CONSTRUCTOR                           构建函数
    GET_SOURCE_POSITION           获取源代码位置



 CX_ROOT Constant Public Type SOTR_CONC

  • 二、cx_sy_arithmetic_error
    四个方法 《-》 相同

    IF_MESSAGE~GET_TEXT
    IF_MESSAGE~GET_LONGTEXT
    GET_SOURCE_POSITION
    CONSTRUCTOR

  • 1.抓取数据库操作异常,
*&使用异常类:cx_root
  DATA: lo_root1        TYPE REF TO cx_root.

 TRY.
      INSERT zmdm_matnr FROM  ls_zmdm_matnr.
    CATCH cx_root INTO lo_root1 .

  ENDTRY.
  • 2.抓取除法异常,
*&方法一
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.
这个写法与java是相似的

  

*&方法二、(新式的)

DATA result TYPE p DECIMALS 2.
  DATA oref TYPE REF TO cx_root.
  DATA text TYPE string.
  DATA i TYPE i.

  TRY .
      i = 1 / 0.
  CATCH cx_root INTO oref.
      text = oref->get_text( ).
      WRITE: ‘---‘ , text.
      RAISE EXCEPTION oref.”注:如果有此句,则不能放在Function中,否则报:Old and class-based exceptions must not be used the same time
  ENDTRY.
  • 3.抓取上传数值类型字段异常,(防止上传过程系统dump)
 DATA: O_CX  TYPE  REF  TO  CX_ROOT.DATA:LS_UPLOAD-MENGE TYPE STRING,     LS_OUTPUT-MENGG TYPE MENGE_D.
    TRY .
        MOVE LS_UPLOAD-MENGE TO LS_OUTPUT-MENGE.
      CATCH  CX_ROOT INTO  O_CX.
        LV_MSG =  O_CX->IF_MESSAGE~GET_TEXT( ).
        CONCATENATE LS_OUTPUT-MESG LV_MSG INTO LS_OUTPUT-MESG SEPARATED BY ‘;‘.
    ENDTRY.

IF LS_UPLOAD-MENGE  = ‘AAA‘.

   LV_MSG   =   无法将参数 ‘AAA‘ 解释为数字

ENDIF.

时间: 2024-10-08 20:00:21

ABAP抓取异常的方法:try,endtry的相关文章

多线程抓取异常

下面这段代码  可以看出  run方法里面会抛出一个异常.我们在主方法里面进行抓取.但是大家可以复制去测试.这个抓取异常中的代码不会运行 也就是没有抓取到. 在线程里面的异常主程序是无法抓取的. public static void main(String[] args) { try { T01 t01 = new T01(); t01.start(); } catch (Exception e) { System.out.println(1); } } } class T01 extends

fiddler无法抓取chrome解决方法

前端开发中,不可避免的要和服务器端进行联调,少了fiddler这个利器可不行. 由于无线开发需要配置UA,我使用chrome进行访问,但是今儿一早过来,发现fiddler无法抓取chrome的请求了. 想想昨天对chrome进行的操作,我觉得问题应该出在代理的身上. 实际上fiddler是可以抓chrome的请求的.由于我的chrome安装了代理管理的插件SwitchySharp,无论选择直接连接还是选择使用代理连接,插件都会屏蔽fiddler的设置.fiddler会自动给浏览器设置一个代理12

jquery+thinkphp实现跨域抓取数据的方法

jquery的$.post发送数据到服务器后台,在由后台的PHP代码执行远程抓取,存到数据库ajax返回数据到前台,前台用JS接受数据并显示. //远程抓取获取数据$("#update_ac").click(function() {$username = $("#username").text();$("#AC,#rank,#Submit,#solved,#solved2,#solved3").ajaxStart(function(){$(thi

js 抓取距离的方法

网页可见区域宽: document.body.clientWidth; 网页可见区域高: document.body.clientHeight; 网页可见区域宽: document.body.offsetWidth (包括边线和滚动条的宽); 网页可见区域高: document.body.offsetHeight (包括边线的宽); 网页正文全文宽: document.body.scrollWidth; 网页正文全文高: document.body.scrollHeight; 网页被卷去的高(f

adb 命令抓取log日志方法

1.确保手机已连接电脑,并开启调试 2.输入指令:  adb logcat  *:E  >c:\log.txt 如图所示: "E"  表示log日志级别 adb log日志级别 : 每一个输出的Android日志信息都有一个标签和它的优先级. · 日志的标签是系统部件原始信息的一个简要的标志.(比如:"View"就是查看系统的标签). · 优先级有下列集中,是按照从低到高顺利排列的: V - Verbose (lowest priority) D - Debu

Python抓取网页&批量下载文件方法初探(正则表达式+BeautifulSoup) (转)

Python抓取网页&批量下载文件方法初探(正则表达式+BeautifulSoup) 最近两周都在学习Python抓取网页方法,任务是批量下载网站上的文件.对于一个刚刚入门python的人来说,在很多细节上都有需要注意的地方,以下就分享一下我在初学python过程中遇到的问题及解决方法. 一.用Python抓取网页 基本方法: [python] view plaincopyprint? import urllib2,urllib url = 'http://www.baidu.com' req 

模拟器抓取https方法

说明:为了解决安卓手线上不能抓取https请求,以下整理通过模拟器抓取https请求方法如下:前置条件:安卓模拟器1.夜神抓包工具:fiddler.charles不要安装证书 第一步安装模拟器 可以按照夜神模拟器步骤省略 第二步de.robv.android.xposed.installer 模拟器按照: 下载地址:http://repo.xposed.info/module/de.robv.android.xposed.installer 第三步安装JustTrustMe 下载地址: http

明文密码和散列值抓取防范方法

一.单机密码抓取的防范方法 微软为了防止用户密码在内存中以明文形式泄露,发不了补丁KB2871997,关闭了Wdigest功能.windows server 2012以上版本默认关闭Wdigest,使攻击者无法从内存中获取明文密码.对于win server 2012以下版本,通过安装KB2871997补丁,可以避免攻击者获取明文密码. 通过查看注册表键值,可以判断Wdigest功能状态.如果该项值为“1”则为开启,即可以获取明文密码,如果该项值为“0”,则明文密码不会出现在内存中.开启和关闭Wd

用正则表达式抓取网页中的ul 和 li标签中最终的值!

获取你要抓取的页面 const string URL = "http://www.hn3ddf.gov.cn/price/GetList.html?pageno=1";            string htmlStr = null;            for (int i = 0; i < 10; i++)            {                try                {                    System.Net.Http