您正在查看 Apigee Edge 文档。
前往 Apigee X 文档。 信息
版本:1.0.5
访问您 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(启用 OAuth 设置)下,找到使用方密钥,并将其值复制到安全的位置,以便在配置扩展程序时使用。
设置关联的应用以供扩展程序访问
在 Salesforce 扩展程序可以访问 Salesforce 之前,您需要创建一个 Salesforce 关联应用,以便该扩展程序可以通过该应用与 Salesforce 连接。
在 Salesforce 中,关联的应用可让外部应用通过 API 连接到 Salesforce。
设置关联的应用
- 登录 Salesforce。
- 点击右上角的齿轮图标,然后点击设置。
- 在左侧导航栏中,展开应用 > 应用管理器。
- 在应用管理器页面中,点击新建关联的应用。
- 在基本信息下,填写必填字段。这些值用于记账,扩展程序不会使用它们。
- 在 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) 平台。客户关系管理有助于公司更好地理解客户需求并解决相关问题,同时可以更好地管理客户信息和互动方式;您可以随时随地从任何桌面或移动设备对该平台进行访问并在该单一平台上完成所需的所有操作。
操作
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 | 要插入的记录的 sObject 类型。 | 字符串 | 无。 | 是。 |
记录 | 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 | 要更新的记录的 sObject 类型。 | 字符串 | 无。 | 是。 |
记录 | 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 | 要检索的记录的 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 | 查询返回的记录数。 | 整数 | 无。 | 是。 |
记录 | 返回的记录数组,以 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 | 要列出的记录的 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 | 要删除的记录的 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 文件的内容。通过管理 API 发送时,此值是从 salesforce.key 文件生成的 base64 编码值。 | 无。 | 是。 |
Salesforce 用户的用户名 | 与您创建的关联应用相关联的用户名。Salesforce 扩展程序将使用此信息从 Salesforce 获取授权。 | 无。 | 是。 |