Data Sync Settings
- 1 Max Sync Waves
- 2 Enable Full History Wave
- 3 Activity Max Sync Waves
- 4 Object History In Months
- 5 Objects that are subject to a stale record cleanup (due to changes in record accessibility/permissions)
- 6 Frequency of stale record cleanup (due to changes in record accessibility/permissions)
- 7 Frequency of stale record cleanup (due to changes in record accessibility/permissions)
- 8 Force the stale record cleanup stage to run on the user's next sync
- 9 Enable Reachability on Subsequent Passes
- 10 Object Filter Limit
- 11 Auto Sync Setting
- 12 Allow/Deny Sync through 3G/4G
- 13 Force a Layout Sync
- 14 Auto Sync Time Interval
- 15 Sync Data Filter using a "Where" Clause
- 16 Allow Base 64 Download
- 17 Allow Sync and display of Rich Text Field Images
- 18 Sync Objects - Last Modified Date Field Override
- 19 Pulsar Sync Object List
- 20 Pulsar Sync Objects - Relationship Directives
- 21 Sync In Progress Banner
- 22 Enable Field Service Sync Setting
- 23 Forced Work Offline Mode (with Sync Enabled) Setting
- 24 Disable syncing listviews for certain object types
- 25 Remind users to sync periodically
- 26 Enable Content Document Direct Sync
- 27 Enable Chronological Changes
- 28 Configure Conflict Resolve Policy (Global)
- 29 Configure Conflict Resolve Policy (Object/Field Specific)
- 30 Available with version 13.0+
- 31 Configure Duplicates Policy
- 32 Enable Composite API
- 33 Enable Composite Graph API
- 34 Maximum Updates Per Object
- 35 Connect Timeout Seconds
- 36 Prevent Duplicate Create and Update Transmissions
- 37 Composite API Setting Usage
- 38 Bypass Failed Changes
|
|
---|---|
Name | Max Sync Waves |
Key | pulsar.sync.maxWaves |
Value | A Positive Number |
Default Value (if any) | 24 |
Compatibility | iOS Windows Android |
Description | A sync wave is generally equivalent to one month of history, and with this numeric setting you may specify how many months into the past (in terms of active records) that the algorithm should look back and fetch them. Pulsar determines active records by using the LastModifiedDate, SystemModStamp, or another datetime field (if overridden with the pulsar.sync.objects.lastModifiedDateField Pulsar Setting). The first wave is calculated from the current timestamp back to the first day of the same month. This means that the first wave is often less than a full month’s worth of data. This is done to break up the remaining waves in simple month segments. For example, specifying 4 waves and performing an initial sync on December 5 will create one wave from December 1 to December 5, a second wave encompassing all of November, and a third wave encompassing all of October. The fourth and final wave will attempt to retrieve as much data as possible from September 30 to as far back as January 1, 1980. Please see the pulsar.sync.enableFullHistoryWave setting for more information on customizing the behavior of the final wave. |
Notes/Comments | To guarantee that a user should initially sync a specific number of months of historical data, you will need to add one or two to your number depending on how you’ve configured the final wave. For example, for a minimum of two years worth of data, you can specify 26 (with the full history wave enabled) or 25 (with the full history wave disabled). |
| |
---|---|
Name | Enable Full History Wave |
Key | pulsar.sync.enableFullHistoryWave |
Value | TRUE / FALSE |
Default Value (if any) | TRUE |
Compatibility | iOS Windows Android |
Description | See pulsar.sync.maxWaves above for general wave information. By default, the final wave performed for an object will attempt to sync not just one month’s worth of data but all data since January 1, 1980 sorted by LastModifiedDate in descending order. This is done to optimistically download as much data as possible for the user. Since this date range is large, all or part of the request may not succeed. If it does not succeed, Pulsar does not consider this an error and continues to integrate the records it was able to retrieve. Specifying ‘FALSE’ for this setting, will make that final wave behave similarly to the other waves and only retrieve a month’s worth of data. In this configuration, the final wave is expected to succeed or Pulsar will report a sync error. |
Notes/Comments |
|
|
|
---|---|
Name | Activity Max Sync Waves |
Key | pulsar.sync.activityMaxWaves |
Value | A Positive Number |
Default Value (if any) | 6 |
Compatibility | iOS Windows Android |
Description | This is a numeric setting that dictates how many months into the past in terms of active Event, EventRelation, Task, and Note records should the algorithm look back and fetch them. |
Notes/Comments | (Fetch all records that were modified in the past 6 months). |
|
|
---|---|
Name | Object History In Months |
Key | pulsar.sync.objectHistoryInMonths |
Value | List of the pairs in the format Object API Name:Number of months (e.g: Lead:12, Account:24, Contact:24) |
Default Value (if any) | 24 |
Compatibility | iOS Windows Android |
Description | This setting lets you control each individual object history in terms of months. |
Notes/Comments | The value should be lower than the value specified for Max Sync Waves setting. |
|
|
---|---|
Name | Objects that are subject to a stale record cleanup (due to changes in record accessibility/permissions) |
Key | pulsar.sync.recordReachability.objects |
Value | A list of object api names separated by new line, or comma. |
Default Value (if any) |
|
Compatibility | iOS Windows Android |
Description | This setting allows you to specify which objects are eligible to scan and remove stale records from. Stale records are identified as existing records that exist on the client device but do not have a corresponding server record. |
Notes/Comments | If this setting is not specified or has an empty value, then all synced objects are eligible. |
|
|
---|---|
Name | Frequency of stale record cleanup (due to changes in record accessibility/permissions) |
Key | pulsar.sync.recordReachability.intervalDays |
Value | A number greater than zero indicates that the cleanup stage should run after that many days since the last time it successfully ran. Note, to disable set to 0 or a negative number. |
Default Value (if any) | 0.0 |
Compatibility | iOS Windows Android |
Description | This setting allows you to set the interval (as a number of days) when to perform a cleanup of potentially stale records on your device. The interval refers to the number of days since the last successful run of this cleanup stage. This setting accepts fractional days (e.g. to specify 36 hours, you would enter 1.5). There is another frequency setting below, however, if both are specified this one takes precedence. Note, stale records can occur in a local database if record permissions are altered after a user has performed a sync such that a user no longer has read access to a record. |
Notes/Comments |
|
|
|
---|---|
Name | Frequency of stale record cleanup (due to changes in record accessibility/permissions) |
Key | pulsar.sync.recordReachability.frequency |
Value | A number greater than zero indicates that the cleanup stage should run after that many successful syncs. Note, to disable set to 0 or a negative number. |
Default Value (if any) | 0 |
Compatibility | |
Description | This setting allows you to set the interval when to perform a cleanup of potentially stale records on your device. The interval refers to the number of successful syncs performed. For example, if you set it to 10, this will run every 10 successful syncs. Note, stale records can occur in a local database if record permissions are altered after a user has performed a sync such that a user no longer has read access to a record. |
Notes/Comments |
|
|
|
---|---|
Name | Force the stale record cleanup stage to run on the user's next sync |
Key | pulsar.sync.recordReachability.runOnNextSync |
Value | TRUE / FALSE |
Default Value (if any) | FALSE |
Compatibility | |
Description | For a description of the stale record cleanup stage, see the above setting for "pulsar.sync.recordReachability.intervalDays". If this setting is set to TRUE, all users will run this cleanup stage during their next sync (only once). The cleanup stage will not trigger again for this user unless you've specified this stage to run periodically via one of the other 'recordReachability' settings. In order to reactivate this setting for a subsequent use, make sure the value is still set to TRUE, and re-save the record to update its last modified date. |
Notes/Comments |
|
|
|
---|---|
Name | Object Filter Limit |
Key | pulsar.sync.initialFilterLimit |
Value | ObjectAPIName:Number |
Default Value (if any) | Default:50000 Object_API_Name:Number |
Compatibility | |
Description | This is a setting that dictates how many records Pulsar should fetch for each table (e.g: Lead, Account, Contact etc.). By default, the app caps at 50,000 records for each of the objects it syncs and the admins can increase the limits if they see fit. |
Notes/Comments |
|
|
|
---|---|
Name | Auto Sync Setting |
Key | pulsar.sync.enableAutoSync |
Value | TRUE / FALSE |
Default Value (if any) | TRUE |
Compatibility | |
Description | This particular setting dictates how the app would run the sync process. If the value is set to true, the app will automatically perform a bi-directional sync without requiring the user to initiate the sync. If this is set to be false, the user will have to manually choose to Sync in order reflect the changes on the device and the server appropriately. The manual sync can be initiated by tapping on the blue ‘Sync Now’ button on the Settings page as well as by clicking on the circle that appears on the bottom toolbar, which then will display a popup window with the blue ‘Sync Now’ button. |
Notes/Comments |
|
|
|
---|---|
Name | Allow/Deny Sync through 3G/4G |
Key | pulsar.sync.enable3GAutoSync |
Value | TRUE / FALSE |
Default Value (if any) | TRUE |
Compatibility | |
Description | This option would permit or not permit auto sync to run when the device is connected to the data network. Some companies might want to restrict the data usage and in those cases, the admins can use this setting to control the sync behavior. |
Notes/Comments |
|
|
|
---|---|
Name | Force a Layout Sync |
Key | pulsar.sync.enableOneTimeSessionRefresh |
Value | TRUE / FALSE |
Default Value (if any) | FALSE |
Compatibility | |
Description | In order to save API calls, the catch-up sync does not sync the layout changes every time. Layout sync only runs if the user clicked the 'Refresh Settings' button from the Settings page. Or, if you would like to force a layout sync, enable this setting after making layout changes to the org. When Pulsar next performs a sync on users devices, this will including syncing the layout changes. This forced metadata sync only happens once for each user after this setting is created/updated. |
Notes/Comments |
|
|
|
---|---|
Name | Auto Sync Time Interval |
Key | pulsar.sync.autoSyncIntervalMinutes |
Value | Number of minutes |
Default Value (if any) | 120 |
Compatibility | |
Description | Some customers asked us to allow a sync interval time as opposed to running the sync every time the app comes to foreground. For example with the below setting, the sync algorithm will check to see if there was a successful sync in the last X minutes and if there was one, it will not initiate the sync process. If X minutes indeed have passed since the last successful sync, it will initiate sync. |
Notes/Comments |
|
|
|
---|---|
Name | Sync Data Filter using a "Where" Clause |
Key | pulsar.<sobject type>.syncFilter |
Value | A SOQL format where clause (without the 'Where' keyword). |
Default Value (if any) |
|
Compatibility | |
Description | This is a per-object sync filter to further control which records get synced. Note, it is technically possible to create/edit a record that would not get subsequently picked up due to the object's sync filter. We would pick up the server delete, but not any server update. |
Notes/Comments | Since the UserInfo SOQL syntax for obtaining the current user's id is not available outside of APEX, you can instead use this Pulsar defined constant: @@CurrentUserId Example: K: pulsar.Account.syncFilter V: Account.Name = 'Apple' |
|
|
---|---|
Name | Allow Base 64 Download |
Key |
|
Value | Comma or New Line separate list of object API names (e.g: |
Default Value (if any) |
|
Compatibility | |
Description | Pulsar by default doesn't fetch the NOTE that without this setting specified, Pulsar will still download the data on an individual basis when attempting to view attachments (while online). |
Notes/Comments |
|
|
|
---|---|
Name | Sync Objects - Last Modified Date Field Override |
Key | pulsar.sync.objects.lastModifiedDateField |
Value | A list of objects separated by newlines where each line has the object api name and the name of the DateTime field to use instead of LastModifiedDate in this format: <object API name>:<field API name> |
Default Value (if any) |
|
Compatibility | |
Description | By default, the LastModifiedDate field is selected as the DateTime field that is used to determine when a record has been modified. This is a built-in Salesforce field that is updated automatically for your organization, and is used by Pulsar to download new and updated records. Although not recommended, you may override this field per object with your custom DateTime field if necessary. One possible reason you may want to do this is because your organization runs batch jobs that frequently update many records and result in the LastModifiedDate field getting updated. In this scenario, you may decide that you don't want all the records updated in this fashion to be considered 'modified' and consequently re-downloaded by Pulsar in the next sync. Perhaps you only want to refresh only those records where a subset of fields are updated. One way you might do this is by creating a workflow rule that updates a custom DateTime field when specific fields are updated. If you implement this setting, please keep in mind that you are responsible for maintaining when and how your custom DateTime field gets updated. |
Notes/Comments | Account:My_Self_Managed_LastModifiedDate__c
|
| |
---|---|
Name | Pulsar Sync Objects - Relationship Directives |
Key | pulsar.sync.relationship.directives |
Value | Look at the Notes section for a sample setting |
Default Value (if any) | None |
Compatibility | |
Description | Specify this setting to indicate that you would like Pulsar to sync your data using object relationships. You define relationship 'directives' where each directive tells Pulsar what object to sync and how to sync it. Each directive is defined as having a depth number starting at 0 and increments by 1. This depth represents both the order that the directive will be synced (0 is first) but also the dependency involved. For example directives defined at depth 2 depend on the objects synced at depth 1 which in turn depend on the objects synced at depth 0. Depth 0 has no dependencies. Additionally, directives at depths greater than 0 are required to define the dependency from the prior depth (object and field name). There are two forms for specifying directives (see below) for depth 0 objects and for other depths. Delimiters used in parsing this setting: 1st level delimiter | (pipe) separates distinct query directives Format for starting directives (depth 0): 0 ; <object type that we're syncing> ; <optional SOQL where clause> ; <optional sync window usage> By default the directive will use sync windows as this is the typical use case. Using sync windows means that when Pulsar queries for these records, results will be limited to only those records updated since your last sync. If you would not like to apply the sync window criteria, you may specify the text 'NoSyncWindow' as the 4th parameter. Pulsar uses sync windows to avoid repeatedly downloading records that have not changed on the server. Format for all other directives (defines the dependency at the previous depth): <depth greater than 0 > ; <target object type that we're syncing> : <optional target field name (default Id)> ; <source object type from previous depth> : <optional source field name (default Id)> ; <optional target SOQL where clause> Limits and caveats:
Content File Directives:
|
Notes/Comments | 0 ; ServiceAppointment ; |
|
|
---|---|
Name | Sync In Progress Banner |
Key | pulsar.sync.enableSyncInProgressBanner |
Value | TRUE / FALSE |
Default Value (if any) | TRUE |
Compatibility | |
Description | When enabled, a red banner appears over all screens when a sync is in progress advising the user not to leave the app until sync has completed. |
Notes/Comments | The banner is shown by default because sync can only run while the app is the foreground app.
|
|
|
---|---|
Name | Enable Field Service Sync Setting |
Key | pulsar.sync.enableFieldService |
Value | TRUE / FALSE |
Default Value (if any) | FALSE |
Compatibility | |
Description | When enabled, Pulsar will sync all Service Report Templates (ServiceReportLayout) available to the user. These templates are available to the Pulsar Platform developer through the Pulsar javascript API. |
Notes/Comments |
|
|
|
---|---|
Name | Disable syncing listviews for certain object types |
Key | pulsar.sync.listViews.disabledObjects |
Value | Comma or New Line separate list of object API names (e.g: |
Default Value (if any) |
|
Compatibility | |
Description | This setting allows Pulsar to skip syncing the listviews for the specified object types. When an organization has a large number of listviews for a particular object type (e.g., 1000+), this can significantly slow down sync. Without this setting, all available listviews for object types in the sync objects setting are synced. |
Notes/Comments |
|
|
|
---|---|
Name | Remind users to sync periodically |
Key | pulsar.sync.notification.remindMeInXMinutes |
Value | Number of minutes |
Default Value (if any) | 1440 |
Compatibility | |
Description | This setting allows Pulsar to use device notification feature to remind users to sync Pulsar to make sure their local data stays in sync with the server. |
Notes/Comments | You can specify 0 in the value field to turn off sync reminder notifications. |
|
|
---|---|
Name | Configure Duplicates Policy |
Key | pulsar.sync.create.allowDuplicates pulsar.sync.update.allowDuplicates |
Value | Comma or New Line separate list of object API names (e.g: |
Default Value (if any) |
|
Compatibility | |
Description | These will allow the duplicate to be created/saved even if alerts are enabled via duplicate rules on the Salesforce server, without displaying any alerts or interrupting sync on the Pulsar side. The setting is a blanket policy for each object in the list. If you have set up duplicate rules on Salesforce, and you have not set up this setting, Salesforce will return errors on save or sync when it encounters a duplicate via configured matching rules. |
Notes/Comments | Please Note: This setting will not merge any records. |
|
|
---|---|
Name | Enable Composite Graph API |
Key | pulsar.sync.enableCompositeGraphAPI |
Value | TRUE / FALSE |
Default Value (if any) | FALSE |
Compatibility | |
Description | When enabled, Pulsar uses the Composite Graph API to send as many local changes as possible in one request to the server. When this setting is disabled, Pulsar sends creates, updates, and deletes one change at a time per request. The benefits of composite graph include fewer API calls and faster times to send changes. However, not all changes are eligible for a graph request. Here are some of the known SFDC limitations per graph request:
In addition to the previous limitations, there are also a few Pulsar limitations at this time due to the special handling required around certain objects. For example, Pulsar will mark the following as graph ineligible:
When one of these limitations is found within your local changes, we send the graph request with the eligible changes found up to that point. After that, we send that ineligible change separately. The process is then repeated until all your changes have been sent. |
Notes/Comments | SFDC treats the changes in the graph itself as an all-or-none type of request. This means that if one change fails, then the entire set of changes in that graph are rolled back. Pulsar will subsequently prompt the user to correct the issue and, when corrected, a subsequent sync resends a newly calculated graph of changes. This process repeats until all changes are successfully sent. *Composite Graph guarantees order of execution in the group of pushed changes only for explicit dependencies. If there is no explicit dependency, then it's possible that SFDC might execute some those requests out of order to improve performance. If your org has created implicit dependencies via triggers, please use the Composite API instead. |
|
|
---|---|
Name | Connect Timeout Seconds |
Key | pulsar.sync.connectTimeoutSeconds |
Value | A positive number |
Default Value (if any) | 60 |
Compatibility | |
Description | The time in seconds Pulsar will wait for connection acknowledgement from Salesforce servers. This is not the total time to send back all query data, just the time it takes to connect/begin getting the data. Generally, on 3G or better networks that are not overloaded you can expect an initial response to a Salesforce query in under 10 seconds. Most organizations will not need to change this setting. |
Notes/Comments | For organizations that do exceptionally complex queries, the Salesforce servers themselves may take a long (> 1 minute) timeframe to respond. If you see the Pulsar data sync process repeatedly fail with timeout errors for multiple users across different networks (home/work/field), consider increasing this number. |
| |
---|---|
Name | Prevent Duplicate Create and Update Transmissions |
Key | pulsar.sync.duplicateCheckField |
Value | The field api name you want to use to have Pulsar check before attempting to re-send a create/update that may have already succeeded. The field identified here should be a text field supporting at least 50 characters and be marked as an 'External Id' to have Salesforce automatically index this field. |
Default Value (if any) |
|
Compatibility | |
Description | After Pulsar succeeds in sending an offline created or updated record to the server, Pulsar typically gets a success response. Occasionally, however, the success confirmation is not sent. This is typically due to a server timeout, but can also be caused by any interruption at this stage. When resuming a sync where that interruption happened, Pulsar does not know whether that last create/update was successful and assumes it was not to avoid loss of data. The consequence of this is that a create may be retransmitted causing a duplicate to be created or an update may be sent again potentially causing undesirable effects. To mitigate this, this setting automatically generates a unique transmission Id per unique record and saves this Id into the field specified by this setting (must also exist on the object) and sends the record to Salesforce. If there is an interruption at this point, the subsequent sync will first query Salesforce for that temporary Id. If a record is found, Pulsar will not re-send the create or update and will continue as if the record change was just successfully sent. |
Notes/Comments | To enable duplicate checking and handling, you must:
|
|
|
---|---|
Name | Bypass Failed Changes |
Key | pulsar.sync.enableBypassFailedChanges |
Value | TRUE / FALSE |
Default Value (if any) | FALSE |
Compatibility | |
Description | When pushing your local changes during a sync, Pulsar will interrupt the sync immediately if a change was not accepted by Salesforce to allow you to address that failure before continuing. Enabling this setting allows Pulsar to skip any failures to continue pushing local changes. Note that when a change is skipped, Pulsar will also skip any subsequent changes that are directly related to that skipped change. A change is directly related if it has a parent/lookup or child relationship to the skipped change. Note that when a related change is skipped, that also means any subsequent changes with a direct relationship to that change is now also skipped. For example, say you created an account, a contact off of that account, and a case off of that contact. Also, say that the account create failed. In this scenario, all three changes would be skipped because they form an unbroken chain of relationships to that failed Account create. After attempting to send all changes, the user will be left with only failed changes or changes related to that failure and be prompted to address the first error encountered. |
Notes/Comments | This setting does not apply if your organization is using the Composite API or Composite Graph API Pulsar settings. That is, the behavior will be the same as when this setting is false or not specified. |