动手使用ABAP Channel开发一些小工具,提升日常工作效率
今天的故事要從ABAP小游戲說起。
中國的ABAP從業(yè)者們手頭或多或少都搜集了一些ABAP小游戲,比如下面這些。
消滅星星:
掃雷:
來自我的朋友劉夢,公眾號"SAP干貨鋪"里的俄羅斯方塊:
用ABAP畫圖:
以及用今天要談到的ABAP Channel技術(shù)開發(fā)的乒乓球游戲,還能支持雙打,囧。
我心里一直有個念頭,以嚴(yán)謹(jǐn)刻板著稱的德國開發(fā)人員,看到這些流行于中國ABAP生態(tài)圈的小游戲,會有什么反應(yīng)?
去年我在SAP德國總部做標(biāo)準(zhǔn)開發(fā),經(jīng)常參加一些會議。一次會議上,我和其他幾位CRM德國同事在會議室里一直等待一位S/4HANA同事的到來。大家也許會問,德國人素來以守時著稱,為什么工作會議還會遲到?
那是因?yàn)镾AP德國總部面積非常大,一共有20多棟樓。下圖是SAP德國總部在Walldorf修建的第一棟大樓,拍攝于深秋季節(jié)。我們習(xí)慣稱為Building 1,當(dāng)時我就在里面工作。
大樓側(cè)面看起來是這樣的,拍攝于初夏:
這20多棟大樓分散在園區(qū)各個角落:
當(dāng)時參加會議的S/4HANA同事在Building 3工作,剛開完上一個會,以Jerry的步行速度,走到Building 1的會議室需要5分鐘時間。
在等待同事的時候,Jerry就把自己的電腦連接上了投影儀,然后給其他在場的幾位德國同事一個一個秀這些小游戲。當(dāng)我的同事Carsten,SAP CRM的首席架構(gòu)師,看到ABAP編寫的掃雷游戲時,不禁哈哈大笑,說道這是他在windows 98系統(tǒng)下玩的最多的一個游戲。
終于S/4HANA的同事到達(dá)了會議室,此時投影儀上正進(jìn)行著用ABAP Channel編寫的乒乓球游戲。這位德國同事盯著看了一會兒,幽默地說了一句:"Am I in the wrong room?"
下面是正文。
- *
ABAP Channel是Netweaver 740發(fā)布的一項(xiàng)新的基于事件驅(qū)動的前后臺通信技術(shù),底層的實(shí)現(xiàn)基于WebSocket和TCPSocket。
做過SAP CRM呼叫中心(Interaction Center)的CRM顧問們,一定對這個產(chǎn)品的輪詢機(jī)制有深刻的印象。因?yàn)楫?dāng)時技術(shù)的局限,每當(dāng)ABAP后臺有事件發(fā)生時,沒有辦法通知到前臺WebClient UI界面。前臺為了能夠顯示最新的數(shù)據(jù),只得以一個固定的時間間隔,周期性地主動向ABAP后臺發(fā)起輪詢(poll)。
用Chrome開發(fā)者工具觀測,能容易地觀察到這個輪詢行為:下圖顯示CRM呼叫中心每隔1秒鐘向后臺發(fā)起一個HTTP請求進(jìn)行輪詢。
2014年,Netweaver 740發(fā)布了底層基于Web Socket協(xié)議的ABAP Channel技術(shù),因此CRM 呼叫中心也順勢采用了該技術(shù)替換了之前笨拙而低效的輪詢解決方案。
詳細(xì)信息參考CRM呼叫中心產(chǎn)品經(jīng)理Henning的博客:
Replace polling in CRM Interaction Center by ABAP Push Channel
很多SAP成都研究院做過CRM開發(fā)的同事都和Henning打過交道,這是一位在CRM領(lǐng)域業(yè)務(wù)知識極其精深,同時非常和藹的德國人。
在SAP社區(qū)網(wǎng)站上已經(jīng)有很多SAP從業(yè)者發(fā)表了各種關(guān)于ABAP Channel的博客,包括SAP自身也開發(fā)了很多例子,這些例子程序跟隨Netweaver一起發(fā)布。
Jerry不再重復(fù)這些例子,感興趣的朋友請參考這篇文章:
ABAP Channels Examples
今天我要分享的是Jerry如何使用ABAP Channel提升日常工作分析問題效率的一個具體例子。
ABAP從業(yè)者做項(xiàng)目時經(jīng)常需要使用各種跟蹤和性能監(jiān)控工具,最典型的有ST05和SAT。Jerry確實(shí)認(rèn)為這些工具對ABAP開發(fā)者非常有用,Jerry在SAP社區(qū)上唯一的一篇閱讀量超過十萬的博客就是這篇講ST05和SAT另類用途的文章:
Six kinds of debugging tips to find the source code where the message is raised
(2016年9月SAP社區(qū)改版了,遷移到了SAP云平臺。遷移后所有博客的閱讀量都清零了,因此現(xiàn)在這篇博客看到的閱讀量只有四萬多,而不是十萬)
然而Jerry認(rèn)為目前在Netweaver里所有的這些工具都有一個局限:開發(fā)人員必須要手工打開工具的跟蹤模式,在該模式下運(yùn)行應(yīng)用。運(yùn)行結(jié)束之后,或手動關(guān)掉跟蹤模式,或者由工具自動關(guān)閉。也就是說,這些工具都無法在應(yīng)用處于運(yùn)行狀態(tài)時,實(shí)時地提供開發(fā)者需要的信息。
我去年在德國參加了原CRM One Order框架遷移到S/4HANA的重構(gòu)和原型開發(fā)工作。具體細(xì)節(jié)可以看我這篇公眾號文章:Hello World, S/4HANA for Customer Management 1.0。
原型開發(fā)完成后就得做測試了。我得在新的S4CRM UI上進(jìn)行一系列和以前老CRM一樣的操作,然后觀察傳入API的輸入?yún)?shù)和API返回的輸出參數(shù)是否正確。
起初我采用的方式是在API里設(shè)置斷點(diǎn),然后在ABAP調(diào)試器里檢查。很快我發(fā)現(xiàn)這樣效率很低:CRM開發(fā)顧問都知道,像CRM_ORDER_MAINTAIN/READ這種API, 輸入輸出參數(shù)個數(shù)特別多,在ABAP 調(diào)試器里得選中一個雙擊進(jìn)去看,看完了得點(diǎn)回退再雙擊看另一個。如果要把API所有的參數(shù)全部檢查完,總共要點(diǎn)一百多次鼠標(biāo)。
Jerry最受不了的就是這種重復(fù)的體力活。有沒有辦法可以讓Netweaver也能像SAP云平臺的CloudFoundry編程環(huán)境那樣,一個
cf logs <app name>命令之后,正在運(yùn)行的應(yīng)用,其運(yùn)行時產(chǎn)生的日志就嘩嘩嘩地打印在瀏覽器上呢?有!使用ABAP Channel。
于是我動手開發(fā)了一個工具??聪逻@個工具怎么用:一個BSP應(yīng)用,在瀏覽器里訪問:
然后直接切換到One Order應(yīng)用,像往常一樣進(jìn)行操作。比如新建一個服務(wù)訂單,維護(hù)下面幾個字段:
再切換回我做的工具,One Order API的輸入和輸出參數(shù)內(nèi)容已經(jīng)實(shí)時地顯示在瀏覽器里了,再不用去調(diào)試器里進(jìn)行繁瑣的點(diǎn)擊操作了。
因?yàn)槭峭ㄟ^瀏覽器顯示,所以我還可以直接用CTRL+F根據(jù)關(guān)鍵字搜索,而這在SAPGUI里是沒法做到的。后來我也把這個工具推薦給了Carsten。
下面是這個工具的詳細(xì)開發(fā)步驟。
1. 事務(wù)碼SAPC, 創(chuàng)建一個新的APC(ABAP Push Channel)應(yīng)用ZORDER_LOG_APC,連接類型要選擇成WebSocket。
點(diǎn)擊按鈕“Generate Class and Service” 自動生成處理類和ICF節(jié)點(diǎn)。
2. 事務(wù)碼SAMC, 創(chuàng)建一個新的AMC(ABAP Message Channel)應(yīng)用,取名為ZORDERLOG。
將第一步APC應(yīng)用自動生成的ABAP類的名稱維護(hù)到Authorization Program下面。這一步的目的是指定在ABAP Channel場景中,通過WebSocket進(jìn)行數(shù)據(jù)收發(fā)的ABAP處理類名稱。將Channel ID/order_log抄下來。
3. 從上圖中得知我指定了ABAP類CL_CRM_ORDER_LOGGER用來將應(yīng)用程序調(diào)用One Order API產(chǎn)生的日志發(fā)送到Web Socket上去,因此這一步需要對這個類進(jìn)行編程了。完整代碼在我的github上,這里僅闡述要點(diǎn)。
在靜態(tài)構(gòu)造函數(shù)里,將第二步創(chuàng)建的AMC ID和channel ID傳入生產(chǎn)者的構(gòu)造器里。確實(shí),ABAP Channel的場景就是一個典型的生產(chǎn)者/消費(fèi)者模式,ABAP后臺生產(chǎn)的消息,通過Web Socket發(fā)送給瀏覽器由后者消費(fèi)。
消息的發(fā)送通過下面這個SEND方法完成。
4. 重定義第一步APC應(yīng)用自動生成的處理類的ON_START方法:
在這個方法里將第一步創(chuàng)建的APC應(yīng)用和第二步創(chuàng)建的AMC應(yīng)用做綁定。
5. 給API CRM_ORDER_MAINTAIN創(chuàng)建一個增強(qiáng),把我的CL_CRM_ORDER_LOGGER注入進(jìn)去。這樣每次該API被調(diào)用時,都會自動進(jìn)行日志記錄并通過Web Socket發(fā)送給瀏覽器。
以上五步就是ABAP Channel生產(chǎn)者的實(shí)現(xiàn)。下面是消費(fèi)者,即運(yùn)行于瀏覽器里的Web應(yīng)用的開發(fā)。
創(chuàng)建一個BSP應(yīng)用,在index.htm里維護(hù)下面的代碼:
第17行聲明了進(jìn)行前后臺通信的Web Socket url:
這樣消費(fèi)者的開發(fā)也做完了。
大家在實(shí)際工作中,遇到繁瑣耗時的體力活的時候,也可以多想想,能不能用工具來減少工作量,提高工作效率。感謝閱讀。
更多閱讀
- 聊聊C語言和ABAP
- Jerry的ABAP, Java和JavaScript亂燉
- Jerry的ABAP原創(chuàng)技術(shù)文章合集
- ABAP開發(fā)人員未來應(yīng)該學(xué)些什么
- Jerry 2017年的五一小長假:8種經(jīng)典排序算法的ABAP實(shí)現(xiàn)
- SAP成都研究院35歲以上的開發(fā)人員都去哪兒了?
- 一個SAP開發(fā)人員的雙截棍之路
要獲取更多Jerry的原創(chuàng)文章,請關(guān)注公眾號"汪子熙":
總結(jié)
以上是生活随笔為你收集整理的动手使用ABAP Channel开发一些小工具,提升日常工作效率的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Project 2010中添加自定义任
- 下一篇: 聚类--K均值算法:自主实现与sklea