一行程式碼將SAP CDS view資料以ALV的方式輸出
由於國情原因,ABAP ALV相關的報表開發在國內眾多SAP技術交流群裡永遠都是一個熱門話題。
最近Jerry和朋友的技術交流群裡,郭爺向大家介紹了ALV Integrated Data Access,能夠輕鬆實現以ALV格式展示CDS view的資料。
感謝郭爺的介紹,Jerry因為工作原因不會進行SAP Dynpro的程式設計,所以也不知道這個ALV IDA的存在。網上搜了一下,發現早在2018年就有SAP從業者寫過介紹它的部落格了:
因為使用確實非常簡單,Jerry不會重複部落格裡的內容,對其詳細用法感興趣的朋友,請移步這篇 SAP社群部落格: SAP List Viewer with integrated Data Access ALV with IDA.
如下圖所示,我在SAPGUI裡寫了一個報表,只用一行語句就能完成一個名叫ZFAT_INTERFACE這個CDS view的ALV展示工作。
cl_salv_gui_table_ida=>create_for_cds_view( iv_cds_view_name = 'ZFAT_INTERFACE' )->fullscreen( )->display( ).
這個CDS view顯示的資料,是當前ABAP系統裡所有的介面(SE24裡檢視的interface)和介面上定義的方法個數。
CDS view實現原始碼如下:
為什麼要搞這樣一個CDS view出來?Jerry曾經給SAP成都研究院的同事們做過一個物件導向程式設計的培訓,裡面講到了一個原則: Interface Segregation Principle(介面分離/隔離原則).
介面隔離準則期望達到的效果是,客戶類不應被強迫依賴於那些它們實際並不需要的介面。相反地,一個介面定義的方法數量越多,其實現類越容易受制於該介面。例如,一個客戶類A實現了一個介面,該介面包含了客戶類不需要的方法,但這些方法是其他客戶類所需要的,那麼當其他客戶類由於某種原因需要對介面進行修改時,這個修改也將影響客戶類A。通過介面隔離準則,我們儘可能地避免這種不必要的耦合,比如上圖中把包含了Print,Staple, Copy和Fax四個方法的胖介面Job,拆分成了四個各自只包含一個獨立方法的介面。
講完了介面隔離原則之後,我忽然有了一個想法,SAP ABAP系統裡大量的歷史遺留程式碼裡,是否存在著定義了大量方法的胖介面呢?於是就開發了上述的CDS view一探究竟。
從使用ALV IDA顯示CDS view ZFAT_INTERFACE的結果看,方法數量排名第一的胖介面IFUR_NW7__ALL,其上定義了755個方法......
再回到ALV IDA,它能夠顯示CDS view資料的原理是什麼?
使用Jerry之前文章: SAP錯誤訊息除錯之七種武器:讓所有的錯誤訊息都能被定位 裡介紹的第五種辦法,孔雀翎之SAT,即使用SAT執行之前編寫的ALV程式,在SAT跟蹤結果裡,就能找到cl_salv_gui_table_ida最後是如何從CDS view裡取值的:
CL_SQL_STATEMENT->EXECUTE_QUERY
在該方法裡設定斷點, 執行報表,斷點會觸發兩次:
斷點第一次觸發,執行的SQL表示式:
SELECT COUNT( * ) AS "COUNT" FROM "ZFATINF" AS "ZFAT_INTERFACE" WITH PARAMETERS( 'LOCALE' = 'EN' )
斷點第二次觸發,執行的SQL表示式:
SELECT "ZFAT_INTERFACE"."CLSNAME" AS "CLSNAME", "ZFAT_INTERFACE"."METHOD_COUNT" AS "METHOD_COUNT" FROM "ZFATINF" AS "ZFAT_INTERFACE" ORDER BY "ZFAT_INTERFACE"."CLSNAME" ASC LIMIT ? OFFSET ? WITH PARAMETERS( 'LOCALE' = 'CASE_INSENSITIVE' )
一旦指向結果集(result set)的引用lo_result在1049行程式碼呼叫next_package方法,CDS view的前1000條資料就被賦值到了ABAP內表lr_data裡:
這種不採用ABAP OPEN SQL,而用CL_SQL_STATEMENT,CL_SQL_CONNECTION等系列工具類的資料庫訪問方式,稱為 ADBC - ABAP Database Connectivity.
ADBC是一套API的集合,能允許ABAP開發人員使用ABAP物件導向程式設計的方式,同ABAP伺服器的原生SQL介面進行互動。
Jerry之前的文章集合 Jerry的ABAP, Java和JavaScript亂燉,裡面有一篇將ADBC和Java的JDBC做了對比:
下圖左邊是用ADBC讀取資料庫的程式碼,右邊是Java的JDBC程式碼,大家可以簡單對比一下語法:
最後,在哪些版本的ABAP伺服器上能使用ALV IDA?
無需查閱文件,直接檢視原始碼,在CL_SALV_GUI_TABLE_IDA有個DB_CAPABILITIES方法:
進而檢視該方法實現裡的CL_SALV_IDA_CAPABILITY_SERVICE:
當前DB是否支援指定的特性,通過這些IS方法返回的布林值決定。
從原始碼看,很多特性需要ABAP 740 SP4之後的版本才能支援。
感謝閱讀。
ABAP專題
-
Jerry的ABAP, Java和JavaScript亂燉
-
ABAP開發人員未來應該學些什麼
-
Jerry 2017年的五一小長假:
8種經典排序演算法的ABAP實現
-
Jerry的ABAP原創技術文章合集
-
300行ABAP程式碼實現一個最簡單的區塊鏈原型
-
使用Java+SAP雲平臺+SAP Cloud Connector呼叫ABAP On-Premise系統裡的函式
-
在SAP雲平臺的CloudFoundry環境下消費ABAP On-Premise OData服務
-
ABAP vs Java, 蛙泳 vs 自由泳
-
聊聊C語言和ABAP
-
動手使用ABAP Channel開發一些小工具,提升日常工作效率
-
我用ABAP做過的那些無聊的事情
-
不喜歡SAP GUI?
那試試用Eclipse進行ABAP開發吧
-
使用Visual Studio Code編寫和啟用ABAP程式碼
-
你的ABAP程式給佛祖開過光麼?
來試試Jerry這個小技巧
-
在SAP雲平臺ABAP程式設計環境上編寫第一段ABAP程式
-
SAP官方釋出的ABAP程式設計規範
-
ABAP Code Inspector那些隱藏的功能,您都知道嗎?
-
還在用ABAP進行SAP產品的二次開發?來了解下這種全新的二次開發理念吧
-
ABAP Netweaver體內的那些寄生式程式語言
-
從SAP社群上的一篇部落格開始,聊聊SAP產品命名背後的那份情懷
-
雲端的ABAP Restful服務開發
-
如何在SAP雲平臺ABAP程式設計環境裡把CDS view暴露成OData服務
-
使用abapGit在ABAP On-Premises系統和SAP雲平臺ABAP環境之間進行程式碼傳輸
-
30分鐘用Restful ABAP Programming模型開發一個支援增刪改查的Fiori應用
-
Jerry帶您瞭解Restful ABAP Programming模型系列之二:Action和Validation的實現
-
Jerry帶您瞭解Restful ABAP Programming模型系列之三:
雲端ABAP應用除錯
-
SAP雲平臺上的ABAP程式設計環境裡如何消費第三方服務
-
ABAP開發者上雲的時候到了 - 現在大家可以免費使用SAP雲平臺ABAP環境的試用版了
-
學而不思則罔 - SAP雲平臺ABAP程式設計環境的由來和適用場景
-
SAP雲平臺裡的三叉戟應用
-
如何基於Restful ABAP Programming模型開發並部署一個支援增刪改查的Fiori應用
-
SAP 2019 TechEd Key Note解讀:雲時代下SAP從業人員如何做二次開發?
-
有哪些ABAP關鍵字和語法,到了ABAP雲環境上就沒辦法用了?
-
ABAP開發環境終於支援以駝峰命名法自動格式化ABAP變數名了
-
利用ABAP 740的新關鍵字REDUCE完成一個實際工作任務
-
一段讓人瑟瑟發抖的ABAP程式碼
-
昨日萬聖節ABAP怪獸級程式碼謎團,公佈答案啦
-
介紹一種在ABAP核心態進行內表高效拷貝的方法
-
使用SAP Cloud Application Programming模型開發OData的一個實際例子
-
當ABAP遇見普羅米修斯
-
使用ABAP繪製可伸縮向量圖
-
ABAP開發環境語法高亮的那些事兒
-
SAP錯誤訊息除錯之七種武器:
讓所有的錯誤訊息都能被定位
-
使用ABAP操作Excel的幾種方法
-
SAP GUI裡的收藏夾事務碼管理工具
-
SAP GUI和Windows登錄檔
-
有了Debug許可權就能幹壞事?小心了,你的一舉一動盡在系統監控中
-
ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX這些東東是什麼鬼
-
實現ABAP條件斷點的三種方式
-
使用SAT跟蹤監控從瀏覽器開啟的SAP應用的效能和呼叫棧
-
一個13年ABAP老兵的建議:瞭解這些基礎知識,對ABAP開發有百利而無一害
-
SAP ABAP Netweaver容器化, 不可能完成的任務嗎?
-
SAP產品增強技術回顧
-
SAP API開發方法大全
-
淺談Java和SAP ABAP的靜態代理和動態代理,以及ABAP面向切面程式設計的嘗試
-
SAP ABAP應用伺服器的HTTP響應狀態碼(Status Code)
-
SAP ABAP裡存在Java List這種集合工具類麼?CL_OBJECT_COLLECTION瞭解一下
-
ABAP面試題系列:寫一組會出現死鎖(Deadlock)的ABAP程式
-
SAP ABAP Netweaver伺服器的標準登入方式講解
-
SAP ABAP關鍵字語法圖和ABAP程式碼自動生成工具Code Composer
-
SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測
-
關於SAP ABAP字元變數和字串變數字元個數的一個知識點,和一個血案
-
SAP ABAP一組關鍵字 IS BOUND, IS NOT INITIAL和IS ASSIGNED的用法辨析
-
SAP ABAP和Java裡的弱引用(WeakReference)和軟引用(SoftReference)
-
SAP AMDP介紹 - ABAP託管的HANA資料庫過程
-
給你的ABAP物件打上標籤(Tag)
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2736246/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 淺談 SAP ABAP 系統裡的 ALV 輸出方式實現
- 如何用ABAP程式碼讀取CDS view association的資料View
- SAP CDS view自學教程之十:SAP CDS view擴充套件性(Extensibility)實現原理View套件
- SAP ABAP CDS view Association 引入的緣由View
- SAP CDS view 如何將 CHAR 型別的資料欄位和當前系統日期比較View型別
- 如何使用 SAP CDS view 中的 currency conversion 功能View
- SAP CDS view自學教程之一:如何測試基於SAP CDS view自動生成的OData服務View
- 在 Excel 裡使用 ODBC 讀取 SAP BTP 平臺上 CDS view 的資料ExcelView
- 如何基於 SAP CDS view 生成 object pageViewObject
- SAP CDS view自學教程之二:當SAP CDS view被啟用時,背後發生了什麼View
- 使用 Excel 讀取 SAP ABAP CDS View 通過 ODBC 暴露出來的資料ExcelView
- 如何用ABAP讀取CDS view association的資料View
- 使用CDS view開發SAP Marketing contact的facet追溯工具View
- SAP ABAP CDS view 檢視的 Replacement 技術介紹View
- SAP ABAP CDS view 裡 INNER JOIN 和 Association 的區別View
- 什麼是SAP CDS重定向檢視(Redirect View)?View
- 在 Excel 內使用 ODBC 消費 SAP ABAP CDS viewExcelView
- 如何使用SAP HANA Studio的PlanViz分析CDS view效能問題View
- SAP CDS view自學教程之八:SAP Fiori Elements裡不同型別的annotationView型別
- SAP CDS view單元測試框架Test Double介紹View框架
- 開啟SAP CDS view DCL前後的讀取效能對比View
- 如何在 SAP ABAP ALV 報表裡以交通燈的方式顯示某一列的值
- SAP ABAP ALV 層次順序表如何使用雙表頭(Multiple Headers)進行資料輸出試讀版Header
- 如何使用程式碼的方式刪除 SAP CRM 訂單 Text 資料
- SAP S/4HANA CDS View的訪問控制實現:DCL介紹View
- 使用SAP CDS view快速建立一個Fiori應用,管理Service OrderView
- SAP ABAP CDS view裡的註解在ABAP後臺是如何被解析的?View
- 27 行程式碼開發一個最簡單的 SAP ALV 報表行程
- SAP CDS redirect view支援寫操作嗎,一個實驗來驗證View
- 如何在 SAP BTP 上通過 CDS view 快速建立 Fiori Elements 應用View
- 一步步學習 SAP CDS view Text Association 在 SAP Fiori Elements 中的應用View
- 資料的輸入輸出
- iPaas資料傳輸的方式
- SAP: 建立ALV GRID容器
- SAP ABAP maintanence view的資料校驗機制AIView
- SAP CDS view如何取得當前系統日期和系統時間戳View時間戳
- 48 行程式碼給 ABAP ALV 報表的資料行增添顏色效果行程
- SAP: ALV GRID行顏色