您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档。 信息
版本:1.0.3
访问 Salesforce 帐号中的数据。插入、更新、检索和查询数据。
本文内容提供了有关配置和使用此扩展程序的参考信息。
前提条件
本文内容提供了有关配置和使用此扩展程序的参考信息。在采用 ExtensionCallout 政策通过 API 代理使用扩展程序之前,您必须:
创建一个 RSA x509 私钥/认证对。
在配置扩展程序时,您将使用私钥 (.key) 作为凭据。在创建将授予扩展程序访问 Salesforce 的关联应用程序时,您将使用证书 (.crt) 文件。
openssl req -x509 -sha256 -nodes -days 36500 -newkey rsa:2048 -keyout salesforce.key -out salesforce.crt
-
与 Salesforce 关联的应用将提供对 Salesforce 扩展程序的访问权限。请参阅下方的说明,了解如何设置应用。
获取关联的应用的使用方密钥。扩展程序将在向应用进行身份验证时使用此密钥。
- 在 Salesforce 设置中,转到应用 > 应用管理器。
- 在列表中,找到您创建的关联应用。
- 在应用行右侧的下拉菜单中,点击查看。
- 在 API (Enable OAuth Settings)(API(启用 OAuth 设置))下,找到 Consumer Key(使用方密钥)并将其值复制到一个安全的地方,以便在配置扩展程序时使用。
设置已关联的应用,以供扩展程序使用
您需要先创建一个与 Salesforce 关联的应用,然后 Salesforce 扩展程序才能通过该应用与 Salesforce 建立连接。
在 Salesforce 中,关联的应用为外部应用提供了一种通过 API 连接到 Salesforce 的方式。
设置关联的应用
- 登录 Salesforce。
- 点击右上角的齿轮图标,然后点击设置。
- 在左侧导航栏中,展开应用 > 应用管理器。
- 在应用管理器页面中,点击新建关联的应用。
- 在 Basic Information 下方,填写必填字段。这些值用于簿记;扩展程序不会使用它们。
- 在 API(启用 OAuth 设置)下,选中启用 OAuth 设置复选框。
- 请输入一个回调网址,虽然该扩展程序并不会使用该网址。您可以使用
http://localhost/
或其他占位符主机。 - 选中使用数字签名复选框。
- 在 Use digital signatures(使用数字签名)下,点击 Choose File(选择文件)以查找并上传您之前生成的
salesforce.crt
。 - 在 Selected OAuth Scopes(选定的 OAuth 范围)部分,添加以下内容,使其位于 Selected OAuth Scopes(选定的 OAuth 范围)下方:
- 访问和管理您的数据 (api)
- 随时代表您执行请求(refresh_token、offline_access)
- 点击保存。如果出现错误,您可能需要重新生成并上传
salesforce.crt
文件。 - 在出现的应用页面上,点击管理。
- 在刚刚创建的应用的“应用管理器”页面上,点击修改政策。
- 在 OAuth 政策下,点击允许的用户下拉菜单,然后点击管理员批准的用户已获得预先授权。
- 点击保存。
- 返回应用页面,在配置文件下,点击管理配置文件。
在应用配置文件分配页面上,选中可使用此应用的用户个人资料对应的复选框。
请务必选择与配置扩展程序时将要使用其用户名的用户对应的个人资料。此外,请确保至少有“系统管理员”用户可以访问此应用。
您可以在 Salesforce 中查看该用户的配置文件设置。在设置区域,展开用户 > 用户,找到该扩展程序所代表的用户,然后在个人资料列中找到其个人资料。
点击保存。
Salesforce 简介
Salesforce 是一个客户关系管理 (CRM) 平台。借助客户关系管理系统,公司可以更好地管理客户信息和互动,从而了解客户的需求并解决问题。所有这一切都可以在一个平台上实现,并且随时可以通过任何桌面设备或设备访问。
Action
insert
以 sObject 类型的形式插入记录。
语法
<Action>insert</Action>
<Input><![CDATA[{
"sobject": records-sObject-type,
"records":[ records-to-insert ],
"allOrNone": true | false
}]]></Input>
示例
<Action>insert</Action>
<Input><![CDATA[{
"sobject": "Account",
"records":[
{ "Name": "MyAccountName" }
],
"allOrNone": true
}]]></Input>
请求参数
参数 | 说明 | 类型 | 默认 | 必需 |
---|---|---|---|---|
对象 | 要插入的记录的 sObject 类型。 | 字符串 | 无。 | 有。 |
records | JSON 格式的 sObject 记录数组。最大值:1000。 | 数组 | 无。 | 有。 |
allOrNone | 如果更新的任何部分失败,true 会使整个更新失败。 |
布尔值 | false | 没有。 |
响应
包含插入操作结果的 results
数组。
{
results: [
{ id: '0011U00000LQ76KQAT', success: true, errors: [] },
{ id: '0011U00000LQ76LQAT', success: true, errors: [] }
]
}
媒体资源 | 说明 | 类型 | 默认 | 必需 |
---|---|---|---|---|
results[*].id | 为新记录生成的 sObject ID。 | 字符串 | 无。 | 有。 |
results[*].success | 如果成功插入该记录,则返回 true 。 |
布尔值 | 无。 | 有。 |
results[*].errors | 执行期间捕获到的错误数组(如果有)。 | 数组 | 无。 | 有。 |
update
更新 Salesforce 记录。
语法
<Action>update</Action>
<Input><![CDATA[{
"sobject": records-sObject-type,
"records": [ records-to-update ],
"allOrNone": true | false
}]]></Input>
示例
<Action>update</Action>
<Input><![CDATA[{
"sobject": "Account",
"records":[
{
"id":"0011U00000LQ76KQAT",
"Name": "MyNewAccountName"
}
],
"allOrNone": true
}]]></Input>
请求参数
参数 | 说明 | 类型 | 默认 | 必需 |
---|---|---|---|---|
对象 | 要更新的记录的 sObject 类型。 | 字符串 | 无。 | 有。 |
records | JSON 格式的 sObject 记录数组。要更新的每条记录都必须包含记录的 ID 值。最大值:1000。 | 数组 | 无。 | 有。 |
allOrNone | 如果更新的任何部分失败,true 会使整个更新失败。 |
布尔值 | false | 没有。 |
响应
results
数组,包含更新的结果。
{
results: [
{ id: '0011U00000LQ76KQAT', success: true, errors: [] },
{ id: '0011U00000LQ76LQAT', success: true, errors: [] }
]
}
参数 | 说明 | 类型 | 默认 | 必需 |
---|---|---|---|---|
results[*].id | 为更新的记录生成的 sObject ID。 | 字符串 | 无。 | 有。 |
results[*].success | 如果成功插入该记录,则返回 true 。 |
布尔值 | 无。 | 有。 |
results[*].errors | 执行期间捕获到的错误数组(如果有)。 | 数组 | 无。 | 有。 |
retrieve
按 ID 以 sObject 形式检索记录。返回 sObject 类型的所有字段。
语法
<Action>retrieve</Action>
<Input><![CDATA[{
"sobject": records-sObject-type,
"ids":[ IDs-of-records-to-retrieve ]
}]]></Input>
示例
<Action>retrieve</Action>
<Input><![CDATA[{
"sobject": "Account",
"ids":["0011U00000LQ76KQAT"]
}]]></Input>
请求参数
参数 | 说明 | 类型 | 默认 | 必需 |
---|---|---|---|---|
对象 | 要检索的记录的 sObject 类型。 | 字符串 | 无。 | 有。 |
ids | 要检索的 sObject ID 记录数组。最大值:1000。 | 数组 | 无。 | 有。 |
allOrNone | 如果请求的任何部分失败,true 会使整个操作失败。 |
布尔值 | false | 没有。 |
响应
以 JSON 表示的 sObject 的 records
数组。请注意,对象的所有属性都包含在 JSON 中,即使属性值为 null 也是如此。
{
records: [
{ sobject-json },
{ sobject-json }
]
}
querySOQL
使用 Salesforce 对象查询语言 (SOQL) 查询 Salesforce.com。
语法
<Action>querySOQL</Action>
<Input><![CDATA[{
"soql": soql-query-statement
}]]></Input>
示例
<Action>querySOQL</Action>
<Input><![CDATA[{
"soql": "SELECT Id, Name FROM Account"
}]]></Input>
请求参数
参数 | 说明 | 类型 | 默认 | 必需 |
---|---|---|---|---|
Soql | 用于查询的 SOQL 语句。 | 字符串 | 无。 | 有。 |
响应
查询结果。
{
totalSize: 2,
records: [
{
attributes: { attributes-of-record },
Id: '0011U00000LQ76KQAT',
Name: 'AccountName1'
},
{
attributes: { attributes-of-record },
Id: '0011U00000LQ76LQAT',
Name: 'AccountName2'
}
],
done: true
}
参数 | 说明 | 类型 | 默认 | 必需 |
---|---|---|---|---|
totalSize | 查询返回的记录数。 | 整数 | 无。 | 有。 |
records | 以 JSON 格式返回的 sObject 记录数组。最大值:1000。 | 数组 | 无。 | 有。 |
完成 | 如果查询操作已完成,则为 true 。 |
布尔值 | 无。 | 有。 |
list
列出 Salesforce.com 记录。返回指定 sObject 类型的所有字段。
语法
<Action>list</Action>
<Input><![CDATA[{
"sobject": records-sObject-type,
"limit": max-number-of-records,
"offset": record-index-at-which-to-begin-response-set
}]]></Input>
示例
<Action>list</Action>
<Input><![CDATA[{
"sobject": "Account",
"limit": 1000,
"offset": 0
}]]></Input>
请求参数
参数 | 说明 | 类型 | 默认 | 必需 |
---|---|---|---|---|
对象 | 要列出的记录的 sObject 类型。 | 字符串 | 无。 | 有。 |
限制 | 要返回的记录数上限。 | 整数 | 1000 | 没有。 |
offset | 要列出的记录的偏移量。 | 整数 | 0 |
没有。 |
响应
records
数组,其中包含以 JSON 格式列出的 sObject。
{
records: [
{ sobject-json },
{ sobject-json }
]
}
del
删除具有指定 ID 的记录。
语法
<Action>del</Action>
<Input><![CDATA[{
"sobject": records-sObject-type,
"ids":[ IDs-of-records-to-retrieve ]
}]]></Input>
示例
<Action>del</Action>
<Input><![CDATA[{
"sobject": "Account",
"ids":["0011U00000LQ76KQAT"]
}]]></Input>
请求参数
参数 | 说明 | 类型 | 默认 | 必需 |
---|---|---|---|---|
对象 | 要删除的记录的 sObject 类型。 | 字符串 | 无。 | 有。 |
ids | 要删除的记录的 sObject ID 数组。最大值:1000。 | 数组 | 无。 | 有。 |
响应
包含操作结果的 results
数组。
{
results:[
{ id: '0011U00000LQ76KQAT', success: true, errors: [] },
{ id: '0011U00000LQ76LQAT', success: true, errors: [] }
]
}
媒体资源 | 说明 | 类型 | 默认 | 必需 |
---|---|---|---|---|
results[*].id | 指定的记录的 sObject ID。 | 字符串 | 无。 | 有。 |
results[*].success | 如果对记录的操作成功,则为 true 。 |
布尔值 | 无。 | 有。 |
results[*].errors | 执行期间捕获到的错误数组(如果有)。 | 数组 | 无。 | 有。 |
getAccessToken
获取 Salesforce.com API 访问令牌。可用于查询 REST API。
语法
<Action>getAccessToken</Action>
<Input><![CDATA[{}]]></Input>
请求参数
无。
响应
JSON 格式的访问令牌。
{
"accessToken":"00D1U0000014m3hqswvoM22I5GTw9EJrztlZ8eSSka88Q",
"scope":"api",
"instanceUrl": "https://na85.salesforce.com",
"id": "https://login.salesforce.com/id/00D1U0004564mutUAA/0051U43214qecVQAQ",
"tokenType": "Bearer"
}
媒体资源 | 说明 | 类型 | 默认 | 必需 |
---|---|---|---|---|
accessToken | 访问令牌。 | 字符串 | 无。 | 有。 |
范围 | 令牌提供访问权限的范围。 | 字符串 | 无。 | 有。 |
instanceUrl | Salesforce 组织使用的实例的网址。 | 字符串 | 无。 | 有。 |
id | 关联的应用的 ID。 | 字符串 | 无。 | 有。 |
tokenType | 访问令牌的类型。 | 字符串 | 不记名 | 有。 |
配置参考文档
在配置和部署此扩展程序以在 API 代理中使用时,请使用以下代码。
通用扩展属性
每个扩展程序都有以下属性。
属性 | 说明 | 默认 | 必需 |
---|---|---|---|
name |
您为扩展程序配置此名称。 | 无 | 是 |
packageName |
Apigee Edge 提供的扩展包的名称。 | 无 | 是 |
version |
配置扩展程序所用的扩展程序软件包的版本号。 | 无 | 是 |
configuration |
特定于您要添加的附加信息的配置值。请参阅此扩展程序软件包的属性 | 无 | 是 |
此扩展程序软件包的属性
为此扩展程序的以下配置属性指定值。
媒体资源 | 说明 | 默认 | 必需 |
---|---|---|---|
授权服务器网址 | 从 Salesforce 获取授权时使用的网址。通常为 https://login.salesforce.com |
无。 | 有。 |
已关联的应用的使用方密钥 | Salesforce 为您创建的关联应用提供的使用方键值。请参阅检索使用方密钥的前提条件下的说明。 | 无。 | 有。 |
凭据 | 在 Apigee Edge 控制台中输入时,这就是您在上述步骤中生成的 salesforce.key 文件的内容。通过 Management API 发送时,它是通过 salesforce.key 文件生成的 base64 编码的值。 | 无。 | 有。 |
Salesforce 用户的用户名 | 与您创建的关联应用相关联的用户名。Salesforce 扩展程序将使用此号码来获取 Salesforce 的授权。 | 无。 | 有。 |