光看封面配图,这篇文章很容易被误认为在讲成都的美食之一:火锅。

SAP成都研究院坐落在被联合国教科文组织授予过“美食之都”称号的成都,所在的天府软件园,半径1公里左右星罗棋布着很多闻名的火锅美食店。

那么火锅和本文主题,SAP云平台同第三方CRM解决方案互联有何关联?

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

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

而Jerry写这篇文章时,不断地把HubSpot敲成HotPot,罪过罪过。。。

之前Jerry陆陆续续介绍过一些SAP系统同第三方解决方案集成的技术:

以上四篇文章均围绕如何使用Kyma Lambda Function来扩展SAP产品或者客户的legacy系统来介绍的。

本文介绍另一种集成方式同第三方应用进行集成: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=&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)技术选型的决策树,来制定适合自己企业集成方案选型的决策树。


感谢阅读。

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

SAP云平台和第三方CRM解决方案(火锅)互联的更多相关文章

  1. 用JavaScript访问SAP云平台上的服务遇到跨域问题该怎么办

    关于JavaScript的跨域问题(Cross Domain)的讨论, 网上有太多的资源了.国内的程序猿写了非常多的优秀文章,Jerry这里就不再重复了. 直入主题,最近我正在做一个原型开发:通过SA ...

  2. 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数

    最近Jerry接到一个原型开发的任务,需要在微信里调用ABAP On Premise系统(SAP CRM On-Premise)里的某些函数.具体场景和我之前的公众号文章 Cloud for Cust ...

  3. 学而不思则罔 - SAP云平台ABAP编程环境的由来和适用场景

    最近Jerry写了一系列关于SAP云平台ABAP编程环境的技术文章,这些文章都是围绕着在云上的ABAP编程环境的具体知识点来分享,比如要完成一个具体的开发需求,所需要的编程步骤.这些文章陆续收到一些读 ...

  4. SAP云平台运行环境Cloud Foundry和Neo的区别

    SAP云平台提供了两套运行环境:Cloud Foundry和Neo 从下图能发现,Cloud Foundry的运行环境,基础设施由第三方公司提供,比如Amazon亚马逊和Microsoft微软,SAP ...

  5. 企业数字化转型与SAP云平台

    我们生活在一个数字化时代.信息领域里发展迅猛的数字技术和成本不断降低的硬件设备,正以前所未有的方式改变着我们工作和生活的方式. Digital Mesh 美国一家著名的从事信息技术研究和提供咨询服务的 ...

  6. 如何在SAP云平台的Cloud Foundry环境下添加新的Service(服务)

    我想在SAP云平台的Cloud Foundry环境下使用MongoDB的服务,但是我在Service Marketplace上找不到这个服务. cf marketplace返回的结果也没有. 解决方案 ...

  7. JDBC + SAP云平台 = 运行在云端的数据库应用

    在前一篇文章JPA + EclipseLink + SAP云平台 = 运行在云端的数据库应用我介绍了如何通过JPA和EclipseLink操作部署在SAP云平台上的HANA数据库实例. 在这篇文章里, ...

  8. 如何处理SAP云平台错误消息 there is no compute unit quota for subaccount

    当我试图部署一个应用到SAP云平台的neo环境时: 指定Compute Unit Size为Lite: 点击Deploy按钮,遇到如下错误消息:there is no compute unit quo ...

  9. Netweaver和SAP云平台的quota管理

    Netweaver 以需要为一个用户上下文(User Context)能够在SAP extended memory区域中分配内存尺寸创建quota为例. 对于Dialog工作进程,使用事务码修改参数 ...

随机推荐

  1. 201871010128-杨丽霞《面向对象程序设计(java)》第六-七周学习总结

    201871010128-杨丽霞<面向对象程序设计(java)>第六-七周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  2. day37_8_21表的查询

    一.语法 表的查询一般使用select关键字,配合where筛选.顺序如下: # 先后顺序 from where select 二.where约束条件 首先先建立表: create table emp ...

  3. nodejs接收post请求参数

    原文 https://blog.csdn.net/u013263917/article/details/78682270#1.2 nodejs接收post请求参数1.1-浏览器发送post请求参数的方 ...

  4. 浙大&川大提出脉冲版ResNet:继承ResNet优势,实现当前最佳

    浙大&川大提出脉冲版ResNet:继承ResNet优势,实现当前最佳 选自arXiv,作者:Yangfan Hu等,机器之心编译. 脉冲神经网络(SNN)具有生物学上的合理性,并且其计算潜能和 ...

  5. leetcode2. 两数相加

    使用迭代的方式 class Solution{ public: ListNode *addTwoNumbers(ListNode* l1,ListNode *l2) { ListNode *res=) ...

  6. odoo 新建模块命令

    python odoo-bin scaffold academy myaddons 自动初始化所有的配置信息: python odoo-bin --addons=addons,"/home/ ...

  7. shell之startup

    #!/bin/sh # # # # PROJECT=$ APPWORK_DIR=~/apps/$PROJECT LOGPATH=~/logs/$ LOGFILE=~/logs/$PROJECT/${P ...

  8. java8之行为参数化

    今天看到一块switch代码,觉得又臭又长,可以优化一下,只需要将函数名作为入参进行改造,有点类似于策略模式. 以下是使用Java8进行行为参数化的简单案例: User.java import lom ...

  9. JAVA基础系列:Arrays.binarySearch二分查找

    首先,binarySearch方法为二分法查找,所以数组必须是有序的或者是用sort()方法排序之后的 1)  binarySearch(Object[] a, Object key) a: 要搜索的 ...

  10. linux重定向 null和zero

    文件描述符 linux下一切皆文件 文件描述符,是内核为了高效管理已经被打开的文件所创建的索引,用于指向被打开的文件,所有执行I/O操作的系统调用都通过文件描述符; 文件描述符是一个简单的非负整数,用 ...