在Google上根據(jù)關(guān)鍵字”程序員鄙視鏈”搜索,會得到68多萬條結(jié)果。 玲瑯滿目的搜索結(jié)果里是眾多不同維度劃分的鄙視鏈。 其中有一個維度,就是編程工具的鄙視鏈,比如: 而我在SAP做的所有開發(fā)都用的是IDE而不是text editor,看來我也免不了處于鄙視鏈末端的結(jié)局了。 這篇文章我想介紹一些我用過的SAP IDE的周邊。希望您看了之后有些許收獲。而像Eclipse, Visual Studio這些IDE在SAP圈子外使用也更加廣泛,所以本文不再提及。 本文里提到的所有IDE都是基于Windows版本的,這使得我又一次被鄙視了:使用Mac OS的程序猿鄙視使用Windows OS的程序猿。 我在SAP工作期間用過的IDE清單如下:(名稱不包含SAP則說明該IDE不是由SAP開發(fā)出來的)
SAPGUI SAPGUI是所有ABAPer養(yǎng)家糊口的工具,見證了SAP從只有5個員工的無名之輩走向企業(yè)管理軟件巔峰的輝煌之路。從嚴(yán)格意義上講,SAPGUI不僅僅是個IDE,也是很多使用SAP傳統(tǒng)管理軟件的業(yè)務(wù)人員們每天工作使用的工具。有個段子就是某同事去蘇寧買電器,在柜臺結(jié)賬時,銷售小妹說,”您等等, 現(xiàn)在系統(tǒng)有問題,下不了單?!?該同事走上前去看了看屏幕說,”喲,出error啦?讓我F1看看錯誤明細(xì),再看看/h能不能用?!?用過SAPGUI的讀者一定明白我在說什么。 本文我盡量分享一些我的原創(chuàng)以及并非每位朋友都知道的一些小技巧。 2013年的時候,我看到SAP社區(qū)上有些朋友在討論SAPGUI command line這些用過的事物碼列表是存儲在什么地方的: 得到的答案是,如果是Windows系統(tǒng),則存儲在操作系統(tǒng)的注冊表里: 具體討論見如下鏈接: https://blogs./2013/10/07/where-does-tcodes-on-command-line-gets-stored/ 當(dāng)時我覺得比較有意思,然后想知道有沒有一個通用且快速的辦法,找到SAPGUI里任意一個設(shè)置,是存儲在注冊表里具體哪個位置的。 同樣是2013年,我寫過一篇博客:Six kinds of debugging tips to find the source code where the message is raised 需求就是在SAPGUI里看到一條錯誤信息,怎樣用六種不同的辦法找到具體是哪一行ABAP代碼拋出的這條錯誤信息。最后一種使用ST05跟蹤的思路也適用于現(xiàn)在討論的如何查找SAPGUI的配置在Windows操作系統(tǒng)注冊表里的具體存儲位置: 1. 在修改SAPGUI配置之前,將注冊表導(dǎo)出存為A; 2. 修改SAPGUI配置,然后將注冊表導(dǎo)出存為B; 3. 用工具比較A和B差異,即可獲得該配置在注冊表里存儲的位置。 我最早遇到需要將SAPGUI里某段ABAP代碼導(dǎo)出成PDF格式時,總是先新建一個word文檔,在ABAP代碼上Ctrl C然后Ctrl V到word文檔,最后把word文檔轉(zhuǎn)換成PDF。 其實SAPGUI里自帶一鍵將代碼導(dǎo)出成PDF的功能。只需要在下圖配置里給導(dǎo)出PDF功能分配對應(yīng)的快捷鍵: 然后就可一鍵保存成PDF: 值得一提的是,因為SAPGUI里的所有事物碼也是通過ABAP開發(fā)的,包括用來做開發(fā)的事物碼SE80本身。因此這些事物碼本身也是可以通過ABAP進(jìn)行增強的。 比如我在SE80的開發(fā)對象類型里,自定義了一種新的名稱為”Jerry’s Product”的開發(fā)對象類型,能夠像其他所有開發(fā)對象一樣,通過右鍵菜單進(jìn)行創(chuàng)建: 新建一個開發(fā)對象的實例,維護(hù)名稱: 實例創(chuàng)建成功之后,能在SE80里繼續(xù)維護(hù)其他明細(xì): 再比如倘若您對SAPGUI里ABAP編輯器標(biāo)準(zhǔn)的ABAP語法檢查不太滿意,想對其做增強,這當(dāng)然是可以的。具體步驟參考我的博客:Implement Custom Syntax Check in SAPGUI 這種語法增強的一個應(yīng)用例子,可以參考我公眾號文章 Jerry的ABAP, Java和JavaScript亂燉 里提到的博客:Covariance in Java and simulation in ABAP. 我寫這篇博客的背景是為SAP成都研究院的一個內(nèi)部技術(shù)培訓(xùn)準(zhǔn)備培訓(xùn)材料。該文首先介紹了Covariance和Contravaariance的概念,然后描述了Covariance在Java里的實現(xiàn),最后給出了我在ABAP里對于Covariance的一個模擬實現(xiàn),以及如何增強ABAP編輯器的語法檢查使其能夠自動檢測出違反了Covariance規(guī)范的代碼。 我記得在2011年的時候,WebIDE的概念比較火,WebIDE使得開發(fā)者只需要一個瀏覽器就可以編寫代碼,并在WebIDE 提供的終端環(huán)境中運行。 當(dāng)時我就覺得很囧, 因為類似WebIDE的概念,其實SAPGUI在很早很早之前就支持了。SAP Netweaver里有個模塊叫SAP Internet Trasaction Server,能讓SAPGUI里的流程運行于瀏覽器里。關(guān)于這個模塊的詳細(xì)介紹,請參考SAP幫助文檔: SAP ITS in SAP NetWeaver Application Server 舉個例子:我可以把SAPGUI里的SE80放到Fiori的Launchpad里, ![]() 點擊該Tile,能直接在瀏覽器里使用SE80。如下圖所示: ![]() 只需要一些簡單的配置即可實現(xiàn)上述效果,具體步驟見我博客:Open your SAP GUI transaction in Fiori launchpad 原理介紹見我的另一篇博客:How is old SAP GUI transaction embedded into Fiori launchpad 文內(nèi)也提到S/4HANA里有大量的Fiori tile使用到了這種技術(shù),即通過ITS的方式,讓很古老的一些事務(wù)碼比如MM01繼續(xù)在瀏覽器里運行。下面第一張圖是SAPGUI里使用事務(wù)碼MM01打開的物料創(chuàng)建頁面,第二張圖是該事務(wù)碼通過ITS運行在瀏覽器里的截圖。 ![]() ![]() 可以看出這兩個頁面的布局完全一致。 再回到IDE這個話題,直接通過我的上述博客提到的方式在瀏覽器里運行SE80,其實不能算嚴(yán)格意義上的WebIDE,因為缺乏語法高亮。 ![]() 這種局限在S/4HANA里得到了改善。S/4HANA里有個應(yīng)用叫做Custom Logic,能允許我們直接在瀏覽器里編輯ABAP代碼,支持語法高亮顯示,如下圖所示: ![]() 我不久前剛剛研究過ABAP的語法高亮顯示是怎么在Chrome瀏覽器里實現(xiàn)的。如果您對此技術(shù)細(xì)節(jié)感興趣,請參考我的博客:How ABAP syntax highlight is implemented in WebIDE launched via browser SAP ABAP Development Tools 以前SAP內(nèi)部喜歡把這個IDE稱為ABAP in Eclipse?,F(xiàn)在的官方叫法是ABAP Development Tools。實質(zhì)上就是SAP在Eclipse上以插件(plugin)的方式做了一些擴展。 ![]() 很多具有Java開發(fā)經(jīng)驗的朋友們都喜歡用ABAP Development Tools進(jìn)行ABAP開發(fā)。我在2014年時,曾經(jīng)研究過ABAP Development Tool這個IDE的Java實現(xiàn)代碼,是如何通過RFC(Remote Function Call)調(diào)用到ABAP后臺的。 分析的關(guān)鍵是使用IDE里這個log功能: ![]() ![]() ABAP Development Tools的后臺實現(xiàn)細(xì)節(jié)請參考我博客: An example to help you understand how does ADT work 而IDE端的Java實現(xiàn)細(xì)節(jié),可以將安裝目錄的plugins文件夾下的.class文件反編譯出來自行學(xué)習(xí): ![]() SAP HANA Studio 和ABAP Development Tools一樣,HANA Studio也是基于Eclipse的IDE,只是其擁有的SAP自開發(fā)的plugin和ABAP Development Tools有所區(qū)別。因為需要在此IDE里連接SAP HANA數(shù)據(jù)庫,因此大多plugin都以命名空間com.sap.ndb.studio開頭。這里的ndb實際上是HANA剛剛誕生時的SAP內(nèi)部名稱: New DB的縮寫。 ![]() 既然是基于Java實現(xiàn)的plugin去連接HANA數(shù)據(jù)庫,必然少不了JDBC。在HANA Studio里的大多數(shù)操作都會使用到com.sap.ndb.studio.jdbc這個plugin: ![]() 其實現(xiàn)代碼也是可以將plugin文件夾里的.class文件反編譯出來查看。 ![]() SAP Cloud Application Studio SAP Business by Design和SAP Cloud for Customer的Partners使用該IDE進(jìn)行二次開發(fā)。 ![]() 該IDE基于Visual Studio Shell開發(fā),與后者的關(guān)系類似于SAP ABAP Development Tools / SAP HANA Studio和Eclipse的關(guān)系。我于2011年到2012年參與了該IDE的開發(fā),使用的編程語言是C#。 Cloud Application Studio工作原理和ABAP Development Tools類似,在C#端通過RFC調(diào)用ABAP后臺暴露出的API。 例如在IDE里選擇了右鍵菜單的Activate之后, ![]() 會執(zhí)行下圖C#代碼中的ActivateContent函數(shù)進(jìn)行ABAP后臺對應(yīng)資源的激活處理。而圖中的C#代理類PDI_RI_CONTENT_ACTIVATE, 對應(yīng)了ABAP后臺的同名函數(shù)。一旦圖中最后一行代碼jsonClient.callFunctionModule(proxy)執(zhí)行,ABAP后臺函數(shù)PDI_RI_CONTENT_ACTIVATE就會被遠(yuǎn)程調(diào)用。 ![]() SAP WebIDE 我2014年到2016年做Fiori產(chǎn)品開發(fā)用的就是這個IDE。更多關(guān)于這個WebIDE的細(xì)節(jié)可以參考我的另一篇公眾號文章: Jerry的通過CDS view + Smart Template 開發(fā)Fiori應(yīng)用的blog合集![]() 如果只是寫一些小的Web程序,我也喜歡用一些其他的工具,比如CodePenhttps://: ![]() 或者jsbin。這些工具都支持開發(fā)人員直接在瀏覽器里編碼并運行,非常方便。 ![]() 我的Cloud for Customer開發(fā)同事們也喜歡用Atom和WebStorm進(jìn)行前端開發(fā)。 Sublime Text(文本編輯器) 該文本編輯器的一大特色是提供了非常簡易的方式讓編程人員自行開發(fā)能提升自己工作效率的插件。作為一個例子,您可以參考我的博客: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: ![]() ![]() VirtualBox + Putty 這個組合其實不能算IDE了,極大的提升了我日常工作的效率。VirtualBox里安裝的ubuntu默認(rèn)配置下的console模式存在一些讓我覺得使用起來不太方便的地方,比如不支持來自windows OS的復(fù)制粘貼,不支持自定義字體類型和大小等等,而后者對我來說至關(guān)重要。 于是,我會選擇先用VirtualBox啟動ubuntu實例,然后再用Putty遠(yuǎn)程登錄上去,之后所有對ubuntu的操作都在Putty里完成。而Putty里是支持復(fù)制粘貼,自定義字體等等。 下圖是VirtualBox原生的ubuntu console截圖。 ![]() 下圖是用Putty遠(yuǎn)程登錄ubuntu之后的操作界面。 ![]() 通過比較能發(fā)現(xiàn),在Putty里我將字體類型改成了我的最愛Inconsolata,大小改成了20。有的朋友可能覺得其實兩張圖看起來都差不多。好吧,作為一個程序猿,每天看著這些界面的時間比對著老婆的時間還長,多花些心思把這些界面設(shè)置成自己看起來最順眼的樣子,有助于確保我始終帶著舒適的心情去編程。 當(dāng)然,SAP有著眾多的產(chǎn)品線,也就存在著形形色色的開發(fā)工具。一個程序員不可能接觸到所有的開發(fā)工具。本文僅僅列出了我工作中使用到的一些IDE,感謝閱讀。 |
|