日常开发中,请求管理不善的话,当传输到正式机后,不可避免的会出现一些数据丢失或者内部错误,这时候除了部分是系统本身支持修复外(比如SE37修复函数组),直接定位到有问题的代码进行修改或补充也是一个选择。
但是我们直接代码的话会有MESSAGE报错,不允许更改,下面我来说说实现方法。
之前在网络上看到过两种方式,一种是通过DEBUG形式更改函数组STRD中的两个检查函数,修改其中的系统变量SY-SUBRC = 0来跳过检查,这种方式实现比较好,但是老是跳出来MESSAGE也很麻烦,所以作为一个懒人,还是选择搞一个开关方法实现MESSAGE的开闭;还有一种方式是通过直接修改SOURCE的文本,这种修改更暴力,比较容易出错而且没办法体现在ABAP编辑器中,所以还是选择了前一种方式。
大概的思路是这样:
- SE24写一个代码修复类ZCL_REPAIR_OPEN,提供一个静态属性CODE来输出开关状态,另提供一个静态方法OPEN,传递CODE = X给到SAP内存ZREPAIRE,一个静态方法CLOSE,传递CODE = ''同样给SAP内存ZREPAIRE。
- SE93定义两个事务代码,分别调用类ZCL_REPAIR_OPEN的OPEN方法和CLOSE方法。
- 在STRD函数组TRINT_CORR_CHECK和TRINT_CORR_INSERT函数中,获取SAP内存ZREPAIRE的字段CODE值,通过值来判断执行的事务代码是开还是闭,如果是开则SY-SUBRC EQ 0跳过检查,否则不做处理。
- 需要临时修复代码的时候,就执行事务代码ZOEPN,用完后记得执行ZCLOSE关闭修复功能,不过不关也没事,SAP内存存在于会话中,下一次登录会自动失效。
以上。