Introduction
Qobra connects to Salesforce through a connected app, which needs to be installed via an Oauth check. The integration is used to synchronize all objects, their fields and their content. The integration supports standard or custom objects, and standard or custom fields in those objects. This integration is readonly and does not write anything in your Salesforce.Access
Oauth authentication & scopes
To connect your Salesforce to Qobra, you’ll need to go through an Oauth flow, granting us access to two Salesforce scopes:Perform requests at any time
(refresh_token, offline_access)Manage user data via APIs
(api)
Access restriction
The Qobra integrations has access to all the data the user who connected has access to. A common practice for our customers is to create anAPI only
user in Salesforce to give Qobra’s access through this user (unlimited,
enterprise, and performance Salesforce edition orgs get five free API only
licenses). You can restrict this user’s access to Salesforce data, and then
give us access through the Oauth flow to restrict Qobra’s access to a part
of your Salesforce.
Follow this tutorial
to implement Salesforce’s best security practices.
Synchronization
Refresh Frequency
Qobra keeps your Salesforce data up to date through regular synchronizations:- Daily Full Refresh: Every night, we perform a complete sync of all your Salesforce data
- Bi-hourly Updates: Every 2 hours throughout the day, we sync any recent changes
- On-Demand Updates: Need the latest data right away? Just click the refresh button in your integration settings
Incremental synchronization
This integration is an incremental synchronization. This means that all imports are based on each record last modified date, and that we only refresh what has been modified in the system since the previous import. When an import is launched, we thus refresh all records that have been modified since the start of the last successful import. Once we have refresh range, synchronization work is split and parallelized in smaller tasks for performance enhancement. The synchronization tasks are split according to the last modified date. It is important to note that Qobra admin can manually trigger complete synchronization in the application. For Salesforce, we base this synchronization on theLastModifiedDate
field, present in each table.
Supported types
You’ll find below the fields types supported by the Qobra integration, and their mapping to Qobra types.Salesforce type | Qobra type |
---|---|
int | number |
double | number |
percent | percentage |
currency | amount |
picklist | picklist |
multipicklist | multipicklist |
textarea | string |
string | string |
combobox | string |
phone | string |
boolean | bool |
date | date |
datetime | date |
reference | object |
reference > user | user |
CurrencyIsoCode
field, present in each Salesforce object.
Custom querying
With this integration, you can apply a custom query to your table synchronization, to avoid synchronizing too much information, consequently making synchronization quicker. Custom queries are based on SOQL where conditions. For instance, you could add as a custom queryStageName = 'Closed Won’
to filter your
Opportunity object.
Polymorphic References
Salesforce uses polymorphic references (also known as “polymorphic lookup fields” or “WhoId/WhatId fields”) in certain objects like Events and Tasks. These special reference fields can point to multiple types of entities. For example:- The
WhoId
field can reference Leads, Contacts, or Users - The
WhatId
field can reference Accounts, Opportunities, Cases, and other custom objects
Workarounds
To handle this limitation, here are some suggested workarounds:-
Create Separate Fields: Instead of using the polymorphic fields, you can create separate lookup fields for each type of entity you need to reference. For example:
Account__c
Opportunity__c
Lead__c
Then use Process Builder or Flow to automatically populate these fields based on the WhatId/WhoId values.
- Use Record Types: Create different record types for your Events/Tasks based on the type of entity they’re related to. This allows you to have different page layouts and field sets for each type of relationship.
- Custom Junction Objects: For complex relationships, consider creating custom junction objects that explicitly define the relationships between your records.