likes
comments
collection
share

SAP Field Service Management 和微信集成的案例分享和实现介绍

作者站长头像
站长
· 阅读数 17

SAP FSM(Field Service Management), 属于SAP C/4HANA五朵云里的Service Cloud.

SAP Field Service Management 和微信集成的案例分享和实现介绍

本文介绍笔者在工作中经历过的一个项目,包含 SAP Field Service Management 同微信集成的一个场景的功能需求分析和详细的技术实现。

我们需要在微信里能够显示FSM的数据,比如FSM里的产品和客户主数据:

SAP Field Service Management 和微信集成的案例分享和实现介绍SAP Field Service Management 和微信集成的案例分享和实现介绍

一种简易的方式就是使用FSM提供的Query API.打开FSM官网的帮助文档:https://docs.coresystems.net/...

SAP Field Service Management 和微信集成的案例分享和实现介绍

进入Query API的相关部分:

SAP Field Service Management 和微信集成的案例分享和实现介绍

通过阅读文档,得知FSM Query API采用一种和Facebook Query Language,SAP Hybris Flexible Search和ABAP Open SQL类似的思路,即仿SQL语法的查询方式,从FSM系统里读取数据。

下图是Facebook Query Language的一个例子:

SAP Field Service Management 和微信集成的案例分享和实现介绍

下图是SAP Hybris Commerce Flexible Search的例子:

SAP Field Service Management 和微信集成的案例分享和实现介绍

ABAP Open SQL的例子我就不贴了,大家太熟悉了。那么FSM的Query API如何使用呢?

登录FSM,点击Query API:

SAP Field Service Management 和微信集成的案例分享和实现介绍

在弹出来的控制台里,输入类SQL语句:SELECT bp FROM BusinessPartner bp默认返回了前40条数据:

SAP Field Service Management 和微信集成的案例分享和实现介绍

那么如何使用代码来触发Query API查询呢?官网上给出了一个基于nodejs的SDK,可以轻易实现用代码调用Query API的需求。

SAP Field Service Management 和微信集成的案例分享和实现介绍

点击超链接后,会跳转到github的一个仓库:

SAP Field Service Management 和微信集成的案例分享和实现介绍

按照帮助文档上的示例代码,将自己FSM系统里创建的API client对应的credential维护到代码里,得到一个CoreAPIClient实例。

SAP Field Service Management 和微信集成的案例分享和实现介绍

ClientIdentifier和clientSecret等Credential字段的值,可以通过Admin标签页,新建一个Client后获得:

SAP Field Service Management 和微信集成的案例分享和实现介绍

使用CoreAPIClient实例的query方法向FSM系统发起Query API请求,输入参数一为应用程序里拼接的类SQL查询语句,参数二为Data Transfer Object的名称,在帮助文档里能查到。

SAP Field Service Management 和微信集成的案例分享和实现介绍

通过Visual Studio Code调试器观察上面这个API调用返回的结果。因为我的752和753行代码分别指定了Item和BusinessPartner的查询,因此API调用返回的响应是一个数组,其内两个元素分别包含了Item和BusinessPartner各前40条数据。

SAP Field Service Management 和微信集成的案例分享和实现介绍

每个Item和Business Partner实例的明细在调试器里显示如下:

SAP Field Service Management 和微信集成的案例分享和实现介绍SAP Field Service Management 和微信集成的案例分享和实现介绍

假设我们的场景是:希望在微信里能够浏览SAP FSM里可用的服务技师,如下图所示:

SAP Field Service Management 和微信集成的案例分享和实现介绍

那么首先要设计一个Web应用,在该Web应用里通过第一篇文章介绍的方式,使用SAP FSM提供的nodejs SDK去调用API.

为此,我们开发了一个Vue应用,在Vue生命周期钩子函数mounted里,发起对SAP FSM employee(技师)数据的请求:

SAP Field Service Management 和微信集成的案例分享和实现介绍SAP Field Service Management 和微信集成的案例分享和实现介绍

在我们微信里指定的时间段内,SAP FSM有三个可用的技师,其名称,用户评分,头衔,服务年限等数据通过FSM nodejs SDK返回给微信端,如上图微信开发者调试器里所示。

比如employeeID为2E9BC784D477CA3DD048E593D853CFF1的这条数据,可以直接在FSM里通过这个url查看:

https://de.coresystems.net/ma...

SAP Field Service Management 和微信集成的案例分享和实现介绍SAP Field Service Management 和微信集成的案例分享和实现介绍

这个Vue应用做好之后,部署到服务器上,生成一个url,我们假设为https://www.xxx.com/smart如何将这个url和微信公众号绑定起来?

SAP Field Service Management 和微信集成的案例分享和实现介绍

在微信公众号的自定义菜单里,创建一个新的菜单项“预约”,给它维护一个特定的url.这样在手机微信里点击这个菜单,就会跳转到对应的url.

SAP Field Service Management 和微信集成的案例分享和实现介绍

url格式:https://open.weixin.qq.com/co...<appid>&redirect_uri=https%3a%2f%2fwww.xxx.com%2fsmart&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect其中appid在微信公众号后台的公众号开发信息里获取:

SAP Field Service Management 和微信集成的案例分享和实现介绍

而redirect_url后面的值,为web应用https://www.xxx.com/smart进行url encode后的值。这一切设置好之后,从微信公众号菜单跳转到web应用的场景就能工作了。如果想在本地模拟微信访问的方式调试部署到服务器上的Web应用,只需要安装微信开发者工具,将自己的个人微信号绑定到微信公众号的开发者微信号列表中去:

SAP Field Service Management 和微信集成的案例分享和实现介绍

然后用个人的微信号扫码登录微信开发者工具,在地址栏里输入上述包含oauth 2.0重定义的那一长串url,点击Allow按钮:

SAP Field Service Management 和微信集成的案例分享和实现介绍

就可以像使用Chrome开发者工具那样,对前端应用代码进行单步调试了:

SAP Field Service Management 和微信集成的案例分享和实现介绍

下面我们采用“上门安装服务”这个场景来说明,假设客户购买了某公司的某产品,希望通过微信来预约某个时段的上门安装服务。

从微信公众号里点击“预约”按钮之后,我们开发的前端应用会自动定位出当前用户的地理位置:武侯花园人民政府,同样我们也提供了允许客户手动修改地址的功能,如下图预约地址字段尾部的字符2,就是Jerry为了测试手动修改的功能而故意添加上去的。

SAP Field Service Management 和微信集成的案例分享和实现介绍

维护手机号和希望上门安装的具体时间段,然后就可以从下拉列表里选择该时间段内可以提供服务的安装技师。这里我们选择名叫李小刚的技师:

SAP Field Service Management 和微信集成的案例分享和实现介绍

点击确定按钮,运行在微信里的前端应用就通过我们开发的后台服务,向SAP FSM发起API调用。先看最后的结果:我们在微信里收到了公众号推送的通知消息,告诉我们预约已成功。

SAP Field Service Management 和微信集成的案例分享和实现介绍

点击这条消息可以查看预约详情:

SAP Field Service Management 和微信集成的案例分享和实现介绍

待李小刚动身前往客户途中,我们还能在微信里查看李小刚的实时位置共享信息,这是通过SAP FSM提供的技师位置服务加上我们的少许自开发实现的效果。

SAP Field Service Management 和微信集成的案例分享和实现介绍

我们在微信开发者工具里重复上述步骤,观察请求明细:

SAP Field Service Management 和微信集成的案例分享和实现介绍

这个url指向我们开发的一个后台服务,/ticket/后面跟着的一串数字与字母组合是Jerry的个人微信open ID,13911111111是我预约时留下的手机号,手机号后面一长串包含%的片段,是预约时留下地址经过url encode后的结果。

SAP Field Service Management 和微信集成的案例分享和实现介绍

请求正文里包含了微信里填入的全部预约信息,和李小刚在FSM里的GUID. CustomerID,则是前端应用通过我的微信open ID调用微信API获取到的昵称,Jerry Wang. “上门安装机械臂”,是我们为了demo方便,硬编码的一个预约标题。

SAP Field Service Management 和微信集成的案例分享和实现介绍

API调用成功后,返回一个ID给消费端,这个ID代表了SAP FSM里成功创建的预约记录。

SAP Field Service Management 和微信集成的案例分享和实现介绍

下面我们到SAP FSM里根据这些GUID,去详细查看API到底在系统里生成了哪些记录。

首先, 如果一个微信用户在SAP FSM里不存在对应的Business Partner记录,是无法进行业务流程的,因此我们的后台服务实现里,会首先检测该微信用户在SAP FSM里是否存在对应的BP记录,如果没有,就自动创建一个。

下图是Jerry的个人微信号在SAP FSM里生成的对应BP记录,Additional name即是我微信号的open ID,我们的原型开发里,通过微信号的open ID同SAP FSM BP模型的Additional name这一对字段来维护微信用户和SAP FSM BP一一对应的关系。这个BP的ID为36,记录下来后面会用到。

SAP Field Service Management 和微信集成的案例分享和实现介绍

而我们在微信预约页面选择的技师李小刚,在微信开发者工具里观察到其GUID为2E9BC784D477CA3DD048E593D853CFF1,这也正是李小刚在SAP FSM里的明细页面列表url的片段之一:

SAP Field Service Management 和微信集成的案例分享和实现介绍

而SAP FSM API返回的ID:B0555705B9EC41009739D0111E16CC91,在系统里实际上是一条Service Call记录的GUID,这条Call的ID为175,服务的客户ID是Jerry Wang,Code为36,即前面提到的基于微信号open ID自动创建的客户记录。

这个Service Call有一个同名的Activity,编号为205.

SAP Field Service Management 和微信集成的案例分享和实现介绍

在SAP FSM的Activities页面可以查到这条编号为205的记录,其所属的Service Call为175,即上图显示的Call内容。

SAP Field Service Management 和微信集成的案例分享和实现介绍

Service Call和Activities创建之后,调度员就可以相应地派工,然后李小刚就可以动身出发了。下图显示的李小刚在系统中被分配了多个安装任务,这是Jerry反复测试时创建的数据,其中任务显示上标有的白色小旗,代表任务已完成。

SAP Field Service Management 和微信集成的案例分享和实现介绍

调度员选择一条我刚刚在微信里创建的预约,点击Release Assignments, 即可完成派工。

SAP Field Service Management 和微信集成的案例分享和实现介绍

在我们的后台服务实现里,使用SAP FSM nodejs SDK,依次调用了Service Call,Activity的创建API来创建对应的记录。同时安装技师和安装任务的分配关系,是通过创建一个新的ServiceAssignment对象来维护的。这三个API的说明在SAP FSM官方网站上有文档:https://docs.coresystems.net/...

总结

本文首先简单介绍了 SAP Field Service Management 的技术架构和 Restful API,接着详细分享了笔者工作项目中一个实际的通过 SAP FSM API 将其通过微信集成实现的智能服务场景案例。

转载自:https://segmentfault.com/a/1190000042005180
评论
请登录