Let me provide a comprehensive solution addressing all aspects of BTP extension data synchronization.
Regarding BTP extension deployment: First, verify that your extension is not just deployed but also activated and published. In BTP cockpit, navigate to your SuccessFactors extension application and check the deployment status. The extension must show as ‘Active’ and ‘Published’ - simply being deployed isn’t sufficient for data synchronization. Additionally, confirm that the extension version matches what’s configured in your SuccessFactors instance. Version mismatches can cause silent data sync failures.
For data model mapping: The binding path ‘ONB2_CustomData.relation’ you’ve shown is correct syntactically, but you need to ensure the parent entity ONB2_CustomData is properly linked to the main onboarding entity. Open your extension definition in BTP and verify the entity relationship mapping. The custom entity should have a navigation property back to the standard Onboarding entity. Without this bidirectional relationship, the data remains isolated in the extension layer.
Regarding form field binding: Beyond the binding path, check the field metadata in the form configuration. BTP extension fields require an additional attribute ‘extensionField=“true”’ in the form XML. Here’s the corrected structure:
<field id="emergencyContactRelation"
binding="ONB2_CustomData.relation"
extensionField="true"
extensionNamespace="CustomOnboardingFields"/>
For extension validation in integration context: Your integration needs three specific configurations. First, add the extension namespace to your OData query using the $expand parameter:
$expand=CustomOnboardingFields
$select=*,CustomOnboardingFields/*
Second, update your OAuth client to include the extension-specific scope. In API Center, edit your OAuth client and add scope ‘ext.CustomOnboardingFields.read’. Third, modify your integration mapping to explicitly reference the extension fields using dot notation: ‘CustomOnboardingFields.emergencyContactRelation’.
Critically, there’s a configuration in Integration Center that must be enabled for BTP extensions to participate in outbound flows. Navigate to Integration Center > Manage Integration Settings and enable ‘Include BTP Extensions in Standard Flows’. This global setting is disabled by default for performance reasons but is required for extension data to be included in integration payloads.
Another common issue is timing - BTP extension data is sometimes persisted asynchronously after the main onboarding record. If your integration triggers immediately on onboarding completion, it might execute before extension data is available. Add a small delay (30-60 seconds) to your integration trigger or implement a polling mechanism that checks for extension data availability before attempting synchronization.
Finally, verify that your backend system’s data model can accommodate the extension fields. The receiving system needs corresponding fields mapped to accept the custom data. Check your integration error logs specifically for ‘unmapped field’ or ‘unknown property’ errors which indicate the backend isn’t configured to receive the extension data.
Test your changes by creating a new onboarding record with custom field data, then manually trigger the integration and review the complete payload in the integration logs to confirm extension fields are now included.