而我在SAP做的所有開發都用的是IDE而不是text editor,看來我也免不了處于鄙視鍊末端的結局了。
這篇文章我想介紹一些我用過的SAP IDE的周邊。希望您看了之後有些許收獲。而像Eclipse, Visual Studio這些IDE在SAP圈子外使用也更加廣泛,是以本文不再提及。
本文裡提到的所有IDE都是基于Windows版本的,這使得我又一次被鄙視了:使用Mac OS的程式猿鄙視使用Windows OS的程式猿。
我在SAP工作期間用過的IDE清單如下:(名稱不包含SAP則說明該IDE不是由SAP開發出來的)
SAPGUI
SAP ABAP Development Tools
SAP Cloud Application Studio
SAP WebIDE(codepen, jsbin)
Sublime Text(文本編輯器)
Android Studio(Cloud9)
VirtualBox + Putty
SAPGUI是所有ABAPer養家糊口的工具,見證了SAP從隻有5個員工的無名之輩走向企業管理軟體巅峰的輝煌之路。從嚴格意義上講,SAPGUI不僅僅是個IDE,也是很多使用SAP傳統管理軟體的業務人員們每天工作使用的工具。有個段子就是某同僚去蘇甯買電器,在櫃台結賬時,銷售小妹說,”您等等, 現在系統有問題,下不了單。” 該同僚走上前去看了看螢幕說,”喲,出error啦?讓我F1看看錯誤明細,再看看/h能不能用。” 用過SAPGUI的讀者一定明白我在說什麼。
具體讨論見如下連結:
https://blogs.sap.com/2013/10/07/where-does-tcodes-on-command-line-gets-stored/當時我覺得比較有意思,然後想知道有沒有一個通用且快速的辦法,找到SAPGUI裡任意一個設定,是存儲在系統資料庫裡具體哪個位置的。
同樣是2013年,我寫過一篇部落格:Six kinds of debugging tips to find the source code where the message is raised
需求就是在SAPGUI裡看到一條錯誤資訊,怎樣用六種不同的辦法找到具體是哪一行ABAP代碼抛出的這條錯誤資訊。最後一種使用ST05跟蹤的思路也适用于現在讨論的如何查找SAPGUI的配置在Windows作業系統系統資料庫裡的具體存儲位置:
1. 在修改SAPGUI配置之前,将系統資料庫導出存為A;
2. 修改SAPGUI配置,然後将系統資料庫導出存為B;
3. 用工具比較A和B差異,即可獲得該配置在系統資料庫裡存儲的位置。
我最早遇到需要将SAPGUI裡某段ABAP代碼導出成PDF格式時,總是先建立一個word文檔,在ABAP代碼上Ctrl C然後Ctrl V到word文檔,最後把word文檔轉換成PDF。
其實SAPGUI裡自帶一鍵将代碼導出成PDF的功能。隻需要在下圖配置裡給導出PDF功能配置設定對應的快捷鍵:
值得一提的是,因為SAPGUI裡的所有事物碼也是通過ABAP開發的,包括用來做開發的事物碼SE80本身。是以這些事物碼本身也是可以通過ABAP進行增強的。
比如我在SE80的開發對象類型裡,自定義了一種新的名稱為”Jerry’s Product”的開發對象類型,能夠像其他所有開發對象一樣,通過右鍵菜單進行建立
再比如倘若您對SAPGUI裡ABAP編輯器标準的ABAP文法檢查不太滿意,想對其做增強,這當然是可以的。具體步驟參考我的部落格:Implement Custom Syntax Check in SAPGUI
這種文法增強的一個應用例子,可以參考我公衆号文章 Jerry的ABAP, Java和JavaScript亂炖 裡提到的部落格:Covariance in Java and simulation in ABAP.
我寫這篇部落格的背景是為SAP成都研究院的一個内部技術教育訓練準備教育訓練材料。該文首先介紹了Covariance和Contravaariance的概念,然後描述了Covariance在Java裡的實作,最後給出了我在ABAP裡對于Covariance的一個模拟實作,以及如何增強ABAP編輯器的文法檢查使其能夠自動檢測出違反了Covariance規範的代碼。
我記得在2011年的時候,WebIDE的概念比較火,WebIDE使得開發者隻需要一個浏覽器就可以編寫代碼,并在WebIDE 提供的終端環境中運作。
當時我就覺得很囧, 因為類似WebIDE的概念,其實SAPGUI在很早很早之前就支援了。SAP Netweaver裡有個子產品叫SAP Internet Trasaction Server,能讓SAPGUI裡的流程運作于浏覽器裡。關于這個子產品的詳細介紹,請參考SAP幫助文檔: SAP ITS in SAP NetWeaver Application Server
舉個例子:我可以把SAPGUI裡的SE80放到Fiori的Launchpad裡,
隻需要一些簡單的配置即可實作上述效果,具體步驟見我部落格:Open your SAP GUI transaction in Fiori launchpad
原理介紹見我的另一篇部落格:How is old SAP GUI transaction embedded into Fiori launchpad
文内也提到S/4HANA裡有大量的Fiori tile使用到了這種技術,即通過ITS的方式,讓很古老的一些事務碼比如MM01繼續在浏覽器裡運作。下面第一張圖是SAPGUI裡使用事務碼MM01打開的物料建立頁面,第二張圖是該事務碼通過ITS運作在浏覽器裡的截圖
我不久前剛剛研究過ABAP的文法高亮顯示是怎麼在Chrome浏覽器裡實作的。如果您對此技術細節感興趣,請參考我的部落格:How ABAP syntax highlight is implemented in WebIDE launched via browser
以前SAP内部喜歡把這個IDE稱為ABAP in Eclipse。現在的官方叫法是ABAP Development Tools。實質上就是SAP在Eclipse上以插件(plugin)的方式做了一些擴充。
SAP HANA Studio
和ABAP Development Tools一樣,HANA Studio也是基于Eclipse的IDE,隻是其擁有的SAP自開發的plugin和ABAP Development Tools有所差別。因為需要在此IDE裡連接配接SAP HANA資料庫,是以大多plugin都以命名空間com.sap.ndb.studio開頭。這裡的ndb實際上是HANA剛剛誕生時的SAP内部名稱: New DB的縮寫。
該IDE基于Visual Studio Shell開發,與後者的關系類似于SAP ABAP Development Tools / SAP HANA Studio和Eclipse的關系。我于2011年到2012年參與了該IDE的開發,使用的程式設計語言是C#。
Cloud Application Studio工作原理和ABAP Development Tools類似,在C#端通過RFC調用ABAP背景暴露出的API。
例如在IDE裡選擇了右鍵菜單的Activate之後,
會執行下圖C#代碼中的ActivateContent函數進行ABAP背景對應資源的激活處理。而圖中的C#代理類PDI_RI_CONTENT_ACTIVATE, 對應了ABAP背景的同名函數。一旦圖中最後一行代碼jsonClient.callFunctionModule(proxy)執行,ABAP背景函數PDI_RI_CONTENT_ACTIVATE就會被遠端調用。
我的Cloud for Customer開發同僚們也喜歡用Atom和WebStorm進行前端開發。
該文本編輯器的一大特色是提供了非常簡易的方式讓程式設計人員自行開發能提升自己工作效率的插件。作為一個例子,您可以參考我的部落格:Step by Step to develop your own Sublime Text plugin
Sublime Text另一個我很喜歡的功能是它也具有支援ABAP文法高亮顯示的插件:您可以通過這個連結獲得.
Android Studio
用于SAP Cloud for Customer移動端Android平台。作為Android的腦殘粉,平時寫一些Android小程式,我不會打開相對比較笨重的Android Studio,而使用一些Android WebIDE,比如Cloud9:
這個組合其實不能算IDE了,極大的提升了我日常工作的效率。VirtualBox裡安裝的ubuntu預設配置下的console模式存在一些讓我覺得使用起來不太友善的地方,比如不支援來自windows OS的複制粘貼,不支援自定義字型類型和大小等等,而後者對我來說至關重要。
于是,我會選擇先用VirtualBox啟動ubuntu執行個體,然後再用Putty遠端登入上去,之後所有對ubuntu的操作都在Putty裡完成。而Putty裡是支援複制粘貼,自定義字型等等。
下圖是VirtualBox原生的ubuntu console截圖。
通過比較能發現,在Putty裡我将字型類型改成了我的最愛Inconsolata,大小改成了20。有的朋友可能覺得其實兩張圖看起來都差不多。好吧,作為一個程式猿,每天看着這些界面的時間比對着老婆的時間還長,多花些心思把這些界面設定成自己看起來最順眼的樣子,有助于確定我始終帶着舒适的心情去程式設計。
當然,SAP有着衆多的産品線,也就存在着形形色色的開發工具。一個程式員不可能接觸到所有的開發工具。本文僅僅列出了我工作中使用到的一些IDE,感謝閱讀。