作为当今最优秀的 CRM(客户关系管理)软件,Salesforce 是无数商业应用程序背后的引擎。随着团队变得越来越移动化,在旅途中访问 Salesforce 数据的能力变得越来越重要。再加上原生应用程序的离线、远程同步和引人入胜的用户体验功能,Salesforce 和 NativeScript 的组合成为一个显而易见的解决方案。
让我们看看如何通过利用 Progress DataDirect Cloud,在跨平台原生 iOS/Android NativeScript 应用程序中公开 Salesforce 数据。
DataDirect Cloud 是我们功能强大的托管连接服务,它为所有数据提供了一个通用的连接点,无论这些数据是在云端还是防火墙后面的本地环境中。通过单个标准接口(SQL(ODBC、JDBC)或 REST(OData))进行连接。
简而言之,DataDirect Cloud 通过为各种关系型、大数据、分析和 SaaS 数据提供商提供基于云的连接来简化您的数据访问。您可以选择如何访问数据,包括通过 RESTful API - 这恰好是我们今天用来访问 Salesforce 数据的方法。
如果您还没有帐户,可以注册 DataDirect Cloud 的 30 天免费试用版。
让我们开始吧!
在您的 Salesforce 实例中几乎不需要进行任何配置。现在可以松一口气了。
您确实需要您的 Salesforce 安全令牌,以便 DataDirect Cloud 有权访问您的 Salesforce 数据。如果您没有安全令牌,则很容易请求一个新的。
没有 Salesforce 实例可以使用?您可以注册一个免费的开发者帐户。
导航到您的个人资料设置
然后点击提供的菜单中的重置我的安全令牌
按照提供的说明重置您的安全令牌,一个新的令牌将立即通过电子邮件发送给您。
登录到您的DataDirect Cloud 实例,然后点击提供的菜单中的数据源
点击新建数据源按钮,然后点击Salesforce徽标
提示:使用 DataDirect Cloud 时,请确保已禁用广告拦截器。有些关键元素被错误地识别为广告!
填写提供的表单以创建您的 Salesforce 数据源
保存您的数据源,然后点击测试连接按钮以确保一切正常连接。
创建数据源时遇到问题?查看DataDirect Cloud 的支持资源。
这是什么?OData?OData 是一种标准,可以帮助我们定义 RESTful API。DataDirect Cloud 使用 OData 标准安全地将我们的数据公开给外部世界。
在您现有的 Salesforce 数据源中,点击OData选项卡,然后点击配置架构按钮。从提供的架构下拉列表中,选择SFORCE。
然后,您可以选择要在 OData 端点中公开的数据实体。在我的例子中,我将只选择ACCOUNT
表
完成后,点击右上角的保存并关闭按钮。
接下来,复制提供的OData 访问 URI并保存以备后用。例如,我的 URI 是
https://service.datadirectcloud.com/api/odata/testforce
最后,点击更新按钮以更新您的数据源。
您将被重定向回您的数据源列表。当显示表示您的架构映射已成功更新的绿色复选框时,您就知道您的数据源已完全更新。
打开您选择的 API 测试工具。我通常使用Postman,因为它免费并且提供了我需要的所有测试功能。
您将执行一个GET请求来测试您的端点。在 Postman 中打开后,在输入请求 URL字段中,粘贴您之前复制的OData 访问 URI。
在点击发送按钮之前,请确保点击授权选项卡,然后从提供的下拉列表中选择基本认证。输入您的 DataDirect Cloud 凭据,然后点击更新请求
现在,点击发送并查看会发生什么神奇的事情!
如果一切正常,您应该会看到类似于以下的响应(取决于您在 DataDirect Cloud 中选择的哪个数据实体)
<?xml version='1.0' encoding='utf-8'?>
<service xmlns="http://www.w3.org/2007/app"
xml:base="https://service.datadirectcloud.com/api/odata/testforce/"
xmlns:atom="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app">
<workspace>
<atom:title>Default</atom:title>
<collection href="ACCOUNTS">
<atom:title>ACCOUNTS</atom:title>
</collection>
</workspace>
</service>
在我的例子中,我只选择了ACCOUNT
表,所以这里就是我看到的所有内容。让我们确保我的ACCOUNT
数据已正确加载。
将您的GET请求更改为附加表名(复数)。在我的例子中,我的新的GET请求将是
https://service.datadirectcloud.com/api/odata/testforce/ACCOUNTS
果然,我看到了返回的测试帐户数据
...
<d:ROWID>0016A000004HEYDQA4</d:ROWID>
<d:SYS_ISDELETED m:type="Edm.Boolean">false</d:SYS_ISDELETED>
<d:MASTERRECORDID m:null="true"/>
<d:SYS_NAME>University of Arizona</d:SYS_NAME>
<d:TYPE>Customer - Direct</d:TYPE>
<d:PARENTID m:null="true"/>
...
现在我们需要生成的授权标头。点击标头选项卡(在授权选项卡旁边),然后复制授权键值。它应该类似于:Basic lsjfl8yLDf8uds8fjsfdj==
。复制此值并保存以备后用。
到目前为止一切顺利!我们知道我们的 API 正在运行,所以现在让我们使用 NativeScript 创建一个移动应用程序来连接所有内容。
如果您不熟悉 NativeScript,最好的入门方法是阅读我们的快速设置和入门教程。
打开您的终端或命令提示符,并使用以下命令创建一个新的 NativeScript 应用程序
$ tns create test-salesforce
$ cd test-salesforce
$ tns run ios (or android)
默认应用程序应该构建、部署并在 iOS 模拟器或Android 模拟器中运行。
将您现有的main-page.xml
文件(在您的app
目录中)替换为此内容
<Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="onNavigatingTo">
<StackLayout>
<Button text="Load Salesforce Accounts" tap="fetchAccounts" class="btn btn-primary" />
<ListView items="{{ accountList }}" class="list-group">
<ListView.itemTemplate>
<StackLayout class="list-group-item">
<Label text="{{ name }}" class="list-group-item-heading" />
<Label text="{{ industry }}" textWrap="true" class="list-group-item-text"/>
</StackLayout>
</ListView.itemTemplate>
</ListView>
</StackLayout>
</Page>
同样,将您现有的main-page.js
代码替换为此
var http = require("http");
var observableArray = require("data/observable-array");
var observableModule = require("data/observable");
var accountList = new observableArray.ObservableArray([]);
var pageData = new observableModule.Observable();
function fetchAccounts(args) {
http.request({
// Insert your DataDirect Cloud OData URL with your table name appended to the end along with ?$format=json:
url: "https://service.datadirectcloud.com/api/odata/testforce/ACCOUNTS?$format=json",
method: "GET",
// Insert your Basic Authorization token:
headers:{"Content-Type":"application/json","Authorization":"<INSERT BASIC AUTH TOKEN HERE>"}
}).then(function (r) {
var data = r.content.toJSON().d.results;
for (var i = 0; i< data.length; i++) {
var account = {
// Change the "SYS_NAME" and "INDUSTRY" fields to the names of columns from
// your SForce table that you want to display.
// Note: If you change the "name" or "industry" titles you will have to edit
// main-page.xml to reflect these changes.
name: data[i].SYS_NAME,
industry: data[i].INDUSTRY
}
accountList.push(account);
}
}),
function (exception) {
console.log(exception);
}
}
function onNavigatingTo(args) {
var page = args.object;
pageData.set("accountList", accountList);
page.bindingContext = pageData;
}
exports.fetchAccounts = fetchAccounts;
exports.onNavigatingTo = onNavigatingTo;
在保存这些文件并导致应用程序崩溃之前,请务必填写两个缺少的信息!
1) 在main-page.js
的第 10 行,您需要插入您的 OData 端点 URI。如上所示,我的 URI 是https://service.datadirectcloud.com/api/odata/testforce/ACCOUNTS?$format=json
。请注意,我附加了?$format=json
以返回一个 json 格式的字符串。
2) 在main-page.js
的第 13 行,您需要插入您之前从 Postman 中复制的基本身份验证标头。
3) 在main-page.js
中稍后,您可能需要更改account
对象以映射到ACCOUNT
表中显示的其他字段以外的字段。
都设置好了吗?保存您的文件并观察 NativeScript LiveSync 发挥其魔力。您的应用程序应该重新加载(无需执行完整的重新构建/重新部署)。点击按钮,见证您的 Salesforce 数据加载到一个真正的原生应用程序中!
显然,这只是您可以使用 NativeScript、Salesforce 和 DataDirect Cloud 执行的操作的皮毛。接下来去哪里?查看这些您可能感兴趣的 NativeScript 资源