S/4HANA for Customer Management裡的搜尋分頁處理
這篇文章的英文版我發在了SAP Community上:Paging Implementation in S/4HANA for Customer Management
https://blogs.sap.com/2018/03/28/paging-implementation-in-s4hana-for-customer-management/
按照我的公眾號文章裡介紹的,S/4HANA for Customer Management 1.0裡的Service Request UI仍然是採用CRM Webclient UI技術來開發的。
假設我在UI上指定max hit值為200:
每頁預設顯示20條資料,因此這200條搜尋結果總共分10頁顯示。
關於CRM WebClient UI的分頁機制,有兩個要點:
1. 搜尋按鈕點選後,會有max hit的值指定條數的記錄從資料庫取出,儲存於WebClient UI的應用的記憶體區域中。在我的例子裡,我指定的max hit為200,因此有200條Service Request從資料庫裡取出。
2. WebClient UI是一項伺服器端渲染的技術,意味著所有WebClient UI頁面對應的html原始碼都是在ABAP伺服器裡渲染的,然後直接在瀏覽器顯示。在搜尋這個場景裡,任意時間段裡,ABAP後臺只會生成預設20條搜尋結果的html原始碼。
例如我點了搜尋按鈕之後,只有第1條道第20條記錄的html原始碼在後臺生成,然後返回給瀏覽器由其渲染。當了我點了第二頁的超連結"2"時,第21條到第40條的原始碼相應在後臺生成。
下面是一些技術細節。
1. 可以使用事務碼ST05找到S4CRM的Service Request搜尋查詢的CDS view的名稱CRMS4_SERVHSRCH
第201條記錄被丟棄:
在檢視ICCMP_INBOX/INBOXRESULTVIEW.HTM裡設定斷點, 在偵錯程式裡檢查變數"me":
通過這個路徑能找到儲存在記憶體中的200條搜尋結果:
{O:5768*\CLASS-POOL=CL_BSP_WD_COLLECTION_WRAPPER\CLASS=LCL_COLLECTION_REF}-IF_BSP_WD_COLLECTION_REF~COLLECTION
2. 當我點第二頁的超連結後:
後臺生成好的針對從第21行到第40行記錄的html原始碼可以在Chrome開發者工具中觀察到,如下圖所示:
那麼後臺如何得知應該從第21行開始準備其html原始碼呢?這個索引資訊是從前臺傳到後臺的,通過http請求頭部的欄位:ItemTree_visibleFirstRow.
如果您搞不清楚類似下圖這種字首C36_W138_V139_的生成邏輯,請參考我的部落格 WebClient UI element ID generation logic
在方法CL_THTMLB_CELLERATOR~GET_REQUEST_PARAMETERS設定斷點,找到後臺是在何處解析該前臺請求傳入的visibleFirstRow:
在BSP渲染類CL_THTMLB_CELLERATOR裡,這個變數gv_visible_first_row被用於渲染的起始索引:lv_current_row_index:
每一行的每一個單元的原始碼在迴圈裡依次生成好。迴圈基於表的列定義,當前我係統裡預設的配置,搜尋結果有8列:
出於除錯目的,您可以在變數GT_TABLE_ENTRIES裡檢視生成好的用於當前頁面顯示的html原始碼:
比如對於第二頁,索引從21開始:
以40結束:
為什麼變數gt_table_entries有168條記錄?
每頁預設顯示20條記錄,加上1行表頭,每條記錄8列,所以最後是( 20 + 1 ) * 8 = 168
要獲取更多Jerry的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2152464/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SAP S/4HANA Customer Management裡的頁面搜尋結果的分頁顯示原理
- SAP S/4HANA Customer Management(CRM)模組的Partner模型設計模型
- SAP S/4HANA裡如何建立Customer主資料以及執行後續處理
- Customer Management
- SAP S/4HANA Material Fiori應用的搜尋實現原理
- SAP Cloud for Customer 如何直接消費S/4HANA APICloudAPI
- SAP UI 搜尋分頁技術UI
- UI自動化測試:App的WebView頁面中,當搜尋欄無搜尋按鈕時處理方法UIAPPWebView
- 搜尋 伺服器處理請求伺服器
- TP5 搜尋按條件分頁
- DjangoRestFramework 實現分頁功能與搜尋功能DjangoRESTFramework
- PHP 陣列搜尋 sdk & 陣列分頁PHP陣列
- Google搜尋為什麼不能無限分頁?Go
- SQL 搜尋方法或鍵集分頁 - Vlad MihalceaSQL
- SAP Customer Data Cloud(Gigya)的使用者搜尋實現Cloud
- SAP S/4HANA Material Fiori應用根據擴充套件欄位搜尋的實現原理套件
- 關於 groupBy 分組查詢的分頁處理
- 搜尋引擎es-分詞與搜尋分詞
- OData服務在SAP CRM,Cloud for Customer和S/4HANA上的實現比較Cloud
- Vue + element.ui table 分頁功能+搜尋功能的實現VueUI
- Spring專案處理分頁(邏輯和物理分頁)Spring
- 處理分頁的result型別問題型別
- 使用ABAP程式碼建立S/4HANA裡的Sales Order
- thinkphp5 分頁資料物件的處理PHP物件
- thinkPHP 分頁後如何處理資料PHP
- 讀書APP原始碼,搜尋欄模糊處理實現APP原始碼
- 利用搜尋結果頁SEO的方法
- 從二分搜尋到二叉搜尋樹
- 啟發式搜尋的方式(深度優先,廣度優先)和 搜尋方法(Dijkstra‘s演算法,代價一致搜尋,貪心搜尋 ,A星搜尋)演算法
- SAP Spartacus 產品搜尋頁面結果裡的 filter 設計明細Filter
- 大量資料如何做分頁處理
- Laravel 專案 偽靜態分頁處理Laravel
- DRF 過濾排序分頁異常處理排序
- SAP UI5應用裡的頁面路由處理UI路由
- SAP S/4HANA裡extension include view和extension view的區別View
- 二分搜尋樹元素的插入
- 學習ASP.NET Core(08)-過濾搜尋與分頁排序ASP.NET排序
- win10搜尋檔案在哪裡 檢視搜尋檔案位置的方法Win10