日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

介绍一种在ABAP内核态进行内表高效拷贝的方法,和对应的Java和JavaScript版本的伪实现

發布時間:2023/12/19 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 介绍一种在ABAP内核态进行内表高效拷贝的方法,和对应的Java和JavaScript版本的伪实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

內表操作是ABAP開發人員幾乎在每個ABAP程序里都會遇到的。

看一個例子:有兩個行結構不一樣的內表,每個內表的行結構有三列,除了name這一列名字一致外,其他兩列的名稱都不同,下圖用紅色和藍色標注出來。

如果要把內表developer_list里的兩位開發人員Jerry和Tom的信息按照下圖的映射關系拷貝到內表presale_list里:

常規做法當然是用一個LOOP循環,引入兩個臨時變量,先把內表1逐行賦給臨時變量1,再把臨時變量1逐列賦給臨時變量2.

在ABAP 750版本里,提供了一個輔助類cl_abap_corresponding,能以聲明式編程的方式完成這個內表復制任務。

通過工具類的create方法,第二行和第三行指定要進行復制操作的源和目標內表,第四到六行告訴工具類內表復制的列字段映射規則。之后第8行調用execute方法完成復制操作。

大家更喜歡哪一種方式?這個例子雖然簡單,但包含了一個編程領域的基礎知識點:命令式編程(Imperative Programming)和聲明式編程(Declarative Programming)。

第一種使用LOOP循環的解法是典型的命令式編程的例子,我們定義了兩個臨時變量,通過循環體內的三條賦值指令,命令代碼去執行以完成內表拷貝。第二種解法, 作為應用開發人員,我們只是向工具類做出聲明,我們想對哪兩個內表根據什么樣的映射邏輯進行拷貝。至于工作類如何執行,應用開發人員不操心,這就是聲明式編程。

當然,即便是聲明式編程,工具類的代碼也總得有人實現。雙擊execute方法,發現是ABAP內核態的C語言實現的。

對于SAP客戶和partners來說,無法看到這個ab_kmMvcdExecute內核方法的源代碼,詳情參考Jerry的文章:聊聊C語言和ABAP。

大家可以試著自己用ABAP來模擬實現一個自己的CL_ABAP_CORRESPONDING. 這里Jerry提供一份Java版本的實現。

Java里萬物皆對象,所以我們分別定義Developer和Presale類:

創建兩個Java list來模擬ABAP里的內表:

然后我的目的是,把第一個list里,Jerry和Tom這兩位開發者的name, focusLanguage和salary字段分別賦給第二個list對應實例的name, focusArea和salaryPlusBonus字段,模擬一個公司內部轉崗的操作。

同ABAP使用工具類的方式一樣,我聲明了兩條映射規則,分別是第二行的mapping實例1,將focusLanguage字段直接賦給focusArea字段,以及第5行的mapping實例2,將salary字段的值乘以2,再賦給salaryPlusBonus字段。最后調用execute方法完成賦值。為了便于ABAP開發人員同之前的ABAP內表拷貝的例子進行比對,這里雖然是Java代碼,但是CL_MAPPING和CL_JAVA_CORRESPONDING這兩個類,我仍然用的是ABAP的命名規范,而非Java的駝峰式命名。

CL_JAVA_CORRESPONDING的實現如下:execute調用map, map調用mapEach,提取用戶指定的映射規則里的字段名,使用Java反射機制完成操作。

完整代碼位于Jerry的github上:

再來看Jerry用JavaScript如何實現這個工具類的。先看在JavaScript里消費工具類的代碼,仍然是聲明式編程熟悉的味道:

因為function是JavaScript世界里的一等公民,所以JavaScript的實現版本,能寫出更原汁原味函數式編程的解法出來:

如果要拷貝JavaScript版本的工具類CL_JS_CORRESPONDING的實現代碼,可以從Jerry這篇博客里獲得:

CL_ABAP_CORRESPONDING, CL_JAVA_CORRESPONDING and CL_JS_CORRESPONDING

希望這個簡單的例子,能讓大家感受到命令式編程和聲明式編程的差異,感謝閱讀。

要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的介绍一种在ABAP内核态进行内表高效拷贝的方法,和对应的Java和JavaScript版本的伪实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。