4. Salesforce Connector
Salesforce connector allows Mule ESB application to
connect to Salesforce
It supports data sense which fetches meta data
information about of Salesforce once required
connection details are specified at the connector
It lists all objects and operations at design time using
data sense and makes development easy and rapid
5. Steps
Create a Salesforce developer account
Create a security token for Salesforce account
Create a mule application to perform CRUD
operations
6. How to create Salesforce
developer account
Sign up for a new account at http://developer.force.com/
7. How to generate a security
token
Sign into http://developer.force.com/, click your name in
the upper right corner, then click Setup > My Personal
Information > Reset SecurityToken.Then, click Reset My
SecurityToken. Salesforce sends your security token via
email to your registered email address
8. Create a mule application to
perform CRUD operations
Create a property file
Configure property file in your project
Add Salesforce connector and configure the
connector details
Configure a flow
Run your application
9. Create a property file with following details
and place it in mule_home/conf folder
#SF URL
sf_url=https://<your salesforce url>/services/Soap/u/26.0
#SF Username
sf_username=<Your salesforce account name>
#SF Password
sf_password=<Your salesforce account password>
#SF Security Token
sf_security_token=<Your salesforce security token>
10. Add the property file in
your flow
Click on global elements tab -> Click on create ->Type in Property
Placeholder in the filter box -> Select Property Placeholder and click
on Ok ->Type in “file:${mule_home}/conf/salesforce-
config.properties” in the location text box and click on Ok
You should see an XML tag added under your configurationXML as
below
<context:property-placeholder
location="file:${mule_home}/conf/salesforce-config.properties"/>
11. Add Salesforce connector in
your flow
Click on global elements tab -> Click on create -> Select
Salesforce and add property as shown below
12. You need to create 3 java
classes as show below
CreateContactRequest.java
public class CreateContactRequest implements Callable {
@Override
public Object onCall(MuleEventContext eventContext) throws Exception {
HashMap<String,Object> contactSObjectFields = new HashMap<String,Object>();
// sObject is defined as a map
contactSObjectFields.put("FirstName", “YourFirstName");
contactSObjectFields.put("LastName", "YourLastName");
contactSObjectFields.put("MobilePhone", "YourMobileNo");
contactSObjectFields.put("Email", “YourEmail");
// list of sobjects to be created
List<HashMap<String,Object>> objects = new ArrayList<HashMap<String,Object>>();
objects.add(contactSObjectFields);
// map that will be placed as payload
HashMap<String,Object> payload = new HashMap<String,Object>();
payload.put("type", "Contact");
payload.put("objects", objects);
return payload;
}
}
13. UpdateContactRequest.java
public class UpdateContactRequest implements Callable {
@Override
publicObject onCall(MuleEventContext eventContext) throws Exception {
HashMap<String,Object> contactSObjectFields = new HashMap<String,Object>();
MuleMessage muleMessage = eventContext.getMessage();
contactSObjectFields.put("FirstName", “YourModifiedFirstName");
contactSObjectFields.put("LastName", "YourModifiedLastName");
contactSObjectFields.put("MobilePhone", "YourModifiedMobileNo");
contactSObjectFields.put("Email", “YourModifiedEmail");
contactSObjectFields.put("Id", muleMessage.getProperty("sObjectId", PropertyScope.SESSION));
// map that will be placed as payload
HashMap<String,Object> payload = new HashMap<String,Object>();
payload.put("type", "Contact");
payload.put("object", contactSObjectFields);
return payload;
}
}
14. CreateContactResponseProcessor.java
public class CreateContactResponseProcessor implements Callable {
@SuppressWarnings("unchecked")
@Override
public Object onCall(MuleEventContext eventContext) throws Exception {
AcknowledgementType ack = new AcknowledgementType();
MuleMessage message = eventContext.getMessage();
System.out.println(message.toString());
// get the message payload
List<SaveResult> saveResults = (List<SaveResult>) message.getPayload();
Iterator<SaveResult> iter = saveResults.iterator();
SaveResult saveResult = iter.next();
ack.setMessageID(saveResult.getId());
if(saveResult.getSuccess())
ack.setStatus("Success");
else
ack.setStatus("Success");
System.out.println(ack);
return ack.getMessageID();
}
}
17. Now you can run the application and hit the http URL configured in
your application in browser
It should create a contact, read the values, update the contact, read
the value and finally delate the contact from Salesforce.
You can delete the last flow reference for delete contact if you like to
see the contact in Salesforce for your testing
Details of the contact creation to deletion can be observed in logs
18. Extract from the logs
INFO 2015-03-21 20:01:39,730 [[sfdc_connector].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: Salesforce
Request----> {type=Contact, objects=[{Email=xyz@abc.com, FirstName=Rupesh, MobilePhone=078000000, LastName=Sinha}]}
INFO 2015-03-21 20:01:41,605 [[sfdc_connector].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: SFDC
output: ------ [[SaveResult errors='{[0]}'
id='003L000000YhRS5IAN'
success='true'
]
]
Status: Success, Id: 003L000000YhRS5IAN
INFO 2015-03-21 20:01:42,069 [[sfdc_connector].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: Query
Output: []
INFO 2015-03-21 20:01:42,073 [[sfdc_connector].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: Update
Request----> {object={Email=xyz@abc.com, FirstName=Rupesh_Changed, Id=003L000000YhRS5IAN, MobilePhone=078000000,
LastName=Sinha_Changed}, type=Contact}
INFO 2015-03-21 20:01:42,883 [[sfdc_connector].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: Update
Output----> [SaveResult errors='{[0]}'
id='003L000000YhRS5IAN'
success='true'
]
INFO 2015-03-21 20:01:43,254 [[sfdc_connector].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: Query
Output: []
INFO 2015-03-21 20:01:44,053 [[sfdc_connector].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: Delete
Output-----> [[DeleteResult errors='{[0]}'
id='003L000000YhRS5IAN'
success='true'
]
]