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 Security Token. Then, click Reset My
Security Token. 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 configuration XML 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
public Object 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'
]
]