Custom field added via UI extension not syncing to backend in mobile sales app

I’ve extended the mobile sales app UI in SAP CX 2105 to include a custom field for capturing competitor information during opportunity visits. The field displays correctly in the mobile app and users can enter data, but the values aren’t syncing back to the backend system.

The UI extension configuration:

<Field id="competitorInfo" label="Competitor Info">
  <property name="value" path="CompetitorNotes"/>
</Field>

When sales reps submit the opportunity form, all standard fields save correctly, but the custom field remains empty in the web UI. I’ve checked the mobile app’s sync logs and there are no error messages. The field appears to sync locally but doesn’t persist to the backend. Is there an additional configuration step needed to expose custom fields through the OData service used by the mobile app?

This is a common issue with mobile UI extensions that requires proper alignment across three layers. Here’s the complete solution:

1. UI Extension Mapping: Your UI extension XML correctly defines the field, but the path binding must match the exact OData property name. Verify the property name in your backend entity definition matches “CompetitorNotes” exactly (case-sensitive).

2. OData Service Exposure: The custom field must be exposed through the OData service that the mobile app consumes:

  • Navigate to Service Builder in SAP CX Admin Console
  • Locate the Opportunity entity service (typically OpportunityCollection)
  • Extend the entity to include the custom field:
<Property Name="CompetitorNotes" Type="Edm.String" MaxLength="1000"/>
  • Ensure the property is mapped to the corresponding backend database field
  • Publish the updated service definition

3. Sync Profile Configuration: The mobile app’s sync profile controls which fields are synchronized. This is the critical missing piece:

  • Go to Mobile Sales Configuration → Sync Profiles → Opportunity
  • Add your custom field to the sync definition:
    • Field Name: CompetitorNotes
    • Sync Direction: Bidirectional (allows read and write)
    • Conflict Resolution: Server wins (or your preferred strategy)
    • Offline Capability: Enabled
  • Save and publish the sync profile
  • Trigger a full sync on mobile devices to update the local schema

The sync profile is what enables bidirectional data flow between the mobile app’s offline storage and the backend. Without this configuration, the mobile app doesn’t know to include the custom field in its sync payload, even though the field exists in both the UI and backend entity.

After implementing all three components, test by:

  1. Performing a full sync on a mobile device to download the updated schema
  2. Creating/editing an opportunity with the custom field populated
  3. Syncing changes back to the server
  4. Verifying the field value appears in the web UI

If sync still fails, check the mobile app’s detailed sync logs (enable debug logging in Mobile Configuration) to identify if the field is being included in the sync request payload.


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.

UI extensions in the mobile app require corresponding backend entity extensions. The field might display in the UI, but if the OData service doesn’t recognize the property, it will be ignored during sync. Check if you’ve extended the Opportunity entity in the backend to include the CompetitorNotes field.

I’ve seen this before. The mobile app uses a specific sync profile that defines which fields are synchronized. Even if the field exists in the UI and backend, it won’t sync unless it’s explicitly included in the mobile sync profile configuration. Go to Mobile Sales Configuration → Sync Profiles and verify that your custom field is listed in the Opportunity entity sync definition.

Thanks for the pointers. I found the sync profile configuration but I’m not seeing my custom field listed there. How do I add it? Is this something I configure in the mobile app settings or in the backend OData service definition?

You need to do both. First, extend the backend OData service to expose the custom field, then add it to the mobile sync profile. The OData service extension is typically done through the Service Builder in SAP CX, where you can modify the Opportunity entity to include your custom field. After that, update the sync profile to include the field in the mobile synchronization process.

Don’t forget about the entity mapping. The UI extension uses a path binding, but if that path doesn’t map to an actual OData property, the sync will silently fail. The path=“CompetitorNotes” in your XML needs to correspond to an exposed property in the OData entity definition.