返回博客首页
← 所有文章

使用 NativeScript 访问 Salesforce 数据

2017 年 6 月 13 日 — 作者:Rob Lauer

作为当今最优秀的 CRM(客户关系管理)软件,Salesforce 是无数商业应用程序背后的引擎。随着团队变得越来越移动化,在旅途中访问 Salesforce 数据的能力变得越来越重要。再加上原生应用程序的离线、远程同步和引人入胜的用户体验功能,Salesforce 和 NativeScript 的组合成为一个显而易见的解决方案。

让我们看看如何通过利用 Progress DataDirect Cloud,在跨平台原生 iOS/Android NativeScript 应用程序中公开 Salesforce 数据。

什么是 DataDirect Cloud?

progress datadirect cloud

来自 DataDirect 网站

DataDirect Cloud 是我们功能强大的托管连接服务,它为所有数据提供了一个通用的连接点,无论这些数据是在云端还是防火墙后面的本地环境中。通过单个标准接口(SQL(ODBC、JDBC)或 REST(OData))进行连接。

简而言之,DataDirect Cloud 通过为各种关系型、大数据、分析和 SaaS 数据提供商提供基于云的连接来简化您的数据访问。您可以选择如何访问数据,包括通过 RESTful API - 这恰好是我们今天用来访问 Salesforce 数据的方法。

如果您还没有帐户,可以注册 DataDirect Cloud 的 30 天免费试用版

让我们开始吧!

检索您的 Salesforce 安全令牌

在您的 Salesforce 实例中几乎不需要进行任何配置。现在可以松一口气了。

您确实需要您的 Salesforce 安全令牌,以便 DataDirect Cloud 有权访问您的 Salesforce 数据。如果您没有安全令牌,则很容易请求一个新的。

没有 Salesforce 实例可以使用?您可以注册一个免费的开发者帐户

导航到您的个人资料设置

salesforce profile settings

然后点击提供的菜单中的重置我的安全令牌

salesforce security token

按照提供的说明重置您的安全令牌,一个新的令牌将立即通过电子邮件发送给您。

创建 Salesforce 数据源

登录到您的DataDirect Cloud 实例,然后点击提供的菜单中的数据源

datadirect cloud data sources

点击新建数据源按钮,然后点击Salesforce徽标

datadirect cloud and salesforce

提示:使用 DataDirect Cloud 时,请确保已禁用广告拦截器。有些关键元素被错误地识别为广告!

填写提供的表单以创建您的 Salesforce 数据源

  • 数据源名称是您为数据源定义的名称;
  • 描述是对数据源的可选描述;
  • 用户 ID密码是您用于登录 Salesforce 的凭据;
  • Salesforce 登录 URL是您用于登录 Salesforce 的 URL;
  • 安全令牌是您应该从上一节中准备好的字符字符串。

保存您的数据源,然后点击测试连接按钮以确保一切正常连接。

创建数据源时遇到问题?查看DataDirect Cloud 的支持资源

创建 OData 端点

这是什么?OData?OData 是一种标准,可以帮助我们定义 RESTful API。DataDirect Cloud 使用 OData 标准安全地将我们的数据公开给外部世界。

在您现有的 Salesforce 数据源中,点击OData选项卡,然后点击配置架构按钮。从提供的架构下拉列表中,选择SFORCE

然后,您可以选择要在 OData 端点中公开的数据实体。在我的例子中,我将只选择ACCOUNT

salesforce data entities

完成后,点击右上角的保存并关闭按钮。

接下来,复制提供的OData 访问 URI并保存以备后用。例如,我的 URI 是

https://service.datadirectcloud.com/api/odata/testforce

最后,点击更新按钮以更新您的数据源。

您将被重定向回您的数据源列表。当显示表示您的架构映射已成功更新的绿色复选框时,您就知道您的数据源已完全更新。

salesforce data source updated

测试您的端点

打开您选择的 API 测试工具。我通常使用Postman,因为它免费并且提供了我需要的所有测试功能。

您将执行一个GET请求来测试您的端点。在 Postman 中打开后,在输入请求 URL字段中,粘贴您之前复制的OData 访问 URI

在点击发送按钮之前,请确保点击授权选项卡,然后从提供的下拉列表中选择基本认证。输入您的 DataDirect Cloud 凭据,然后点击更新请求

postman setup

现在,点击发送并查看会发生什么神奇的事情!

如果一切正常,您应该会看到类似于以下的响应(取决于您在 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,最好的入门方法是阅读我们的快速设置和入门教程

打开您的终端或命令提示符,并使用以下命令创建一个新的 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 app with salesforce data

后续步骤

显然,这只是您可以使用 NativeScript、Salesforce 和 DataDirect Cloud 执行的操作的皮毛。接下来去哪里?查看这些您可能感兴趣的 NativeScript 资源