This site contains the documentation that is relevant to older WSO2 product versions and offerings.
For the latest WSO2 documentation, visit https://wso2.com/documentation/.
Working with Records
Overview
The following operations allow you to work with Records. A Record is an instance of a particular sObject. Click an operation name to see details on how to use it.
For a sample proxy service that illustrates how to work with records, see Sample configuration.Â
Operation | Description |
---|---|
create | Creates a record in Salesforce. |
createMultipleRecords | Creates multiple sObject(s) in Salesforce. |
createNestedRecords | Create nested records for sObjects. |
update | Updates a record in Salesforce. |
Deletes a record from Salesforce. | |
recentlyViewedItem | Retrieves the recently viewed item in Salesforce. |
retrieveFieldValues | Retrieves specific field values for a specific sObject. |
upsert | Creates or updates (upserts) a record using external ID. |
Operation details
This section provides further details on the operations related to Records.
Creating a record for a specific sObject
To create a record, use salesforcerest.create
and specify the following properties.
<salesforcerest.create> <sObjectName>{$ctx:sObjectName}</sObjectName> <fieldAndValue>{$ctx:fieldAndValue}</fieldAndValue> </salesforcerest.create>
Properties
sObjectName: The type of object for which you will create a record.
FieldAndValue
: The .json format property used to create the record. Include all mandatory fields according to the requirements for the specifiedsobject
. For example, if you are creating a record for the Account sObject, "name" is a mandatory parameter, and you might want to include the optional description, so the fieldAndValue property would look like this:Sample fieldAndValue property{ "name":"wso2", "description":"This account belongs to WSO2" }
Sample request
Following is a sample REST request that can be handled by the create
 operation.
{ "accessToken":"00D280000017q6q!AQoAQOeXcp7zKo3gUdy6r064_LsJ5bYYrUn_qAZG9TtKFLPfUMRxiato.E162_2XAtCTZLFQTbNk2Rz6Zm_juSakFE_aaBPp", "apiUrl":"https://ap2.salesforce.com", Â "clientId": "3MVG9ZL0ppGP5UrBrnsanGUZRgHqc8gTV4t_6tfuef8Zz4LhFPipmlooU6GBszpplbTzVXXWjqkGHubhRip1s", "refreshToken": "5Aep861TSESvWeug_xvFHRBTTbf_YrTWgEyjBJo7Xr34yOQ7GCFUN5DnNPxzDIoGoWi4evqOl_lT1B9nE5dAtSb", "clientSecret": "9104967092887676680", "hostName": "https://login.salesforce.com", "intervalTime" : "100000", Â "apiVersion": "v32.0", "sObjectName":"Account", "registryPath": "connectors/SalesforceRest", Â "fieldAndValue": { "name": "wso2", "description":"This Account belongs to WSO2" } }
Related Salesforce REST documentation
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_sobject_create.htm
Creating multiple records
To create multiple records of the same sObject type, use salesforcerest.createMultipleRecords
and specify the following properties.
<salesforcerest.createMultipleRecords> <sObjectName>{$ctx:sObjectName}</sObjectName> <fieldAndValue>{$ctx:fieldAndValue}</fieldAndValue> </salesforcerest.createMultipleRecords>
Properties
sObjectName: The object type for which you are creating records.
fieldAndValue
: The .json format property, which specifies each record as an entry within theÂrecords
array. Include all mandatory fields according to the requirements for the specifiedÂsobject
. For example, if you are creating records for the Account sObject, "name" is a mandatory parameter, and you might want to include additional optional values for each record, so the fieldAndValue property might look like this:Sample fieldAndValue property{ "records": [ { "attributes": {"type": "Account", "referenceId": "ref1"}, "name": "wso2", "phone": "1111111", "website": "www.salesforce1.com" }, { "attributes": {"type": "Account", "referenceId": "ref2"}, "name": "slwso2", "phone": "22222222", "website": "www.salesforce2.com" }] }
Sample request
Following is a sample REST request that can be handled by the createMultipleRecords
 operation.
{ "accessToken":"00D280000017q6q!AQoAQOeXcp7zKo3gUdy6r064_LsJ5bYYrUn_qAZG9TtKFLPfUMRxiato.E162_2XAtCTZLFQTbNk2Rz6Zm_juSakFE_aaBPp", "apiUrl":"https://ap2.salesforce.com", Â "clientId": "3MVG9ZL0ppGP5UrBrnsanGUZRgHqc8gTV4t_6tfuef8Zz4LhFPipmlooU6GBszpplbTzVXXWjqkGHubhRip1s", "refreshToken": "5Aep861TSESvWeug_xvFHRBTTbf_YrTWgEyjBJo7Xr34yOQ7GCFUN5DnNPxzDIoGoWi4evqOl_lT1B9nE5dAtSb", "clientSecret": "9104967092887676680", "hostName": "https://login.salesforce.com", "apiVersion": "v32.0", "intervalTime" : "100000", Â "sObjectName":"Account", "registryPath": "connectors/SalesforceRest", Â "fieldAndValue": { "records": [ { "attributes": {"type": "Account", "referenceId": "ref1"}, "name": "wso2", "phone": "1111111", "website": "www.salesforce1.com" }, { "attributes": {"type": "Account", "referenceId": "ref2"}, "name": "slwso2", "phone": "22222222", "website": "www.salesforce2.com" }] } }
Related Salesforce REST documentation
Creating nested records
To create nested records for a specific sObject, use salesforcerest.createNestedRecords
and specify the following properties.
<salesforcerest.createNestedRecords> <sObjectName>{$ctx:sObjectName}</sobject> <fieldAndValue>{$ctx:fieldAndValue}</fieldAndValue> </salesforcerest.createNestedRecords>
Properties
sObjectName: The object type of the top-level records you are creating.
fieldAndValue
: The .json format property, which defines the records. Include all mandatory fields according to the requirements for the specifiedÂsobject
. For example, if you want to create two new accounts and their child records, the fieldAndValue property might look like this:Sample fieldAndValue property{ "records" :[{ "attributes" : {"type" : "Account", "referenceId" : "ref1"}, "name" : "SampleAccount1", "phone" : "1234567890", "website" : "www.salesforce.com", "numberOfEmployees" : "100", "type" : "Analyst", "industry" : "Banking", "Contacts" : { "records" : [{ "attributes" : {"type" : "Contact", "referenceId" : "ref2"}, "lastname" : "Smith", "Title" : "President", "email" : "sample@salesforce.com" },{ "attributes" : {"type" : "Contact", "referenceId" : "ref3"}, "lastname" : "Evans", "title" : "Vice President", "email" : "sample@salesforce.com" }] } },{ "attributes" : {"type" : "Account", "referenceId" : "ref4"}, "name" : "SampleAccount2", "phone" : "1234567890", "website" : "www.salesforce.com", "numberOfEmployees" : "52000", "type" : "Analyst", "industry" : "Banking", "childAccounts" : { "records" : [{ "attributes" : {"type" : "Account", "referenceId" : "ref5"}, "name" : "SampleChildAccount1", "phone" : "1234567890", "website" : "www.salesforce.com", "numberOfEmployees" : "100", "type" : "Analyst", "industry" : "Banking" }] }, "Contacts" : { "records" : [{ "attributes" : {"type" : "Contact", "referenceId" : "ref6"}, "lastname" : "Jones", "title" : "President", "email" : "sample@salesforce.com" }] } }] }
Sample request
Following is a sample REST request that can be handled by the createNestedRecords
 operation.
{ "accessToken":"00D280000017q6q!AQoAQOeXcp7zKo3gUdy6r064_LsJ5bYYrUn_qAZG9TtKFLPfUMRxiato.E162_2XAtCTZLFQTbNk2Rz6Zm_juSakFE_aaBPp", "apiUrl":"https://ap2.salesforce.com", Â "clientId": "3MVG9ZL0ppGP5UrBrnsanGUZRgHqc8gTV4t_6tfuef8Zz4LhFPipmlooU6GBszpplbTzVXXWjqkGHubhRip1s", "refreshToken": "5Aep861TSESvWeug_xvFHRBTTbf_YrTWgEyjBJo7Xr34yOQ7GCFUN5DnNPxzDIoGoWi4evqOl_lT1B9nE5dAtSb", "clientSecret": "9104967092887676680", "hostName": "https://login.salesforce.com", "intervalTime" : "100000", Â "apiVersion": "v32.0", "sObjectName":"Account", "registryPath": "connectors/SalesforceRest", Â "fieldAndValue": { "records" :[{ "attributes" : {"type" : "Account", "referenceId" : "ref1"}, "name" : "SampleAccount1", "phone" : "1234567890", "website" : "www.salesforce.com", "numberOfEmployees" : "100", "type" : "Analyst", "industry" : "Banking", "Contacts" : { "records" : [{ "attributes" : {"type" : "Contact", "referenceId" : "ref2"}, "lastname" : "Smith", "Title" : "President", "email" : "sample@salesforce.com" },{ "attributes" : {"type" : "Account", "referenceId" : "ref3"}, "lastname" : "Evans", "title" : "Vice President", "email" : "sample@salesforce.com" }] } },{ "attributes" : {"type" : "Account", "referenceId" : "ref4"}, "name" : "SampleAccount2", "phone" : "1234567890", "website" : "www.salesforce.com", "numberOfEmployees" : "52000", "type" : "Analyst", "industry" : "Banking", "childAccounts" : { "records" : [{ "attributes" : {"type" : "Account", "referenceId" : "ref5"}, "name" : "SampleChildAccount1", "phone" : "1234567890", "website" : "www.salesforce.com", "numberOfEmployees" : "100", "type" : "Analyst", "industry" : "Banking" }] }, "Contacts" : { "records" : [{ "attributes" : {"type" : "Contact", "referenceId" : "ref6"}, "lastname" : "Jones", "title" : "President", "email" : "sample@salesforce.com" }] } }] } }
Related Salesforce REST documentation
Updating a record
To update a record, use salesforcerest.update
and specify the following properties.
<salesforcerest.update> <sObjectName>{$ctx:sObjectName}</sObjectName> <fieldAndValue>{$ctx:fieldAndValue}</fieldAndValue> <Id>{$ctx:Id}</Id> </salesforcerest.update>
Properties
sObjectName: The object type of the record.
fieldAndValue
: The json format property with the new definition for the record.Id
: The ID of the record you are updating.
Sample request
Following is a sample REST request that can be handled by the update
 operation.
{ "accessToken":"00D280000017q6q!AQoAQOeXcp7zKo3gUdy6r064_LsJ5bYYrUn_qAZG9TtKFLPfUMRxiato.E162_2XAtCTZLFQTbNk2Rz6Zm_juSakFE_aaBPp", "apiUrl":"https://ap2.salesforce.com", Â "clientId": "3MVG9ZL0ppGP5UrBrnsanGUZRgHqc8gTV4t_6tfuef8Zz4LhFPipmlooU6GBszpplbTzVXXWjqkGHubhRip1s", "refreshToken": "5Aep861TSESvWeug_xvFHRBTTbf_YrTWgEyjBJo7Xr34yOQ7GCFUN5DnNPxzDIoGoWi4evqOl_lT1B9nE5dAtSb", "clientSecret": "9104967092887676680", "hostName": "https://login.salesforce.com", "intervalTime" : "100000", Â "apiVersion": "v32.0", "sObjectName":"Account", "Id":"00128000002OOhD", "registryPath": "connectors/SalesforceRest", Â "fieldAndValue": { "name": "wso2", "description":"This Account belongs to WSO2" } }
Related Salesforce REST documentation
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_update_fields.htm
Deleting a record
To delete a record, use salesforcerest.delete
and specify the following properties.
<salesforcerest.delete> <sObjectName>{$ctx:sObjectName}</sObjectName> <idToDelete>{$ctx:idToDelete}</idToDelete> </salesforcerest.delete>
Properties
sObjectName: The object type of the record.
idToDelete
: The ID of the record you want to delete.
Sample request
Following is a sample REST request that can be handled by the delete
 operation.
{ "accessToken":"00D280000017q6q!AQoAQOeXcp7zKo3gUdy6r064_LsJ5bYYrUn_qAZG9TtKFLPfUMRxiato.E162_2XAtCTZLFQTbNk2Rz6Zm_juSakFE_aaBPp", "apiUrl":"https://ap2.salesforce.com", Â "clientId": "3MVG9ZL0ppGP5UrBrnsanGUZRgHqc8gTV4t_6tfuef8Zz4LhFPipmlooU6GBszpplbTzVXXWjqkGHubhRip1s", "refreshToken": "5Aep861TSESvWeug_xvFHRBTTbf_YrTWgEyjBJo7Xr34yOQ7GCFUN5DnNPxzDIoGoWi4evqOl_lT1B9nE5dAtSb", "clientSecret": "9104967092887676680", "hostName": "https://login.salesforce.com", "intervalTime" : "100000", Â "apiVersion": "v32.0", "sObjectName":"Account", "idToDelete":"00128000002OOhD", "registryPath": "connectors/SalesforceRest" Â }
Related Salesforce REST documentation
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_delete_record.htm
Retrieving the recently viewed items
To retrieve the recently viewed items, use salesforcerest.recentlyViewedItem
and specify the following properties.
<salesforcerest.recentlyViewedItem> <limit>{$ctx:limit}</limit> </salesforcerest.recentlyViewedItem>
Properties
limit
: The maximum number of records to be returned.
Sample request
Following is a sample REST request that can be handled by the recentlyViewedItem
 operation.
{ "accessToken":"00D280000017q6q!AQoAQOeXcp7zKo3gUdy6r064_LsJ5bYYrUn_qAZG9TtKFLPfUMRxiato.E162_2XAtCTZLFQTbNk2Rz6Zm_juSakFE_aaBPp", "apiUrl":"https://ap2.salesforce.com", Â "clientId": "3MVG9ZL0ppGP5UrBrnsanGUZRgHqc8gTV4t_6tfuef8Zz4LhFPipmlooU6GBszpplbTzVXXWjqkGHubhRip1s", "refreshToken": "5Aep861TSESvWeug_xvFHRBTTbf_YrTWgEyjBJo7Xr34yOQ7GCFUN5DnNPxzDIoGoWi4evqOl_lT1B9nE5dAtSb", "clientSecret": "9104967092887676680", "hostName": "https://login.salesforce.com", "intervalTime" : "100000", Â "apiVersion": "v32.0", "limit":"5", "registryPath": "connectors/SalesforceRest" Â }
Related Salesforce REST documentation
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_recent_items.htm
Retrieving specific field values
To retrieve specific field values for a specific sObject, use salesforcerest.retrieveFieldValues
and specify the following properties.
<salesforcerest.retrieveFieldValues> <sObjectName>{$ctx:sObjectName}</sObjectName> <rowId>{$ctx:rowId}</rowId> <fields>{$ctx:fields}</fields> </salesforcerest.retrieveFieldValues>
Properties
sObjectName:Â The object type of the record.
- rowId: The ID of the record whose values you want to retrieve.
- fields: A comma-separated list of fields whose values you want to retrieve.Â
Sample request
Following is a sample REST request that can be handled by the retrieveFieldValues
 operation.
{ "accessToken":"00D280000017q6q!AQoAQOeXcp7zKo3gUdy6r064_LsJ5bYYrUn_qAZG9TtKFLPfUMRxiato.E162_2XAtCTZLFQTbNk2Rz6Zm_juSakFE_aaBPp", "apiUrl":"https://ap2.salesforce.com", Â "clientId": "3MVG9ZL0ppGP5UrBrnsanGUZRgHqc8gTV4t_6tfuef8Zz4LhFPipmlooU6GBszpplbTzVXXWjqkGHubhRip1s", "refreshToken": "5Aep861TSESvWeug_xvFHRBTTbf_YrTWgEyjBJo7Xr34yOQ7GCFUN5DnNPxzDIoGoWi4evqOl_lT1B9nE5dAtSb", "clientSecret": "9104967092887676680", "hostName": "https://login.salesforce.com", "intervalTime" : "100000", Â "apiVersion": "v32.0", "sObjectName": "Account", "rowId":"00128000005YjDnAAK", "fields":"AccountNumber,BillingPostalCode", "registryPath": "connectors/SalesforceRest" Â }
Related Salesforce REST documentation
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_get_field_values.htm
Upserting a record using an external ID
To create or update (upsert) a record using an external ID, use salesforcerest.upsert
and specify the following properties. This method is used to create records or update existing records based on the value of a specified external ID field.
- If the specified value doesn't exist, a new record is created.
- If a record does exist with that value, the field values specified in the request body are updated.
<salesforcerest.upsert> <sObjectName>{$ctx:sObjectName}</sObjectName> <externalIDField>{$ctx:externalIDField}</externalIDField> <Id>{$ctx:Id}</Id> <fieldAndValue>{$ctx:fieldAndValue}</fieldAndValue> </salesforcerest.upsert>
Properties
sObjectName:Â The object type of the record.
externalIDField
: The external Id Field of the subject.Id
: The value of the customExtIdField.fieldAndValue
: The json format property/payload used to create the record.
Sample request
Following is a sample REST request that can be handled by the upsert
 operation.
{ "accessToken":"00D280000017q6q!AQoAQMMZWoN9MQZcXLW475YYoIdJFUICTjbGh67jEfAeV7Q57Ac2Ov.0ZuM_2Zx6SnrOmwpml8Qf.XclstTQiXtCYSGRBcEv", "apiUrl":"https://ap2.salesforce.com", "clientId": "3MVG9ZL0ppGP5UrBrnsanGUZRgHqc8gTV4t_6tfuef8Zz4LhFPipmlooU6GBszpplbTzVXXWjqkGHubhRip1s", "refreshToken": "5Aep861TSESvWeug_ztpnAk6BGQxRdovMLhHso81iyYKO6hTm68KfebpK7UYtEzF0ku8JCz7CNto8b3YMRmZrhy", "clientSecret": "9104967092887676680", "hostName": "https://login.salesforce.com", "apiVersion": "v32.0", "sObjectName":"Account", "registryPath": "connectors/Salesforcerest", "intervalTime" : "2400000", "externalIDField":"sample__c", "Id":"15222", "fieldAndValue": { "Name":"hhhhhhhhhhhhhhaaaaaa" } }
Related Salesforce REST documentation
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_upsert.htm
Sample configuration
Following is a sample proxy service that illustrates how to connect to Salesforce with the init
operation and use the create
operation. The sample request for this proxy can be found in the create
sample request.
<proxy xmlns="http://ws.apache.org/ns/synapse" name="create" statistics="disable" trace="disable" transports="https http"> <target> <inSequence> <property name="accessToken" expression="json-eval($.accessToken)"/> <property name="apiUrl" expression="json-eval($.apiUrl)"/> <property name="fieldAndValue" expression="json-eval($.fieldAndValue)"/> <property name="sObjectName" expression="json-eval($.sObjectName)"/> <property name="clientId" expression="json-eval($.clientId)"/> <property name="refreshToken" expression="json-eval($.refreshToken)"/> <property name="clientSecret" expression="json-eval($.clientSecret)"/> <property name="hostName" expression="json-eval($.hostName)"/> <property name="apiVersion" expression="json-eval($.apiVersion)"/> <property name="registryPath" expression="json-eval($.registryPath)"/> <property name="intervalTime" expression="json-eval($.intervalTime)"/> <salesforcerest.init> <accessToken>{$ctx:accessToken}</accessToken> <apiUrl>{$ctx:apiUrl}</apiUrl> <apiVersion>{$ctx:apiVersion}</apiVersion> <hostName>{$ctx:hostName}</hostName> <clientSecret>{$ctx:clientSecret}</clientSecret> <clientId>{$ctx:clientId}</clientId> <refreshToken>{$ctx:refreshToken}</refreshToken> <registryPath>{$ctx:registryPath}</registryPath> <intervalTime>{$ctx:intervalTime}</intervalTime> </salesforcerest.init> <log category="INFO" level="full" separator=","/> <salesforcerest.create> <fieldAndValue>{$ctx:fieldAndValue}</fieldAndValue> <sObjectName>{$ctx:sObjectName}</sObjectName> </salesforcerest.create> <send/> </inSequence> </target> <description/> </proxy>