溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

怎樣分析SAP產(chǎn)品的Field Extensibility

發(fā)布時(shí)間:2021-12-31 09:25:08 來(lái)源:億速云 閱讀:143 作者:柒染 欄目:互聯(lián)網(wǎng)科技

這篇文章將為大家詳細(xì)講解有關(guān)怎樣分析SAP產(chǎn)品的Field Extensibility,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

SAP開(kāi)發(fā)人員的工作職責(zé),除了實(shí)現(xiàn)軟件的功能性需求外,還會(huì)花費(fèi)相當(dāng)?shù)木?shí)現(xiàn)一些非功能性需求,來(lái)滿足所謂的SAP Product Standard(產(chǎn)品標(biāo)準(zhǔn))。這些產(chǎn)品標(biāo)準(zhǔn),包含在SAP項(xiàng)目實(shí)施中大顯身手的Extensibility,為客戶(hù)業(yè)務(wù)流程的安全運(yùn)行保駕護(hù)航的Security,也有看起來(lái)不太起眼,但實(shí)際上體現(xiàn)了SAP作為一家偉大企業(yè)所具有的社會(huì)擔(dān)當(dāng)?shù)腁ccessibility,以及Internationalization等等。

今天咱們就來(lái)說(shuō)說(shuō)SAP產(chǎn)品的Extensibility。盡管SAP產(chǎn)品對(duì)現(xiàn)實(shí)世界中的業(yè)務(wù)流程做了一定程度的抽象,但是部分客戶(hù)在實(shí)際使用過(guò)程中仍然會(huì)發(fā)現(xiàn)自己企業(yè)有些特殊的業(yè)務(wù)流程無(wú)法用SAP產(chǎn)品的標(biāo)準(zhǔn)功能來(lái)支持。此時(shí)SAP產(chǎn)品的Extensibility就有了用武之地:所謂Extensibility,即SAP產(chǎn)品的底層框架提供了足夠的靈活性,確??蛻?hù)和實(shí)施伙伴借助SAP提供的標(biāo)準(zhǔn)工具,能夠?qū)AP產(chǎn)品進(jìn)行增強(qiáng)(Enhancement),以此來(lái)滿足自己特殊的業(yè)務(wù)需求。這種增強(qiáng)和直接修改SAP產(chǎn)品(Modification)的區(qū)別在于,前者是SAP推薦的方式,增強(qiáng)實(shí)現(xiàn)本身和被增強(qiáng)的SAP標(biāo)準(zhǔn)資源是不同的實(shí)體,分別存儲(chǔ)于不同的包內(nèi)。每次版本升級(jí)時(shí),增強(qiáng)實(shí)現(xiàn)本身不會(huì)受到任何影響;而修改,則改動(dòng)了SAP產(chǎn)品的標(biāo)準(zhǔn)代碼或模型,每次版本升級(jí)這些修改都會(huì)全部丟失掉。而且在基于Netweaver的Cloud產(chǎn)品里,比如S/4HANA Cloud和SAP Cloud for Customer,客戶(hù)和實(shí)施伙伴沒(méi)有任何途徑直接去修改Netweaver后臺(tái)的資源。

SAP產(chǎn)品的Extensibility分為Field Extensibility和Process Extensibility。Field Extensibility,即用戶(hù)可直接在瀏覽器里,通過(guò)簡(jiǎn)單的步驟在UI上期望的區(qū)域創(chuàng)建新的字段,我們稱(chēng)其為擴(kuò)展字段(Extension Field)。有時(shí)候我們又會(huì)在這個(gè)術(shù)語(yǔ)前加上Simple的前綴,這個(gè)前綴強(qiáng)調(diào),客戶(hù)在創(chuàng)建新字段時(shí),既不需要具備任何技術(shù)知識(shí),也不需要了解該產(chǎn)品底層的數(shù)據(jù)模型的設(shè)計(jì)細(xì)節(jié),而是通過(guò)類(lèi)似我們?cè)赪indows系統(tǒng)下安裝軟件的向?qū)б粯?,通過(guò)向?qū)崾镜暮?jiǎn)單步驟即可完成。Process Extensibility,強(qiáng)調(diào)流程的增強(qiáng),即通過(guò)SAP提供的增強(qiáng)工具,比如Business Add-In(BAdI), Post-Exit等等,對(duì)SAP產(chǎn)品的標(biāo)準(zhǔn)流程做一定程度的增強(qiáng)。沒(méi)有接觸過(guò)BAdI和Post-Exit的朋友們,如果做過(guò)Java Spring開(kāi)發(fā),可以把BAdI類(lèi)比成Spring里各種各樣的hook,把Post-Exit類(lèi)比成Spring AOP(面向切面編程)。

下面會(huì)介紹SAP CRM和S/4HANA的Field Extensibility。

SAP CRM Field Extensibility

SAP CRM的擴(kuò)展字段的創(chuàng)建通過(guò)Application Enhancement Tool(AET)這個(gè)工具完成。用戶(hù)在創(chuàng)建擴(kuò)展字段之前,先要進(jìn)入配置模式(Configuration mode),然后可以進(jìn)行擴(kuò)展字段創(chuàng)建的UI會(huì)自動(dòng)被高亮。

怎樣分析SAP產(chǎn)品的Field Extensibility

點(diǎn)擊高亮區(qū)域后,即可看到創(chuàng)建字段的按鈕。點(diǎn)Create Field進(jìn)入擴(kuò)展字段的創(chuàng)建向?qū)В?/p>

怎樣分析SAP產(chǎn)品的Field Extensibility

這里需要維護(hù)待創(chuàng)建擴(kuò)展字段的明細(xì)信息,比如字段標(biāo)簽,字段類(lèi)型,長(zhǎng)度,字段所在的BO模型(下圖的ORDERADM_H)等等。

怎樣分析SAP產(chǎn)品的Field Extensibility

上圖我創(chuàng)建了一個(gè)標(biāo)簽為city name的擴(kuò)展字段,保存并激活后,在UI上顯示如下。

怎樣分析SAP產(chǎn)品的Field Extensibility

這一切步驟僅僅幾分鐘內(nèi)就可完成,然而背后發(fā)生的事情遠(yuǎn)遠(yuǎn)沒(méi)有這么簡(jiǎn)單。為了實(shí)現(xiàn)Simple Field Extensibility,SAP開(kāi)發(fā)人員需要進(jìn)行一系列的開(kāi)發(fā),我們稱(chēng)其為Extensibility registration and enablement。這種開(kāi)發(fā)需要SAP Extensibility框架開(kāi)發(fā)人員和SAP應(yīng)用開(kāi)發(fā)人員雙方共同參與。因?yàn)楸M管從客戶(hù)眼中看到的效果,僅僅是UI新出現(xiàn)了一個(gè)擴(kuò)展字段,然而這只是冰山一角——后臺(tái)的數(shù)據(jù)庫(kù)表,BO模型和每一個(gè)交互層相關(guān)的接口數(shù)據(jù)結(jié)構(gòu)也應(yīng)該自動(dòng)被該擴(kuò)展字段所增強(qiáng)。

下面是一些例子,我在UI創(chuàng)建的標(biāo)簽為city name的擴(kuò)展字段,自動(dòng)出現(xiàn)在后臺(tái)數(shù)據(jù)庫(kù)表中:

怎樣分析SAP產(chǎn)品的Field Extensibility

和CRM Order相關(guān)的函數(shù)的接口結(jié)構(gòu)也自動(dòng)包含了這個(gè)擴(kuò)展字段:

怎樣分析SAP產(chǎn)品的Field Extensibility

One Order的BO模型的BTAdminH節(jié)點(diǎn)也自動(dòng)被這個(gè)擴(kuò)展字段增強(qiáng)。

怎樣分析SAP產(chǎn)品的Field Extensibility

那么Extensibility框架怎么知道當(dāng)擴(kuò)展字段被創(chuàng)建時(shí),這些屬于某個(gè)應(yīng)用程序的資源也需要被增強(qiáng)呢?原來(lái),SAP Extensibility框架開(kāi)發(fā)人員和SAP應(yīng)用開(kāi)發(fā)人員達(dá)成了一個(gè)契約:Extensibility框架開(kāi)發(fā)人員定義了一個(gè)注冊(cè)表,應(yīng)用開(kāi)發(fā)人員如果想讓自己負(fù)責(zé)的UI支持Simple Field Extensibility,需要把自己應(yīng)用的各種需要被框架自動(dòng)增強(qiáng)的模型信息和數(shù)據(jù)庫(kù)表信息填寫(xiě)到這個(gè)注冊(cè)表里,這樣當(dāng)用戶(hù)使用AET工具進(jìn)行增強(qiáng)時(shí),Extensibility框架就知道到底有哪些應(yīng)用層相關(guān)的模型也需要跟著增強(qiáng)。

這個(gè)注冊(cè)表的外觀見(jiàn)下圖:

怎樣分析SAP產(chǎn)品的Field Extensibility

除了注冊(cè)之外,應(yīng)用開(kāi)發(fā)人員還有很多其他事情要做,因此SAP內(nèi)部有個(gè)Application Extensibility Guideline的編程規(guī)范,我們做開(kāi)發(fā)時(shí)就是照著這個(gè)文檔來(lái)的。

如果實(shí)施伙伴自己開(kāi)發(fā)了一個(gè)UI,也想讓其支持Simple Field Extensibility,那么也需要按照這個(gè)Guideline來(lái)開(kāi)發(fā)。

我以前做過(guò)一個(gè)例子供大家參考:

注冊(cè)表的填寫(xiě):

https://blogs.sap.com/2013/10/25/step-by-step-to-enable-your-genil-component-with-aet

按照Application Extensibility Guideline讓您的應(yīng)用支持Simple Field Extensibility

https://blogs.sap.com/2013/10/25/step-by-step-to-enable-your-genil-component-with-aet-part-two/

有的CRM顧問(wèn)朋友們會(huì)不時(shí)問(wèn)我,"為什么我的AET UI看不到Create Field的按鈕,或者變成灰色了?”其實(shí)原因不外乎下面三種:

1. 您的用戶(hù)沒(méi)有AET使用權(quán)限

2. 您的系統(tǒng)上AET沒(méi)有正確setup起來(lái)

3. 您選擇的UI不可被AET增強(qiáng)(即UI對(duì)應(yīng)的UI沒(méi)有注冊(cè)成"可擴(kuò)展”)

在給SAP提incident之前,可以按照我這篇博客的步驟,自行去調(diào)試找到原因:

https://blogs.sap.com/2013/09/29/inside-aet-why-create-field-button-is-visible-in-some-ui-while-invisible-in-others/

用AET創(chuàng)建的這些擴(kuò)展字段,在運(yùn)行時(shí)是如何畫(huà)到UI上的呢?

簡(jiǎn)單地說(shuō),CRM WebClient UI的視圖配置信息(即視圖上需要顯示的字段明細(xì),字段間的相對(duì)位置,字段標(biāo)簽等等),都維護(hù)在一個(gè)所謂Configuration Context的實(shí)體中,以16位的GUID標(biāo)識(shí)。

怎樣分析SAP產(chǎn)品的Field Extensibility

Context內(nèi)容以XML格式存儲(chǔ)在數(shù)據(jù)庫(kù)表BSP_DL_XMLSTRX2里。

怎樣分析SAP產(chǎn)品的Field Extensibility

運(yùn)行時(shí),UI框架首先從上述數(shù)據(jù)庫(kù)表里把XML數(shù)據(jù)讀出來(lái),解析成DOM, 然后根據(jù)DOM里每個(gè)節(jié)點(diǎn)對(duì)應(yīng)的不同UI控件類(lèi)型,實(shí)例化不同的UI控件。比如XML里定義的某個(gè)字段類(lèi)型為inputfield, 則創(chuàng)建一個(gè)CL_THTMLB_INPUTFIELD類(lèi)的實(shí)例。Jerry在之前的公眾號(hào)文章SAP UI和Salesforce UI開(kāi)發(fā)漫談介紹過(guò),每個(gè)WebClient UI支持的控件都會(huì)有一個(gè)類(lèi)似SAP UI5中的Render類(lèi),負(fù)責(zé)生成該控件對(duì)應(yīng)的原生HTML代碼。而將AET創(chuàng)建出來(lái)的擴(kuò)展字段添加到UI上,從UI視圖配置的角度講,僅僅是在XML源代碼里增加了一個(gè)擴(kuò)展字段對(duì)應(yīng)的節(jié)點(diǎn),如下圖所示:

怎樣分析SAP產(chǎn)品的Field Extensibility

更多關(guān)于擴(kuò)展字段在運(yùn)行時(shí)的渲染原理講解,請(qǐng)參考我的博客:

https://blogs.sap.com/2016/12/22/how-extension-field-created-by-aet-is-rendered-in-web-client-ui/

SAP S/4HANA Extensibility

怎樣分析SAP產(chǎn)品的Field Extensibility

和SAP CRM在具體的應(yīng)用程序UI上直接創(chuàng)建擴(kuò)展字段稍有不同,S/4HANA通過(guò)一個(gè)統(tǒng)一的Tile(Custom Fields and Logic)作為入口來(lái)創(chuàng)建擴(kuò)展字段:

怎樣分析SAP產(chǎn)品的Field Extensibility

擴(kuò)展字段的明細(xì)維護(hù)界面和SAP CRM的AET工具大同小異。下圖的Business Context指用戶(hù)希望這個(gè)字段出現(xiàn)在S/4HANA Fiori應(yīng)用,Product Master的明細(xì)界面的General區(qū)域內(nèi)。

怎樣分析SAP產(chǎn)品的Field Extensibility

擴(kuò)展字段創(chuàng)建完畢后,客戶(hù)進(jìn)到Product Master明細(xì)頁(yè)面內(nèi),點(diǎn)擊右鍵然后從Available Fields列表里選擇出剛才創(chuàng)建的擴(kuò)展字段,即可將此擴(kuò)展字段顯示在Fiori UI上。

怎樣分析SAP產(chǎn)品的Field Extensibility

怎樣分析SAP產(chǎn)品的Field Extensibility

S/4HANA的應(yīng)用開(kāi)發(fā)人員需要做的事情和前一章節(jié)介紹的SAP CRM類(lèi)似,同樣需要做注冊(cè)。

下圖是S/4HANA Extensibility的注冊(cè)表。高亮的一行,代表我在擴(kuò)展字段創(chuàng)建對(duì)話框從Business Context下拉菜單里選中的"Product Master General":

怎樣分析SAP產(chǎn)品的Field Extensibility

上述注冊(cè)表針對(duì)Product Master General維護(hù)了兩個(gè)ABAP DDIC include結(jié)構(gòu),意思是一旦這個(gè)擴(kuò)展字段創(chuàng)建保存后,會(huì)自動(dòng)出現(xiàn)在這兩個(gè)DDIC include結(jié)構(gòu)上。

從注冊(cè)表上方高亮的標(biāo)簽頁(yè)還可看出,在S/4HANA里通過(guò)瀏覽器創(chuàng)建的這些擴(kuò)展字段,除了直接顯示在Fiori UI之外,還能放到CDS view,OData模型,Web Service,IDoc這些模型中去。注冊(cè)表里出現(xiàn)的這些選項(xiàng)僅僅表明它們可以支持用Extensibility擴(kuò)展框架添加擴(kuò)展字段,至于是否真正把擴(kuò)展字段放進(jìn)去,由客戶(hù)自行決定。通過(guò)點(diǎn)擊Enable Usage即可將擴(kuò)展字段添加到對(duì)應(yīng)模型中去。

怎樣分析SAP產(chǎn)品的Field Extensibility

那么顯示在Fiori UI上的S/4HANA擴(kuò)展字段,在運(yùn)行時(shí)又是如何被渲染出來(lái)的呢?為了回答這個(gè)問(wèn)題,我們先分析當(dāng)我們把擴(kuò)展字段添加到Fiori UI時(shí),F(xiàn)iori UI發(fā)送給S/4HANA后臺(tái)的HTTP請(qǐng)求到底包含了哪些信息。

使用Jerry之前的公眾號(hào)文章 Jerry和您聊聊Chrome開(kāi)發(fā)者工具介紹的老套路,用Chrome開(kāi)發(fā)者工具找到這個(gè)HTTP請(qǐng)求的明細(xì)。請(qǐng)求的payload是一個(gè)JSON字符串,保存到本地詳細(xì)研究,里面有7個(gè)重要的字段。

怎樣分析SAP產(chǎn)品的Field Extensibility

1. jstype: sap.ui.comp.smartfield.SmartField

表明該擴(kuò)展字段在Fiori UI視圖中的實(shí)現(xiàn)類(lèi)型為Smart Field。什么是Smart Field?它也是UI5提供的控件之一,但和sap.m.Button, sap.m.Input這些擁有具體類(lèi)型的UI控件不同,Smart Field在XML視圖開(kāi)發(fā)階段,并沒(méi)有和任何確定的UI顯示類(lèi)型綁定,實(shí)際上只是一個(gè)占位符。下圖是一個(gè)Smart Field的例子,僅僅憑借這個(gè)XML視圖片段,我們根本不知道id為idPrice的Smart Field,在運(yùn)行時(shí)到底會(huì)被渲染成一個(gè)什么樣的UI5控件。相反,該控件的類(lèi)型,在運(yùn)行時(shí)才能決定下來(lái),取決于其綁定的字段Price在OData模型的元數(shù)據(jù)中具有何種注解(annotation)。

怎樣分析SAP產(chǎn)品的Field Extensibility

在我的例子里,字段Price在元數(shù)據(jù)中被注解為一個(gè)擁有單位的Decimal字段,其代為字段為OData模型里另一個(gè)字段:CurrencyCode。

怎樣分析SAP產(chǎn)品的Field Extensibility

因此在運(yùn)行時(shí),這個(gè)Smart Field會(huì)被UI5框架渲染成兩個(gè)UI5控件,一個(gè)控件顯示價(jià)格的數(shù)字, 綁定到OData模型上的字段Price,另一個(gè)控件顯示價(jià)格單位,綁定到OData模型的字段CurrencyCode。

怎樣分析SAP產(chǎn)品的Field Extensibility

更多Smart Field和渲染邏輯的講解,請(qǐng)參考我的博客:

https://blogs.sap.com/2016/03/14/currency-example-how-smart-field-works/

2. id:mdm.cmd.product.maintain::sap.suite.ui.generic.template.ObjectPage.view.Detail::C_Product...

表明了該擴(kuò)展字段到底添加到哪個(gè)Fiori應(yīng)用的哪一個(gè)具體UI區(qū)域。ID前半部分的mdm.cmd.product.maintain代表S/4HANA Product Master這個(gè)Fiori應(yīng)用,sap.suite.ui.generic.template.ObjectPage.view.Detail代表這個(gè)Fiori應(yīng)用是基于SAP Smart Template框架構(gòu)建而成,擴(kuò)展字段所在的UI基于Smart Template的ObjectPage的Detail頁(yè)面構(gòu)建。

什么是Smart Template的ObjectPage?請(qǐng)參考我的博客:

https://blogs.sap.com/2016/05/03/my-understanding-about-how-object-page-in-smart-template-is-rendered/

3. YY1_JDKminimumversionJ_PRD

Fiori UI擴(kuò)展字段綁定的OData模型的字段名稱(chēng)。我們可以做個(gè)實(shí)驗(yàn):在Fiori UI上該擴(kuò)展字段里隨便維護(hù)一個(gè)值,比如"1.7", 然后保存。關(guān)掉UI再重新打開(kāi),很容易在Chrome開(kāi)發(fā)者工具里觀察到從后臺(tái)返回的OData響應(yīng)結(jié)構(gòu)里,有一個(gè)名為"YY1_JDKminimumversionJ_PRD"的字段包含了"1.7"這個(gè)值。Fiori UI的擴(kuò)展字段正是綁定到了該模型字段上,因而能顯示出"1.7"。

怎樣分析SAP產(chǎn)品的Field Extensibility

4. fileName

5. layer:CUSTOMER,packageName:$tmp

這幾個(gè)字段需要聯(lián)合起來(lái)解釋。前面CRM章節(jié)已經(jīng)介紹過(guò),SAP CRM WebClient UI視圖的配置信息,以XML的格式維護(hù)在后臺(tái)數(shù)據(jù)庫(kù)表中。然而S/4HANA Fiori應(yīng)用因?yàn)榛赨I5開(kāi)發(fā),不存在這種配置信息對(duì)應(yīng)的存儲(chǔ)數(shù)據(jù)庫(kù)表,而是用文件的方式,把擴(kuò)展字段和Fiori UI的對(duì)應(yīng)關(guān)系存儲(chǔ)起來(lái),放到一個(gè)特殊的倉(cāng)庫(kù)里。文件的內(nèi)容大體上就是我現(xiàn)在正在介紹的從Chrome開(kāi)發(fā)者工具里觀察到的JSON字符串,文件存儲(chǔ)的區(qū)域稱(chēng)為L(zhǎng)REP(Layered Repository)。LREP實(shí)際是ABAP實(shí)現(xiàn)的一個(gè)文件系統(tǒng),可以用report /UIF/GET_CHANGES_4_TARGET瀏覽其內(nèi)容。

執(zhí)行report,最醒目的就是這幾個(gè)layer,這也是LREP命名的由來(lái),一個(gè)分層的文件系統(tǒng)。

怎樣分析SAP產(chǎn)品的Field Extensibility

Vendor layer:即SAP layer,包含SAP發(fā)布的標(biāo)準(zhǔn)內(nèi)容。

Partner layer:Partner可以基于SAP layer的內(nèi)容做增強(qiáng)。例如同CRM AET一樣,Partner的增強(qiáng)可以通過(guò)配置放到一個(gè)可以傳輸?shù)腁BAP包里,那么Partner在Fiori UI上創(chuàng)建的擴(kuò)展字段均存儲(chǔ)在這個(gè)ABAP包內(nèi),從開(kāi)發(fā)系統(tǒng)傳到測(cè)試和生產(chǎn)系統(tǒng)。

Customer layer:客戶(hù)通過(guò)S/4HANA的擴(kuò)展工具做的增強(qiáng),一般都配置為存儲(chǔ)于$tmp包內(nèi),不可傳輸,對(duì)同一系統(tǒng)的其他所有用戶(hù)均可見(jiàn)。

Draft layer:和本文主題無(wú)關(guān),用于S/4HANA的Draft概念處理,參考SAP help: https://help.sap.com/viewer/468a97775123488ab3345a0c48cadd8f/1709%20002/en-US/ed9aa41c563a44b18701529c8327db4d.html

User layer:存儲(chǔ)personalization信息,僅對(duì)創(chuàng)建該資源的用戶(hù)可見(jiàn)。

為什么要引入這個(gè)分層機(jī)制呢?還是為了實(shí)現(xiàn)文章開(kāi)頭提到的中心思想:確保合作伙伴和客戶(hù)做的增強(qiáng)不會(huì)因?yàn)镾AP的產(chǎn)品升級(jí)而丟失。通過(guò)內(nèi)容的分層存儲(chǔ),SAP,合作伙伴和客戶(hù)做的內(nèi)容彼此隔離,互不影響。在運(yùn)行時(shí),假設(shè)對(duì)于同一UI模型,SAP,合作伙伴和客戶(hù)均有各自的資源,則最終用戶(hù)看到的UI是這些資源的一個(gè)并集,我們稱(chēng)產(chǎn)生這個(gè)并集的過(guò)程為Merge。在Merge過(guò)程中如果遇到?jīng)_突,比如一個(gè)UI字段的標(biāo)簽,SAP,合作伙伴和客戶(hù)均有各自的定義,則Merge結(jié)果以?xún)?yōu)先級(jí)最高的layer包含的內(nèi)容為準(zhǔn)。不同layer優(yōu)先級(jí)從低到高,即上圖report從上到下的layer依次為:

SAP->Partner->Customer->User。

再回到我們正在進(jìn)行的payload分析。執(zhí)行report,結(jié)果如下。點(diǎn)擊按鈕顯示LREP里這個(gè)文件的完整內(nèi)容:

怎樣分析SAP產(chǎn)品的Field Extensibility

可以發(fā)現(xiàn)該文件內(nèi)容就是我們?cè)贑hrome開(kāi)發(fā)者工具里觀察到的從Fiori UI發(fā)送到S/4HANA后臺(tái)服務(wù)器的HTTP請(qǐng)求的payload:

怎樣分析SAP產(chǎn)品的Field Extensibility

因此,我們?cè)贔iori UI從右鍵菜單的Available Fields里選擇擴(kuò)展字段放到Fiori UI上時(shí),F(xiàn)iori UI通過(guò)HTTP請(qǐng)求將該擴(kuò)展字段的明細(xì),即包含了迄今為止我們分析的這幾個(gè)字段的JSON字符串發(fā)送到S/4HANA后臺(tái),存儲(chǔ)在LREP中。

Fiori UI與S/4HANA LREP的交互通過(guò)sap.ui.fl.LrepConnector.js完成,由后者調(diào)用LREP暴露出來(lái)的service來(lái)實(shí)現(xiàn)文件內(nèi)容存儲(chǔ)。

怎樣分析SAP產(chǎn)品的Field Extensibility

6. reference: mdm.cmd.product.maintain.Component

Product Master這個(gè)Fiori應(yīng)用的Component ID,可以在BSP應(yīng)用MD_PROD_MAS_S1的Component.js里找到。前面說(shuō)過(guò)了,Product Master這個(gè)Fiori應(yīng)用基于Smart Template構(gòu)建,并沒(méi)有自己的前端實(shí)現(xiàn),因此Component.js只是一個(gè)wrapper,僅有不到6行代碼。

怎樣分析SAP產(chǎn)品的Field Extensibility

當(dāng)包含了擴(kuò)展字段的Fiori UI即將渲染時(shí),首先有一個(gè)HTTP請(qǐng)求將待渲染UI包含的所有擴(kuò)展字段信息從LREP中讀取出來(lái)。注意下圖藍(lán)色高亮區(qū)域內(nèi)的/sap/bc/lrep/flex/data, 這就是S/4HANA后臺(tái)LREP暴露給Fiori UI的存儲(chǔ)服務(wù)。

怎樣分析SAP產(chǎn)品的Field Extensibility

Fiori UI讀取到LREP返回的JSON后,解析到changeType為addFields,于是調(diào)用Fiori UI框架對(duì)應(yīng)的處理邏輯,根據(jù)JSON里包含的擴(kuò)展字段明細(xì)將其渲染出來(lái)。這實(shí)際上就是前面提到的,SAP layer的Fiori標(biāo)準(zhǔn)UI同Customer layer的擴(kuò)展字段的Merge動(dòng)作。

擴(kuò)展字段Merge到Fiori UI的入口在AddFields.applyChange:

怎樣分析SAP產(chǎn)品的Field Extensibility

addElementIntoGroupElement會(huì)將擴(kuò)展字段添加到Fiori UI對(duì)應(yīng)的區(qū)域內(nèi):

怎樣分析SAP產(chǎn)品的Field Extensibility

addElementIntoGroupElement又會(huì)調(diào)用createControl將擴(kuò)展字段的定義轉(zhuǎn)換成對(duì)應(yīng)的UI5控件實(shí)例,后者的Render負(fù)責(zé)將控件實(shí)例渲染成原生的HTML代碼。至此,S/4HANA擴(kuò)展字段的渲染就完成了。

怎樣分析SAP產(chǎn)品的Field Extensibility

怎樣分析SAP產(chǎn)品的Field Extensibility

關(guān)于怎樣分析SAP產(chǎn)品的Field Extensibility就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

sap
AI