摘要:而且這種現(xiàn)象在德國(guó)的法定節(jié)假日里更加突出。所以本文提到的這些東西都是在德國(guó)節(jié)假日里無(wú)聊的產(chǎn)物,對(duì)于顧問(wèn)的實(shí)際工作可能幫助不大。這也是在這篇文章里介紹的眾多用搞出來(lái)的無(wú)聊的東西里唯一被官方認(rèn)可的工具,囧。直接用執(zhí)行里的事務(wù)碼或者函數(shù)。
國(guó)慶大假馬上就要來(lái)臨了,我們聊點(diǎn)輕松的話題,關(guān)于假期。
Jerry的成都同事李貝寧(Li Ben), 《SAP成都研究院李三郎:SCP Application Router簡(jiǎn)介》的作者,有一次11月份的時(shí)候和Jerry一起去德國(guó)出差,不解地問(wèn)到:德國(guó)好歹也有八千多萬(wàn)人口,怎么街上冷冷清清的幾乎看不到人呢?
對(duì)于這個(gè)問(wèn)題Jerry也沒(méi)有答案。而且這種現(xiàn)象在德國(guó)的法定節(jié)假日里更加突出。
Jerry的文章《Jerry 2017年的五一小長(zhǎng)假:8種經(jīng)典排序算法的ABAP實(shí)現(xiàn)》曾經(jīng)提到,去年我在德國(guó)待了三個(gè)月,最難熬的就是德國(guó)幾乎每個(gè)月都有那么幾天的法定節(jié)假日,因?yàn)榧热环偶?,SAP總部的員工食堂就不開(kāi)了,而且商店也全部關(guān)門,得提前一天備好干糧。
SAP德國(guó)總部員工食堂的伙食是非常非常好的,就在Jerry寫這段文字時(shí),仿佛又聞到了中午飯點(diǎn)時(shí)走近食堂,從里面散發(fā)出食物的香味。
總部員工食堂菜的味道有甜有酸,有些湯的味道稍稍帶著苦味,沒(méi)有辣味,正好Jerry討厭吃辣,所以口味非常適合我,我一連吃了90天也不覺(jué)得膩。
葷素搭配很合理,而且肉和菜吃不夠隨便加,管飽,對(duì)于Jerry這種飯量大的程序猿來(lái)說(shuō)簡(jiǎn)直是天堂。
這些食物太美味了,每頓飯結(jié)束后我都是這個(gè)狀態(tài):
然而到了德國(guó)法定節(jié)假日和星期日,這一切都消失了。德國(guó)商店的營(yíng)業(yè)時(shí)間一直按照20世紀(jì)50年代的規(guī)定執(zhí)行的:商店在工作日最晚開(kāi)到下午六點(diǎn)半,周六最晚下午2點(diǎn)關(guān)閉,周日全天不營(yíng)業(yè)。
于是,2017年五一小長(zhǎng)假,4月29日~5月1日三天,Jerry只好靠這些干糧充饑,三天一共只花了9歐元。
Jerry是一個(gè)程序猿,對(duì)吃的不挑剔,Zopf很經(jīng)餓。什么是Zopf?
我住在德國(guó)鄉(xiāng)下,平時(shí)也難得見(jiàn)到人,更別提節(jié)假日了。街上全是這種風(fēng)格:
要不是耳邊傳來(lái)偶爾駛過(guò)的汽車和德國(guó)小朋友在自己花園里嬉戲的聲音,Jerry還以為自己來(lái)到了科幻電影《我是傳奇》里的世界。
五一小長(zhǎng)假的最后一天,我的同事Liang Simon(梁亞舒)邀請(qǐng)我到他的家中,吃了一頓地道的德國(guó)烤肉。在此之前啃了兩天Zopf的我,覺(jué)得這是我這輩子吃過(guò)的最美味的烤肉!烤肉一掃光后,Simon的老婆又端出一個(gè)自己動(dòng)手做的巧克力蛋糕。
Jerry吃完之后,心里遺憾地想:當(dāng)初這個(gè)蛋糕制作的時(shí)候,半徑再大幾厘米就更完美了。
在這種情況下,作為一個(gè)程序猿,娛樂(lè)的方式就只剩擼代碼了。所以本文提到的這些東西都是Jerry在德國(guó)節(jié)假日里無(wú)聊的產(chǎn)物,對(duì)于ABAP顧問(wèn)的實(shí)際工作可能幫助不大。不過(guò)因?yàn)槭沁^(guò)節(jié),大家當(dāng)看看小說(shuō)消遣好了。
1.?Jerry 2017年的五一小長(zhǎng)假:8種經(jīng)典排序算法的ABAP實(shí)現(xiàn)
把本科學(xué)過(guò)的八種排序算法用ABAP逐一實(shí)現(xiàn)了一次。
SAP社區(qū)上有一位網(wǎng)友Sinai可能覺(jué)得我是吃飽了撐著沒(méi)事干(這倒是事實(shí)),畢竟在ABAP里要排序直接使用關(guān)鍵字SORT即可。
不過(guò)幸好還有另外的網(wǎng)友跳出來(lái)為我辯護(hù),中心思想就四個(gè)字:開(kāi)心就好。
2. 不用四則運(yùn)算符比較兩個(gè)整數(shù)的大小
看文字描述就能感覺(jué)到這又是一個(gè)讓程序猿感覺(jué)很囧的需求。
使用位操作,JavaScript可以很優(yōu)雅地實(shí)現(xiàn):
Java也沒(méi)問(wèn)題:
輪到ABAP就麻煩了。因?yàn)锳BAP的BIT-XOR這種位操作不支持整型類型。
既然語(yǔ)言層面不支持,就只好自己動(dòng)手模擬了。
我用一個(gè)尺寸為32的ABAP內(nèi)表存儲(chǔ)一個(gè)32位整數(shù)的每一個(gè)bit的值,然后基于這個(gè)內(nèi)表模擬了整數(shù)的與或非以及異或操作,還有按位左移,右移。
讓ABAP整數(shù)也能像上圖JavaScript和Java那樣支持按位邏輯操作的模擬實(shí)現(xiàn)代碼在我的博客里:
Bitwise operation ( OR, AND, XOR ) on ABAP Integer
用這種模擬方式實(shí)現(xiàn)的ABAP代碼比JavaScript和Java足足長(zhǎng)了一倍。雖然丑陋,但好歹實(shí)現(xiàn)了題目的需求。
3. 給出盡可能多的計(jì)算兩個(gè)整數(shù)和的方案
下面的答案可以歸納為:
普通程序員的答案
2B程序員的答案
文藝程序員的答案
閑得蛋疼的程序員的答案
。。。
最后一種解法實(shí)際就是本科計(jì)算機(jī)原理里介紹的加法器:通過(guò)按位邏輯與運(yùn)算(&)判斷當(dāng)前位操作是否有進(jìn)位產(chǎn)生,用按位邏輯或運(yùn)算(|)保存當(dāng)前位進(jìn)位的值。
最后一種解決方案的ABAP版本:
下面就是一些小工具了。
1. 如果您是一位ABAP顧問(wèn),您知道每個(gè)月,哪個(gè)SAP事務(wù)碼被自己使用最多次數(shù)么?
只需寫一個(gè)簡(jiǎn)單的ABAP報(bào)表,執(zhí)行就能知道答案。報(bào)表的源代碼可以通過(guò)點(diǎn)擊文末"閱讀原文"獲得。下圖是Jerry在SAP內(nèi)部的開(kāi)發(fā)系統(tǒng)執(zhí)行該報(bào)表后的結(jié)果,排在第一位的SE24,一個(gè)月使用了713次不奇怪,令我吃驚的是SAT居然使用了692次。不用說(shuō),這個(gè)月一定在和各種與性能相關(guān)的incident進(jìn)行苦戰(zhàn)。
2. 增強(qiáng)的ABAP代碼版本管理功能。
打個(gè)比方, ?如果我想查找一行注釋"* Wave 12 Schema version is 7"最早是在哪一個(gè)ABAP代碼改動(dòng)版本引入的,最后發(fā)現(xiàn)是第45個(gè)版本引入的。
在實(shí)際工作中,SAP的開(kāi)發(fā)人員經(jīng)常需要做類似的事情,比如分析一個(gè)bug,最后定位到是引入了某一行代碼引起的,然后就需要找到是哪一個(gè)請(qǐng)求號(hào)對(duì)應(yīng)的版本引入的這行有問(wèn)題的代碼。
但是,這個(gè)方法一共有77個(gè)版本,難道我要從第一個(gè)版本開(kāi)始,將其和當(dāng)前版本比較,一直比較到最后一個(gè)版本?
這個(gè)是純粹的體力活,時(shí)間復(fù)雜度o(n)。我們也可以用二分查找的思路,把77個(gè)版本中間的版本即版本39和當(dāng)前版本比較,如果版本39沒(méi)有出現(xiàn)我們要查找的代碼,就對(duì)版本40和77這個(gè)區(qū)間段再次使用二分查找。
這種查找辦法只是把時(shí)間復(fù)雜度降成了對(duì)數(shù)級(jí)別,這種體力活仍然讓我心煩意亂。有沒(méi)有o(1)的解決方案?
當(dāng)然有。就是把這個(gè)方法每個(gè)版本的源代碼全部下載到本地保存成一個(gè)txt文件,里面的版本內(nèi)容從低到高排序,然后直接按照要查找的關(guān)鍵字進(jìn)行搜索,瞬間即可得出答案。
有了這個(gè)本地文件,我可以用文本編輯器同時(shí)打開(kāi)它兩次,然后可以通過(guò)鼠標(biāo)滑動(dòng)的方式,快捷地比較任意兩個(gè)版本的差異,而不需要SAPGUI"選擇待比較的版本->點(diǎn)擊比較按鈕->查看比較結(jié)果->點(diǎn)回退按鈕->選擇下一組要比較的版本"這種笨拙的操作,工作效率得到質(zhì)的提升。
在我心中,重復(fù)的鼠標(biāo)點(diǎn)擊對(duì)于程序猿來(lái)說(shuō)就是萬(wàn)惡之源。
這個(gè)工具的源代碼可以通過(guò)點(diǎn)擊"閱讀原文"獲得。
3. 增強(qiáng)的SAT功能。
SAP成都研究院CRM開(kāi)發(fā)團(tuán)隊(duì)曾經(jīng)接到一個(gè)CRM On HANA的測(cè)試項(xiàng)目,就是在兩個(gè)系統(tǒng)上同時(shí)運(yùn)行一系列相同的ABAP代碼,這兩個(gè)系統(tǒng)底層的數(shù)據(jù)庫(kù)分別是非HANA數(shù)據(jù)庫(kù)和HANA數(shù)據(jù)庫(kù),通過(guò)這種方式評(píng)測(cè)SAP CRM運(yùn)行在HANA數(shù)據(jù)庫(kù)上的性能。一旦發(fā)現(xiàn)某些代碼在HANA數(shù)據(jù)庫(kù)上運(yùn)行的性能還不如非HANA數(shù)據(jù)庫(kù),就找出原因,對(duì)相應(yīng)代碼做優(yōu)化。
當(dāng)時(shí),德國(guó)同事給我們的要求就是,在兩個(gè)系統(tǒng)分別用SAT運(yùn)行應(yīng)用,然后手動(dòng)分析SAT結(jié)果,把在數(shù)據(jù)庫(kù)為HANA的系統(tǒng)上運(yùn)行速度慢于非HANA系統(tǒng)的點(diǎn)都找出來(lái),寫成文檔。
我當(dāng)時(shí)一接到這個(gè)項(xiàng)目,心里暗暗叫苦:這不又是純體力活么。如果待測(cè)試的一段代碼調(diào)用了非常多的API,那豈不是要把這些API在兩個(gè)系統(tǒng)上執(zhí)行的時(shí)間一個(gè)一個(gè)找出來(lái)手動(dòng)比較么?就算用雙屏,腦袋也要像波浪鼓一樣左右晃動(dòng),這又不是在練習(xí)自由泳的轉(zhuǎn)頭換氣。
后來(lái)Jerry就寫了一個(gè)工具自動(dòng)進(jìn)行比較。下圖是工具界面,HN1和Q2U是這兩個(gè)系統(tǒng)的代號(hào),其中HN1系統(tǒng)后臺(tái)數(shù)據(jù)庫(kù)是HANA,而Q2U后臺(tái)是非HANA。
Green Threashold指定成50,意思是如果同一個(gè)方法,HN1的執(zhí)行速度比Q2U快50%,則這個(gè)方法的比較結(jié)果顯示成綠燈;Yello Threshold則代表HN1比Q2U快,但只快了20%到50%。如果HN1比Q2U還慢,這就比較糟糕了,是我們需要采取措施的場(chǎng)景。
工具的輸出是一個(gè)ALV,可以直接導(dǎo)出成excel。
有了這個(gè)工具,原本需要填幾個(gè)小時(shí)的excel,現(xiàn)在十秒就能完成。節(jié)省下來(lái)的時(shí)間可以花費(fèi)到亮紅燈的那些結(jié)果,即真正需要進(jìn)行HANA數(shù)據(jù)庫(kù)調(diào)優(yōu)的那些代碼中去。
后來(lái)Jerry把這個(gè)工具秀給了德國(guó)的項(xiàng)目主管,他很喜歡這個(gè)工具,讓我在一個(gè)內(nèi)部會(huì)議上給SAP全球其他地區(qū)的同事講講工具怎么用。這也是Jerry在這篇文章里介紹的眾多用ABAP搞出來(lái)的無(wú)聊的東西里唯一被SAP官方認(rèn)可的工具,囧。
這個(gè)工具的完整代碼通過(guò)點(diǎn)擊"閱讀原文"獲得。
4. 直接用excel執(zhí)行SAPGUI里的事務(wù)碼或者函數(shù)。
作為一個(gè)SAP ABAP開(kāi)發(fā)人員,SAPGUI上的系統(tǒng)清單總是很長(zhǎng)很長(zhǎng),這還是我清理過(guò)多次,刪除了若干很少使用系統(tǒng)之后的清單。有些系統(tǒng)我每天登陸上去只是為了看幾個(gè)簡(jiǎn)單的事務(wù)碼,比如SM04,ST22,SE10這些。為此,每天我都要在SAPGUI里選中某個(gè)系統(tǒng),雙擊之后進(jìn)行登錄,然后在鍵盤上輸入事務(wù)碼。
很快我的懶癌又犯了,因?yàn)槲以谶@些系統(tǒng)上并不會(huì)進(jìn)行開(kāi)發(fā)工作,那么有沒(méi)有辦法不用SAPGUI登錄系統(tǒng),也能執(zhí)行事務(wù)碼并查看結(jié)果呢?有,用excel。在excel里做幾個(gè)按鈕,每個(gè)按鈕的事件處理函數(shù)用VB硬編碼成對(duì)應(yīng)系統(tǒng)的地址,系統(tǒng)編號(hào),用戶名和密碼,以及期望執(zhí)行的函數(shù)或者事務(wù)碼的名稱。
這樣以前繁瑣的操作,現(xiàn)在雙擊打開(kāi)excel啪啪啪點(diǎn)幾個(gè)按鈕,然后切去做其他事情,等一會(huì)再切回excel查看結(jié)果即可。節(jié)省下來(lái)的時(shí)間可以做其他更有意義的事情。
這種VB代碼像下面這樣寫:
5. 直接在SAPGUI里給同系統(tǒng)其他在線用戶打招呼。
執(zhí)行這個(gè)工具,會(huì)看到當(dāng)前系統(tǒng)在線用戶列表和每個(gè)用戶正在使用的事務(wù)碼。
雙擊某個(gè)用戶名稱,他/她的SAPGUI里就會(huì)出現(xiàn)一個(gè)彈出框,上面顯示一條預(yù)先指定好的文本,比如:
這個(gè)惡作劇其實(shí)就是通過(guò)函數(shù)TH_POPUP給指定的用戶發(fā)送一條文本消息,以彈出框的形式顯示出來(lái):
6. 項(xiàng)目經(jīng)理可以使用的查崗工具。
比如項(xiàng)目經(jīng)理想查看名叫WANGJER的顧問(wèn)從2017年3月1日到3月25日這些天到底在系統(tǒng)里做了哪些開(kāi)發(fā),只需要執(zhí)行這個(gè)工具就能得到清單。
其實(shí)寫這個(gè)工具的初衷是為了方便我快速得回憶起任何一個(gè)時(shí)間段,比如一個(gè)月或者一年以前到底做了哪些開(kāi)發(fā)工作。程序猿上了年紀(jì)后記憶力就衰減了,必須要通過(guò)工具的輔助。
最后一個(gè)是惡作劇。
一天我正在上班的時(shí)候,微信上一位partner向我求助,說(shuō)是這根紅色標(biāo)注的分割線可以往左拖拽。
一旦把它拖到最左邊的極限位置后,將無(wú)法再調(diào)整其位置了。如下圖這樣,因?yàn)樽筮厡?duì)象列表的寬度實(shí)在太窄,此時(shí)SE80其實(shí)已經(jīng)沒(méi)有辦法使用了。
當(dāng)時(shí)Jerry看了這位朋友微信上發(fā)過(guò)來(lái)的截圖,半信半疑,還有這種操作?
照著試了一下,結(jié)果我也杯具了。
好在我知道有這張表的存在:
一行代碼即可讓SE80的設(shè)置回復(fù)到初始設(shè)置:
DELETE FROM rseumod WHERE uname = "WANGJER".
感謝大家耐心聽(tīng)完我的嘮叨,提前祝大家2018年國(guó)慶節(jié)快樂(lè)。
更多閱讀
動(dòng)手使用ABAP Channel開(kāi)發(fā)一些小工具,提升日常工作效率
聊聊C語(yǔ)言和ABAP
ABAP vs Java, 蛙泳 vs 自由泳
300行ABAP代碼實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的區(qū)塊鏈原型
Jerry的ABAP原創(chuàng)技術(shù)文章合集
ABAP開(kāi)發(fā)人員未來(lái)應(yīng)該學(xué)些什么
Jerry的ABAP, Java和JavaScript亂燉
要獲取更多Jerry的原創(chuàng)文章,請(qǐng)關(guān)注公眾號(hào)"汪子熙":
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/71912.html
摘要:比如的的個(gè)性化設(shè)置是這樣的,字體必須用程序猿專用的等寬開(kāi)源字體,這樣顯得比較專業(yè)。我覺(jué)得網(wǎng)上流傳的程序猿和工具的鄙視鏈很無(wú)聊,與其有時(shí)間去鄙視別人,不如把這時(shí)間用來(lái)深入研究自己每天用的,進(jìn)一步提高自己?jiǎn)挝粫r(shí)間內(nèi)的工作效率。 Jerry和SAP成都研究院一些新同事聊天時(shí),談到ABAP和SAP GUI這個(gè)話題。很多新同事在加入SAP成都之前,是做Java和C++開(kāi)發(fā)的,習(xí)慣了Eclipse...
摘要:實(shí)現(xiàn)步驟非常簡(jiǎn)單,在標(biāo)準(zhǔn)程序的內(nèi)創(chuàng)建一個(gè)隱式增強(qiáng)。禁止在測(cè)試服務(wù)器和生產(chǎn)服務(wù)器使用否則由此造成的一切負(fù)面后果,本人及概不負(fù)責(zé)。 最近Jerry在忙一個(gè)項(xiàng)目,技術(shù)棧換成了nodejs平臺(tái),語(yǔ)言換成了JavaScript,因?yàn)橼s項(xiàng)目進(jìn)度,一直沒(méi)時(shí)間更新公眾號(hào)。感謝大家的支持,關(guān)注人數(shù)還是慢慢地增長(zhǎng)到了3000。 showImg(https://segmentfault.com/img/re...
摘要:這是年的第篇文章,也是汪子熙公眾號(hào)總共第篇原創(chuàng)文章。使用通過(guò)格式發(fā)送和文件到服務(wù)器關(guān)于格式的詳細(xì)說(shuō)明,參考開(kāi)發(fā)社區(qū)和的文檔我在前文例子的基礎(chǔ)上稍作修改在里使用兩個(gè)類型為的標(biāo)簽,分別上傳和文件用來(lái)測(cè)試的本地文件,大小為字節(jié)。 這是 Jerry 2021 年的第 71 篇文章,也是汪子熙公眾號(hào)總共第 348 篇原創(chuàng)文章。 Jerry 之前發(fā)布過(guò)一篇文章 不使用任何框架,手寫純 Jav...
摘要:本文里提到的所有都是基于版本的,這使得我又一次被鄙視了使用的程序猿鄙視使用的程序猿。因此這些事物碼本身也是可以通過(guò)進(jìn)行增強(qiáng)的。 在Google上根據(jù)關(guān)鍵字程序員鄙視鏈搜索,會(huì)得到68多萬(wàn)條結(jié)果。 showImg(https://segmentfault.com/img/remote/1460000014000687); 玲瑯滿目的搜索結(jié)果里是眾多不同維度劃分的鄙視鏈。 其中有一個(gè)維度,...
摘要:本文里提到的所有都是基于版本的,這使得我又一次被鄙視了使用的程序猿鄙視使用的程序猿。因此這些事物碼本身也是可以通過(guò)進(jìn)行增強(qiáng)的。 在Google上根據(jù)關(guān)鍵字程序員鄙視鏈搜索,會(huì)得到68多萬(wàn)條結(jié)果。 showImg(https://segmentfault.com/img/remote/1460000014000687); 玲瑯滿目的搜索結(jié)果里是眾多不同維度劃分的鄙視鏈。 其中有一個(gè)維度,...
閱讀 2467·2021-11-15 11:36
閱讀 1215·2019-08-30 15:56
閱讀 2280·2019-08-30 15:53
閱讀 1070·2019-08-30 15:44
閱讀 685·2019-08-30 14:13
閱讀 1026·2019-08-30 10:58
閱讀 510·2019-08-29 15:35
閱讀 1332·2019-08-29 13:58