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?

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.

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.

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.