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")...
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
参数是必需的。接受maxRecords
和locator
参数。响应消息标头包括Sforce-NumberOfRecords
和Sforce-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")..
54.7.4. REST Streaming API
消费者端点可以使用以下语法流端点,以在创建/更新时接收 Salesforce 通知。
创建并订阅主题
from("salesforce:CamelTestTopic?notifyForFields=ALL¬ifyForOperations=ALL&sObjectName=Merchandise__c&updateTopic=true&sObjectQuery=SELECT Id, Name FROM Merchandise__c")...
订阅现有主题
from("salesforce:CamelTestTopic&sObjectName=Merchandise__c")...
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");
或使用 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");
要接收平台事件,使用带有前缀为 event/ (或 / event/
)的平台事件的 API 名称的使用者端点,例如: Salesforce :events/Order_Event__e
。从该端点消耗的处理器将分别接收
org.apache.camel.component.salesforce.api.dto.PlatformEvent
对象或 org.cometd.bayeux.Message
,具体取决于 rawPayload
为 false
或 true
。
例如,使用最简单的形式来消耗一个事件:
PlatformEvent event = consumer.receiveBody("salesforce:event/Order_Event__e", PlatformEvent.class);
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")
收到的消息分别包含 body 中的 java.util.Map<String,Object
> 或 org.cometd.bayeux.Message
,具体取决于 rawPayload
为 false
或 true
。CamelSalesforceChangeType
标头可值为 CREATE
、UPDATE
、DELETE
或 UNDELETE
之一。
有关如何使用 Camel Salesforce 组件更改数据捕获功能的更多详细信息,请参阅 ChangeEventsConsumerIntegrationTest。
Salesforce 开发人员指南 很适合更好地了解实施更改数据捕获集成的应用程序的子点。更改事件正文字段的动态性质、高级别复制步骤以及安全考虑可能值得关注。