S/4HANA for Customer Management裡的搜尋分頁處理

i042416發表於2018-03-31

這篇文章的英文版我發在了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:

S/4HANA for Customer Management裡的搜尋分頁處理

每頁預設顯示20條資料,因此這200條搜尋結果總共分10頁顯示。

S/4HANA for Customer Management裡的搜尋分頁處理

關於CRM WebClient UI的分頁機制,有兩個要點:

1. 搜尋按鈕點選後,會有max hit的值指定條數的記錄從資料庫取出,儲存於WebClient UI的應用的記憶體區域中。在我的例子裡,我指定的max hit為200,因此有200條Service Request從資料庫裡取出。

2. WebClient UI是一項伺服器端渲染的技術,意味著所有WebClient UI頁面對應的html原始碼都是在ABAP伺服器裡渲染的,然後直接在瀏覽器顯示。在搜尋這個場景裡,任意時間段裡,ABAP後臺只會生成預設20條搜尋結果的html原始碼。

S/4HANA for Customer Management裡的搜尋分頁處理

例如我點了搜尋按鈕之後,只有第1條道第20條記錄的html原始碼在後臺生成,然後返回給瀏覽器由其渲染。當了我點了第二頁的超連結"2"時,第21條到第40條的原始碼相應在後臺生成。

下面是一些技術細節。

1. 可以使用事務碼ST05找到S4CRM的Service Request搜尋查詢的CDS view的名稱CRMS4_SERVHSRCH

S/4HANA for Customer Management裡的搜尋分頁處理

第201條記錄被丟棄:

S/4HANA for Customer Management裡的搜尋分頁處理

在檢視ICCMP_INBOX/INBOXRESULTVIEW.HTM裡設定斷點, 在偵錯程式裡檢查變數"me":

S/4HANA for Customer Management裡的搜尋分頁處理

通過這個路徑能找到儲存在記憶體中的200條搜尋結果:

{O:5768*\CLASS-POOL=CL_BSP_WD_COLLECTION_WRAPPER\CLASS=LCL_COLLECTION_REF}-IF_BSP_WD_COLLECTION_REF~COLLECTION

S/4HANA for Customer Management裡的搜尋分頁處理

2. 當我點第二頁的超連結後:

S/4HANA for Customer Management裡的搜尋分頁處理

後臺生成好的針對從第21行到第40行記錄的html原始碼可以在Chrome開發者工具中觀察到,如下圖所示:

S/4HANA for Customer Management裡的搜尋分頁處理

那麼後臺如何得知應該從第21行開始準備其html原始碼呢?這個索引資訊是從前臺傳到後臺的,通過http請求頭部的欄位:ItemTree_visibleFirstRow.

如果您搞不清楚類似下圖這種字首C36_W138_V139_的生成邏輯,請參考我的部落格 WebClient UI element ID generation logic

S/4HANA for Customer Management裡的搜尋分頁處理

在方法CL_THTMLB_CELLERATOR~GET_REQUEST_PARAMETERS設定斷點,找到後臺是在何處解析該前臺請求傳入的visibleFirstRow:

S/4HANA for Customer Management裡的搜尋分頁處理

在BSP渲染類CL_THTMLB_CELLERATOR裡,這個變數gv_visible_first_row被用於渲染的起始索引:lv_current_row_index:

S/4HANA for Customer Management裡的搜尋分頁處理

每一行的每一個單元的原始碼在迴圈裡依次生成好。迴圈基於表的列定義,當前我係統裡預設的配置,搜尋結果有8列:

S/4HANA for Customer Management裡的搜尋分頁處理
S/4HANA for Customer Management裡的搜尋分頁處理

出於除錯目的,您可以在變數GT_TABLE_ENTRIES裡檢視生成好的用於當前頁面顯示的html原始碼:

S/4HANA for Customer Management裡的搜尋分頁處理

比如對於第二頁,索引從21開始:

S/4HANA for Customer Management裡的搜尋分頁處理

以40結束:

S/4HANA for Customer Management裡的搜尋分頁處理

為什麼變數gt_table_entries有168條記錄?

每頁預設顯示20條記錄,加上1行表頭,每條記錄8列,所以最後是( 20 + 1 ) * 8 = 168
要獲取更多Jerry的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:

S/4HANA for Customer Management裡的搜尋分頁處理
S/4HANA for Customer Management裡的搜尋分頁處理

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2152464/,如需轉載,請註明出處,否則將追究法律責任。

相關文章