SAP Cloud for Customer 如何直接消费S/4HANA API
最近有朋友在微信上問我本文標題這個需求,如何在 SAP Cloud for Customer 里實現。正好我在 2018年底參加的 SAP 和沈陽自動化研究所合作設計的一個工業 4.0 示范系統 POC 中,曾經用到了這個技術,本文就來說一說。
關于這個 POC 的詳情,在 SAP中國研究院官方公眾號這篇文章里有詳細敘述:
SAP中國研究院&中科院沈陽自動化所重磅發布第三代自適應模塊化智能生產解決方案
SAP 中國研究院和中科院沈陽自動化研究所(沈自所)聯合打造了一套自適應模塊化智能生產解決方案,作為雙方合作的第三代工業4.0智能制造解決方案,其生產組織形式采用世界領先的模塊化生產概念,業務流程涵蓋從個性化產品銷售訂單的創建到車間倉儲和物料管理和生產執行與交付,在車間里傳統的生產線被解耦為模塊化生產單元,其機械結構、工業網絡、生產工序可以根據產品設計的變化,現場設備狀態,自適應完成重構。改造成本大大壓縮,調整周期顯著縮短。同時,實現了智能倉儲系統、智能生產系統、智能機器人、智能 AGV 運輸車輛等系統的高度集成和高效運轉,這也是 SAP 最新提出的「從設計到運維(D2O,From Design to Operate)」的工業互聯網全業務流程中的重要環節。
下面這個 POC 視頻,是當時的項目兼產品經理,我的研究院同事 Cai Carol 制作的。視頻最開頭,展示的是從 SAP Cloud for Customer里創建銷售訂單。SAP C4C 銷售訂單創建完畢之后,點擊訂單明細頁面的一個按鈕,觸發 S/4HANA 的交貨單(Outbound Delivery)創建,進而觸發接下來的制造流程的執行。
其中SAP Cloud for Customer 部分的定制開發是由我實現的,里面就涉及到了本文標題描述的場景,即 SAP Cloud for Customer 里直接調用 SAP S/4HANA 的 API. 整個定制開發部分均可在 C4C 的 Cloud Application Studio 里完成,這意味著 Partners 也可以完成類似場景的開發。
https://v.qq.com/x/page/e323674458n.html
下面是具體的實現步驟。
(1) 首先在 S/4HANA 里開發一個 API,邏輯是接收從 SAP Cloud for Customer 傳過來的 Sales Order ID,讀出其包含的行項目,然后調用 SAP S/4HANA 的交貨單創建函數,為這些行項目創建交貨單。
用關鍵字 S/4HANA Outbound Delivery,一下子就搜索到了對應的 BAPI 名稱:BAPI_OUTB_DELIVERY_CREATE_SLS.
很快寫好了一個 report:在第21行硬編碼了一個 SAP Cloud for Customer 的銷售訂單 ID,測試后發現沒什么問題,將這個報表的源代碼拷貝到一個新的 ABAP Class 里,稍作修改,將硬編碼去掉,替換成從 SAP Cloud for Customer 傳過來的銷售訂單 ID 即可。
在 SAP S/4HANA 里新建一個 SICF 服務節點,其實現 Class 指定成剛剛建好的包含了調用 BAPI_OUTB_DELIVERY_CREATE_SLS 的 ABAP Class. 每個 ABAP SICF 節點會自動生成一個 url,從而將其節點分配的 SICF ABAP Class的業務邏輯通過 HTTP 的方式暴露給外界。
關于 ABAP SICF 的更多介紹,請參考我之前的文章:從ABAP Netweaver的SICF到SAP Kyma的Lambda Function.
我們當時做 POC 的這臺 S/4HANA 服務器,其 url 是可以直接被外網訪問到的,所以省去了使用 SAP Cloud Connector 將其暴露給外網這一步。對于常規的 SAP ABAP On-Premises 平臺上開發的 HTTP Service url,請參考我這篇文章將其暴露給公網使用:
使用Java+SAP云平臺+SAP Cloud Connector調用ABAP On-Premise系統里的函數
(2) 回到 SAP C4C,打開 Cloud Application Studio,對標準的 Sales Order BO 進行擴展,增添一個新的 Action.
準確的說,被擴展的 BO 名稱應該為 CustomerQuote,因為根據 SAP C4C 幫助文檔介紹,Sales ORder 和 Sales Quote 共用同一個 BO 模型 CustomerQuote,通過模型字段 Type Code 的不同值來區分。
對 CustomerQuote 進行擴展,創建一個新的 Action:triggerOutboundDelivery:
這個 Action 的實現邏輯當然就是調用前一步驟里創建好的,SAP S/4HANA 通過 SICF 暴露出來的 API.
在動手實現 Action 之前,我們還需要在 SAP C4C 里創建一些消費 S/4HANA API 所需要的模型。
Cloud Application Studio 里新建一個 External Web Service Integration:
Web Service 名稱取為 JerryExternal,類型為 REST. URL字段,填充成 S/4HANA API 的 url.
這個 Web Service 模型的創建,會同時自動創建一個 Communication Scenario,名稱為 JerryExternalService:
基于該 Communication Scenario 創建一個新的 Communication Arrangement:
通過上圖郵件菜單,打開 Communication Arrangement 的維護 UI:
將訪問 S/4HANA API 所需的用戶名和密碼,維護到新建的 Communication Arrangement 里去:
最后,實現 CustomerQuote BO 擴展出來的 Action,在里面通過 C4C 標準的工具庫函數 WebServiceUtilities.ExecuteRESTService,消費 S/4HANA API:
從上圖 ABSL 實現代碼,我們也能體會到 SAP 引入 Communication Scenario & Arrangement 這些模型帶來的好處:
Code Over Configuration is better than Code Over Code - 基于配置編程優于硬編碼。
如果 SAP S/4HANA API url 或者用戶名和密碼發生變化,我們只需修改 C4C 里 Communication Scenario 和 Arrangement 對應的配置即可,而無需重新編譯 ABSL 代碼本身。
最后,在 SAP C4C UI 上點擊 Trigger Delivery 按鈕后,觸發我們在 BO 上自定義的 action:
上圖是 SAP C4C ABSL 代碼的單步調試,點擊 Continue 之后,設置在 SAP S/4HANA SICF 實現類里的 ABAP 斷點觸發,調試器里能看到 SAP C4C Sales Order ID 已經成功傳遞到 SAP S/4HANA 端了。
之前我已經將 SAP C4C 端的銷售訂單,通過這篇文章?一些SAP Partners能夠通過二次開發實現打通 SAP C/4HANA和S/4HANA 的場景分享?介紹的二次開發方式,同步到了 SAP S/4HANA 端,且兩個系統里銷售訂單的 ID 一致。因此,在 SAP S/4HANA 端,調用 S/4HANA 銷售訂單的讀取 API,讀到的是 SAP C4C 同步過來并存儲到 S/4HANA 的銷售訂單數據。
本文介紹了 SAP C4C 如何通過定制開發,實現消費第三方系統 API 的需求。這里的第三方系統 API,可以是 SAP S/4HANA,SAP Business Technology Platform 或者其他任何系統的 API,是一種比較通用的二次開發方式,希望對大家有所幫助。
更多閱讀
-
使用Java+SAP云平臺+SAP Cloud Connector調用ABAP On-Premise系統里的函數
-
從ABAP Netweaver的SICF到SAP Kyma的Lambda Function
-
SAP云平臺上的ABAP編程環境里如何消費第三方服務
-
一些SAP Partners能夠通過二次開發實現打通 SAP C/4HANA和S/4HANA 的場景分享
更多Jerry的原創文章,盡在:“汪子熙”:
總結
以上是生活随笔為你收集整理的SAP Cloud for Customer 如何直接消费S/4HANA API的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 逾期了怎么办
- 下一篇: SAP Spartacus popove