天天看點

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

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提到的UI5的用戶端渲染方式,看Jerry這篇文章:Jerry的UI5架構代碼自學教程