遠(yuǎn)程辦公”">國務(wù)院聯(lián)防聯(lián)控機(jī)制新聞發(fā)布會,多次肯定“云辦公”、“遠(yuǎn)程辦公”
766
2025-03-31
有好幾位朋友在公眾號后臺給我留言詢問SAP C/4HANA和S/4HANA集成的方案。
盡管我給這些朋友推送了一個方案:打通C/4HANA和S/4HANA的一個原型開發(fā):智能服務(wù)創(chuàng)新案例,然而我得到的反饋是:在這個創(chuàng)新案例里,需要在C/4HANA里的服務(wù)云做一些后臺開發(fā),即下圖紅色方框標(biāo)注的C4C API endpoint。因?yàn)槭窃飘a(chǎn)品,這種后臺開發(fā)只有SAP能做,并沒有對Partners開放。
因此這篇文章我會介紹一些Partners能夠進(jìn)行的二次開發(fā)方式,通過這些方式也能實(shí)現(xiàn)C/4HANA和S/4HANA的簡單集成場景。
需要強(qiáng)調(diào)的是,本文的重點(diǎn)是思路的介紹,羅列出的代碼僅適用于原型開發(fā)場景中,離真正用于生產(chǎn)環(huán)境的要求還有很大距離,比如缺少錯誤處理,缺少足夠多的場景覆蓋等等。這些需要Partners在真正做二次開發(fā)時自己去彌補(bǔ)。
我使用一個簡單的場景來介紹一種輕量級的集成方式:將C/4HANA中銷售云的銷售訂單(Sales Order)同步到S/4HANA中。因?yàn)樵赟/4HANA里,基于銷售訂單可以生成后續(xù)的生產(chǎn)訂單,那么一旦實(shí)現(xiàn)這個集成場景,理論上我就可以用手機(jī)訪問C/4HANA的銷售云,在手機(jī)上觸發(fā)S/4HANA的生產(chǎn)制造流程。
SAP C/4HANA銷售云里的C4C Cloud for Sales部分,如果需要同SAP其他On-Premises產(chǎn)品比如SAP ERP, SAP CRM等集成,SAP官方推薦的同步方式是采用SAP HANA Cloud Integration和SAP Netweaver PI作為中間件。
這兩種推薦的方式都非常成熟并且在眾多的實(shí)際項(xiàng)目實(shí)施過程中得到了驗(yàn)證。Jerry也簡單瀏覽過這兩種方式的官方配置文檔。
這個鏈接是PI的配置文檔:
https://support.sap.com/content/dam/SAAP/Sol_Pack/Library/TestScripts/NC8_CFCALL_HowTo_Guide_EN_XX.pdf
這個鏈接是HCI的配置文檔:
https://support.sap.com/content/dam/SAAP/Sol_Pack/Library/TestScripts/NC7_CFCALL_HowTo_Guide_EN_XX.pdf
大家從我截圖高亮的文檔頁碼不難發(fā)現(xiàn),使用這兩種中間件都存在一些配置工作量——雖然對于諸如銷售訂單,客戶主數(shù)據(jù),產(chǎn)品主數(shù)據(jù)這種通用同步場景,SAP已經(jīng)提供了開箱即用的解決方案,但仍需專業(yè)顧問在中間件上完成配置才能讓同步流程正常工作。對于這種方式的思路,Jerry的個人理解就是,配置優(yōu)于編碼,通過大量的配置來減少甚至避免Partners編碼的工作量。
Jerry將要介紹的另一種集成方式則反其道而行之,編碼優(yōu)于配置。這種方式的優(yōu)點(diǎn)就是完全避免了HCI或者PI等中間件的引入,因此也壓根不存在配置的工作量了。當(dāng)然凡事有利就有弊,拋棄了中間件之后,意味著C4C Cloud for Sales采用直連的方式同S/4HANA交互,這樣C4C創(chuàng)建的銷售訂單傳送到S/4HANA之后,Partners需要在S/4HANA使用對應(yīng)的API自行創(chuàng)建銷售訂單。
來看具體的步驟。
SAP C4C有個功能叫做OData Notification, 在標(biāo)準(zhǔn)的Business Object數(shù)據(jù)發(fā)生狀態(tài)變化(創(chuàng)建,更新,刪除)時,可以通過OData的方式將這些事件推送到事件監(jiān)聽者去,這實(shí)際是一個簡單的觀察者-發(fā)布者設(shè)計模式。
1. 既然這個功能基于OData,我們首先要創(chuàng)建一個OData服務(wù),在這個OData服務(wù)里定義C4C銷售訂單的哪些字段需要推送到S/4HANA去。
關(guān)于SAP產(chǎn)品里各種OData技術(shù)的使用,請參考Jerry的文章:SAP OData編程指南。
SAP C4C的OData服務(wù)的創(chuàng)建可以直接在瀏覽器里完成:
因?yàn)樗龅木褪呛唵蔚慕9ぷ鳎严胍┞兜淖侄螐淖筮叺腂usiness Object列表里選中,移動到右邊即可。
我創(chuàng)建的OData服務(wù)名叫zjerrysalesorder。
下面的UI就是事件發(fā)布者和監(jiān)聽者關(guān)鍵維護(hù)界面,里面的設(shè)置含義是:一旦CUSTOMER_QUOTE(C4C銷售訂單基于的BO)發(fā)生了創(chuàng)建或者更新,則新建或者更新的銷售訂單數(shù)據(jù)會通過前一步創(chuàng)建的OData服務(wù)zjerrysalesorder推送到注冊的事件監(jiān)聽者,即S/4HANA的一個API /sap/bc/dis_c4c上去。
2. 在S/4HANA事務(wù)碼SICF里按照路徑/sap/bc/dis_c4c實(shí)現(xiàn)這個事件監(jiān)聽者,這個路徑需要和第一步在C4C系統(tǒng)里注冊的url一致。
在ABAP Netweaver事務(wù)碼SICF里開發(fā)的這些類從原理上可以類比成Java里的Servlet,在Jerry的博客里有詳細(xì)介紹:
ABAP ICF handler and Java Servlet
https://blogs.sap.com/2017/05/07/abap-icf-handler-and-java-servlet/
在服務(wù)dis_c4c對應(yīng)的ABAP處理類里設(shè)置一個斷點(diǎn),在C4C里新建一個銷售訂單,然后S/4HANA里這個斷點(diǎn)就會觸發(fā)。
當(dāng)然這里涉及到一個內(nèi)外網(wǎng)穿越的問題:運(yùn)行在Internet網(wǎng)絡(luò)下的C4C如何能夠和位于企業(yè)內(nèi)網(wǎng)環(huán)境下的S/4HANA交互呢?
可以采用Jerry之前的文章 使用Java+SAP云平臺+SAP Cloud Connector調(diào)用ABAP On-Premise系統(tǒng)里的函數(shù) 里介紹的SAP云平臺加上Cloud Connector的解決方案實(shí)現(xiàn)內(nèi)外網(wǎng)訪問,或者直接將S/4HANA這個url /sap/bc/dis_c4c做一個內(nèi)外網(wǎng)地址映射后,暴露給外網(wǎng)直接訪問。當(dāng)然后者不推薦,用來做原型開發(fā)和概念驗(yàn)證沒問題,如果是正式使用,那還是用SAP云平臺那套標(biāo)準(zhǔn)解決方案吧。
我們在斷點(diǎn)里可以觀察C4C推送到S/4HANA的數(shù)據(jù)格式。
從調(diào)試器里可以看到,S/4HANA接收到的是一個JSON格式的字符串,包含了觸發(fā)事件的BO名稱,發(fā)生狀態(tài)變化的BO實(shí)例的GUID,觸發(fā)的事件類型以及一個OData服務(wù)的url。這個OData服務(wù)正是我在第一步創(chuàng)建的zjerrysalesorder。
S/4HANA通過消費(fèi)這個OData服務(wù),就能獲取在C4C創(chuàng)建的銷售訂單通過OData服務(wù)暴露出來的數(shù)據(jù),下邊這個例子發(fā)生的事件是create,通過消費(fèi)紅色高亮的OData服務(wù)url,我們就能在S/4HANA里獲得C4C新建的銷售訂單的明細(xì),再調(diào)用操作銷售訂單的API在S/4HANA里進(jìn)行創(chuàng)建工作。
S/4HANA端完整的ABAP實(shí)現(xiàn)代碼已經(jīng)放到我的github上了:
https://github.com/i042416/KnowlegeRepository/tree/master/ABAP/C4_S4_replicate
核心的邏輯就是使用函數(shù)SD_SALESDOCUMENT_CREATE進(jìn)行創(chuàng)建,這個S/4HANA函數(shù)的接口雖然和SAP CRM的CRM_ORDER_MAINTAIN有差異,但設(shè)計思路都類似,訂單的數(shù)據(jù)散落在諸如Header,Item,Party,Text等節(jié)點(diǎn)上,直接填充某節(jié)點(diǎn)對應(yīng)的輸入結(jié)構(gòu)即可完成相應(yīng)數(shù)據(jù)的創(chuàng)建。
將C4C創(chuàng)建好的銷售訂單同步到S/4HANA的實(shí)際效果,可以參考這個騰訊視頻。
這種通過觀察者-發(fā)布者模式進(jìn)行C/4HANA和S/4HANA數(shù)據(jù)同步的方式,依賴于C4C里BO狀態(tài)的三種變化:創(chuàng)建,修改和刪除,顯得不夠靈活。從上面的開發(fā)我們能看出,Partners的二次開發(fā)工作量主要集中在S/4HANA,C/4HANA端沒有任何編碼工作,僅僅完成了一個OData服務(wù)的建模和事件注冊。當(dāng)事件發(fā)生后,從C/4HANA端向S/4HANA發(fā)起的事件推送是由C4C系統(tǒng)層面的組件來完成的。
那么Partner有沒有辦法在C/4HANA里,通過C4C端的二次開發(fā)編碼,直接消費(fèi)S/4HANA的服務(wù)呢?
當(dāng)然有。假設(shè)這樣一個場景:C/4HANA的銷售訂單同步到S/4HANA后,在S/4HANA完成必要的生產(chǎn)流程后,可以進(jìn)行后續(xù)的交貨流程。現(xiàn)在的需求就是:直接在C4C銷售訂單的UI上觸發(fā)S/4HANA外向交貨單(Outbound Delivery)的創(chuàng)建,這樣業(yè)務(wù)人員不需要登錄S/4HANA系統(tǒng),而只需在手機(jī)上使用C4C應(yīng)用,就能完成S/4HANA交貨流程的觸發(fā)了。
這個需求Partners完全可以通過二次開發(fā)來實(shí)現(xiàn)。
思路是:在S/4HANA把外向交貨單創(chuàng)建函數(shù)BAPI_OUTB_DELIVERY_CREATE_SLS包裝成一個Restful API,然后在C4C Cloud Application Studio里進(jìn)行二次開發(fā),使用ABSL(ABAP Scripting Language)來消費(fèi)API。
1. 在S/4HANA里按部就班的完成上述Restful API的創(chuàng)建與實(shí)現(xiàn)。詳細(xì)實(shí)現(xiàn)代碼還是放在Jerry的github上:
https://github.com/i042416/KnowlegeRepository/tree/master/ABAP/C4_S4_replicate
2. 在銷售訂單的BO上創(chuàng)建一個新的Action triggerOutboundDelivery:
綁定到UI這個叫做Trigger Delivery的按鈕上。同時在銷售訂單抬頭區(qū)域新建一個字段,用于存放S/4HANA創(chuàng)建好的交貨單ID。
最后完成這個按鈕點(diǎn)擊后的編碼實(shí)現(xiàn)工作,調(diào)用WebServiceUtilties.ExecuteRESTService去消費(fèi)S/4HANA的Restful API。
這段ABSL的完整代碼:
https://github.com/i042416/KnowlegeRepository/blob/master/ABAP/C4_S4_replicate/triggerOutboundDelivery.absl
其中代碼中出現(xiàn)的"JerryExternal", "JerryExternalService"這些,均是和Restful API的消費(fèi)有關(guān)的模型的名稱。
Jerry的另一位同事宋浩曾經(jīng)寫過一篇文章:SAP S4CRM 1811 服務(wù)訂單API介紹,里面提到了S4CRM基于Netweaver技術(shù)架構(gòu)的Service Integration場景里必需的三大模型:
Communication Arrangement
Communication System
Communication Scenario
因?yàn)镃4C后臺也基于Netweaver,所以為了消費(fèi)S/4HANA的Restful API,我們同樣需要在C4C里創(chuàng)建這三大模型。
簡單地說,Communication System負(fù)責(zé)維護(hù)Service Provider所在的系統(tǒng),在我們這個例子里是S/4HANA系統(tǒng):
Communication Scenario負(fù)責(zé)維護(hù)Restful Service endpoint,而Communication Arrangement將兩者關(guān)聯(lián)起來。
關(guān)于這三個模型的詳細(xì)創(chuàng)建步驟,請參考Jerry的博客:
Use Restful Service to consume S4 functionality in SAP Cloud for Customer
https://blogs.sap.com/2018/12/06/use-restful-service-to-consume-s4-functionality-in-sap-cloud-for-customer/
最后實(shí)現(xiàn)的效果是:點(diǎn)擊按鈕之前,存放S/4HANA生成的交貨單ID的字段是空的:
點(diǎn)了按鈕在S/4HANA生成交貨單之后,其ID通過S/4HANA Restful API的返回結(jié)果存儲在C4C銷售訂單BO的擴(kuò)展字段上,并顯示在UI抬頭區(qū)域:
還是通過這個視頻查看運(yùn)行時的效果。
對于這種同步解決方案有任何意見,歡迎留言。感謝閱讀。
更多閱讀
SAP S4CRM vs C4C, 諸葛亮和周瑜?
打通C/4HANA和S/4HANA的一個原型開發(fā):智能服務(wù)創(chuàng)新案例
SAP S4CRM 1811 服務(wù)訂單API介紹
使用Java+SAP云平臺+SAP Cloud Connector調(diào)用ABAP On-Premise系統(tǒng)里的函數(shù)
ABAP ERP 移動APP
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。