摘要:比如的的個性化設置是這樣的,字體必須用程序猿專用的等寬開源字體,這樣顯得比較專業。我覺得網上流傳的程序猿和工具的鄙視鏈很無聊,與其有時間去鄙視別人,不如把這時間用來深入研究自己每天用的,進一步提高自己單位時間內的工作效率。
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。本文對其做詳細介紹。
文章目錄
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的區別:
User Session
ABAP Session
Internal 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,做到得心應手。感謝閱讀。
更多閱讀
動手使用ABAP Channel開發一些小工具,提升日常工作效率
聊聊C語言和ABAP
ABAP vs Java, 蛙泳 vs 自由泳
300行ABAP代碼實現一個最簡單的區塊鏈原型
Jerry的ABAP原創技術文章合集
ABAP開發人員未來應該學些什么
Jerry的ABAP, Java和JavaScript亂燉
我用ABAP做過的那些無聊的事情
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71950.html
摘要:實現步驟非常簡單,在標準程序的內創建一個隱式增強。禁止在測試服務器和生產服務器使用否則由此造成的一切負面后果,本人及概不負責。 最近Jerry在忙一個項目,技術棧換成了nodejs平臺,語言換成了JavaScript,因為趕項目進度,一直沒時間更新公眾號。感謝大家的支持,關注人數還是慢慢地增長到了3000。 showImg(https://segmentfault.com/img/re...
摘要:這是年的第篇文章,也是汪子熙公眾號總共第篇原創文章。使用通過格式發送和文件到服務器關于格式的詳細說明,參考開發社區和的文檔我在前文例子的基礎上稍作修改在里使用兩個類型為的標簽,分別上傳和文件用來測試的本地文件,大小為字節。 這是 Jerry 2021 年的第 71 篇文章,也是汪子熙公眾號總共第 348 篇原創文章。 Jerry 之前發布過一篇文章 不使用任何框架,手寫純 Jav...
摘要:本文里提到的所有都是基于版本的,這使得我又一次被鄙視了使用的程序猿鄙視使用的程序猿。因此這些事物碼本身也是可以通過進行增強的。 在Google上根據關鍵字程序員鄙視鏈搜索,會得到68多萬條結果。 showImg(https://segmentfault.com/img/remote/1460000014000687); 玲瑯滿目的搜索結果里是眾多不同維度劃分的鄙視鏈。 其中有一個維度,...
摘要:本文里提到的所有都是基于版本的,這使得我又一次被鄙視了使用的程序猿鄙視使用的程序猿。因此這些事物碼本身也是可以通過進行增強的。 在Google上根據關鍵字程序員鄙視鏈搜索,會得到68多萬條結果。 showImg(https://segmentfault.com/img/remote/1460000014000687); 玲瑯滿目的搜索結果里是眾多不同維度劃分的鄙視鏈。 其中有一個維度,...
摘要:本文里提到的所有都是基于版本的,這使得我又一次被鄙視了使用的程序猿鄙視使用的程序猿。因此這些事物碼本身也是可以通過進行增強的。 在Google上根據關鍵字程序員鄙視鏈搜索,會得到68多萬條結果。 showImg(https://segmentfault.com/img/remote/1460000014000687); 玲瑯滿目的搜索結果里是眾多不同維度劃分的鄙視鏈。 其中有一個維度,...
閱讀 880·2021-11-15 11:38
閱讀 1600·2021-09-24 09:48
閱讀 838·2021-09-24 09:47
閱讀 2270·2021-08-26 14:15
閱讀 3497·2019-08-30 11:09
閱讀 2601·2019-08-29 16:55
閱讀 1582·2019-08-26 14:01
閱讀 3032·2019-08-23 16:47