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

本文介绍笔者在工作中经验过的一个我的项目,蕴含 SAP Field Service Management 同微信集成的一个场景的性能需要剖析和具体的技术实现。

咱们须要在微信里可能显示FSM的数据,比方FSM里的产品和客户主数据:


一种繁难的形式就是应用FSM提供的Query API.
关上FSM官网的帮忙文档:
https://docs.coresystems.net/...

进入Query API的相干局部:

通过浏览文档,得悉FSM Query API采纳一种和Facebook Query Language,SAP Hybris Flexible Search和ABAP Open SQL相似的思路,即仿SQL语法的查问形式,从FSM零碎里读取数据。

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

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

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

登录FSM,点击Query API:

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

那么如何应用代码来触发Query API查问呢?官网上给出了一个基于nodejs的SDK,能够轻易实现用代码调用Query API的需要。

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

依照帮忙文档上的示例代码,将本人FSM零碎里创立的API client对应的credential保护到代码里,失去一个CoreAPIClient实例。

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

应用CoreAPIClient实例的query办法向FSM零碎发动Query API申请,输出参数一为应用程序里拼接的类SQL查问语句,参数二为Data Transfer Object的名称,在帮忙文档里能查到。

通过Visual Studio Code调试器察看下面这个API调用返回的后果。因为我的752和753行代码别离指定了Item和BusinessPartner的查问,因而API调用返回的响应是一个数组,其内两个元素别离蕴含了Item和BusinessPartner各前40条数据。

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


假如咱们的场景是:心愿在微信里可能浏览SAP FSM里可用的服务技师,如下图所示:

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

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


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

比方employeeID为2E9BC784D477CA3DD048E593D853CFF1的这条数据,能够间接在FSM里通过这个url查看:

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


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

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

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在微信公众号后盾的公众号开发信息里获取:

而redirect_url前面的值,为web利用https://www.xxx.com/smart进行url encode后的值。
这所有设置好之后,从微信公众号菜单跳转到web利用的场景就能工作了。
如果想在本地模仿微信拜访的形式调试部署到服务器上的Web利用,只须要装置微信开发者工具,将本人的集体微信号绑定到微信公众号的开发者微信号列表中去:

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

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

上面咱们采纳“上门装置服务”这个场景来阐明,假如客户购买了某公司的某产品,心愿通过微信来预约某个时段的上门装置服务。

从微信公众号里点击“预约”按钮之后,咱们开发的前端利用会主动定位出以后用户的地理位置:武侯花园人民政府,同样咱们也提供了容许客户手动批改地址的性能,如下图预约地址字段尾部的字符2,就是Jerry为了测试手动批改的性能而成心增加下来的。

保护手机号和心愿上门装置的具体时间段,而后就能够从下拉列表里抉择该时间段内能够提供服务的装置技师。这里咱们抉择名叫李小刚的技师:

点击确定按钮,运行在微信里的前端利用就通过咱们开发的后盾服务,向SAP FSM发动API调用。
先看最初的后果:咱们在微信里收到了公众号推送的告诉音讯,通知咱们预约已胜利。

点击这条音讯能够查看预约详情:

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

咱们在微信开发者工具里反复上述步骤,察看申请明细:

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

申请注释里蕴含了微信里填入的全副预约信息,和李小刚在FSM里的GUID. CustomerID,则是前端利用通过我的微信open ID调用微信API获取到的昵称,Jerry Wang. “上门装置机械臂”,是咱们为了demo不便,硬编码的一个预约题目。

API调用胜利后,返回一个ID给生产端,这个ID代表了SAP FSM里胜利创立的预约记录。

上面咱们到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,记录下来前面会用到。

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

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

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

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

Service Call和Activities创立之后,调度员就能够相应地派工,而后李小刚就能够出发登程了。下图显示的李小刚在零碎中被调配了多个装置工作,这是Jerry重复测试时创立的数据,其中工作显示上标有的红色小旗,代表工作已实现。

调度员抉择一条我刚刚在微信里创立的预约,点击Release Assignments, 即可实现派工。

在咱们的后盾服务实现里,应用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 将其通过微信集成实现的智能服务场景案例。