本篇参考:
https://trailhead.salesforce.com/en/content/learn/modules/lightning_connect
https://help.salesforce.com/articleView?id=platform_connect_about.htm&type=5
我们在做salesforce开发的时候,除了需要了解最基本的前后端开发时,还需要对salesforce的设计以及government limit等有一些基础的了解。比如我们知道salesforce一个表可以创建若干个字段,但是不管当前的字段有多少,这个表的数据每条所占的内存大约是2K,不管当前的表的数据存储了1个字段还是多个字段。
公司根据不同的需求可能选择不同类型的 license,不同的 license有不同的 data storage。
通过查询 salesforce help文档可以查看到, Professional, Enterprise , Unlimited Edition 都是10G的数据内存
当我们的 license购买的 data storage有限时,我们可以给salesforce提case加钱去扩充,plus可以增加200M。然而不是所有的场景都需要各种扩充,因为扩充也意味着在salesforce中的数据不断变多,使用时相关的性能也会受相应的影响。某些case情况下可能我们想使用ERP或者其他的系统的数据,我们最开始想的是在salesforce创建一个 custom object或者一个 big object,然后数据迁移过来,当对端系统有改变,通过rest等方式将改动数据再推送过来。其实这种case下salesforce提供了另外一种可能,就是这篇所说的salesforce connect 以及 External Object.
一. Salesforce Connect
Salesforce Connect是一个可以允许你查看,搜索和修改存储在salesforce系统外部的数据。他获取
以下的大多数场景都适用情况下推荐使用 salesforce connect:
1. 你有大量的存储在外部的数据但是你不想拷贝到你的Salesforce org。
2. 你在任何时候都需要少量的数据
3. 你需要实时访问最新的数据
4. 数据存储在云或后台系统中,但希望在Salesforce org中显示或处理这些数据。
需要注意的是,如果需要频繁地访问大量外部数据,ETL(extract, transform, and load)工具仍然是实现最佳性能的最佳选择。我们在使用 外部对象前需要去评估一下是否需要使用 salesforce connect还是 ETL工具。通过上面的描述我们可以看到,当想要引用外部系统并且满足上面大部分场景时候,才需要用到 Salesforce Connect,其他情况需要按照项目实际情况操作。
二. Salesforce Connect简单设置和集成
官方给了一个实际的业务场景的demo,这里进行简单的描述。系统的客户的订单以及订单详细信息维护在外部ERP系统,系统管理员被要求在客户详情页可以查看到当前的客户对应的订单信息以及订单详细。其中订单信息以及订单详细信息不用维护到salesforce系统,每条顾客信息不会有大量的数据,每次访问需要展示最新的订单信息。这种业务场景我们推荐考虑使用 External Object。 步骤如下:
1. 创建 External DataSource
首先按照trailhead的demo安装一个 app exchange,链接如下:https://login.salesforce.com/packaging/installPackage.apexp?p0=04tE00000001aqG&isdtp=p1. 用来安装一些需要用到的字段以及其他的metadata。安装好以后,切换到classic以后,app选择到External Object,tab选择到 Quickstart,正常会展示一个button叫做Set Customer IDs ,点击这个button以后会展示下面的图了,证明数据初始化成功,这个在实际项目中肯定不需要,只是trailhead为了保证数据可以进行关联而做的初始化操作。
初始化操作结束以后,我们开始进行 external data source的创建,在 setup 处搜索 external data source点击左侧的item即可查看当前系统的external data source信息。点击 New External Data source即可创建。
我们按照要求配置相关信息,需要注意的是,实际的项目中一定要使用认证证书,URL为官方提供的demo数据。
点击Save以后创建好一个External Data Source。
2.创建 External Object
当我们创建完 External Data Source便可以更方便的创建 External Object了。我们进入刚刚创建的 External Data Source,点击 Validate And Sync按钮。
这里我们针对外部数据只选择了Order 以及Order Detail两个 External Object,点击 Sync,点击以后便可以生成了 External Object。
setup 搜索External Object,点击左侧便可以进入相关的生成的External Object了。
3. 设置各表之间的关系。这步很重要,我们创建了外部对象,绑定了外部的data source,目的是要使用这些数据,所以搞清楚各个表之间的关系,了解外部对象之间以及外部对象和内部对象之间的关联关系很重要。当前的demo中,我们可以看到, Account有一个或者多个Order,一个Order有一个或者多个 Order Detail.其中 Account是 salesforce Object, Order以及Order Detail是外部对象,我们先根据下面的表搞清楚关系。
Type of Relationship(关系类型) | Child Object(子Object) | Parent Object(父Object) |
Must External Data Contain Salesforce IDs? 外部数据是否包含Salesforce Id |
Lookup | Standard, Custom, or External | Standard or Custom | Yes |
External Lookup | Standard, Custom, or External | External | No |
Indirect Lookup | External | Standard or Custom | No |
通过上面的图表,我们可以看到 针对外部对象和内部对象以及外部对象和外部对象的关系,可以有三种关系类型,分别是 lookup / External Lookup / Indirect Lookup。
lookup类型用于当父表是salesforce表,字表是External情况,并且External Data Source的数据包含了Salesforce Id情况下,可以在 External Object中创建 lookup类型的字段,关联到salesforce的表上;
External Lookup用于 父表是外部表,并且字表是salesforce内部或者外部情况下,可以创建一个 External Lookup类型字段;
Indirect Lookup用于父表是 salesforce中的表,字表是外部的表,并且不通过salesforce Id关联,通过 外键形式的字段进行关联,可以创建一个Indirect Lookup类型字段。
根据我们现在的场景, Account 和 Order,因为Order是外部表,适用于 Indirect Lookup; Order 和 Order Detail 表都是外部表,父是 External,所以只能是 External Lookup。
知道类型以后,我们对表中的字段进行 change type操作,将 Order表中的 customerId字段修改成 indirect lookup类型,关联到account的customer id字段;同理对 Order Detail的orderID字段修改成 External Lookup类型,关联到Order表的order id。
这几个表创建完关联关系,以后,我们需要更改 account以及order的page layout,将related list相关的信息拖出来,既可以在有外键关联的 account的数据的关联列表中查看到 External Object的Order信息以及点进去Order查看到 Order Detail信息。
总结:篇中主要讲了一下Salesforce Connect以及 External Object的简单使用。项目中不一定使用到,但是涉及到大型项目,有这个概念,知道什么场景使用它即可。Salesforce设计很神奇的地方是不同的功能不同的后缀。自定义表 __c, Big Object使用 __b, External Object使用 __x,如果能了解底层的知识一定是一个很奇妙的体验。篇中有错误地方欢迎指出,有不懂欢迎留言。