摘要:在博文里介紹了在里使用進(jìn)行編程的一些性能方面的最佳實(shí)踐。文章里提綱挈領(lǐng)地給出了一些。這里提供一些具體的例子。的提供的的接口定義也完全采用了這種支持批量操作的設(shè)計(jì)。這兩種不同的輸入,會(huì)導(dǎo)致編譯生成的代碼分別進(jìn)入和的執(zhí)行邏輯,產(chǎn)生性能差異。
Stefan Hagen在博文SAP Cloud Application Studio Performance Best Practices里介紹了在C4C里使用Cloud Application Studio進(jìn)行ABSL編程的一些性能方面的最佳實(shí)踐。
文章里提綱挈領(lǐng)地給出了一些guideline。這里提供一些具體的例子。
如何批量調(diào)用BO action不好的例子:
第一行和第四行有兩個(gè)循環(huán),然后在第二次循環(huán)里調(diào)用一個(gè)比較耗時(shí)的ServiceRequest BO的item 節(jié)點(diǎn)上定義的標(biāo)準(zhǔn)action FinishFulfilmentProcessing。代碼的時(shí)間復(fù)雜度為o(n2)
正確的做法:
優(yōu)化的原理就是,C4C和其他很多基于Netweaver的SAP產(chǎn)品一樣,其BO的核心service都支持批量操作。所謂批量操作,技術(shù)上就是指這些service的輸入?yún)?shù)是一個(gè)內(nèi)表,而非單條數(shù)據(jù)。如果您做過(guò)CRM開發(fā),可以類比CRM_ORDER_MAINTAIN這個(gè)function module,其所有輸入?yún)?shù)都是內(nèi)表結(jié)構(gòu)。C4C的BO提供的service的接口定義也完全采用了這種支持批量操作的設(shè)計(jì)。
上述不好的例子,編譯出來(lái)的ABAP代碼的偽代碼如下:(因?yàn)镃4C的后臺(tái)代碼沒(méi)有開放給Partner和客戶,我只能提供偽代碼)??梢钥闯霰M管BO的action是執(zhí)行批量操作,但是這種寫法并沒(méi)有發(fā)揮批量操作的作用,每次在循環(huán)內(nèi)部作為輸入?yún)?shù)的內(nèi)標(biāo)在第二行被清空,造成每次調(diào)用BO action時(shí)輸入?yún)?shù)只有一條記錄。
而正確的例子,編譯后生成的偽代碼為:
能清楚地看到BO action的執(zhí)行已經(jīng)放到循環(huán)外部了。
如何批量執(zhí)行BO Retrieve當(dāng)我們?cè)贑loud Studio里通過(guò)代碼自動(dòng)完成功能試圖調(diào)用BO的Retrieve方法時(shí),IDE會(huì)提示我們Retrieve方法有三個(gè)重載(Overload), 這表明Retrieve能夠支持傳入不同的參數(shù)。
正確和不建議的做法分別見(jiàn)下圖藍(lán)色和紅色代碼??梢钥吹剿{(lán)色代碼retrieve接受的輸入?yún)?shù)是一個(gè)集合, 包含了兩個(gè)ID為3和4的元素,使得41行的調(diào)用能夠一次即可返回2個(gè)ServiceRequest的數(shù)據(jù)。
line 43編譯后生成的ABAP代碼的偽代碼:
line 41編譯后生成的ABAP代碼的偽代碼:
通過(guò)比較能發(fā)現(xiàn)如果傳入retrieve的參數(shù)是一個(gè)ID的集合,那么編譯生成的ABAP代碼會(huì)調(diào)用一個(gè)接口為內(nèi)表的retrieve方法,批量讀取數(shù)據(jù)。
如何批量執(zhí)行BO Create對(duì)于基礎(chǔ)的Create操作,見(jiàn)下列代碼第54行,只支持基于單個(gè)節(jié)點(diǎn)的數(shù)據(jù)創(chuàng)建。
但是對(duì)于CreateWithReference的場(chǎng)景,則和第二個(gè)例子的Retrieve場(chǎng)景一樣,不僅支持傳入單個(gè)數(shù)據(jù)(第56行), 也支持傳入一個(gè)集合(第58行)。
這兩種不同的輸入,會(huì)導(dǎo)致編譯生成的ABAP代碼分別進(jìn)入CREATE_WITH_REF_1和CREATE_WITH_REF_N的執(zhí)行邏輯,產(chǎn)生性能差異。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/28286.html
摘要:在博文里介紹了在里使用進(jìn)行編程的一些性能方面的最佳實(shí)踐。文章里提綱挈領(lǐng)地給出了一些。這里提供一些具體的例子。的提供的的接口定義也完全采用了這種支持批量操作的設(shè)計(jì)。這兩種不同的輸入,會(huì)導(dǎo)致編譯生成的代碼分別進(jìn)入和的執(zhí)行邏輯,產(chǎn)生性能差異。 Stefan Hagen在博文SAP Cloud Application Studio Performance Best Practices里介紹了在...
摘要:在博文里介紹了在里使用進(jìn)行編程的一些性能方面的最佳實(shí)踐。文章里提綱挈領(lǐng)地給出了一些。這里提供一些具體的例子。的提供的的接口定義也完全采用了這種支持批量操作的設(shè)計(jì)。這兩種不同的輸入,會(huì)導(dǎo)致編譯生成的代碼分別進(jìn)入和的執(zhí)行邏輯,產(chǎn)生性能差異。 Stefan Hagen在博文SAP Cloud Application Studio Performance Best Practices里介紹了在...
摘要:的和描述信息已經(jīng)能夠正常顯示了。同時(shí)在區(qū)域也能看到該關(guān)聯(lián)關(guān)系假設(shè)我需要在里開發(fā)一個(gè)功能,允許客戶能夠手動(dòng)將兩個(gè)關(guān)聯(lián)起來(lái)。的實(shí)現(xiàn)代碼假設(shè)我想把和關(guān)聯(lián)起來(lái),我需要打開,在新字段里手動(dòng)輸入,然后點(diǎn)擊按鈕成功執(zhí)行之后,在的即可看到這個(gè)關(guān)聯(lián)關(guān)系。 Document flow API in CRM 以一個(gè)具體的例子來(lái)說(shuō)明。在Appointment的Overview page上能看見(jiàn)一個(gè)名叫Refe...
摘要:的和描述信息已經(jīng)能夠正常顯示了。同時(shí)在區(qū)域也能看到該關(guān)聯(lián)關(guān)系假設(shè)我需要在里開發(fā)一個(gè)功能,允許客戶能夠手動(dòng)將兩個(gè)關(guān)聯(lián)起來(lái)。的實(shí)現(xiàn)代碼假設(shè)我想把和關(guān)聯(lián)起來(lái),我需要打開,在新字段里手動(dòng)輸入,然后點(diǎn)擊按鈕成功執(zhí)行之后,在的即可看到這個(gè)關(guān)聯(lián)關(guān)系。 Document flow API in CRM 以一個(gè)具體的例子來(lái)說(shuō)明。在Appointment的Overview page上能看見(jiàn)一個(gè)名叫Refe...
閱讀 2877·2021-11-16 11:55
閱讀 2628·2021-09-29 09:34
閱讀 3446·2021-09-01 14:21
閱讀 3781·2019-08-29 12:36
閱讀 706·2019-08-26 10:55
閱讀 3998·2019-08-26 10:20
閱讀 1039·2019-08-23 18:19
閱讀 1205·2019-08-23 17:56