学习目标
完成本单元后,您将能够:
- 了解Salesforce Connect架构。
- 开发Salesforce Connect自定义适配器。
- 了解何时以及如何使用Salesforce Connect与Heroku。
Salesforce与Heroku连接
Salesforce Connect是一种将外部数据代理到Salesforce而不将其复制到数据库的简便方法。通过这种方式,您可以将数据提取到Salesforce中,并将该数据与Salesforce中的其他对象相关联。Salesforce Connect可与各种数据源配合使用。
- 任何OData 2.0数据源都可以通过Salesforce Connect引入Salesforce。
- Heroku Connect可以将Heroku Postgres数据库公开给Salesforce Connect。
- 任何Heroku应用程序都可以提供可与Salesforce Connect一起使用的端点。
在这个单元中,我们专注于第三种选择。如果您想了解更多有关其他信息的信息,您可以学习如何将Heroku Postgres数据库与Salesforce Connect与 Heroku外部对象一起使用,或者深入了解 Salesforce Connect Trailhead模块。
Heroku应用程序可以为Web和移动应用程序以及REST服务提供Web端点。由于可以使用Apex在Salesforce中轻松使用REST服务,因此可以轻松为Salesforce Connect编写自定义适配器,以代理REST服务提供的数据。
Salesforce Connect自定义适配器的主要用例是外部系统(如Heroku应用程序!)提供的标准Salesforce UI中有用的数据。例如,假设您在Heroku上有一个面向客户的房地产应用程序,它将REST数据公开给JavaScript和移动UI。将一些房地产数据带入Salesforce UI会很棒,因为一些后台业务流程和报告可以使用它。您需要做的就是从Heroku上运行的REST服务编写适配器到Salesforce Connect结构。
使用Salesforce Connect而不是传统ETL方法的主要好处是数据始终保持同步,因为它几乎实时检索而不是复制。
开始使用Salesforce Connect和Heroku
要开始了解Salesforce Connect自定义适配器,请查看Salesforce博客文章中的 渲染GitHub JSON数据。如果您不熟悉在Heroku上运行REST服务,请选择适合您需求和专业知识的编程语言和框架。如果您不知道从哪里开始,那么一个很棒的地方是带有REST服务的 Ionic 2示例应用程序,只需单击一下即可在Heroku上部署。在部署之后,您有一个REST端点用于房地产数据,如下所示:https: //ionic2-realty-rest-demo.herokuapp.com/properties/
随着Heroku上的REST端点准备好被消费,现在只需编写一些Apex代码来桥接Salesforce Connect和服务。对于示例房地产REST服务,我们可以使用一个简单的Apex适配器来扩展DataSource.Connection类,并使用以下基本结构实现sync(),query()和search()方法:
global class RealEstateConnection extends DataSource.Connection {
override global List<DataSource.TableResult> search(DataSource.SearchContext searchContext) { }
override global List<DataSource.Table> sync() { }
override global DataSource.TableResult query(DataSource.QueryContext queryContext) { }
}
您可以使用自定义搜索功能实现search()方法,也可以使用此搜索开箱即用的实用程序:
override global List<DataSource.TableResult> search(DataSource.SearchContext searchContext) {
return DataSource.SearchUtils.searchByName(searchContext, this);
}
sync()方法告诉Salesforce有关外部对象的数据结构。对于此示例,我们只需添加一个包含几列的表。ExternalId,DisplayUrl和Name字段是必需的。
override global List<DataSource.Table> sync() {
List<DataSource.Column> columns = new List<DataSource.Column>();
columns.add(DataSource.Column.text('ExternalId', 255));
columns.add(DataSource.Column.url('DisplayUrl'));
columns.add(DataSource.Column.text('Name', 128));
columns.add(DataSource.Column.text('city', 128));
columns.add(DataSource.Column.text('price', 128));
List<DataSource.Table> tables = new List<DataSource.Table>();
tables.add(DataSource.Table.get('Properties', 'Name', columns));
return tables;
}
当Salesforce中的用户访问外部对象的记录列表时,query()方法将数据提取并解析为sync()方法中定义的数据结构。以下是房地产REST服务的query()方法示例。
override global DataSource.TableResult query(DataSource.QueryContext queryContext) {
List<Map<String, Object>> properties = DataSource.QueryUtils.process(queryContext, getProperties());
DataSource.TableResult tableResult = DataSource.TableResult.get(queryContext, properties);
return tableResult;
}
public List<Map<String, Object>> getProperties() {
Http httpProtocol = new Http();
HttpRequest request = new HttpRequest();
String url = 'https://ionic2-realty-rest-demo.herokuapp.com/properties/';
request.setEndPoint(url);
request.setMethod('GET');
HttpResponse response = httpProtocol.send(request);
List<Map<String, Object>> properties = new List<Map<String, Object>>();
for (Object item : (List<Object>)JSON.deserializeUntyped(response.getBody())) {
Map<String, Object> property = (Map<String, Object>)item;
property.put('ExternalId', property.get('id'));
property.put('DisplayUrl', 'https://ionic2-realty-rest-demo.herokuapp.com/');
property.put('Name', property.get('title'));
properties.add(property);
}
return properties;
}
getProperties()方法向Heroku上的房地产REST API发出请求。query()方法将数据转换为外部对象的数据结构。
当 其他安装步骤已经完成,房地产数据是在Salesforce中可用。
由于Salesforce Connect代理数据,因此每次用户请求数据时,Salesforce Connect都会使用适配器来获取数据。现在数据看起来和行为就像Salesforce中的任何其他数据一样,除了它来自Heroku上的应用程序!
Salesforce Connect高级功能
Salesforce Connect自定义适配器可以轻松地将数据从Heroku中提取到Salesforce中。几乎太容易了。您甚至可以定义不同数据集之间的关系。在DataSource.Column文档中了解有关外部对象引用的更多信息 。
专业提示:这个简单的示例使用匿名数据,但在大多数情况下,使用某种形式的身份验证与外部数据存储区。在Apex文档中了解有关外部数据源身份验证的详细信息 。
Salesforce Connect自定义适配器还可以处理 数据分页,这对于REST服务公开大型数据集至关重要。