Mobile sales app sync fails when updating opportunity records

Our field sales team is experiencing frequent sync failures with the SAP CX mobile sales app (version 2111). When reps update opportunity records while offline and later sync, they get conflict errors and sometimes lose their updates entirely.

The offline data synchronization seems to work for simple field updates, but fails when multiple fields are changed or when the same opportunity was updated in the backend system. The conflict resolution mechanism doesn’t seem to be working as expected - instead of prompting users to resolve conflicts, it just fails silently.

{
  "error": "sync_conflict",
  "entity": "Opportunity",
  "id": "OPP-2024-1573",
  "message": "Delta sync failed: version mismatch"
}

I’ve looked at the OData delta sync configuration but can’t find where to adjust the retry logic. Has anyone dealt with mobile app sync conflicts in SAP CX?

Here’s a comprehensive solution addressing all the synchronization challenges:

1. Offline Data Synchronization Strategy: Implement a robust offline-first architecture with proper change tracking. Update your mobile app configuration to use timestamp-based versioning:

const syncConfig = {
  strategy: 'last-write-wins-with-merge',
  trackingMode: 'field-level',
  versioningType: 'timestamp'
};

This enables field-level merge instead of record-level overwrites, preserving more user changes.

2. Conflict Resolution Mechanisms: Configure intelligent conflict resolution in your OData service. For SAP CX 2111, update the mobile service configuration:

  • Set conflictResolution.policy to ‘manual-with-fallback’
  • Enable conflictResolution.notifyUser to true
  • Configure field-level merge rules for non-conflicting fields
  • Implement a conflict queue that presents unresolved conflicts to users on next sync

In your mobile app, implement a conflict resolution UI that shows both versions and lets users choose which to keep or merge manually.

3. OData Delta Sync Configuration: Optimize your OData delta sync settings:

  • Increase delta token expiration from default 24h to 72h
  • Enable change tracking at the database level for better performance
  • Configure the delta link generation to include all related entities
  • Set up proper indexing on LastModifiedDateTime fields

Update the service configuration:

<deltaTokenExpiration>72</deltaTokenExpiration>
<includeRelatedEntities>true</includeRelatedEntities>
<enableChangeTracking>true</enableChangeTracking>

4. Mobile App Retry Logic and Queuing: Enhance the retry mechanism with exponential backoff and persistent queuing:

const retryConfig = {
  maxAttempts: 5,
  initialDelay: 1000,
  maxDelay: 30000,
  backoffMultiplier: 2,
  queueRetentionHours: 168
};

Implement a sync queue manager that:

  • Persists failed sync operations to local storage
  • Retries with exponential backoff (1s, 2s, 4s, 8s, 16s)
  • Groups related changes to reduce sync calls
  • Prioritizes critical updates (e.g., opportunity stage changes)
  • Provides sync status visibility to users

Additional Implementation Steps:

  1. Enable detailed sync logging in the mobile app for troubleshooting
  2. Implement a background sync service that attempts sync when network is available
  3. Add pre-sync validation to catch potential conflicts before submission
  4. Create a sync health monitoring dashboard for admins
  5. Set up alerts for sync failure rates exceeding 5%

Testing Recommendations:

  • Test with simulated offline scenarios and multiple concurrent updates
  • Verify conflict resolution UI displays correctly on different devices
  • Validate that queued changes persist across app restarts
  • Ensure delta sync properly handles large datasets

After implementing these changes, monitor your sync success rate - you should see failures drop below 2% and user-reported data loss incidents eliminated.


This draft is based on general SAP Customer Experience (SAP CX) knowledge. It has not been verified against your specific version and environment. Practitioners: verify the steps and share your experience below.

This is a known challenge with offline-first mobile apps. The key is implementing a proper conflict resolution strategy. Check your mobile app configuration for the sync conflict handling policy - it should be set to either ‘server-wins’, ‘client-wins’, or ‘manual-resolution’. If it’s currently set to server-wins, that would explain why client updates are being lost without notification.

Have you checked the OData service configuration for delta token handling? The delta sync relies on change tracking tokens to identify what’s changed since last sync. If the token expires or gets invalidated, the sync will fail. Also verify that your mobile app is properly implementing the retry logic with exponential backoff when sync failures occur.

I found that our mobile app retry logic is timing out too quickly - it’s only attempting one retry before giving up. The queuing mechanism for failed syncs also seems to be dropping items after 24 hours. Is there a way to configure these timeout and retention settings?

Yes, those settings are configurable in the mobile app configuration file. Look for sync.retry.maxAttempts and sync.queue.retentionHours parameters. I’d recommend setting maxAttempts to at least 5 with exponential backoff, and increasing retention to 72 hours to give reps time to get back online. Also make sure you’re using the latest mobile SDK version which has improved conflict handling.

We had similar issues and found that educating users about the sync process helped reduce conflicts. We now have reps manually trigger sync before making critical updates, and we implemented a visual indicator showing when data is stale. This doesn’t solve the technical issue but reduces the frequency of conflicts while you work on the configuration fixes.