使用 Open Connector 进行 HubSpot 和 SAP 系统的集成工作

HubSpot 是一个微型的 CRM 解决方案,麻雀虽小,五脏俱全。大家可以使用邮箱免费注册然后体验。

从登录进去后的主页菜单能看出,一个 CRM 系统的三大核心模块 Sales,Service 和 Marketing,HubSpot 都具备。

之前 Jerry 陆陆续续介绍过一些 SAP 系统同第三方解决方案集成的技术:
一些SAP Partners能够通过二次开发实现打通C/4HANA和S/4HANA的方法介绍:通过 C4C 的 Event Notification 功能,每当 C4C 的销售订单创建时,都会通过事件通知机制,调用 S/4HANA 注册的事件处理函数,把这个订单同步到 S/4HANA 去。
以上四篇文章均围绕如何使用 Kyma Lambda Function 来扩展 SAP 产品或者客户的 legacy 系统来介绍的。
SAP云平台上的ABAP编程环境里如何消费第三方服务:这篇文章的标题就已经很好的诠释了文章内容了。
给用过SAP CRM中间件的老哥老姐们讲讲SAP CPI:通过 SAP Cloud Platform Integration 调用第三方 OData.
本文介绍另一种集成方式同第三方应用进行集成:SAP API Management Service + SAP Open Connector. 第三方应用选择的是 HubSpot. 我们将开发一个 SAP UI5 应用,通过这种新介绍的方式在 UI5 应用里显示 HubSpot 系统里的 Company 数据。
大家也许会问,这个常规需求,我直接在 UI5 应用里编程,直接调用 HubSpot 的 Restful API,不是一样也能实现么?
SAP 官网给出了使用 Open Connector 能享受到的收益,比如借助 SAP 在云平台上预置的连接器,能够减少集成的开发时间,降低集成复杂度,提高开发效率等等。

而 SAP 云平台上的 API Management Service,对通过 Open Connector 连接的 API 提供了企业级的 API 操作方式和统一的生命周期管理。

下面是集成的具体步骤。
进入 SAP Open Connector 首页,点击 Connectors:

这个列表里就是 SAP 官网上介绍的 pre-built 的第三方 CRM 应用的连接器。

我们从列表里找到火锅,哦不对,找到 HubSpot:

点击 Authenticate, 建立 SAP Cloud Platform 同 HubSpot 的安全连接:

创建一个 HubSpot 的连接器实例,这里需要填一个 API key:

到 HubSpot 的 settings 页面创建一个 API key:

实例创建完毕后,就能在 SAP 云平台环境里通过这个实例消费 HubSpot 的 Restful API 了。


Open Connector 的控制台里,还有这种叫做 Common Resources 的模型,有什么用处?

看帮助文档:"提供了一个预先配置好映射关系的通用数据接口,能够将通过 Connector 连接的不同 CRM 服务的数据通过简化的模型返回"。

看具体的例子。我在 HubSpot 里创建了两个 Companies:

如果直接消费 HubSpot 的 API,请求的 url 如下:https://api.hubapi.com/companies/v2/companies/paged?hapikey=<your API key>&properties=name&properties=website

尽管我们通过 url 参数只请求了 name 和 website 两个字段,从响应数据结构中可以发现,HubSpot 除了返回这两个字段的值以外,还包含了一些控制字段信息,比如 timestamp, source, sourceId 等字段,而我们对这些字段不感兴趣。

现在就是 Common Resources 派上用场的时候了:

这个 Common Resources 起的作用好比 ABAP 里的 simple transformation,可以根据预定义好的 mapping 规则,对 HubSpot API 返回的数据进行一些“变形”,移除一些我们应用不关心的字段。
点击 Send 按钮,从 Transformed Response 里观察到通过 Common Resources 处理后的数据:

现在这个数据看起来是不是清爽多了?这也就是我们 UI5 应用期望消费的数据。

如果对标准的 Common Resources 预置的映射处理规则不满意,还可以把标准的 Resource 克隆出来,然后在上面做修改。下图是我自己修改过的两个 Resources 模型。

Connectors 至此就开发完毕了,实际上我们连一行代码都没写,准确地说是配置完毕了,这也证实了 SAP 官网提到的 Open Connector 给集成开发人员带来的便利。
有了 Connectors,但我们还没有生成可供 SAP UI5 应用消费的 endpoint,这部分工作交由 API Management Service 完成。
登录 API portal,将这个 API tenant 同之前创建的 Open Connector 连接起来,这个连接取名叫 jerry_openconnector_provider:

需要填的 Organization Secret 和 User Secret 在 Open Connector 控制台里获得:

回到 API 界面,创建一个新的 API provider:

从下拉菜单里选择刚才创建的 jerry_openconnector_provider,

点击 Discover 按钮:

就能自动检测出之前创建的 Open Connector 实例了。

点击 Deploy 进行部署:

Deploy 之后,可以在 API portal 里根据 swagger 风格的操作方式来浏览通过 Open Connector 连接的 HubSpot API 了:

现在我们已经有了一个可用的 API endpoint,通过它,我们的 SAP UI5 应用就可以访问 HubSpot 的 Restful API 了:

在浏览器里测试,确保通过这个 url 能够返回我们期望的数据:

最后一步,就是常规操作了,新建一个 SAP UI5 应用,在里面通过 JSON Model 访问之前 API provider 暴露出来的 url:

为了解决跨域问题,上面第 12 行使用了指向 API provider 的相对路径,通过 neo-app.json 里声明的 Destination 指向实际的完整路径:

在 SAP Cloud Platform 上创建这个名为 api_portal 的 Destination:

一切就绪后,打开 UI5 应用,就能看到通过 API provider,经由 Open Connector 从 HubSpot 取回来的数据了。

这种通过 Open Connector 和 API Management Service 同第三方应用进行集成的方式,同 Jerry 文章开头回顾的几种方式,并无孰优孰劣之说。在实际的工作中,我们需要根据自己企业的实际情况,比如现有系统架构,开发部门的技术水平,项目预算等,灵活选择适合自己企业的集成方案。如果非要寻找一些通用的最佳实践,可以参考 SAP CTO 在各大会议上介绍的 SAP 云端编程模型(Cloud Application Programming Model)技术选型的决策树,来制定适合自己企业集成方案选型的决策树。

感谢阅读。
总结
本文介绍了通过 Open Connector 将 Hubspot 和 SAP 系统做集成的详细步骤,使用 Open Connector 集成方式,借助 SAP 在云平台上预置的连接器,能够减少集成的开发时间,降低集成复杂度,提高集成开发效率。
版权声明: 本文为 InfoQ 作者【Jerry Wang】的原创文章。
原文链接:【http://xie.infoq.cn/article/aea4fa265be6e47dce8e3ac3d】。文章转载请联系作者。
评论