Since we're on a major migration process of this website, some component documents here are out of sync right now. In the meantime you may want to look at the asciidoc in the repository: https://github.com/apache/camel/blob/master/README.md https://github.com/apache/camel/blob/master/components/readme.adoc
Available as of Camel 2.12
This component supports producer and consumer endpoints to communicate with Salesforce using Java DTOs.
Maven users will need to add the following dependency to their
The URI scheme for a salesforce component is as follows
You can append query options to the URI in the following format,
Supported Salesforce APIs
The component supports the following Salesforce APIs
Producer endpoints can use the following APIs. Most of the APIs process one record at a time, the Query API can retrieve multiple Records.
For example, the following producer endpoint uses the upsertSObject API, with the sObjectIdName parameter specifying 'Name' as the external id field.
Rest Bulk API
Producer endpoints can use the following APIs. All Job data formats, i.e. xml, csv, zip/xml, and zip/csv are supported.
For example, the following producer endpoint uses the createBatch API to create a Job Batch.
Rest Streaming API
Consumer endpoints can use the following sytax for streaming endpoints to receive Salesforce notifications on create/update.
To create and subscribe to a topic
To subscribe to an existing topic
Uploading a document to a ContentWorkspace
Create the ContentVersion in Java, using a Processor instance:
Give the output from the processor to the Salesforce component:
Using Salesforce Limits API
With salesforce:limits operation you can fetch of API limits from Salesforce and then act upon that data received. The result of salesforce:limits operation is mapped to org.apache.camel.component.salesforce.api.dto.Limits class and can be used in a custom processors or expressions.
For instance, consider that you need to limit the API usage of Salesforce so that 10% of daily API requests is left for other routes. The body of output message contains an instance of org.apache.camel.component.salesforce.api.dto.Limits object that can be used in conjunction with Content Based Router and Spring Expression Language (SpEL) to choose when to perform queries. Notice how multiplying 1.0 with the integer value held in body.dailyApiRequests.remaining makes the expression evaluate as with floating point arithmetic, without it - it would end up making integral division which would result with either 0 (some API limits consumed) or 1 (no API limits consumed).
Working with approvals
All the properties are named exactly the same as in the Salesforce REST API prefixed with approval. You can set approval properties by setting approvalPropertyName of the Endpoint these will be used as template -- meaning that any property not present in either body or header will be taken from the Endpoint configuration. Or you can set the approval template on the Endpoint by assigning approval property to a reference onto a bean in the Registry
You can also provide header values using the same approvalPropertyName in the incoming message headers.
And finally body can contain one AprovalRequest or an java.util.Iterable of ApprovalRequest objects to process as a batch.
The important thing to remember is the priority of the values specified in these three mechanisms:
For example to send one record for approval using values in headers use:
Given a route:
You could send a record for approval using:
Using Salesforce Recent Items API
To fetch the recent items use salesforce:recent operation. This operation returns an java.util.List of org.apache.camel.component.salesforce.api.dto.RecentItem objects (List<RecentItem>) that in turn contain the Id, Name and Attributes (with type and url properties). You can limit the number of returned items by specifying limit parameter set to maximum number of records to return.
Using Salesforce Composite API to submit SObject tree
To create up to 200 records including parent-child relationships use
Note that for some records operation can succeed and for some it can fail — so you need to manually check for errors.
Easiest way to use this functionality is to use the DTOs generated by the
Lets look at an example:
Using Salesforce Composite API to submit multiple requests in a batch
The Composite API batch operation (
Lets look at an example:
Camel Salesforce Maven Plugin
This Maven plugin generates DTOs for the Camel Salesforce.
The plugin configuration has the following properties.
For obvious security reasons it is recommended that the clientId, clientSecret, userName and password fields be not set in the pom.xml.
The generated DTOs use Jackson and XStream annotations. All Salesforce field types are supported. Date and time fields are mapped to Joda DateTime, and picklist fields are mapped to generated Java Enumerations.