54.7. 支持的 Salesforce API


组件支持以下 Salesforce API

制作者端点可以使用以下 API:大多数 API 每次处理一个记录,Query API 可以检索多个记录。

54.7.1. REST API

您可以将以下内容用于 operationName

  • getVersions - 获取支持的 Salesforce REST API 版本
  • GetResources - 获取可用的 Salesforce REST 资源端点
  • getGlobalObjects - 获取所有可用 SObject 类型的元数据
  • getBasicInfo - 获取特定 SObject 类型的基本元数据
  • GetDescription - 获取特定 SObject 类型的综合元数据
  • getSObject - 使用其 Salesforce Id 获取 SObject
  • createSObject - 创建 SObject
  • updateSObject - 使用 Id 更新 SObject
  • deleteSObject - 使用 Id 删除 SObject
  • getSObjectWithId - 使用外部(用户定义的)id 字段获取 SObject
  • upsertSObject - 使用外部 ID 更新或插入 SObject
  • deleteSObjectWithId - 使用外部 ID 删除 SObject
  • Query - 运行 Salesforce SOQL 查询
  • queryMore - 使用从 'query' API 返回的结果链接检索更多结果(如果有大量结果)
  • Search - 运行 Salesforce SOSL 查询
  • 限制 - 获取机构 API 用量限制
  • recent - 获取最新的项目
  • Approval - 提交记录或记录(批量)以进行批准过程
  • Approvals - 获取所有批准过程的列表
  • 复合 - 提交最多 25 个可能相关的 REST 请求并接收单个响应。也可以在不限制的情况下使用"原始"复合。
  • comp-tree - 一次性创建最多 200 个带有父子关系(最多 5 级)的记录
  • comp-batch - 提交批处理中请求组成
  • CompRetrieveSObjectCollections - 获取同一对象类型的一个或多个记录。
  • CompCreateSObjectCollections - 添加最多 200 个记录,返回 SaveSObjectResult 对象的列表。
  • compUpdateSObjectCollections - 更新最多 200 个记录,返回 SaveSObjectResult 对象的列表。
  • CompUpsertSObjectCollections - 根据外部 ID 字段创建或更新最多 200 个记录。返回 UpsertSObjectResult 对象列表。
  • CompDeleteSObjectCollections - 删除最多 200 个记录,返回 SaveSObjectResult 对象的列表。
  • queryAll - 运行 SOQL 查询。它返回因为合并而删除的结果(将三个记录合并到其中一个记录中,删除其他记录,以及重新清除任何相关的记录)或删除。另外,返回有关归档任务和事件记录的信息。
  • getBlobField - 从单个记录中检索指定的 blob 字段。
  • apexCall - 执行用户定义的 APEX REST API 调用。
  • raw - 向 Salesforce 发送请求,并对端点、参数、正文等完全控制。

例如,以下制作者端点使用 upsertSObject API,sObjectIdName 参数指定 'Name' 作为 external id 字段。请求消息正文应该是使用 maven 插件生成的 SObject DTO。如果现有记录被更新,或者具有新记录的 id 的 CreateSObjectResult 或创建新对象时的错误列表,响应消息将为空。

...to("salesforce:upsertSObject?sObjectIdName=Name")...
Copy to Clipboard Toggle word wrap

54.7.2. 批量 2.0 API

Bulk 2.0 API 与原始 Bulk API 相比具有简化的模型。使用它快速将大量数据加载到 Salesforce 中,或者从 Salesforce 中查询大量数据。数据必须以 CSV 格式提供。Bulk 2.0 的最低 API 版本是 v41.0。Bulk Queries 的最低 API 版本是 v47.0。下面提到的 DTO 类来自 org.apache.camel.component.salesforce.api.dto.bulkv2 软件包。支持以下操作:

  • bulk2CreateJob - 创建一个批量作业。在消息正文 中提供 一个作业实例。
  • bulk2GetJob - 获取现有的作业。jobId 参数是必需的。
  • bulk2CreateBatch - 向作业中添加 CSV 记录批处理。在消息正文中提供 CSV 数据。第一行必须包含标头。jobId 参数是必需的。
  • bulk2CloseJob - 关闭一个作业。您必须关闭作业才能进行处理或中止/删除。jobId 参数是必需的。
  • bulk2AbortJob - Abort 一个作业。jobId 参数是必需的。
  • bulk2DeleteJob - 删除作业。jobId 参数是必需的。
  • bulk2GetSuccessfulResults - 获取作业的成功结果。返回的消息正文将包含 CSV 数据的 InputStream。jobId 参数是必需的。
  • bulk2GetFailedResults - 获取失败的作业结果。返回的消息正文将包含 CSV 数据的 InputStream。jobId 参数是必需的。
  • bulk2GetUnprocessedRecords - 为作业获取未处理的记录。返回的消息正文将包含 CSV 数据的 InputStream。jobId 参数是必需的。
  • bulk2GetAllJobs - 获取所有作业。响应正文是 作业 的实例。如果 done 属性为 false,则还有额外的页面来获取页面,下一个RecordsUrl 属性包含要在后续调用上的 queryLocator 参数中设置的值。
  • bulk2CreateQueryJob - 创建批量查询作业。在消息正文中提供 QueryJob 实例。
  • bulk2GetQueryJob - 获取批量查询作业。jobId 参数是必需的。
  • bulk2GetQueryJobResults - 获取批量查询作业结果。jobId 参数是必需的。接受 maxRecordslocator 参数。响应消息标头包括 Sforce-NumberOfRecordsSforce-Locator 标头。Sforce-Locator 的值可以通过 locator 参数传递给后续调用。
  • bulk2AbortQueryJob - Abort 是一个批量查询作业。jobId 参数是必需的。
  • bulk2DeleteQueryJob - 删除批量查询作业。jobId 参数是必需的。
  • bulk2GetAllQueryJobs - 获取所有作业。响应正文是 QueryJobs 的实例。如果 done 属性为 false,则还有额外的页面来获取页面,下一个RecordsUrl 属性包含要在后续调用上的 queryLocator 参数中设置的值。

54.7.3. REST Bulk (original) API

制作者端点可以使用以下 API:支持所有作业数据格式、i.e. xml、csv、zip/xml 和 zip/csv。
路由必须对请求和响应进行 marshalled/unmarshalled。通常,请求是一些流源,如 CSV 文件,
,响应也可以保存到要与请求关联的文件中。

您可以将以下内容用于 operationName

  • CreateJob - 创建 Salesforce Bulk 作业。必须在正文中提供 JobInfo 实例。pkChunking 选项支持 PK Chunking。详情请参阅 这里 的说明。
  • getJob - 使用其 Salesforce Id 获取作业
  • closeJob - 关闭一个作业
  • abortJob - Aborts a Job
  • createBatch - 提交 Bulk 作业中的批处理
  • getBatch - 使用 Id 获取批处理
  • getAllBatches - 获取 Bulk Job Id 的所有批处理
  • getRequest - 获取 Batch 的请求数据(XML/CSV)
  • getResults - 完成后获取 Batch 的结果
  • createBatchQuery - 从 SOQL 查询创建批处理
  • getQueryResultIds - 获取 Batch Query 的 Result Ids 列表
  • getQueryResult - 获取 Result Id 的结果
  • get recentlyReports - 通过向 Report List 资源发送 GET 请求,最多获取您最近查看的报告 200。
  • getReportDescription - 获取报告的报告、报告类型和相关元数据,可以是 tabular 或 summary 或 matrix 格式。
  • executeSyncReport - 与不更改过滤器同步运行报告并返回最新的概述数据。
  • executeAsyncReport - 异步运行报告实例,并带有或没有过滤器并返回摘要数据。
  • getReportInstances - 返回您请求异步运行的报告的实例列表。列表中的每个项目被视为单独的报告实例。
  • getReportResults :包含运行报告的结果。

例如,以下制作者端点使用 createBatch API 创建作业批处理。消息中必须包含可转换为 InputStream (通常为 UTF-8 CSV 或 XML 内容)的正文,以及作业内容类型的标头字段 'jobId' 和 'contentType',可以是 XML、CSV、ZIP_XML 或 ZIP_CSV。放置消息正文将在成功上包含 BatchInfo,或者在错误上抛出 SalesforceException

...to("salesforce:createBatch")..
Copy to Clipboard Toggle word wrap

54.7.4. REST Streaming API

消费者端点可以使用以下语法流端点,以在创建/更新时接收 Salesforce 通知。

创建并订阅主题

from("salesforce:CamelTestTopic?notifyForFields=ALL&notifyForOperations=ALL&sObjectName=Merchandise__c&updateTopic=true&sObjectQuery=SELECT Id, Name FROM Merchandise__c")...
Copy to Clipboard Toggle word wrap

订阅现有主题

from("salesforce:CamelTestTopic&sObjectName=Merchandise__c")...
Copy to Clipboard Toggle word wrap

54.7.5. 平台事件

要发出平台事件,请使用 createSObject 操作。并且设置消息正文可以是 JSON 字符串,也可以是带有键-值数据的 InputStream,该键是 sObjectName,需要设置为事件 API 名称,或者从 AbstractDTOBase 扩展的类以及事件的适当类名称。

例如,使用 DTO:

class Order_Event__e extends AbstractDTOBase {
  @JsonProperty("OrderNumber")
  private String orderNumber;
  // ... other properties and getters/setters
}

from("timer:tick")
    .process(exchange -> {
        final Message in = exchange.getIn();
        String orderNumber = "ORD" + exchange.getProperty(Exchange.TIMER_COUNTER);
        Order_Event__e event = new Order_Event__e();
        event.setOrderNumber(orderNumber);
        in.setBody(event);
    })
    .to("salesforce:createSObject");
Copy to Clipboard Toggle word wrap

或使用 JSON 事件数据:

from("timer:tick")
    .process(exchange -> {
        final Message in = exchange.getIn();
        String orderNumber = "ORD" + exchange.getProperty(Exchange.TIMER_COUNTER);
        in.setBody("{\"OrderNumber\":\"" + orderNumber + "\"}");
    })
    .to("salesforce:createSObject?sObjectName=Order_Event__e");
Copy to Clipboard Toggle word wrap

要接收平台事件,使用带有前缀为 event/ (或 / event/ )的平台事件的 API 名称的使用者端点,例如: Salesforce :events/Order_Event__e从该端点消耗的处理器将分别接收 org.apache.camel.component.salesforce.api.dto.PlatformEvent 对象或 org.cometd.bayeux.Message,具体取决于 rawPayloadfalsetrue

例如,使用最简单的形式来消耗一个事件:

PlatformEvent event = consumer.receiveBody("salesforce:event/Order_Event__e", PlatformEvent.class);
Copy to Clipboard Toggle word wrap

54.7.6. 更改数据捕获事件

另一方面,可将 Salesforce 配置为发出通知以记录选择对象的更改。另一方面,Camel Salesforce 组件可能会响应此类通知,允许实例将 这些更改同步到外部系统

通过订阅频道,可以在 Camel 路由的 from ("salesforce:XXX") 子句中指定感兴趣的通知,例如:

from("salesforce:data/ChangeEvents?replayId=-1").log("being notified of all change events")
from("salesforce:data/AccountChangeEvent?replayId=-1").log("being notified of change events for Account records")
from("salesforce:data/Employee__ChangeEvent?replayId=-1").log("being notified of change events for Employee__c custom object")
Copy to Clipboard Toggle word wrap

收到的消息分别包含 body 中的 java.util.Map<String,Object > 或 org.cometd.bayeux.Message,具体取决于 rawPayloadfalsetrueCamelSalesforceChangeType 标头可值为 CREATEUPDATEDELETEUNDELETE 之一。

有关如何使用 Camel Salesforce 组件更改数据捕获功能的更多详细信息,请参阅 ChangeEventsConsumerIntegrationTest

Salesforce 开发人员指南 很适合更好地了解实施更改数据捕获集成的应用程序的子点。更改事件正文字段的动态性质、高级别复制步骤以及安全考虑可能值得关注。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat