这是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主数据变化推送给微信公众号的关注者相关推荐

  1. SAP系统和微信集成的系列教程之八:100行代码在微信公众号里集成地图搜索功能

    本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上. 系列目录 (1) 微信开发环境的搭建 (2) 如何通过微信公众号消费API (3) 微信用户关注公众号之后,自 ...

  2. SAP系统和微信集成的系列教程之七:使用Redis存储微信用户和公众号的对话记录

    这是Jerry 2020年的第88篇文章,也是汪子熙公众号总共第269篇原创文章. 本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上. 系列目录 (1) 微信开发 ...

  3. SAP系统和微信集成的系列教程之六:如何通过OAuth2获取微信用户信息并显示在SAP UI5应用中

    这是Jerry 2020年的第87篇文章,也是汪子熙公众号总共第269篇原创文章. 本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上. 系列目录 (1) 微信开发 ...

  4. SAP系统和微信集成的系列教程之五:如何将SAP UI5应用嵌入到微信公众号菜单中

    这是Jerry 2020年的第86篇文章,也是汪子熙公众号总共第268篇原创文章. 2020年即将到达尾声了. Jerry所在团队的产品经理,已经开始让大家把圣诞节期间的休假情况,维护在公司wiki里 ...

  5. SAP系统和微信集成的系列教程之三:微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据

    这是Jerry 2020年的第84篇文章,也是汪子熙公众号总共第266篇原创文章. 本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上. 系列目录 (1) 微信开发 ...

  6. SAP系统和微信集成的系列教程之一:微信开发环境的搭建

    系列目录 (1) 微信开发环境的搭建 ( 本文 ) (2) 如何通过微信公众号消费API (3) 微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据 (4) 如何将SAP C4C主数据变化 ...

  7. 公众号向特定用户主动推送消息_SAP系统和微信集成的系列教程之三:微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据...

    这是Jerry 2020年的第84篇文章,也是汪子熙公众号总共第266篇原创文章. 本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上: https://blogs ...

  8. sap系统搭建教程_SAP系统和微信集成的系列教程之十:如何在SAP C4C系统里直接回复消息给微信用户...

    本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上: https://blogs.sap.com/2017/12/10/wechat-development-ser ...

  9. SAP系统和微信集成的系列教程之十:如何在SAP C4C系统里直接回复消息给微信用户

    本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上. 系列目录 (1) 微信开发环境的搭建 (2) 如何通过微信公众号消费API (3) 微信用户关注公众号之后,自 ...

最新文章

  1. 梯度算法求步长的公式_LM(Levenberg-Marquarelt)算法
  2. html滑动直播,HTML5 canvas实现的静态循环滚动播放弹幕
  3. “不允许对64位应用程序进行修改”的解决方法 --“Changes to 64-bit applications are not allowed.”
  4. 运行 composer update,提示 Allowed memory size of bytes exhausted
  5. PHP快速入门教程:for循环
  6. LINQ to SQL语句(1)之Where(抄的好)
  7. php的优化参数有哪些,php 参数优化
  8. oracle中的fetchsize,oracle setFetchsize() 优化查询速度
  9. python创建字典的两种方法
  10. xp计算机找不到音量调节,WinXP找不到音量控制程序怎么办?
  11. R语言中的多元方差分析
  12. 字符分割函数strtok
  13. 牛客网暑期ACM多校训练营(第二场)
  14. 【SPARC】SPARC简介
  15. 基于SSM实现的网上手机商城项目(附源码)
  16. Java爬虫代码示例|入门教程 1- 快速爬取百度美图
  17. 海淘 海外购 iherb 礼券码 优惠码
  18. Windows10操作系统共享文件夹给VMWare虚拟机Ubuntu18.04操作系统使用
  19. 以图搜图新体验:图片谷歌和百度识图
  20. 如何将影像变换为北京54坐标系

热门文章

  1. android--------ExpandableListView的使用多级列表
  2. JPA mysql wildfly jboss 存储时乱码
  3. NOIP Mayan游戏
  4. Delphi数据类型
  5. 使用Popup窗口创建无限级Web页菜单(7)
  6. 基于Hexo+GitHub Page搭建免费个人博客教程
  7. BZOJ1079 [SCOI2008]着色方案 记忆化搜索
  8. quratz启动流程
  9. 素数判定算法 MILLER RABIN
  10. SDWebImage实现分析