SAP C/4HANA Sales Cloud使用OData服务和第三方系统集成的一个具体例子
出于工作需要,Jerry寫(xiě)了這篇文章,給某些SAP Partner做參考。
以前Jerry曾經(jīng)介紹過(guò)SAP C/4HANA的五朵云到底包含哪些具體產(chǎn)品,其實(shí)在SAP官網(wǎng)上有更權(quán)威的中文解釋:
https://www.sap.com/china/products/crm-commerce/c4-hana-cx-suite.html
其中明確提到銷(xiāo)售云包含SAP Cloud for Customer(C4C),SAP Revenue Cloud和Callidus Cloud。
有Partner詢(xún)問(wèn)有沒(méi)有更詳細(xì)的步驟介紹,關(guān)于如何在第三方系統(tǒng)里調(diào)用SAP C4C暴露出的Restful API進(jìn)行集成。本文就給出一個(gè)具體的例子,將SAP C4C銷(xiāo)售訂單的創(chuàng)建功能通過(guò)自定義的OData服務(wù)暴露出來(lái),然后Partner可以根據(jù)項(xiàng)目需要選擇合適的編程語(yǔ)言(本文選擇JavaScript)來(lái)消費(fèi)。
Jerry以前發(fā)布過(guò)一個(gè)視頻,演示了如何在SAP C4C里手動(dòng)創(chuàng)建一個(gè)銷(xiāo)售訂單,步驟可以說(shuō)簡(jiǎn)單易懂。
https://v.qq.com/x/page/d0809f4tswl.html
現(xiàn)在我們通過(guò)OData的方式將銷(xiāo)售訂單的創(chuàng)建功能暴露出來(lái),就能在第三方系統(tǒng)或者應(yīng)用里完成C4C的訂單創(chuàng)建。
大家如果對(duì)SAP OData還不太了解,可以先讀一讀我這篇文章開(kāi)頭的部分:
SAP OData編程指南
下面是詳細(xì)步驟。
登錄C4C系統(tǒng),訪問(wèn)工作中心Administrator,工作中心視圖OData Service Explorer,這里可以在SAP發(fā)布的標(biāo)準(zhǔn)OData服務(wù)和客戶自定義的OData服務(wù)之間切換。
因?yàn)榭蛻糇远xOData服務(wù)能夠允許客戶自行決定從哪一個(gè)Business Object的哪一些節(jié)點(diǎn),選擇哪一些字段來(lái)生成OData模型,通過(guò)這種靈活的方式可以避免Business Object上客戶業(yè)務(wù)場(chǎng)景里不需要的字段出現(xiàn)在OData模型中。
點(diǎn)擊New按鈕新建一個(gè)OData服務(wù):
給Work Center View字段指定一個(gè)用來(lái)做權(quán)限控制的視圖,只有分配了這個(gè)視圖的用戶才有權(quán)限訪問(wèn)這個(gè)OData服務(wù)。
點(diǎn)擊Select Business Object從彈出對(duì)話框中選擇基于哪一個(gè)Business Object創(chuàng)建OData模型。
下圖就是一個(gè)已經(jīng)創(chuàng)建好并處于Active狀態(tài)的OData服務(wù)。左邊顯示的是CustomerQuote這個(gè)BO的Root節(jié)點(diǎn)的所有字段,每個(gè)字段都有一個(gè)可以勾選或取消的Select屬性,勾選則該BO字段會(huì)出現(xiàn)在右側(cè)的OData模型里。
除了Root節(jié)點(diǎn)之外,BO的其他子節(jié)點(diǎn)上的字段當(dāng)然也是可以出現(xiàn)在OData模型里的,比如我上圖右邊OData模型的子節(jié)點(diǎn)CustomerQuoteItem, CustomerQuoteParty和CustomerQuoteText等,就是分別從左邊BO的同名節(jié)點(diǎn)選中后自動(dòng)帶到右邊的OData模型中去的。
理論上,完成基于BO模型進(jìn)行OData模型的創(chuàng)建并激活后,這個(gè)OData服務(wù)就可以使用了,這體現(xiàn)了SAP C4C OData服務(wù)自定義框架的強(qiáng)大之處。然而我也收到了一些朋友從后臺(tái)給我提的一些問(wèn)題,羅列如下。
問(wèn)題1: 仍然以本文銷(xiāo)售訂單創(chuàng)建這一場(chǎng)景為例,假設(shè)我希望我創(chuàng)建的OData服務(wù)能夠允許消費(fèi)者調(diào)用時(shí)指定External Reference的值,但是我找遍整個(gè)BO列表,也沒(méi)發(fā)現(xiàn)銷(xiāo)售訂單的BO上有叫這個(gè)名稱(chēng)的字段啊?
**Jerry答:**External Reference是UI文本,不是BO字段的技術(shù)名稱(chēng)。
給C4C系統(tǒng)在瀏覽器里的url添加參數(shù)debugMode=true, 然后刷新頁(yè)面,按住Ctrl鍵再單擊External Reference字段,
就能看到這個(gè)UI字段綁定到UI模型上哪一個(gè)字段了。
在這個(gè)UI模型字段上再點(diǎn)擊Show Model,就能看到這個(gè)UI模型字段綁定到的BO字段名稱(chēng)為BuyerID。
所以我們?cè)贠Data開(kāi)發(fā)工具里,只需把BO字段BuyerID選中,移動(dòng)到右邊的OData模型里即可。
問(wèn)題2:我想讓我的OData服務(wù)支持行項(xiàng)目數(shù)據(jù)的創(chuàng)建,比如指定產(chǎn)品ID,描述和購(gòu)買(mǎi)數(shù)量等等。我怎么知道哪些BO節(jié)點(diǎn)上的字段需要添加到OData模型中去?
**Jerry答:**現(xiàn)在我們換一種方法,打開(kāi)Cloud Application Studio的UI Designer,定位到銷(xiāo)售訂單創(chuàng)建頁(yè)面的UI模型COD_SALESORDER_QC, 找到Product ID字段,在它的Properties面板里即可看到這個(gè)Product ID字段綁定的BO字段的名稱(chēng)和完整路徑:
Root-.ItemProposal-ProductUUID-content
因此我們需要將BO對(duì)應(yīng)路徑下面的ProductUUID字段添加到OData模型中去。這里能觀察到ProductID的Create和Update是沒(méi)有勾選上的,而ProductUUID則支持Create和Update,這個(gè)行為和C4C銷(xiāo)售訂單行項(xiàng)目創(chuàng)建的標(biāo)準(zhǔn)實(shí)現(xiàn)有關(guān)——消費(fèi)者需要提供待創(chuàng)建行項(xiàng)目包含的產(chǎn)品UUID,然后C4C會(huì)根據(jù)UUID到系統(tǒng)中查詢(xún)出對(duì)應(yīng)的產(chǎn)品,顯示其ID到UI上。如果消費(fèi)者在調(diào)用OData服務(wù)時(shí),沒(méi)有指定ProductUUID,則行項(xiàng)目創(chuàng)建邏輯不會(huì)執(zhí)行。
OData模型創(chuàng)建好之后,在用編程語(yǔ)言消費(fèi)之前,我們可以先用工具Postman(或者C4C自帶的測(cè)試工具)進(jìn)行測(cè)試。
因?yàn)镾AP C4C后臺(tái)對(duì)Cross-site request forgery(跨站請(qǐng)求偽造)這種攻擊采取的防御實(shí)現(xiàn)和SAP CRM,SAP S/4HANA一樣,采取的是CSRF token驗(yàn)證機(jī)制,因此我們?cè)谡{(diào)用OData服務(wù)進(jìn)行銷(xiāo)售訂單創(chuàng)建時(shí),需要將一個(gè)合法的CSRF token一并傳遞給C4C系統(tǒng)。
如何得到一個(gè)合法的CSRF token呢?在Postman里構(gòu)造一個(gè)HTTP GET請(qǐng)求,頭部字段名為
x-csrf-token, 值為fetch:
發(fā)送這個(gè)HTTP GET請(qǐng)求,服務(wù)器端會(huì)生成一個(gè)CSRF token,通過(guò)HTTP響應(yīng)結(jié)構(gòu)頭部字段x-csrf-token返回給消費(fèi)者:
sNwnYC9cV4xeGSYZmJ8Dtw==
下面我們?cè)僭赑ostman里新建一個(gè)HTTP Post請(qǐng)求,將之前通過(guò)HTTP GET拿到的CSRF token,以HTTP Post請(qǐng)求頭部字段的方式發(fā)送給C4C系統(tǒng)。
關(guān)鍵在于HTTP Post請(qǐng)求的請(qǐng)求體。下圖高亮部分是我在HTTP Post請(qǐng)求里指定的創(chuàng)建銷(xiāo)售訂單的輸入數(shù)據(jù):
在Postman里發(fā)送這個(gè)Post請(qǐng)求,幾秒鐘后得到C4C的響應(yīng),訂單創(chuàng)建成功,ID為9000000451:
為了方便大家對(duì)比,下面是我用Postman消費(fèi)我創(chuàng)建的OData服務(wù)生成的銷(xiāo)售訂單在系統(tǒng)里的顯示。字段1~6對(duì)應(yīng)的Postman輸入字段可以在前文找到。
藍(lán)色區(qū)域高亮顯示的字段,我在Postman里構(gòu)造的輸入里并沒(méi)有維護(hù),而是通過(guò)SAP C4C系統(tǒng)的各種determination配置,自動(dòng)決定出來(lái)的。最典型的有SAP老司機(jī)們天天打交道的Partner determination,Organization determination,Pricing determination等。
Postman里測(cè)試通過(guò)后,就可以寫(xiě)代碼消費(fèi)了。
如果想直接復(fù)制粘貼我下面列出的代碼,可以從我的github上獲得:
https://github.com/i042416/KnowlegeRepository/blob/master/ABAP/C4COData/create_SalesOrder.js
注意本代碼只用于演示目的,缺少健壯的出錯(cuò)處理,不能直接用于生產(chǎn)環(huán)境中。
下面的代碼使用nodejs提供的request模塊向C4C請(qǐng)求CSRF token。注意第3行的url和第11行的Authorization頭部的值,我都是用的虛假值,請(qǐng)大家替換成自己實(shí)際使用的C4C url和認(rèn)證信息。
Token拿到之后,將其放入第41行構(gòu)造的HTTP Post請(qǐng)求的頭部結(jié)構(gòu)中,作為字段x-csrf-token的值。第47行發(fā)送該P(yáng)OST請(qǐng)求,C4C響應(yīng)的數(shù)據(jù)存放于JavaScript變量data中。
最后我通過(guò)簡(jiǎn)單的console.log打印出創(chuàng)建成功的銷(xiāo)售訂單ID:
在命令行里用node執(zhí)行這個(gè)js文件,會(huì)打印出從C4C獲取到的CSRF token,以及成功創(chuàng)建的訂單ID。
我們?cè)倩仡櫼幌掠肧AP C/4HANA Sales Cloud中的C4C OData同外部系統(tǒng)做集成的三個(gè)主要步驟:
1. 在C4C的OData模型編輯頁(yè)面里,根據(jù)業(yè)務(wù)需要,從對(duì)應(yīng)的BO節(jié)點(diǎn)里選擇合適的字段,添加到OData模型中。
2. 用Postman或者C4C自帶的OData測(cè)試工具對(duì)OData模型進(jìn)行測(cè)試,確保其正常工作。
3. 根據(jù)項(xiàng)目需要選擇合適的編程語(yǔ)言消費(fèi)OData服務(wù)。
如果對(duì)于SAP C4C OData有更多的問(wèn)題需要討論,歡迎留言。感謝閱讀。
Jerry關(guān)于OData的更多文章
SAP OData編程指南
OData服務(wù)同步模式和異步模式的討論
https://blogs.sap.com/2015/06/19/a-test-on-fiori-odata-request-synchronous-mode-vs-asynchronous-mode/
https://blogs.sap.com/2015/07/01/how-to-find-odata-performance-trace-and-payload-trace-functionality/
https://blogs.sap.com/2016/01/13/measure-the-performance-of-your-odata-service/
https://blogs.sap.com/2016/03/12/my-cds-view-self-study-tutorial-part-4-how-does-annotation-odatapublish-work/
5.1 https://blogs.sap.com/2016/08/04/how-is-odata-request-routed-to-offline-data-store-by-odata-offline-plugin/
5.2 https://blogs.sap.com/2016/08/04/how-is-javascript-code-in-odata-offline-plugin-delegated-to-native-java-code-in-android/
5.3 https://blogs.sap.com/2016/08/05/how-is-odata-offline-store-opened-in-android-platform/
https://blogs.sap.com/2017/08/04/consume-standard-c4c-odata-service-via-abap-code/
https://blogs.sap.com/2017/08/07/odata-service-backend-implementation-in-c4c-crm-and-s4-hana/
https://blogs.sap.com/2017/08/28/odata-service-parallele-performance-measurement-how-to-deal-with-xsrf-token-in-java-program-and-jmeter/
https://blogs.sap.com/2017/12/07/expose-custom-bo-logic-implemented-by-absl-via-custom-odata-service/
要獲取更多Jerry的原創(chuàng)文章,請(qǐng)關(guān)注公眾號(hào)"汪子熙":
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的SAP C/4HANA Sales Cloud使用OData服务和第三方系统集成的一个具体例子的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: 英特尔 14 代移动酷睿处理器现身数据库
- 下一篇: 国产新型直升机AC332成功首飞:最大航
