Jerry答網友提問:SAP CRM WebClient UI裡的EXT,STRUCT等含義

i042416發表於2020-01-16

2020年,Jerry會做一個新的嘗試,選擇部分朋友向我提出的問題,在公眾號,知識星球或者微信圈子這些平臺上公開回答,這樣或許能幫助到更多的朋友。

具體說明參見我前一篇文章: 2020年關於SAP知識問答的一個新的嘗試

網友的提問:

Jerry答網友提問:SAP CRM WebClient UI裡的EXT,STRUCT等含義

Jerry的解答:

以上截圖是CRM系統裡BSP_WD_CPMWB這個事務碼進入之後,任意開啟一個上下文節點(Context Node)看到的資訊:

Jerry答網友提問:SAP CRM WebClient UI裡的EXT,STRUCT等含義

STRUCT的含義?

Jerry答網友提問:SAP CRM WebClient UI裡的EXT,STRUCT等含義


在Jerry之前的文章  Jerry的WebClient UI 42篇原創文章合集提到這樣一張圖:

Jerry答網友提問:SAP CRM WebClient UI裡的EXT,STRUCT等含義

在UI層的CRM BSP component的MVC設計裡,Model,即Context node,繫結的是Business Object Layer的模型,因此Context node Attributes資料夾下面,以STRUCT開頭的欄位,意味著這個欄位是繫結到BOL模型節點裡的一個欄位的,二者存在一一對應關係,如下圖箭頭所示。而下圖藍色欄位LOCKED, 前面沒有STRUCT字首,說明這個欄位並非來自BOL模型節點,而是開發者直接建立的,這種欄位一般用於應用邏輯裡儲存臨時狀態,或是代表當前應用的某個標誌位,沒有對應的底層儲存,在SAP很多產品裡也稱這種欄位為transient field或者calculated field.

Jerry答網友提問:SAP CRM WebClient UI裡的EXT,STRUCT等含義

展開某個欄位,看到的GET, GET_M, GET_I, GET_V, GET_P, GET_A是什麼意思?

Jerry答網友提問:SAP CRM WebClient UI裡的EXT,STRUCT等含義

要回答這個問題,得從CRM WebClient UI頁面的渲染方式說起。

Jerry答網友提問:SAP CRM WebClient UI裡的EXT,STRUCT等含義

如上圖這種檢視原始碼,使用的標籤頁不是HTML支援的原生標籤,瀏覽器是無法識別和解析的,因此需要有一箇中間層,或者說轉換器,將這些SAP封裝過的標籤轉換成瀏覽器支援的原生HTML標籤。

按照這個轉換器所處位置的不同,分為伺服器端渲染和瀏覽器端渲染兩種方式。SAP CRM WebClient UI基於SAP BSP技術——Business Server Page,光聽名字就知道是在伺服器端渲染了。而SAP UI5,是典型的瀏覽器端渲染,我們在其XML檢視裡書寫的那些標籤同樣無法直接被瀏覽器使用,需要每個標籤對應的渲染器,在瀏覽器端用JavaScript程式碼生成對應原生的HTML標籤。

回到CRM WebClient UI,對於Attributes裡的這些STRUCT欄位們,我們在渲染出的最終頁面裡,有的是一般的輸入欄位,有的是超連結,有的是下拉框,有的不可編輯,SAP開發的轉換器怎麼知道要將每個欄位渲染成什麼樣呢?

奧妙就在這些GET方法裡。這裡有一個小小的設計模式的思路在內,即SAP CRM WebClient UI的框架程式碼,負責伺服器端渲染80%的工作量,即把整個頁面的框架搭出來,包括一個頁面有多少欄位,欄位之間的相對位置等。剩下20%的工作量,比如每個欄位的型別,外觀等屬性,這些資訊框架不可能知道,也不應該知道,這些應該由應用程式提供介面(也可以理解成回撥),在介面裡實現這些屬性,然後由框架呼叫這些介面。我們可以把這個模式看成是設計模式裡的一種——模板模式(Template Design Pattern).

看具體的例子。

雙擊進入CONFIG這個欄位的GET_P方法裡。P的意思是Property,屬性。UI框架在渲染CONFIG這個欄位時,會呼叫GET_P_CONFIG這個介面,詢問應用:你想把CONFIG這個欄位渲染成什麼型別(下圖第4行的fieldtype)?

應用程式通過第五行的field_type_checkbox回答框架:我想把CONFIG欄位渲染成checkbox, 拜託了。

Jerry答網友提問:SAP CRM WebClient UI裡的EXT,STRUCT等含義

UI框架拿到這個資訊後,就可以做對應的渲染工作了。

如果想研究UI拿到這個欄位型別後如何渲染的細節,在GET_P方法裡打斷點,然後開啟一個頁面,單步除錯記錄:

Jerry答網友提問:SAP CRM WebClient UI裡的EXT,STRUCT等含義

GET_I: 如果應用邏輯裡需要根據某種條件動態決定該欄位是否可編輯,將邏輯寫在這個介面裡。

純粹的GET_P方法:這裡面奧妙很多,尤其是這個CONVERT_TO_STRING方法,將底層資料庫表裡對應的欄位根據BOL模型裡的欄位型別渲染成最終對使用者友好易讀的字串。比如底層資料庫表裡儲存的是不含任何時區的時間戳(timestamp), 那麼這個方法會根據使用者設定裡的時區,自動轉換成該時區的本地時間。

Jerry答網友提問:SAP CRM WebClient UI裡的EXT,STRUCT等含義

GET_V: 如果想實現自定義的F4 Value Help,在此實現。

GET_A: 如果某欄位的啟用與否,依賴於某個Business Switch的開與關,在此實現。在SFW開頭的系列事務碼裡檢視和操作Business Switch和Function.

Jerry答網友提問:SAP CRM WebClient UI裡的EXT,STRUCT等含義

EXT開頭的欄位,代表通過CRM增強工具Application Extension Tool(AET)建立的增強欄位。

希望本文能解答這位朋友提出的問題,感謝閱讀。

相關閱讀

Jerry的WebClient UI 42篇原創文章合集

* 也可以瞭解Jerry提到的UI5的客戶端渲染方式,看Jerry這篇文章:[

Jerry的UI5框架程式碼自學教程 mp.weixin.qq.com 圖示

]


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

相關文章