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的原創文章,請關注公衆號"汪子熙":