S/4HANA端完整的ABAP實作代碼已經放到我的github上了:
https://github.com/i042416/KnowlegeRepository/tree/master/ABAP/C4_S4_replicate核心的邏輯就是使用函數SD_SALESDOCUMENT_CREATE進行建立,這個S/4HANA函數的接口雖然和SAP CRM的CRM_ORDER_MAINTAIN有差異,但設計思路都類似,訂單的資料散落在諸如Header,Item,Party,Text等節點上,直接填充某節點對應的輸入結構即可完成相應資料的建立。
将C4C建立好的銷售訂單同步到S/4HANA的實際效果,可以參考這個騰訊視訊。
這種通過觀察者-釋出者模式進行C/4HANA和S/4HANA資料同步的方式,依賴于C4C裡BO狀态的三種變化:建立,修改和删除,顯得不夠靈活。從上面的開發我們能看出,Partners的二次開發工作量主要集中在S/4HANA,C/4HANA端沒有任何編碼工作,僅僅完成了一個OData服務的模組化和事件注冊。當事件發生後,從C/4HANA端向S/4HANA發起的事件推送是由C4C系統層面的元件來完成的。
那麼Partner有沒有辦法在C/4HANA裡,通過C4C端的二次開發編碼,直接消費S/4HANA的服務呢?
當然有。假設這樣一個場景:C/4HANA的銷售訂單同步到S/4HANA後,在S/4HANA完成必要的生産流程後,可以進行後續的交貨流程。現在的需求就是:直接在C4C銷售訂單的UI上觸發S/4HANA外向交貨單(Outbound Delivery)的建立,這樣業務人員不需要登入S/4HANA系統,而隻需在手機上使用C4C應用,就能完成S/4HANA交貨流程的觸發了。
這個需求Partners完全可以通過二次開發來實作。
思路是:在S/4HANA把外向交貨單建立函數BAPI_OUTB_DELIVERY_CREATE_SLS包裝成一個Restful API,然後在C4C Cloud Application Studio裡進行二次開發,使用ABSL(ABAP Scripting Language)來消費API。
1. 在S/4HANA裡按部就班的完成上述Restful API的建立與實作。詳細實作代碼還是放在Jerry的github上:
2. 在銷售訂單的BO上建立一個新的Action triggerOutboundDelivery: