Jerry和SAP成都研究院一些新同事聊天时,谈到ABAP和SAP GUI这个话题。不少新同事在加入SAP成都以前,是作Java和C++开发的,习惯了Eclipse/IntelliJ IDEA/Visual Studio这些现代IDE,对于SAP GUI这个比较”复古“的IDE不太适应。前端
其实还有一个选择:ABAP Development Tools,最初在SAP内部称为ABAP in Eclipse。这个工具SAP在不少场合简称为ADT,本文后续部分也使用这个简称。程序员
简单地说,SAP对Eclipse作了扩展,开发了一些插件,使得开发人员能使用Eclipse完成部分之前在SAP GUI里进行的ABAP开发工做。编程
本文不去重复网上和SAP帮助文档里对ADT的介绍,而是介绍一些Jerry的原创内容。服务器
Jerry曾经写过一篇文章 那些年我用过的SAP IDE, 里面也提到了ADT。本文对其作详细介绍。session
文章目录架构
1. ADT的工做原理框架
2. SAP GUI和ADT的关系编辑器
3. ADT相比SAP GUI具备的一些独到之处函数
4. ADT其余一些值得一提的小功能工具
下面是正文。
1. ADT的工做原理
不少从Eclipse作Java开发的朋友转到ADT后,最大的不习惯就是ADT没办法离线使用。即便是用SAP云平台Neo编程环境里的SDK,开发人员也能够在本地完成开发后,使用命令行或者Eclipse Run As菜单将其发布到SAP云平台上。然而这种用法对于ADT来讲行不通,由于后者仍然是一个Client / Server模式中的Client端。从本质上讲,和SAP GUI的区别,仅仅体如今对Netweaver服务器上开发资源的展现和操做方式有所差别罢了。
正由于这种CS架构,每次咱们在ADT里操做Netweaver上的ABAP资源时,好比编辑一个ABAP类并保存,实际上都是经过消费ABAP后台暴露出的Restful API来完成的。
这种Restful API的消费行为能够经过打开ADT里的ABAP Communication Log视图来观察。点击Start logging按钮:
在源代码里随便作一些改动,好比增长一个空行,能观察到这个修改动做触发了不少到ABAP后台的HTTP请求:
若是想本身调试这些后台操做的具体实现,用SAP GUI登陆ABAP后台,使用事务码SICF找到节点/sap/bc/adt:
在节点处理类的方法HANDLE_REQUEST里设置断点便可调试:
HTTP请求发送到后台以后,上述方法会调用一个统一的入口函数SADT_REST_RFC_ENDPOINT, 该函数和ADT后台框架其余处理逻辑的交互以下图所示:
关于这些HTTP的请求和响应明细,请参考Jerry的博客:
An example to help you understand how does ADT work
https://blogs.sap.com/2014/08...
好比在ADT里对ABAP源代码作语法检查,实际上就是把整段代码作一个Base64编码,而后经过HTTP Post发送到后台,由后台执行对应的检查函数,结果经过HTTP响应返回给ADT前端。
相应的,若是对ADT的前台Java代码感兴趣,请移步ADT安装目录下的plugins文件夹,把里面的jar包反编译出来阅读源代码便可。
2. SAP GUI和ADT的关系
Jerry的我的观点是:两者互为补充。
一方面,对于S/4HANA不少新功能的开发,好比CDS view和AMDP(ABAP Managed Database Procedure), 开发人员没有选择的余地,必须使用ADT,由于SAP GUI不支持这些新功能的开发。
好比在SAP GUI里即便想浏览CDS view的内容也不行,会收到提示:
Please use the ADT Tools in Eclipse to process DDL sources.
而AMDP,就是一个特殊的ABAP类,可以在ABAP方法里执行HANA的SQLScript或者存储过程。
SAP GUI里能够查看AMDP的源代码,可是无法作开发。试图在SAP GUI里进行编辑时,会遇到上面的提示信息:
Class XX contains stored procedures which cannot be changed in SAP GUI
反之,SAP GUI里一些比较传统的开发,ADT也是不支持的。举一些例子。
传统Dynpro程序的Screen开发,双击Screen number,就能够经过点击Layout按钮打开Screen Painter,而后进行所见即所得的Screen布局开发:
然而若是在ADT里试图编辑这个Screen会发生什么事?
ADT会打开一个新的标签页,里面显示一个嵌入的SAP GUI窗口,像Screen Painter和其余一些传统的ABAP开发,均在这个嵌入的SAP GUI里进行。
这就是Jerry在这一小节标题里提到SAP GUI和ADT互为补充的含义:即使使用了ADT,也不意味着能和SAP GUI说再见——不少传统的ABAP开发仍然须要在SAP GUI里进行,哪怕是做为一个窗口嵌入在ADT里。
使用SAP GUI作开发的ABAP顾问,应该明白这三个session的区别:
咱们每次用SAP GUI登陆一个系统,都会产生一个新的User Session,每一个User Session里用/o打开一个新的事务码,则是在该User Session里开启了一个新的ABAP Session。一个User Session默认能打开最多6个ABAP Session,能够经过修改系统参数把最大数目扩充为16个。
那么ADT里打开的嵌有SAP GUI窗口的标签页,背后启动的Session类型是什么?通过Jerry测试,答案是User Session。
下图是ADT里打开的两个标签和其对应的两个User Session,用不一样颜色来区分。
3. ADT和SAP GUI相比一些独到之处
既然是一个基于Eclipse的IDE,ADT和SAP GUI相比仍是存在一些独到之处。
(1) 因为ADT是基于Eclipse这个较之SAP GUI来讲更加现代的IDE,从使用习惯上来讲更贴近Java/C++程序员。
以ABAP类为例,各个维度的信息在ADT里能在一个屏幕里同时显示,在SAP GUI里一个屏幕显示的信息维度很单一,若是想看其余维度信息,只有经过双击的方式跳转,查看完毕后经过回退键回到正在工做的界面。
又好比全部添加了关注的系统的ST22信息能在一个地方统一监控了,Jerry不再须要本身开发工具实现了:
(2) ADT提供了不少代码重构的向导(Assistant), Java和C++的开发人员对这些类的重构功能必定不会陌生。
Delete unused variables:
快速删除一个方法里全部定义了但未使用的局部变量,这个功能很实用,SAP GUI不支持。
Extract Methods: 若是一段代码反复出现,能够考虑用重构技术里的方法提取,将其封装成一个方法。
固然还在使用SAP GUI的开发人员要使用ABAP重构向导也是能够的, 根据SAP GUI版本的不一样, 入口也稍有差别。
在Jerry的SAP GUI 740版本里,重构向导经过Utilities菜单进入。
740以前的版本,重构向导的打开方式大同小异:
(3) 对SAP GUI一些经常使用功能的原生支持
所谓原生支持,指用Eclipse原生的页面来提供之前在SAP GUI里实现的功能。
对ABAP开发顾问来讲,几乎天天都要在SAP GUI进行的操做就是ABAP类和报表的调试。
有的之前从事Java开发的朋友们转到SAP GUI后,刚上手时使用SAP GUI的调试器总以为很别扭。一旦使用ADT的调试器,熟悉的味道又回来了。在ADT里调试ABAP和Eclipse里调试Java程序的方式彻底一致。
SAP GUI里的单元测试和分支/语句执行覆盖率:
ADT里也提供了单元测试和各类覆盖率审查的原生支持:
SAP GUI里的事务码SAT在ADT里的原生支持:
使用方式和SAP GUI里的没有差异。
(4) 方便的SQL console功能。
之前在SAP GUI里时,有时出于测试目的想写些简单的SQL语言作些验证,还得建立一个报表而后在报表里书写。在ADT里,直接使用SQL console就可省去没必要要的报表建立:
(5) 改进的代码版本比较功能
Jerry以前的公众号文章 我用ABAP作过的那些无聊的事情 提到,有的朋友以为SAP GUI里自带的代码比较工具不是很好用:
现在在ADT里,ABAP开发人员终于能够像Java程序员同样,享受Eclipse提供的便利的代码版本比较功能了:
4. ADT其余一些值得一提的小功能
(1) ADT Link
好比任何一个在ADT里可以查看的资源,都有一个所谓的ADT Link,经过菜单Share Link查看:
这种Link格式以下:
adt://AG3/sap/bc/adt/vit/wb/object_type/tabldt/object_name/ZORDER
经过Open ADT Link菜单,输入上述ADT Link,能直接打开对应的资源,而不须要像SAP GUI那样,须要先运行正确的事务码,进入事务码以后再打开资源。
(2) 自定义编辑器颜色
Jerry和不少程序猿同样,两件T恤衫就能穿一个夏天:
然而对于本身天天都要使用八到十个小时的IDE,其个性化装扮是一点都不能含糊。
如何才能让您的IDE和其余程序猿相比显得不同凡响呢?一个办法是个性化字体和背景色。好比Jerry的SAP GUI的个性化设置是这样的,字体必须用程序猿专用的等宽开源字体Inconsolata,这样显得比较专业。
SAP GUI的颜色个性化设置稍显麻烦,须要一项项手动设置。而ADT由于是基于Eclipse,因此主题的个性化就容易多了。若是以为下面的dark主题还不够酷,
安装一个名叫Eclipse Color Theme的插件,就可使用这个插件预置好的几十套主题,真正作到一年54周每周换一套了。程序猿衣着能够随便,但IDE或者代码编辑器决不能随便。
总结
说了这么多,Jerry并非在推销ADT,在我心中SAP GUI和ADT都是优秀的IDE,各有优缺点。我以为网上流传的程序猿IDE和工具的鄙视链很无聊,与其有时间去鄙视别人,不如把这时间用来深刻研究本身天天用的IDE,进一步提升本身单位时间内的工做效率。
祝你们都能愉快地使用SAP GUI和ADT,作到驾轻就熟。感谢阅读。
更多阅读
要获取更多Jerry的原创文章,请关注公众号"汪子熙":