When working with a SAP RAP (OData V4) service, the Page Map in the Application Modeler (SAP Fiori Tools extension for VS Code) shows "No navigation targets available" even though the underlying navigation properties/compositions exist correctly in the metadata and the corresponding manifest.json routing/targets are otherwise valid.
The root cause is a parsing error while reading the service metadata:
Error while reading service metadata \webapp\localService\mainService\metadata.xml. Error was: Term 'CreateHidden' for annotation '@SAP__UI.CreateHidden' must have a default value
The metadata.xml — both the locally cached copy and the metadata retrieved live from the backend $metadata endpoint — contains an annotation like this:
Annotations Target="SAP__self.Container/ItemBP">
...
Annotation Term="SAP__UI.CreateHidden"/>
Annotation Term="SAP__UI.DeleteHidden"/>
/Annotations>
This value-less form is the expected, standard RAP output when Insertable/Deletable restrictions are set to false on an entity set (via NavigationRestrictions/InsertRestrictions/DeleteRestrictions) — RAP automatically derives CreateHidden/DeleteHidden without an explicit boolean value (implying true). This is not something that can be avoided on the CDS/metadata-extension side; it is generated automatically by the RAP framework based on the behavior definition.
Since the UI.CreateHidden vocabulary term (as currently interpreted by the metadata parser used by the Fiori Tools / Application Modeler) does not have a DefaultValue defined, the value-less annotation is rejected as invalid, which aborts metadata parsing entirely — with the side effect that the Page Map can no longer determine any navigation targets, even though they are present and correct.
Steps to Reproduce
Create a RAP business object (managed, draft-enabled) with a composition where the child entity set has Insertable: false at entity-set/navigation-restriction level (e.g. creation only possible via a custom action / EML, not via standard create-by-association).
Expose the service via OData V4 (Service Binding, UI type).
Open the app in the SAP Fiori Tools Application Modeler (VS Code) and open the Page Map for a Fiori Elements OData V4 application consuming this service.
Observe: Page Map shows "No navigation targets available" for the relevant entity, and the "+" button does not offer the navigation property either.
Check View → Output → "SAP Fiori Tools" (or Application Modeler) channel: the error Term 'CreateHidden' for annotation '@SAP__UI.CreateHidden' must have a default value is logged.
Confirm the same value-less / is present in the metadata retrieved directly from the backend $metadata endpoint (i.e. not a stale/corrupted local cache issue).
Expected Behavior
The metadata parser should tolerate value-less UI.CreateHidden / UI.DeleteHidden annotations (treating the absence of an explicit value as true, consistent with how RAP generates them and how other OData V4 consumers/clients handle this pattern), and the Page Map should correctly display available navigation targets regardless of this annotation.
Actual Behavior
Metadata parsing aborts with the error above, and the Page Map shows no navigation targets at all for the affected service, even though the navigation properties/compositions are correctly defined and exposed.
Workaround Found
Manually patching the local metadata.xml to add an explicit boolean value:
Annotation Term="SAP__UI.CreateHidden" Bool="true"/>
Annotation Term="SAP__UI.DeleteHidden" Bool="true"/>
...resolves the issue and the Page Map correctly shows navigation targets. This confirms the value-less annotation is the trigger, but is not a viable permanent fix since the file is regenerated/re-fetched from the backend.
Environment
SAP Fiori Tools Extension version: 1.28
Backend: SAP RAP / OData V4 (embedded, on-premise ABAP system — not via classic Gateway Hub / IWFND)
Service type: OData V4 UI Service Binding, draft-enabled, managed RAP scenario
Additional Context
The affected entity set has NavigationRestrictions/InsertRestrictions with Insertable: false (create only allowed via a custom instance-bound action / EML on the parent), which is what triggers RAP to generate the value-less CreateHidden annotation. This is a common and supported RAP pattern, so the issue is likely to affect other projects using restricted create/delete on composition children.
When working with a SAP RAP (OData V4) service, the Page Map in the Application Modeler (SAP Fiori Tools extension for VS Code) shows "No navigation targets available" even though the underlying navigation properties/compositions exist correctly in the metadata and the corresponding manifest.json routing/targets are otherwise valid.
The root cause is a parsing error while reading the service metadata:
The metadata.xml — both the locally cached copy and the metadata retrieved live from the backend $metadata endpoint — contains an annotation like this:
Annotations Target="SAP__self.Container/ItemBP">
...
Annotation Term="SAP__UI.CreateHidden"/>
Annotation Term="SAP__UI.DeleteHidden"/>
/Annotations>
This value-less form is the expected, standard RAP output when Insertable/Deletable restrictions are set to false on an entity set (via NavigationRestrictions/InsertRestrictions/DeleteRestrictions) — RAP automatically derives CreateHidden/DeleteHidden without an explicit boolean value (implying true). This is not something that can be avoided on the CDS/metadata-extension side; it is generated automatically by the RAP framework based on the behavior definition.
Since the UI.CreateHidden vocabulary term (as currently interpreted by the metadata parser used by the Fiori Tools / Application Modeler) does not have a DefaultValue defined, the value-less annotation is rejected as invalid, which aborts metadata parsing entirely — with the side effect that the Page Map can no longer determine any navigation targets, even though they are present and correct.
Steps to Reproduce
Create a RAP business object (managed, draft-enabled) with a composition where the child entity set has Insertable: false at entity-set/navigation-restriction level (e.g. creation only possible via a custom action / EML, not via standard create-by-association).
Expose the service via OData V4 (Service Binding, UI type).
Open the app in the SAP Fiori Tools Application Modeler (VS Code) and open the Page Map for a Fiori Elements OData V4 application consuming this service.
Observe: Page Map shows "No navigation targets available" for the relevant entity, and the "+" button does not offer the navigation property either.
Check View → Output → "SAP Fiori Tools" (or Application Modeler) channel: the error Term 'CreateHidden' for annotation '@SAP__UI.CreateHidden' must have a default value is logged.
Confirm the same value-less / is present in the metadata retrieved directly from the backend $metadata endpoint (i.e. not a stale/corrupted local cache issue).
Expected Behavior
The metadata parser should tolerate value-less UI.CreateHidden / UI.DeleteHidden annotations (treating the absence of an explicit value as true, consistent with how RAP generates them and how other OData V4 consumers/clients handle this pattern), and the Page Map should correctly display available navigation targets regardless of this annotation.
Actual Behavior
Metadata parsing aborts with the error above, and the Page Map shows no navigation targets at all for the affected service, even though the navigation properties/compositions are correctly defined and exposed.
Workaround Found
Manually patching the local metadata.xml to add an explicit boolean value:
Annotation Term="SAP__UI.CreateHidden" Bool="true"/>
Annotation Term="SAP__UI.DeleteHidden" Bool="true"/>
...resolves the issue and the Page Map correctly shows navigation targets. This confirms the value-less annotation is the trigger, but is not a viable permanent fix since the file is regenerated/re-fetched from the backend.
Environment
SAP Fiori Tools Extension version: 1.28
Backend: SAP RAP / OData V4 (embedded, on-premise ABAP system — not via classic Gateway Hub / IWFND)
Service type: OData V4 UI Service Binding, draft-enabled, managed RAP scenario
Additional Context
The affected entity set has NavigationRestrictions/InsertRestrictions with Insertable: false (create only allowed via a custom instance-bound action / EML on the parent), which is what triggers RAP to generate the value-less CreateHidden annotation. This is a common and supported RAP pattern, so the issue is likely to affect other projects using restricted create/delete on composition children.