当前位置: 首页 > Web前端 > JavaScript

SAPFieldServiceManagement与微信整合的案例分享及实施介绍

时间:2023-03-26 20:18:08 JavaScript

SAPFSM(FieldServiceManagement),属于SAPC/4HANA五云中的ServiceCloud。本文介绍了笔者在工作中经历过的一个项目,包括SAPFieldServiceManagement与微信集成的一个场景的功能需求分析和详细的技术实现。我们需要能够在微信中展示FSM数据,比如FSM中的产品和客户主数据:一个简单的方法是使用FSM提供的QueryAPI。打开FSM官网的帮助文档:https://docs.coresystems.net/...进入QueryAPI的相关部分:通过阅读文档了解到FSMQueryAPI采用了类似FacebookQuery的思路Language,SAPHybrisFlexibleSearch和ABAPOpenSQL,即模仿SQL语法的查询方式,由FSM从系统中读取数据。下图是FacebookQueryLanguage的例子:下图是SAPHybrisCommerceFlexibleSearch的例子:ABAPOpenSQL的例子我就不贴了,大家太熟悉了。那么如何使用FSM的QueryAPI呢?登录FSM,点击QueryAPI:在弹出的控制台中,输入类似SQL的语句:SELECTbpFROMBusinessPartnerbp默认返回前40条数据:那么如何使用代码触发QueryAPI查询呢?官网给出了一个基于nodejs的SDK,可以轻松实现代码调用QueryAPI的需求。点击超链接后,会跳转到github上的一个仓库:按照帮助文档中的示例代码,将自己在FSM系统中创建的API客户端的相应凭证维护到代码中,得到一个CoreAPIClient实例。ClientIdentifier、clientSecret等Credential字段的值可以在创建新Client后通过Admin选项卡获取:使用CoreAPIClient实例的query方法向FSM系统发起QueryAPI请求,入参1是在应用程序中串接的类似SQL的查询语句。第二个参数是DataTransferObject的名称,可以在帮助文档中找到。通过VisualStudioCode调试器观察上述API调用返回的结果。因为我的752和753行代码分别指定了Item和BusinessPartner的查询,API调用返回的response是一个数组,里面的两个元素分别包含了Item和BusinessPartner的前40条数据。每个Item和BusinessPartner实例的详细信息在调试器中显示如下:假设我们的场景是:我们希望能够在微信中浏览到SAPFSM中可用的服务技术人员,如下图:那么我们首先要设计一个web应用,在这个web应用中,使用SAPFSM提供的nodejsSDK,通过第一篇介绍的方法调用API。为此,我们开发了一个Vue应用,在挂载的Vue生命周期钩子函数中,向SAPFSM员工发起调用)数据请求:在我们微信指定的时间段内,SAPFSM有3名可用的技术人员,姓名、用户评分、标题、服务时长等数据通过FSMnodejsSDK返回微信端,如上图微信开发者在设备中调试所示。比如employeeID为2E9BC784D477CA3DD048E593D853CFF1的数据,可以通过这个url在FSM中直接查看:https://de.coresystems.net/ma...Vue应用完成后,部署到服务器,生成url.假设是https://www.xxx.com/smart怎么把这个url和微信绑定公众号?在微信公众号的自定义菜单中,新建一个菜单项“预约”,并为其维护一个具体的url。这样当你在手机微信中点击这个菜单时,会跳转到对应的url.url格式:https://open.weixin.qq.com/co...&redirect_uri=https%3a%2f%2fwww.xxx.com%2fsmart&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect其中appid在微信后台♂取自公众号的开发资料:redirect_url后的值为url编码后的值Web应用程序https://www.xxx.com/smart。这一切都设置好之后,从微信公众号菜单跳转到web应用的场景就可以了。如果想在本地通过模拟微信访问的方式调试部署在服务器上的web应用,只需要安装微信开发者工具,将个人微信号绑定到微信的开发者微信号列表公众号:然后使用扫描个人微信微信账号登录微信开发者工具,在地址栏输入上面一长串包含oauth2.0重定义的url,点击允许按钮:可以像使用Chrome开发者一样,单击前端应用代码工具。逐步调试:下面我们以“上门安装服务”的场景来说明,假设客户从某公司购买了某产品,希望预约上门-通过微信进行一定时间的上门安装服务。从微信公众号点击“预约”按钮后,我们开发的前端应用会自动定位到当前用户所在的地理位置:武侯园人民政府。我们还提供了让客户手动修改地址的功能,如下图预约地址栏最后的字符2是Jerry为了测试手动修改功能特意加上的。维护好手机号和具体要上门安装的时间段,然后就可以在下拉列表中选择该时间段内可以提供服务的安装技术人员。这里我们选择一个叫李小刚的技术人员:点击确定按钮,运行在微信中的前端应用会通过我们开发的后台服务向SAPFSM发起API调用。先看最后的结果:我们收到了微信公众号的推送,通知我们预约成功。点此消息查看预约详情:在李晓刚去接客户的路上,我们还可以在微信中查看李晓刚的实时位置分享信息。这是SAPFSM提供的技术人员定位服务和一点点自主开发的结果。.我们在微信开发者工具中重复上述步骤,观察请求详情:这个url指向我们开发的一个后台服务,/ticket/后面的一串数字和字母是Jerry的个人微信开放ID,13911111111是我做的anappointment留下的手机号,手机号后面包含%的一长串片段是预约时留下的地址url编码后的结果。请求文本中包含微信填写的所有预约信息,以及李小刚在FSM中的GUID。CustomerID是前端应用通过我的微信开放ID调用微信API获得的昵称,JerryWang。”是我们为了demo方便硬编码的一个reservationtitle,API调用成功后,返回一个ID给消费者,这个ID代表在SAPFSM中创建成功的reservationrecord,接下来我们去SAPFSM根据这些GUID详细查看API在系统中生成了哪些记录。后台服务实现,我们会先查看微信用户在SAPFSM中是否有对应的BP记录,如果没有,则自动创建一条。下图是Jerry个人微信号在SAPFSM中生成的对应BP记录。是我微信ID的openID,我们原型开发中,微信ID的openID和SAPFSMBP模型的Additionalname是一样的一对字段,维护微信之间的一一对应用户s和SAPFSMBP。这个BP的ID是36,后面记录的时候会用到。而我们在微信预约页面选择的技术人员李小刚,在微信开发者工具中观察到其GUID为2E9BC784D477CA3DD048E593D853CFF1,这也是SAPFSM中李小刚的详情页列表url的片段之一:以及SAP返回的IDFSMAPI:B0555705B9EC41009739D0111E16CC91,其实是系统中一条ServiceCall记录的GUID。本次Call的ID为175,该服务的客户ID为JerryWang,Code为36,即根据上述微信ID开放ID自动创建的客户。记录。ThisServiceCall有一个同名的Activity,编号为205,在SAPFSM的Activities页面可以找到编号为205的这条记录,它所属的ServiceCall是175,也就是上面显示的Call的内容数字。创建好ServiceCall和Activity后,调度员就可以相应的调度worker,然后李小刚就可以出发了。下图显示,李晓刚在系统中被分配了多个安装任务。这是Jerry在反复测试中创造的数据。任务显示屏上的白旗表示任务已经完成。调度员选中我刚刚在微信创建的一个约会,点击发布任务,任务完成。在我们的后台服务实现中,我们使用SAPFSMnodejsSDK依次调用ServiceCall和ActivitycreationAPI来创建相应的记录。同时,通过创建一个新的ServiceAssignment对象来维护安装技术人员和安装任务之间的分配关系。这三个API的说明文档在SAPFSM官网:https://docs.coresystems.net/...总结本文首先简单介绍一下SAPFieldServiceManagement的技术架构和RestfulAPI,然后分享作者详细介绍了一个通过SAPFSMAPI通过微信集成的工作项目中的实际智能服务场景案例。