SAP系统和微信集成的系列教程之四:如何将SAP C4C主数据变化推送给微信公众号的关注者
這是Jerry 2020年的第85篇文章,也是汪子熙公眾號總共第267篇原創文章。
本系列的英文版Jerry寫作于2017年,這個教程總共包含十篇文章,發表在SAP社區上。
系列目錄
(1)?微信開發環境的搭建
(2)?如何通過微信公眾號消費API
(3)?微信用戶關注公眾號之后,自動在SAP C4C系統創建客戶主數據
(4) 如何將SAP C4C主數據變化推送給微信公眾號(本文)
(5) 如何將SAP UI5應用嵌入到微信公眾號菜單中
(6) 如何通過OAuth2獲取微信用戶信息并顯示在SAP UI5應用中
(7) 使用Redis存儲微信用戶和公眾號的對話記錄
(8) 微信公眾號的地圖集成
(9) 如何將微信用戶發送到微信公眾號的消息保存到SAP C4C系統
(10) 如何在SAP C4C系統直接回復消息給微信公眾號的訂閱者
最近有不少朋友在微信上向我咨詢SAP系統和微信公眾號集成的問題,因此我把當時寫的英文版翻譯成中文,重新發布在我的公眾號上。
需要注意的是,時隔三年,微信公眾號的開發流程可能有所變化,請大家自行鑒別。和微信公眾號集成的系統,我三年前選擇的是SAP Cloud for Customer.
這個系列的前一篇文章,微信用戶關注公眾號之后,自動在SAP C4C系統創建客戶主數據,我們已經實現了這樣一個場景:微信用戶關注公眾號之后,在SAP Cloud for Customer(以下簡稱C4C)系統里自動創建一個客戶主數據,并把該數據的Last Name字段設置成關注者的Wechat id.
成功創建的C4C客戶主數據的id也會通過微信消息發送到關注者的微信app上。
在C4C系統查看通過OData API創建的客戶主數據:
這個場景的數據交互流,微信app是消息的發送方,而SAP C4C系統是消息接收方,消息通信通過nodejs開發的微信消息服務器完成。
本文我們實現一個新的場景,當C4C的客戶主數據發生變化時,C4C主動通知微信關注者。在這個場景里,C4C是消息的發送方,而微信app是消息的接收方。
具體實現步驟
前一篇文章里,我選用C4C Account BO標準的LastName字段來存儲微信關注者的Wechat id:
這個客戶主數據的明細頁面如下:
本文我選擇在Customer BO上創建一個名為WechatID的擴展字段,專門存放微信關注者的Wechat id.
在C4C系統中創建一個新的OData服務,選中新建的擴展字段WechatID,將其暴露到OData API中:
將新建的C4C OData服務重命名為zindividualcustomer,在Postman里測試,確保使用OData filter操作符時,能夠讀取包括這個擴展字段在內的客戶主數據的值。
測試url:
https://<此處填入C4C系統的hostname>/sap/c4c/odata/cust/v1/zindividualcustomer/CustomerCommonCollection?$filter=ParentObjectID%20eq%20%2700163E20C9511EE7B8975BD4AB3F60C0%27
ParentObjectID字段后面紅色高亮值是Customer BO實例的guid.
我們期望的行為是,一旦客戶主數據在C4C系統被修改后,C4C系統會自動發送一個notification(通知)給微信消息服務器,后者收到通知后,調用微信消息API將該通知轉發給微信關注者。
一個好消息是,上面紅色高亮的行為描述,是C4C系統一個開箱即用的功能:OData Event Notification. Jerry曾經成功地使用這個功能完成過很多原型開發,比如這篇文章里介紹的一個案例:
一些SAP Partners能夠通過二次開發實現打通C/4HANA和S/4HANA的方法介紹
下圖的設置含義是,一旦名稱為CUSTOMER的BO數據發生變化時,發生變化的具體數據,通過下圖藍色高亮字段指定的OData服務,zindividualcustomer, 發送到綠色高亮字段指定的事件監聽者去。這個事件監聽者的endpoint通過url標識,即本系列部署在heroku云平臺上的微信消息服務器:https://wechatjerry.herokuapp.com/c4c
現在修改一個C4C客戶主數據并保存,C4C系統會調用我們之前配置好的zindividualcustomer,通過HTTP POST的方式發送下列格式的數據到微信消息服務器:
上圖標號1代表發生變化的BO名稱,標號2代表發生變化的BO實例的guid,標號3代表OData服務endpoint,我們在微信消息服務器里訪問該endpoint,即可獲取包含WechatID擴展字段在內的BO數據。有了WechatID之后,我們即可調用微信消息發送API,將BO發生變化的情況發送給微信公眾號的關注者。
在微信消息服務器里,響應來自C4C系統的HTTP POST請求,從請求中解析出發生變化的Customer BO實例的guid,存儲在第42行代碼的變量AccountBOguid里,緊接著在第43行代碼的notifyWechatUser里,根據AccountBOguid調用C4C OData拿到擴展字段WechatID的值,然后向該WechatID標識的微信用戶推送消息。
這里我調用sendMessage函數,發送給微信關注者的文本是一段硬編碼的文字:
_getAccount的具體實現在我的Github上:
https://github.com/wangzixi-diablo/wechat-sap-integration/blob/main/jerryapp/service/getAccountinC4C.js
最后,將前一篇文章介紹的場景聯合起來測試。首先關注微信公眾號,這個行為會在C4C系統自動創建一個客戶主數據1000443:
在C4C系統打開這條主數據,修改之后保存:
然后在我的微信app上收到了一條推送信息,即之前在微信消息服務器里硬編碼的一條文本:
下一篇文章,我們會了解如何將SAP UI5應用嵌入到微信公眾號里訪問。
感謝閱讀。
系列目錄
(1)?微信開發環境的搭建
(2)?如何通過微信公眾號消費API
(3)?微信用戶關注公眾號之后,自動在SAP C4C系統創建客戶主數據
(4) 如何將SAP C4C主數據變化推送給微信公眾號(本文)
(5) 如何將SAP UI5應用嵌入到微信公眾號菜單中
(6) 如何通過OAuth2獲取微信用戶信息并顯示在SAP UI5應用中
(7) 使用Redis存儲微信用戶和公眾號的對話記錄
(8) 微信公眾號的地圖集成
(9) 如何將微信用戶發送到微信公眾號的消息保存到SAP C4C系統
(10) 如何在SAP C4C系統直接回復消息給微信公眾號的訂閱者
更多Jerry的原創文章,盡在:“汪子熙”:
總結
以上是生活随笔為你收集整理的SAP系统和微信集成的系列教程之四:如何将SAP C4C主数据变化推送给微信公众号的关注者的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软翻译有什么用?(什么是.NET)
- 下一篇: SAP系统和微信集成的系列教程之五:如何