Salesforce
Introduction
ConnectALL supports the syncing of records from Salesforce to other applications. ConnectALL uses Salesforce SOAP API to perform the sync operation. So, the organization is expected to have the "API Enabled" flag set. Salesforce Knowledge Article on API Enabled flag.
The current release supports:
- Sync records periodically (Poll)
- Sync records manually (Push) - Configuration Steps
- Sync Standard and Custom objects in salesforce
- Sync linking of records of the same type
- Sync Comments on Cases
- Sync Attachments
Salesforce Applications Tested to Work with ConnectALL
- Service TimeCards from Time Tracking
Use case: Sync the time worked entries on a case that is synced as a bug in Jira. - Incident, Problem, Change and Release Management objects from BMC RemedyForce
Use case: Sync data from a custom object in RemedyForce to ServiceNow, Remedy or any other application for the engineering team to work with.
Configuring Salesforce
To configure the Salesforce application, you will need the below credentials.
- Username: username to login
- Password: password of the above user
- SecretKey: A private key, Salesforce uses this to authenticate users from other applications. (Where to find this secret key?)
- OrganizationId: A unique identifier for every Salesforce organization. (Where to find organization id?)
- URL: Login URL typically, will be the custom domain URL configured for the organization, if one does not exist, then https://login.salesforce.com can also be used.
Entity Mapping
ConnectALL displays only those entities of the organization that are "Creatable", "Updateable", "Retrievable" and "Queriable" from the API.
Field Mapping
ConnectALL will fetch all the fields of the Entity selected along with the Possible Value for the picklists and reference fields. (For reference fields, all the records of the referenced entity will be queried for value mapping)
The Field Mapping screen will clearly show whether the field is "Createable", "Updateable" or "Mandatory." Only the fields that have "Createable" or "Updateable" set can be used for sync in both directions; otherwise, you will need to configure a one-way sync. Ex: Case Number, Created Date etc.
Custom Field Configuration
ConnectALL provides a rendering approach to sync the data of a child relationship object in Salesforce to destination systems like Jira.
Example Use case: When syncing a case object to Jira, the Jira user may want to see the Account and Contact information related to the case. If we map the account and contact fields in the field configuration, we can only get the name fields of these objects. The Custom Field configuration provides the ability to define the data that the Jira user should be able to view.
The _CUSTOM field in Salesforce causes a ConectALL URL to be synchronized to the other system. When users in the other system click this URL, ConnectALL will return an HTML page with whatever information from Salesforce is configured in the renderer. The _CUSTOM renderer it allows you to go as deep as you want. For example when synchronizing a Case record to Jira in the _CUSTOM renderer template you can read a value of Customer Address using Case.Contact.Account.Organization.Address.Zipcode / Case.Contact.Account.Organization.Address.Country / Case.Contact.Account.Organization.Address.State, etc.,
Configuring the Field Mapping
In the Field Configuration screen, map the "_CUSTOM" field in Salesforce to a URL/Text field in the destination application where you want to sync the URL for the renderer.
When mapping _CUSTOM =>Text field, you will get a ConnectALL URL in the below format:
http://{connectall-address}/sforce/renderer/fetch/{appinst-id}/{record-type}/{record-id} In the above URL:
{connectall-address} – The ConnectALL server address Ex: localhost:8098 (The port is configurable using jira.renderer property in the ConnectAll.properties file). {appinst-id} – The Salesforce application instance id of the app-link(Ex: SalesforceJira-123243253). {record-type} – The entity type of the Salesforce object, that is configured in the app-link(Ex: Case). {record-id} – The id of the Salesforce record to get more details from(Ex: 0xG123121231ach).
When users click this link, ConnectALL will render an HTML that is configured in a Velocity model (VM) template on the server—with additional information on the Salesforce object synchronized by ConnectALL.
Configuring Which Fields to be Rendered
Open sforce-custom-renderer.vm
under "$MULE_HOME/apps/ConnectAll-xxxxx/classes/renderer/template" and change it to what is defined below.
<!-- Add the fields to be rendered as shown below -->
## Add the fields to be rendered in the below array
##set( $utility.fields = ["Id"] )
#set( $utility.fields = ["Account.Name","Account.CreatedBy.Name","Account.CreatedBy.UserRole.Name","Contact.Name","Contact.Email"] )
The # marker in this templating language (Apache Velocity) means that the following text is Java based code to be evaluated at runtime. Comment lines begin with ##.
Renderer Example
Value Mapping
For picklists: The possible values will be fetched from the field configuration.
For reference fields: The possible values will be queried for the referenced entities.
Comments & Attachments Sync
Salesforce saves comments and attachments in separate entities, so any modification of these will not result in the parent record being updated. Since ConnectALL polls based on the last modification time stamp in the Poll sync process, we will need to create APEX triggers to update the parent records when there is a change in the corresponding comments or attachments.
The steps for creation and configuration of these APEX triggers to sync comments and attachments can be found here.
ConnectALL lets users synchronize Related Files of Salesforce objects as attachments to and from destination systems. In order to synchronize Salesforce "Related Files" as attachments, you will need to map the below field.
The attachment delete feature is currently not supported by ConnectALL
Case Worklog Synchronization
For the Salesforce worklog configuration, please refer here.
Remote Linking
ConnectALL also supports remote linking of records between applications when configured.
Direct link to Jira in this case:
Direct link to Salesforce Case from Jira
Customizing Salesforce Connector
The Salesforce connector exposes a bunch of properties to customize the execution. All the below properties should be added in "$MULE_HOME/conf/ConnectAll.properties" and a ConnectALL core service restart is needed for the changes to be reflected on some of these properties.
Advanced Properties
# Edit this property if you want to sync sandbox data
com.go2group.connectall.salesforce.sandbox.url=http://sandbox-service-url
# When set to sync, will fetch the entity data in a single thread
com.go2group.connectall.salesforce.entity.fetch=[sync|async]
# When disabled, result of DescribeSObject call will not be cached, and will result in multiple calls for same data
com.go2group.connectall.salesforce.entity.cache=[enabled|disabled]
# Will save the cached result of DescribeSObject Call for the specified no. of seconds
com.go2group.connectall.salesforce.entitycache.expiration=[timeInSeconds]
# Will save the reference field values of the entity in cache if enabled.
com.go2group.connectall.salesforce.entity.value.cache=[enabled|disabled]
Time Difference Configuration
To know how to calculate the time difference, and configure it in the ConnectALL UI, read the topic Time Difference Configuration.