Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试
Jerry的Restful ABAP Programming模型介绍系列的前两篇文章:
- 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用
- Jerry带您了解Restful ABAP Programming模型系列之二:Action和Validation的实现
今天咱们来聊聊SAP云平台ABAP环境上的调试问题。
Jerry在SAP社区上写了600多篇博客,阅读量最高的大概要算下面这篇写于2013年的文章:Six kinds of debugging tips to find the source code where the message is raised
其实实际阅读量远大于14万,因为2016年SAP社区改版,之前的阅读量清零了。
这个数字也说明广大SAP开发者们对代码调试这个话题的重视程度。
Jerry之前在SAP Cloud Platform上进行nodejs和Java开发的时候,对运行在云上的用这两门语言开发的应用的单步调试很头痛。尽管仍然可以通过Jerry这篇文章 如何提高后台服务应用问题的排查效率?日志 VS 远程调试 里介绍的端口映射方式实现在本地电脑上调试云端应用的功能,但Jerry还是怀念On-Premises ABAP里面那种单步调试的便捷性——鼠标轻轻一点,断点即设置好,无需任何配置,立即就能进行单步调试。
那么现在ABAP到了云端后,其单步调试还和之前的On-Premises环境里一样易于使用么?答案是肯定的。
咱们就拿一个具体例子来体验。
Jerry通过Restful ABAP Programming系列的前两篇,已经开发出了一个支持增删改查,支持自定义数据校验和Action的Fiori应用。
我选中ID为103这条记录,点击Accept Travel按钮后,期望通过该Action将其状态设置为Accepted:
不幸的是,我没能看到期望中的状态变化,而是下面这个所有ABAP编程人员都不愿意看见的ABAP运行时错误提示界面。
不过,大家注意到了上图右下角的Debug超链接么?和SAPGUI一样,点击之后立即就能打开调试器,能够观察发生这个运行时错误的调用栈,引起错误的详细代码位置和相关变量的值。
顺便提一句,如果您想自定义在SAP GUI里出现的ABAP运行时错误显示(就是在On-Premises环境下ST22事务码里看到的内容),比如添加一段"佛祖保佑,永无BUG",那么可以参考Jerry这篇文章:
你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧
回到ABAP Development Tool里,我们先点击Show超链接,就可以看到运行时错误明细:Short Text告诉我们,我们点击Accept按钮后,相关的处理框架有意地抛出一个CX_CSP_ACT_RESPONSE的异常。抛出异常的位置是在程序CL_CSP_ACT_CHECK_FEATS_ACTIONS里,这暗示我们,这个错可能和Action执行前的检查(CHECK)有关。
继续向下滑动鼠标,发现在框架代码内,因为从第353行内表it_feature_result里没有读出任何内容,因此sy-subrc不为0,导致进入第355行的RAISE SHORTDUMP分支。
在SAP Cloud Platform ABAP环境下当前登录用户发生的所有运行时错误,可以在ABAP Development Tool的Feed Reader视图下查看,这个功能相当于SAP GUI里的ST22事务码。
现在我们关于这个运行时错误的静态信息了解得差不多了,下一步在调试器里观察。
重新启动Fiori应用,再次点击Accept按钮,出现运行时错误后点击Debug超链接,ABAP调试器自动弹出,引起运行时错误的那一行代码被高亮,同时左边显示出调用栈。
把鼠标放在it_feature_result上,发现这个内表是空的,当然无法从里面读出数据了。这个内表是当前ABAP类CL_CSP_ACT_CHECK_FEATS_ACTIONS的方法handle_rejected_instances的输入参数,需要搞清楚为啥这个输入参数为空。
从抛出运行时异常的栈帧往外看一帧,就知道这个输入的内表是通过第291行的execute_feature_controllers生成的,这个方法会通过回调函数的方式,调用我们在Behavior Definition实现的一个get_features方法里:
这里我们就找到了引起这个运行时错误的根源:因为之前Jerry出于测试目的,注释了一段代码,导致get_features被框架回调时,没有返回框架期望的数据:
当Jerry把这段需要的代码重新enable然后设置断点,点击Accept按钮,通过调用栈可以清晰看到框架的execute_feature_controllers是如何调用到我们实现的get_features回调方法的。
希望通过Jerry这个简单的例子能够让大家对SAP Cloud Platform ABAP编程环境里如何进行调试有一个初步的印象,感谢阅读。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试相关推荐
- Jerry带您了解Restful ABAP Programming模型系列之二:Action和Validation的实现
相信通过Jerry的前一篇文章 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用,想必大家对Restful ABAP Programming模型已经有 ...
- 如何基于Restful ABAP Programming模型开发并部署一个支持增删改查的Fiori应用
Jerry之前的文章30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用 发布之后,有朋友问我,"没错, 我是在你的文章里看到了Fiori应用的 ...
- 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用
2016年时,Jerry曾经写过一系列关于SAP Fiori Smart Template(现在更名为Fiori Elements了)的博客,介绍了所谓的MDD开发方法论 - Metadata Dri ...
- 使用Cloud Application Programming模型开发OData的一个实际例子
刚刚过去的SAP TechEd上,SAP CTO Juergen Mueller向外界传递了一个重要的信息:身处云时代大环境下的SAP从业者,在SAP云平台上该如何选择适合自己的开发方式? Juerg ...
- 如何修改 SAP ABAP OData 模型,使其支持 $expand 操作试读版
正如本教程的开篇介绍文章SAP OData 开发教程 - 从入门到提高(包含 SEGW, RAP 和 CDP)所提到的,SAP OData 服务开发,从实现技术上来说,可以分为三大类.因此本教程也分为 ...
- 一文带你深入理解JVM内存模型
一文带你深入理解JVM内存模型 一.JAVA的并发模型 共享内存模型 在共享内存的并发模型里面,线程之间共享程序的公共状态,线程之间通过读写内存中公共状态来进行隐式通信 该内存指的是主内存,实际上是物 ...
- 『抽丝剥茧』手把手快速上带你开启文心大模型的奇妙冒险
『抽丝剥茧』手把手快速上带你开启文心大模型的奇妙冒险 文心大模型简介 文心大模型ERNIE 3.0系列&&ERNIE-ViLG文生图系列 使用文心大模型 网页快速体验 代码调用之ERN ...
- pythonocr训练模型_cnocr: cnocr是用来做中文OCR的Python 3包。cnocr自带了训练好的识别模型,安装后即可直接使用...
English README. cnocr 使用交流QQ群 欢迎扫码加入QQ交流群: Release Notes Update 2020.04.21: 发布 cnocr V1.1.0 V1.1.0对代 ...
- matlab/simulink汽车带可变阻尼的半主动悬架系统模型
1.内容简介 汽车带可变阻尼的半主动悬架系统模型 308-可以交流.咨询.答疑 2.内容说明 被动悬架的系统模型 图1.1汽车被动悬架模型 根据牛顿第二运动定律可得到被动悬架系统度的车辆动力学模型的运 ...
最新文章
- 黑科技,教你用Python打电话,控制手机技术,快来学一下
- 平时工作事项太多,有哪些好用的事项管理软件?
- 提高你的Java代码质量吧:让我们疑惑的字符串拼接方式的选择
- win10系统启动服务器不可用,解决win10专业版windows installer服务不可用不能启动更不能访问...
- 计算机主机清理步骤,怎么清理主机灰尘 清理灰尘教程
- Codeforces Round #394 (Div. 2) A. Dasha and Stairs 水题
- 大数据处理架构Hadoop
- Nginx突破高并发的性能优化 - 运维笔记
- linux下tomcat6.0与jdk安装详细步骤
- Tensorflow Python API 翻译(sparse_ops)
- python画精美图案_Python语言的魅力------完美图案
- iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
- sop4封装尺寸图_妈妈再也不用担心我PCB封装又做错了~
- 软件工程团队项目方案(四):高校申请指南
- 基于Go Packet实现网络数据包的捕获与分析
- 数学模型的相关概念及意义等理论内容
- 超详细的 Python 方法、函数总结
- 二层交换机和三层交换机的工作原理
- 企业邮箱服务器如何设置?
- python的十句名言_洗脑最厉害的10句名言名句
热门文章
- 我是如何学习写一个操作系统(完结):总结和系列索引
- script标签中的async和defer
- 访问chm文件出现“已取消到该网页的导航”的解决方法
- 每个程序员都应该了解的内存知识【第一部分】
- linux redhat 6.3: /lib/libz.so.1: no version information available
- JVM调优总结(七)-典型配置举例1
- 走近分形与混沌(part10)--用简单的规律来描述复杂的大自然
- 10个Github热门Python库,非常实用!
- Docker 实战教程之从入门到提高(二)
- 关于 ABAP 调试器里的 16 进制值的显示问题