不喜歡SAP GUI?那試試用Eclipse進行ABAP開發吧

2021-02-19 汪子熙

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/12/an-example-to-help-you-understand-how-does-adt-work/

比如在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,做到得心應手。感謝閱讀。

更多閱讀


相關焦點

  • 使用abapGit在ABAP On-Premises系統和SAP雲平臺ABAP環境之間進行代碼傳輸
    下面跟著Jerry一起,通過一個簡單的例子來了解怎麼做吧。為此,Jerry新建一個代碼倉庫:test-sap-abap-cloud.上圖的意思是我在On-Premises系統裡新創建的開發包,$ZJERRYPACKAGE裡面的代碼,會和github.com的test-sap-abap-cloud這個倉庫建立關聯。
  • Jerry的ABAP原創技術文章合集
    SAP的標準開發對於新的功能代碼的單元測試有很嚴格的要求。https://blogs.sap.com/2013/11/21/four-different-test-isolation-techniques-to-build-your-abap-unit-test/6.
  • SAP ABAP守護進程(ABAP Daemon)的實現方式
    當時Jerry上這門專業課時,《暗黑破壞神II》在國內各大高校的戰網上正進行得如火如荼,Jerry也和其他暗黑愛好者一樣,天天在戰網上KB,KC, 刷暴躁外皮。這個需求翻譯成ABAP的術語,即是否能夠開發一個滿足下列特徵的ABAP程序?終端(SAPGUI或ABAP Development Tool)關閉後仍然能夠繼續運行,且能繼續接收用戶輸入,處理並推送結果給用戶。很多朋友一定很快就會想到ABAP後臺作業。沒錯,開發一個ABAP報表,以後臺作業的方式啟動,的確可以實現脫離終端運行的效果。
  • SAP AMDP介紹 - ABAP託管的HANA資料庫過程
    為了避免讓汪子熙這個公眾號成為神經外科前中顱底亞專業醫學知識的普及號,咱們還是繼續聊SAP技術吧。隨著ABAP 7.40 SP05的發布,SAP ABAP引入了一種新的應用開發範式,即所謂的Code Pushdown.
  • 如何在 SAP BTP 平臺 ABAP 編程環境裡消費基於 SOAP 的 Web Service
    Jerry 2014 年時,曾經在 SAP 社區上寫過一篇英文博客,介紹了如何在 ABAP On-Premises 系統裡,創建和消費 Web Service:Step by step to create, consume and trace web service in ABAP systemhttps://blogs.sap.com/2014/05/20
  • 在SAP雲平臺的CloudFoundry環境下消費ABAP On-Premise OData服務
    讓我們開發一個Web應用,通過OData的方式顯示ABAP On-Premise系統裡的產品列表及價格信息。該例子運行效果如下圖所示。將On-Premise系統的下列4個ICF服務路徑暴露出來:/sap/bc/lrep/sap/iwbep/sap/opu/odata/sap/public至此Cloud Connector上的配置完成了。
  • ABAP-MYMARK-雲代碼庫
    面對程序在不同的系統之間的遷移,你是否也有這樣那樣的煩惱,saplink不能找到程序的關聯gitabap不夠靈活啦啦啦,代碼一鍵到雲,支持雲安裝,雲部署.等等個人付費伺服器級(非雲空間,雲IDE等)附上使用指南:安裝需要S4能訪問雲資源,不支持本地安裝
  • SAP 最新的GUI 770概覽介紹
    Edge (based on Chromium) as alternative browser control for use inthe SAP GUI HTML Control – for becoming independent of the InternetExplorer Control原來一直是32位的RWRFC,NWRFC是指其他系統與SAP通過RFC進行連接的方式
  • 一個13年ABAP老兵的建議:了解這些基礎知識,對ABAP開發有百利而無一害
    在Jerry之前的圖片推送中,我提到了SAP社區上這樣一篇博客:Proof of Concept: Deploying ABAP in Kuberneteshttps://blogs.sap.com/2020/02/06/proof-of-concept-deploying-abap-in-kubernetes
  • SAP SAPLINK安裝ABAP2XLSX
    使用SAPLINK導入開源項目ABAPXLSX第一步:安裝SAPLINK第二步:SE38運行ZSAPLINK程序第三步:選擇導入Pakeage Name,並建議勾選Overwrite Originals;然後點擊按鈕打開Nugg文件第四步:選擇abap2xlsx-7.1.0\build\ABAP2XLSX_V_7_0_6 - 2016-
  • 再見,Eclipse
    那時候,eclipse、jbuilder、netbean三足鼎立的局面,基本形成了。況且,我還需要開發c++、python,這些語言,eclipse都有完善相應的版本插件支持。其實中間,我也不斷地詢問已經轉向使用的同事,我問他究竟別/好像哪裡?但是沒有一個同事能夠清晰的回答我這個問題。大部分的同事只是說就是很好用,你如果細細地問他好在哪兒,他卻說不出來。
  • 再見,Eclipse!
    後來才發現,那些喜歡宣揚文本編輯器才能學會精通java的「高手」真的有點不敢恭維,至少於我,一個好的工具太重要了。並沒有過了多久,我發現一款叫做eclipse的工具,而且身邊還越來越多,於是我決定試一試。
  • 再見,eclipse
    況且,我還需要開發c++、python,這些語言,eclipse都有完善相應的版本插件支持。其實中間,我也不斷地詢問已經轉向使用的同事,我問他究竟別/好像哪裡?但是沒有一個同事能夠清晰的回答我這個問題。大部分的同事只是說就是很好用,你如果細細地問他好在哪兒,他卻說不出來。還有一些同事確實列舉了一些,他認為更為好用的功能,然後告訴我,然後我聽完之後告訴他,其實這些功能eclipse也有。
  • 再見,Eclipse...
    況且,我還需要開發c++、python,這些語言,eclipse都有完善相應的版本插件支持。其實中間,我也不斷地詢問已經轉向使用的同事,我問他究竟別/好像哪裡?但是沒有一個同事能夠清晰的回答我這個問題。大部分的同事只是說就是很好用,你如果細細地問他好在哪兒,他卻說不出來。
  • webservice篇2 ABAP調用外部webservice實例
    N二、SOAMANAGER 做web服務配置;一、 Soamanager 配置服務消費者輸入事務代碼跳轉至網頁:http://upd.changhong.com:8000/ssap/bc/webdynpro/sap/appl_soap_management?s
  • SAP API開發方法大全
    https://blogs.sap.com/2014/05/20/step-by-step-to-create-consume-and-trace-web-service-in-abap-system/我2014年的時候也寫過一篇介紹SOAMANAGER使用步驟的文章,雖然到現在為止,這個工具已經更新換代多次了。
  • ABAP中讀取EXCEL中不同的SHEET數據
    貨鋪QQ群號:834508274微信群不能掃碼進了,可以加我微信SAPliumeng拉進群,申請時請提供您哪個模塊顧問,否則是一律不通過的
  • SAP Fiori系統配置之權限角色
    文章僅代表個人觀點,不代表任何官方觀點。配置權限角色接下來我們拷貝SAP標準SAP Fiori launchpad角色並分配給管理員和終端用戶。具體步驟:1. 執行事務碼 PFCG2.在Service Path輸入「/sap/bc/ui2/flp」3. 點擊執行按鈕,或者點擊F8按鈕4.
  • 使用了 Eclipse 十年之後,我發現還是IDEA更香...
    後來才發現,那些喜歡宣揚文本編輯器才能學會精通java的「高手」真的有點不敢恭維,至少於我,一個好的工具太重要了。並沒有過了多久,我發現一款叫做eclipse的工具,而且身邊還越來越多,於是我決定試一試。
  • Smartform 列印二維碼 (SAP本身支持二維碼列印,不需要插件)
    乾貨鋪QQ群號:834508274微信群不能掃碼進了,可以加我微信SAPliumeng拉進群,申請時請提供您哪個模塊顧問,否則是一律不通過的