1. 程式人生 > 其它 >iframe 在 SAP 三款產品中的三個應用場景

iframe 在 SAP 三款產品中的三個應用場景

這是 Jerry 2021 年的第 73 篇文章,也是汪子熙公眾號總共第 350 篇原創文章。

iframe 是一項歷史悠久的前端技術,能夠將另一個 HTML 頁面嵌入到當前的宿主頁面。每個通過 iframe 被嵌入的 HTML 頁面都擁有自己獨立的瀏覽上下文,會話歷史記錄和 DOM 樹。雖然 iframe 如果使用不當,可能會引發效能問題和安全隱患,但是它也有其應用場合,即複用第三方應用頁面。因此,即便在 SAP 這種企業級應用軟體的前端開發領域,iframe 仍然有其一席之地。

本文介紹 Jerry 曾經工作過的三款 SAP 產品中 iframe 的使用場景。

SAP CRM WebClient UI - SAP BSP 頁面中嵌入 SAP UI5 應用

SAP CRM WebClient UI 誕生於本世紀初,底層基於 SAP ABAP BSP(Business Server Page).由於歷史原因,WebClient UI 缺乏對 Chart 類控制元件的支援。因此,在 SAP CRM WebClient UI 需要實現表現力豐富的圖表展示需求時,使用了 Iframe 嵌入 SAP UI5 圖表應用的解決方案。畢竟,利用多種型別的圖表呈現業務分析類資料,也是 SAP UI5 應用的強項之一。

使用 SAP CRM 業務角色 Analytics Professional 登入系統,可以建立 SAP HANA Live Report 這種型別的分析報表:

SAP HANA Live Report,使用了來自 SAP 釋出的位於名稱空間 sap.hba.crm 下的 HANA 模型。這些模型定義了報表支援的所有查詢引數,在報表建立嚮導裡可以選擇使用哪些引數,以及維護預設值。

最後創建出的報表顯示如下圖所示。有經驗的 WebClient UI 開發人員,可以一眼看出,這個介面的開發技術應該並非 WebClient UI.

我們在 SAP CRM 裡找到上圖頁面的 WebClient UI 應用名稱為 CRM_ANA_OD_RTC, 字尾 RTC 即 Run Time Container,執行時容器。開啟這個應用頁面的 HTML 原始碼,發現該頁面只是一個殼(Wrapper),通過第 18 行的 iframe 元素,嵌入了另一個 SAP UI5 應用,其名稱在第 19 行的 src 屬性裡能夠找到:crm_ana_od_ui5.

關於 SAP UI 開發技術的演進歷史,參考 Jerry 的文章:

SAP UI 和 Salesforce UI 開發漫談

關於 SAP UI 伺服器端和客戶端渲染的技術分類,參考 Jerry 的文章:

SAP UI渲染模式:客戶端渲染 VS 伺服器端渲染

總結:在 SAP CRM 這個報表展示場景裡,宿主 UI 的開發技術是 WebClient UI,通過 iframe 被嵌入的 UI 頁面的開發技術是 SAP UI5.

SAP Cloud for Customer 通過 Mashup 顯示第三方頁面

SAP Cloud for Customer Mashup(混搭)體現了該產品 UI 強大的 Extensibility 特性,通過該技術能將第三方應用的介面嵌入到 C4C 標準頁面裡,並支援宿主頁面和被嵌入的第三方應用介面之間的資料傳遞。

下圖是我在 SAP Cloud for Customer Leads Overview 頁面通過 Mashup 嵌入的 Bing 搜尋頁面。當該 Overview 頁面開啟時,Lead ID 通過 C4C 定義的 Mashup 模型,自動被傳遞到 Bing 搜尋頁面,執行並顯示搜尋結果。當然,開發人員可以選擇 Lead BO 上除了 ID 之外的其他欄位,傳遞到 Bing 搜尋頁面中去。

SAP Cloud for Customer Mashup 技術底層仍然採用了 iframe 元素來嵌入第三方網頁。在 Chrome 開發者工具裡找到 iframe,通過 src 屬效能清楚地發現被嵌入的 Bing 引擎 的 url.

除了嵌入現成的第三方頁面之外,SAP C4C Mashup 還可以通過 iframe 嵌入網頁的半成品,從而給合作伙伴提供了更多通過二次開發對 SAP C4C 標準頁面進行增強的可能性。

我們在 SAP C4C Mashup 編輯頁面裡選擇 Mashup Category,這個下拉選單裡的選擇,決定了我們可以將 C4C 哪些標準 Business Objects 的哪些欄位,傳遞給最終會被嵌入到 C4C 標準頁面的自開發 HTML 頁面裡。

比如上圖我選擇的 Mashup Category 為 Business & Finance, 這意味著我可以在我自定義的 HTML 頁面裡,訪問該 Category 暴露出的和當前登入的 Employee 相關的欄位值。

下圖是我編輯的一個簡單的 HTML 頁面的原始碼,其中第 6 行變數 sap.byd.ui.mashup.context.system.EmployeeName, 執行時會被該 BO 欄位的實際值,Dr. Wang Jerry 所替換。

執行時被嵌入的自定義 HTML 欄位以及對應的 iframe 元素如下圖所示:

總結:在 SAP Cloud for Customer 通過 Mashup 對標準 UI 進行增強的使用場景裡,被增強的 C4C UI 的開發技術是 SAP UI5,而被嵌入的第三方介面,可以採取任何前端技術開發,這些技術棧對於 C4C 宿主 UI 來說完全透明。

關於 Mashup 在 SAP Cloud for Customer 中的更多使用場景,請參考 Jerry 之前的文章:

SAP 電商雲 Smart Edit 和 SAP Spartacus UI 的整合

SAP Smart Edit 是一個能以所見即所得方式管理 SAP 電商雲店面內容的 Web 應用程式。

關於 SAP Smart Edit 的更多介紹,請參考 Jerry 這個視訊

下圖是 Spartacus 電商雲 Spartacus UI 首頁,在本地執行時,開啟的店鋪為 sample 資料裡自帶的 Powertools Site:

在 Backoffice Website 配置介面裡,將其 WCMS Cockpit Preview URL 設定成 http://localhost:4299/powertools-spa:

然後訪問 SAP Smart Edit url:

https://localhost:9002/smartedit/#!/storefront

從下拉選單裡選擇我們想使用 SAP Smart Edit 進行編輯的 SAP 電商雲店面:

等到 SAP Spartacus 頁面在 SAP Smart Edit Preview 面板下渲染完畢後,就可以在此直觀地對當前開啟的店面進行修改了:

比如新增一個新的 CMS Flex Component,然後到 Spartacus 應用裡為該 CMS Component 建立並實現對應的 Angular Component,以實現建立 SAP 電商雲自定義 UI 的需求。

各種 SAP 產品的自定義 UI 建立和整合方法一覽

當我們在 Chrome 開發者工具裡開啟 SAP Smart Edit 時,發現同本文介紹的前兩個使用場景類似,SAP Spartacus UI 也是通過 iframe 的方式,被嵌入到 SAP Smart Edit Preview 面板內部。

iframe 元素的 src 由兩部分組成:

http://localhost:4299/powertools-spa/cx-preview?cmsTicketId=647870574925284848f12300-7491-4c2f-bed4-405545e1b0fb

上圖紅色高亮的前半部分,在之前介紹的 SAP Commerce Cloud Backoffice WCMS Website 配置介面裡維護。後半部分包含了 SAP Commerce Cloud 後臺動態生成的 cmsTicketId 欄位,作為 SAP Smart Edit 和 SAP Spartacus 整合的一個 Contract,通知 Spartacus 當前應該工作在 Preview 模式。

總結

水能載舟,亦能覆舟。任何一門技術之所以誕生在世上,必定有其適用場合以及能夠解決的業務痛點。因此,拋開使用場合而斷言“IRAME IS EVIL”,我認為太過絕對。

本文介紹的三個使用場景,如果選擇 iframe 之外的其他技術,能否實現同樣的需求呢?我個人覺得比較困難。即使能實現,付出的工作量和代價,同使用 iframe 方法相比又如何呢?

希望本文能幫助大家對於 iframe 在 SAP 產品前端開發中的使用場景有一個最基本的瞭解,感謝閱讀。

Jerry 的 SAP 電商雲 Spartacus UI 開發合集

Jerry 的 SAP UI 開發綜述文章合集

更多Jerry的原創文章,盡在:"汪子熙":