Eclipse 不为人所知的另一面 - 企业管理软件领域 ABAP 编程语言开发利器
對于 Java 從業(yè)人員來說,無論是剛?cè)腴T的新手還是專家,肯定都正在或者曾經(jīng)使用過 Eclipse,這是一款優(yōu)秀的編寫 Java 程序的 IDE.
然而可能大多數(shù) Java 開發(fā)人員都沒有意識到,Eclipse 同時也能用來進行另一款在企業(yè)管理軟件開發(fā)領(lǐng)域大名鼎鼎的編程語言的開發(fā)工作,這門語言就是 ABAP.
在 2022 年 3 月最新的 TIOBE 編程語言排行榜上,Python, C 和 Java 分列前三甲,而 ABAP 位列第 42 名。
ABAP 之前的兩門語言,分別是同樣出自豪門微軟的 Powershell 和 TypeScript.
而 ABAP 這門編程語言,是企業(yè)管理軟件巨頭,德國最大的軟件公司 SAP 使用的開發(fā)語言,其旗艦級產(chǎn)品 S/4HANA 和曾經(jīng)成為 ERP 軟件領(lǐng)域代名詞的 R/3,都基于 ABAP 開發(fā)而成。
在 SAP 公司創(chuàng)始之初,ABAP 程序的編寫工具是 SAP GUI,一個界面古樸的 IDE,如下圖所示:
SAPGUI 這款 IDE 的頁面布局設(shè)計,乍一看有點像現(xiàn)在的 Visual Studio Code,但 SAPGUI 誕生于 1992 年,可以說是 Visual Studio Code 的前輩了。
那么為什么 SAP 有了 SAPGUI 之后,還會選擇將 Eclipse 改造成 ABAP 的另一款開發(fā)工具呢?這就是本文要闡述的內(nèi)容。
SAP 在 Eclipse 框架的基礎(chǔ)上,開發(fā)出了一系列專門用于 ABAP 開發(fā)的插件。這一經(jīng)過改造后的 Eclipse,有了一個新的名稱:ABAP Development Tools for SAP Netweaver,在 SAP 官方文檔里經(jīng)常簡寫為 ADT. 為了便于 Java 程序員閱讀,本文余下部分中提到的 Eclipse,如無特殊說明,均代表 ADT.
下圖是在 ADT 里點擊 Help -> About 之后彈出的該 Eclipse 的版本號。
本文余下的部分從下列幾個方面向大家介紹,經(jīng)過 SAP 改造之后的 Eclipse(ADT),為何能成為企業(yè)管理軟件領(lǐng)域的 ABAP 應(yīng)用開發(fā)利器。
1. ADT的工作原理
很多從 Eclipse 做 Java 開發(fā)的朋友轉(zhuǎn)到 ADT 后,最大的不習(xí)慣就是 ADT 沒辦法離線使用。即使是用 SAP 云平臺 Neo 編程環(huán)境里的 SDK,開發(fā)人員也可以在本地完成開發(fā)后,使用命令行或者 Eclipse Run As 菜單將其發(fā)布到 SAP 云平臺上。然而這種用法對于 ADT 來說行不通,因為后者仍然是一個 Client / Server模式中的 Client 端。從本質(zhì)上講,在開發(fā) ABAP 時,Eclipse 和 SAP GUI 的區(qū)別,僅僅體現(xiàn)在對 Netweaver 服務(wù)器上開發(fā)資源的展示和操作方式有所差異罷了。
正因為這種 C/S 架構(gòu),每次我們在 ADT 里操作 Netweaver 上的 ABAP 資源時,比如編輯一個 ABAP 類并保存,實際上都是通過消費 ABAP 后臺暴露出的 Restful API 來完成的。
這種 Restful API 的消費行為可以通過打開 ADT 里的 ABAP Communication Log 視圖來觀察。點擊 Start logging 按鈕:
在源代碼里隨便做一些改動,比如增加一個空行,能觀察到這個修改動作觸發(fā)了很多到 ABAP 后臺的 HTTP 請求:
如果想自己調(diào)試這些后臺操作的具體實現(xiàn),用 SAP GUI 登錄 ABAP 后臺,使用事務(wù)碼SICF找到節(jié)點/sap/bc/adt:
在節(jié)點處理類的方法 HANDLE_REQUEST 里設(shè)置斷點即可調(diào)試:
HTTP 請求發(fā)送到后臺之后,上述方法會調(diào)用一個統(tǒng)一的入口函數(shù) SADT_REST_RFC_ENDPOINT, 該函數(shù)和 ADT 后臺框架其他處理邏輯的交互如下圖所示:
在 ADT 里對 ABAP 源代碼做語法檢查,實際上就是把整段代碼做一個 Base64 編碼,然后通過 HTTP Post 發(fā)送到后臺,由后臺執(zhí)行對應(yīng)的檢查函數(shù),結(jié)果通過 HTTP 響應(yīng)返回給 ADT 前端。
相應(yīng)的,如果對ADT的前臺 Java 代碼感興趣,請移步 ADT 安裝目錄下的 plugins 文件夾,把里面的 jar 包反編譯出來閱讀源代碼即可。
2. SAP GUI 和 ADT的 關(guān)系
一言以蔽之:二者互為補充。
一方面,對于S/4HANA很多新功能的開發(fā),比如 CDS view 和 AMDP(ABAP Managed Database Procedure), 開發(fā)人員沒有選擇的余地,必須使用 ADT,因為 SAP GUI 不支持這些新功能的開發(fā)。
比如在 SAP GUI 里即使想瀏覽 CDS view 的內(nèi)容也不行,會收到提示:
Please use the ADT Tools in Eclipse to process DDL sources.
而 AMDP,就是一個特殊的 ABAP 類,能夠在 ABAP 方法里執(zhí)行 HANA 的SQLScript 或者存儲過程。
SAP GUI 里可以查看 AMDP 的源代碼,但是沒法做開發(fā)。試圖在 SAP GUI 里進行編輯時,會遇到上面的提示信息:
Class XX contains stored procedures which cannot be changed in SAP GUI
反之,SAP GUI 里一些比較傳統(tǒng)的開發(fā),ADT 也是不支持的。舉一些例子。
傳統(tǒng) Dynpro 程序的 Screen 開發(fā),雙擊 Screen number,就可以通過點擊Layout 按鈕打開 Screen Painter,然后進行所見即所得的 Screen 布局開發(fā):
然而如果在ADT里試圖編輯這個Screen會發(fā)生什么事?
ADT 會打開一個新的標(biāo)簽頁,里面顯示一個嵌入的 SAP GUI 窗口,像 Screen Painter 和其他一些傳統(tǒng)的 ABAP 開發(fā),均在這個嵌入的 SAP GUI 里進行。
使用 SAP GUI 做開發(fā)的 ABAP 顧問,應(yīng)該明白這三個 session 的區(qū)別:
- User Session
- ABAP Session
- Internal Session
我們每次用 SAP GUI 登錄一個系統(tǒng),都會產(chǎn)生一個新的 User Session,每個User Session 里用 /o 打開一個新的事務(wù)碼,則是在該 User Session 里開啟了一個新的 ABAP Session.
一個 User Session 默認能打開最多 6 個 ABAP Session,可以通過修改系統(tǒng)參數(shù)把最大數(shù)目擴充為 16 個。
那么 ADT 里打開的嵌有 SAP GUI 窗口的標(biāo)簽頁,背后啟動的 Session 類型是什么?答案是 User Session.
下圖是 ADT 里打開的兩個標(biāo)簽和其對應(yīng)的兩個 User Session,用不同顏色來區(qū)分。
3. ADT 和 SAP GUI 相比的一些獨到之處
既然是一個基于Eclipse的IDE,ADT 和 SAP GUI 相比還是存在一些獨到之處。
第一,由于 ADT 是基于 Eclipse 這個較之 SAP GUI 來說更加現(xiàn)代的 IDE,從使用習(xí)慣上來說更貼近 Java/C++ 程序員。
以 ABAP 類為例,各個維度的信息在 ADT 里能在一個屏幕里同時顯示,在 SAP GUI 里一個屏幕顯示的信息維度很單一。
如果想看其他維度信息,只有通過雙擊的方式跳轉(zhuǎn),查看完畢后通過回退鍵回到正在工作的界面。
又比如所有添加了關(guān)注的系統(tǒng)的 ST22 信息能在一個地方統(tǒng)一監(jiān)控了:
第二,ADT 提供了很多代碼重構(gòu)的向?qū)?Assistant), Java 和 C++ 的開發(fā)人員對這些類的重構(gòu)功能一定不會陌生。
一些常用的代碼重構(gòu)功能如下:
- Delete unused variables:
快速刪除一個方法里所有定義了但未使用的局部變量,這個功能很實用,SAP GUI 不支持。
- Extract Methods: 如果一段代碼反復(fù)出現(xiàn),可以考慮用重構(gòu)技術(shù)里的方法提取,將其封裝成一個方法。
當(dāng)然還在使用 SAP GUI 的開發(fā)人員要使用 ABAP 重構(gòu)向?qū)б彩强梢缘?#xff0c; 根據(jù)SAP GUI 版本的不同, 入口也稍有差異。
在 SAP GUI 740 版本里,重構(gòu)向?qū)ㄟ^ Utilities 菜單進入。
740 之前的版本,重構(gòu)向?qū)У拇蜷_方式大同小異:
第三,對 SAP GUI 一些常用功能的原生支持。
所謂原生支持,指用 Eclipse 原生的頁面來提供以前在 SAP GUI 里實現(xiàn)的功能。
對 ABAP 開發(fā)顧問來說,幾乎每天都要在 SAP GUI 進行的操作就是 ABAP 類和報表的調(diào)試。
有的以前從事 Java 開發(fā)的朋友們轉(zhuǎn)到 SAP GUI 后,剛上手時使用 SAP GUI 的調(diào)試器總覺得很別扭。一旦使用 ADT 的調(diào)試器,熟悉的味道又回來了。在 ADT里調(diào)試 ABAP 和 Eclipse 里調(diào)試 Java 程序的方式完全一致。
SAP GUI 里的單元測試和分支/語句執(zhí)行覆蓋率:
ADT 里也提供了單元測試和各種覆蓋率審查的原生支持:
SAP GUI 里的事務(wù)碼 SAT 在 ADT 里的原生支持:
使用方式和 SAP GUI 里的沒有差別。
第四,方便的SQL console功能。
以前在 SAP GUI 里時,有時出于測試目的想寫些簡單的 SQL 語言做些驗證,還得創(chuàng)建一個報表然后在報表里書寫。在 ADT 里,直接使用 SQL console 就可省去不必要的報表創(chuàng)建:
第五,改進的代碼版本比較功能。
有些朋友反映 SAP GUI 里自帶的代碼比較工具不是很好用:
如今在 ADT 里,ABAP 開發(fā)人員終于可以像 Java 程序員一樣,享受 Eclipse 提供的便利的代碼版本比較功能了:
4. ADT 其他一些值得一提的小功能
- 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,能直接打開對應(yīng)的資源,而不需要像 SAP GUI 那樣,需要先運行正確的事務(wù)碼,進入事務(wù)碼之后再打開資源。
- 自定義編輯器顏色
如何才能讓自己使用的 IDE 和其他程序猿相比顯得與眾不同呢?一個辦法是個性化字體和背景色。比如字體必須用程序猿專用的等寬開源字體 Inconsolata:
SAP GUI 的顏色個性化設(shè)置稍顯麻煩,需要一項項手動設(shè)置。而 ADT 因為是基于 Eclipse,所以主題的個性化就容易多了。如果覺得下面的 dark 主題還不夠酷,
安裝一個名叫 Eclipse Color Theme 的插件,就可以使用這個插件預(yù)置好的幾十套主題,真正做到一年 54 周每周換一套 Theme 了。
總結(jié)
作為一個擁有 14 年 ABAP 開發(fā)經(jīng)驗的老程序員,在筆者心中 SAP GUI 和 Eclipse 都是優(yōu)秀的 ABAP IDE,各有其長處和適應(yīng)場合。本文通過逐一將 SAP GUI 和 ADT 提供的開發(fā)特性做橫向比較,希望能夠幫助開發(fā)人員感知到這些年的集成開發(fā)環(huán)境自身隨時代發(fā)展而持續(xù)演進,提高,不斷改善開發(fā)人員使用體驗的發(fā)展方向。
祝每一位 ABAP 開發(fā)人員都能愉快地使用 SAP GUI 和 ADT,做到得心應(yīng)手。感謝閱讀。
總結(jié)
以上是生活随笔為你收集整理的Eclipse 不为人所知的另一面 - 企业管理软件领域 ABAP 编程语言开发利器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 马斯克向推特僵尸帐户发最后通牒:30 天
- 下一篇: 美股周一:三大股指涨跌不一,热门科技股多