{"ref":"capability:fiori-annotations","page":"/capabilities/fiori-annotations","json":"/capabilities/fiori-annotations.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"fiori-annotations","name":"Fiori annotations","domain":"ui-and-frontend-bridge","ecosystems":["cap","ui5","abap"],"universal":false,"description":"Describing a service so a Fiori client can render it without hand-written UI code — titles, value helps, hierarchies and visibility expressed as model annotations rather than screen logic.","short":"Describing a service so a Fiori client renders it without UI code","core_coverage":{"state":"core-and-community","what_core_does":"The compiler translates annotations from the OASIS and SAP OData vocabularies, @UI and @Common among them, into the EDMX a Fiori elements client reads, with names and positions exactly as the vocabularies specify them, so every term in those vocabularies is available without a mapping written per term. CDS shortcuts sit on top: @title and @description map to @Common.Label and @Core.Description, @cds.odata.valuelist gives every managed association that targets the annotated entity a value list and is already set on the reuse types of @sap/cds/common, and @hierarchy expands to the annotate and extend statements a tree view would otherwise need by hand. A vocabulary SAP does not ship enters the translation through the cds.cdsc.odataVocabularies configuration, which names its alias, namespace and URI. During development the Fiori preview link on the index page serves a list page from the annotations before any app exists.","where_it_stops":"It stops at translating what the model states. Labels, read-only and mandatory fields, value lists on managed associations and recursive hierarchies have a CDS shortcut; every other term, UI.LineItem and UI.SelectionFields among them, is written out in the vocabulary's own structure. A field that is not a managed association gets no value list from the shortcut. A tree view still needs the hierarchy qualifier and the TreeTable setting in the UI5 app's manifest.json, which is the app's file rather than the model's. Hiding a control by role takes a singleton and an `on` handler of the developer's own. For a vocabulary outside the standard set the compiler has no access to the vocabulary's content, so the values are translated generically and nothing checks that a term is applied where it belongs. The preview is disabled in production.","community_adds":"Three cds-plugins write Fiori vocabulary terms a model would otherwise carry by hand. [@mpah/enum-value-help](artifact:mpah-enum-value-help) covers the case the value-list shortcut leaves alone, a field typed by a CDS enum, by adding @Common.ValueList against a generated view of the enum's own values. [cap-js-geoloc-plugin](artifact:sebsst-cap-js-geoloc-plugin) generates the actions, and under autoCalculate the side effects, that its own address and route annotations imply. [urp-vocab](artifact:kamlendra-urp-vocab) publishes a vocabulary of its author's own rather than SAP's, so what reads it has to be a matching renderer.","assessed_at":"2026-10-15","relationship":"unassessed","sources":[{"url":"https://cap.cloud.sap/docs/guides/uis/fiori","title":"Serving SAP Fiori UIs","checked":"2026-10-15","quote":"SAP Fiori elements apps are generic front ends that construct and render pages and controls based on annotated metadata documents."},{"url":"https://cap.cloud.sap/docs/guides/uis/fiori","title":"Serving SAP Fiori UIs — Value Helps","checked":"2026-10-15","quote":"Simply add the @cds.odata.valuelist annotation to an entity, and all managed associations targeting this entity will automatically receive Value Lists in SAP Fiori clients."},{"url":"https://cap.cloud.sap/docs/guides/uis/fiori","title":"Serving SAP Fiori UIs — Value Helps, reuse types","checked":"2026-10-15","quote":"The reuse types in @sap/cds/common already have this added to base types and entities, so all uses automatically benefit from this."},{"url":"https://cap.cloud.sap/docs/guides/uis/fiori","title":"Serving SAP Fiori UIs — Tree Views","checked":"2026-10-15","quote":"The @hierarchy annotation is a shortcut for the following Fiori-level annotate and extend statements, which you would otherwise have to write manually."},{"url":"https://cap.cloud.sap/docs/guides/uis/fiori","title":"Serving SAP Fiori UIs — Fiori Preview","checked":"2026-10-15","quote":"The preview is meant for quick tests and iterations during development, but not for production use, and hence automatically disabled in production."},{"url":"https://cap.cloud.sap/docs/guides/protocols/odata#annotations","title":"Serving OData APIs — OData Annotations","checked":"2026-10-15","quote":"we apply a generic, isomorphic approach where names and positions of annotations are exactly as specified in the OData Vocabularies"},{"url":"https://cap.cloud.sap/docs/guides/protocols/odata#annotations","title":"Serving OData APIs — OData Annotations, advantages","checked":"2026-10-15","quote":"No bottlenecks — we always support the full set of OData annotations"},{"url":"https://cap.cloud.sap/docs/guides/protocols/odata#additional-vocabularies","title":"Serving OData APIs — Additional Vocabularies","checked":"2026-10-15","quote":"With this configuration, all annotations prefixed with MyVocabulary are considered in the translation."},{"url":"https://cap.cloud.sap/docs/guides/protocols/odata#additional-vocabularies","title":"Serving OData APIs — Additional Vocabularies, generic translation","checked":"2026-10-15","quote":"Unlike for the standard vocabularies listed above, the compiler has no access to the content of the vocabulary, so the values are translated generically."},{"url":"https://github.com/mpah/enum-value-help","title":"mpah/enum-value-help — README","checked":"2026-10-15","quote":"A CAP (Cloud Application Programming) plugin that automatically generates value help functionality for enum fields in your CDS models."},{"url":"https://cdn.jsdelivr.net/npm/cap-js-geoloc-plugin@1.0.1/EXAMPLES.md","title":"cap-js-geoloc-plugin 1.0.1 — EXAMPLES","checked":"2026-09-18","quote":"When autoCalculate: true, SideEffects are automatically injected!"},{"url":"https://registry.npmjs.org/urp-vocab","title":"urp-vocab — npm registry record","checked":"2026-10-15","quote":"URP (User-Rendered Patterns) vocabulary definitions for SAP CAP applications"}]},"changed_in":[{"version":"@sap/cds-dk 9.6.0","date":"2025-12-17","applies_to":{"ecosystems":["cap"]},"what_changed":"Before this release, a tree view on a recursive association meant hand-writing the OData-level annotations yourself: @Aggregation.RecursiveHierarchy, an extension adding @Hierarchy.RecursiveHierarchy with computed columns, and @Capabilities filter/sort restrictions. `@hierarchy` on the entity now expands to all of that at compile time.","invalidates":"Guidance that says a Fiori tree view needs several hand-written OData annotations. Since December 2025 a single `@hierarchy` (optionally naming the association) is enough.","source":{"url":"https://cap.cloud.sap/docs/releases/2025/dec25","title":"CAP release notes, December 2025 — @hierarchy annotation","checked":"2026-09-08","quote":"Simply annotate a respective entity with the new `@hierarchy` annotation like this: annotate AdminService.Genres with @hierarchy;"}}],"history":[{"date":"2026-08-31","field":"core_coverage.state","from":"core","to":"core-only","reason":"States renamed to describe who is present rather than to interpret intent. left-open-on-purpose asserted a motive; core-and-community states a fact, with relationship carrying the intent separately."},{"date":"2026-09-14","field":"ecosystems","from":"cap, ui5","to":"cap, ui5, abap","reason":"Widened to ABAP: SAP-samples/abap-platform-fiori-feature-showcase demonstrates annotation-driven Fiori elements for OData V4 on RAP, the same concern as CAP's annotations."},{"date":"2026-09-20","field":"core_coverage.state","from":"core-only","to":"core-and-community","reason":"Three independent cds-plugins now provide this capability on CAP beside SAP's own packages: @mpah/enum-value-help, cap-js-geoloc-plugin and urp-vocab. The relationship is unassessed: no retrieved document gives the history between them and the core."},{"date":"2026-10-15","field":"core_coverage.where_it_stops","from":"named @mpah/enum-value-help as what fills the enum gap","to":"the boundary alone, with the plugins moved to community_adds","reason":"The SAP ships panel must describe the official implementation and its limits and must not name the alternative that fills a gap. The enum case, the manifest.json setting and the role-visibility handler stay as boundary facts; the plugin that answers the enum case is now in community_adds where it belongs."},{"date":"2026-10-15","field":"core_coverage.what_core_does","from":null,"to":"added the custom-vocabulary configuration and the full-set statement","reason":"Re-read against capire on 2026-10-15. Two facts the paragraph did not carry: the translation covers the full set of OData annotations rather than a mapped subset, and a vocabulary SAP does not ship enters the translation through cds.cdsc.odataVocabularies. Both change where the boundary actually runs."},{"date":"2026-10-15","field":"coverage_by_flavor","from":null,"to":"node, java","reason":"The door has two flavors and neither was assessed, so both were derived from the options alone. Java reads core-only: the three community providers are cds-plugins @sap/cds loads, and the Java side's own facts are the compiler running under the Maven build and the one hierarchy annotation the Java runtime reads itself."}],"coverage_by_ecosystem":{"abap":{"state":"core-and-community","assessed_at":"2026-09-14","relationship":"unassessed","what_core_does":"CDS annotations drive the Fiori elements UI of a RAP service, and a CDS metadata extension carries them in separate DDLX source, assigned to a layer such as partner or customer.","where_it_stops":"At the Fiori elements floorplans the annotations describe. A screen outside them is UI5 code, which annotations do not reach.","community_adds":"[rap-ext](artifact:abap2ui5-addons-rap-ext) reads the same `@UI`, `@ObjectModel` and `@Search` annotations, metadata extensions included, and renders the list report, object page and value help they describe in [abap2UI5](artifact:abap2ui5-abap2ui5), inside the ABAP system rather than through a Fiori elements app.","note":"The one ABAP entry in the corpus is SAP's feature showcase, a sample that demonstrates the concern and is not counted as a provider.","sources":[{"url":"https://help.sap.com/doc/abapdocu_758_index_htm/7.58/en-US/abencds_meta_data_extensions.htm","title":"ABAP Keyword Documentation — CDS Metadata Extensions","checked":"2026-09-14","quote":"A CDS metadata extension (MDE) adds CDS annotations to a CDS entity that are not specified in the DDL source code of the data definition."},{"url":"https://github.com/SAP-samples/abap-platform-fiori-feature-showcase","title":"SAP-samples/abap-platform-fiori-feature-showcase — README","checked":"2026-09-14","quote":"The focus of this project is to demonstrate the features of annotation-driven SAP Fiori Elements for oData V4, using the ABAP RESTful Application Programming Model (RAP)."}]}},"coverage_by_flavor":{"node":{"state":"core-and-community","relationship":"unassessed","assessed_at":"2026-10-15","what_core_does":"[@sap/cds](artifact:sap-cds) compiles the model's annotations and serves the metadata that carries them in one process, and the index page's Fiori preview renders a list page from them while the server runs. In a deployment the preview is turned on with cds.fiori.preview.","where_it_stops":"At the terms the compiler translates, which is the door's boundary and not a Node.js one: the shortcuts reach labels, value lists on managed associations and recursive hierarchies, and every other term is written in the vocabulary's own structure.","community_adds":"Every community provider on this capability states this flavor: the three of them are cds-plugins, which @sap/cds loads.","sources":[{"url":"https://cap.cloud.sap/docs/guides/uis/fiori","title":"Serving SAP Fiori UIs — Fiori Preview","checked":"2026-10-15","quote":"To also enable it in cloud deployments for test or demo purposes, set cds.fiori.preview:true for Node.js apps, or cds.index-page.enabled:true for Java"},{"url":"https://cap.cloud.sap/docs/guides/protocols/odata#annotations","title":"Serving OData APIs — OData Annotations","checked":"2026-10-15","quote":"When translating a CDS model to an OData API, by default only those annotations are considered that are part of the standard OASIS or SAP vocabularies listed below."}]},"java":{"state":"core-only","assessed_at":"2026-10-15","what_core_does":"The same annotations reach a Fiori elements client from a Java service, and the half that produces them is the same compiler: a CAP Java build compiles the model to CSN with the Node.js package [@sap/cds-dk](artifact:sap-cds-dk), and [com.sap.cds:cds-services-bom](artifact:cap-java-cds-services-bom) pins the runtime that serves the result and hosts the index page, whose preview is turned on in a deployment with cds.index-page.enabled. One annotation is Java's alone: a virtual element marked @cds.java.descendants.aggregate builds a hierarchy view from an aggregate expression.","where_it_stops":"At the terms the compiler translates, as on Node.js, with one difference a reader needs: the compiler is a build dependency rather than part of the runtime, so which shortcuts a Java project has follows the @sap/cds-dk version in its package.json and not the cds-services-bom version in its pom.xml.","note":"No community provider states this flavor. The three cds-plugins on this capability are loaded by @sap/cds, which is the Node.js runtime.","sources":[{"url":"https://cap.cloud.sap/docs/java/developing-applications/building","title":"Building CAP Java Applications — CDS Maven Plugin","checked":"2026-10-15","quote":"For instance, the CDS model needs to be compiled to a CSN file which requires a Node.js runtime with module `@sap/cds-dk`."},{"url":"https://cap.cloud.sap/docs/java/developing-applications/building","title":"Building CAP Java Applications — CDS Maven Plugin, cds-dk version","checked":"2026-10-15","quote":"the `@sap/cds-dk` is maintained as a `devDependency` in `package.json` and installed with an `npm ci` during the Maven build."},{"url":"https://cap.cloud.sap/docs/guides/uis/fiori","title":"Serving SAP Fiori UIs — Fiori Preview","checked":"2026-10-15","quote":"To also enable it in cloud deployments for test or demo purposes, set cds.fiori.preview:true for Node.js apps, or cds.index-page.enabled:true for Java"},{"url":"https://cap.cloud.sap/docs/guides/uis/fiori","title":"Serving SAP Fiori UIs — Tree Views, aggregates in CAP Java","checked":"2026-10-15","quote":"Annotate a virtual element with @cds.java.descendants.aggregate and specify the aggregation expression to build hierarchy views using calculation of aggregates."}]}},"framing_by_ecosystem":{"abap":{"description":"In RAP the annotations are written in CDS, in the view or in a metadata extension, and reach a Fiori elements app through an OData V4 service binding. [SAP-samples/fiori-elements-feature-showcase](artifact:sap-samples-fiori-elements-feature-showcase) is the same showcase built on CAP."}},"framing_by_flavor":{"java":{"description":"The annotations are the same CDS annotations, and the half that turns them into OData metadata is the same compiler: a CAP Java build runs [@sap/cds-dk](artifact:sap-cds-dk) on Node.js to produce the CSN the Java runtime loads. What the Java side owns is serving them, and the few annotations the Java runtime reads itself rather than the compiler."}},"drafted_with_ai":true},"sap_delivery":{"door":"cap","all":{"built_in":[{"ref":"artifact:sap-cds","name":"@sap/cds","json":"/artifacts/sap-cds.json"},{"ref":"artifact:cap-java-cds-services-bom","name":"com.sap.cds:cds-services-bom","json":"/artifacts/cap-java-cds-services-bom.json"}],"documented_pattern":[],"announced":[],"packages":[{"ref":"artifact:sap-ux-cds-annotation-parser","name":"@sap-ux/cds-annotation-parser","json":"/artifacts/sap-ux-cds-annotation-parser.json"},{"ref":"artifact:sap-ux-cds-odata-annotation-converter","name":"@sap-ux/cds-odata-annotation-converter","json":"/artifacts/sap-ux-cds-odata-annotation-converter.json"},{"ref":"artifact:sap-ux-fiori-annotation-api","name":"@sap-ux/fiori-annotation-api","json":"/artifacts/sap-ux-fiori-annotation-api.json"},{"ref":"artifact:sap-cds-fiori","name":"@sap/cds-fiori","json":"/artifacts/sap-cds-fiori.json"},{"ref":"artifact:sap-generator-fiori","name":"@sap/generator-fiori","json":"/artifacts/sap-generator-fiori.json"},{"ref":"artifact:sap-ux-cds-compiler-facade","name":"@sap/ux-cds-compiler-facade","json":"/artifacts/sap-ux-cds-compiler-facade.json"},{"ref":"artifact:sap-ux-cds-odata-language-server-extension","name":"@sap/ux-cds-odata-language-server-extension","json":"/artifacts/sap-ux-cds-odata-language-server-extension.json"}]},"by_flavor":{"node":{"built_in":[{"ref":"artifact:sap-cds","name":"@sap/cds","json":"/artifacts/sap-cds.json"}],"documented_pattern":[],"announced":[],"packages":[{"ref":"artifact:sap-cds-fiori","name":"@sap/cds-fiori","json":"/artifacts/sap-cds-fiori.json"},{"ref":"artifact:sap-ux-cds-compiler-facade","name":"@sap/ux-cds-compiler-facade","json":"/artifacts/sap-ux-cds-compiler-facade.json"},{"ref":"artifact:sap-ux-cds-odata-language-server-extension","name":"@sap/ux-cds-odata-language-server-extension","json":"/artifacts/sap-ux-cds-odata-language-server-extension.json"}]},"java":{"built_in":[{"ref":"artifact:cap-java-cds-services-bom","name":"com.sap.cds:cds-services-bom","json":"/artifacts/cap-java-cds-services-bom.json"}],"documented_pattern":[],"announced":[],"packages":[]}}},"edges":{"use_cases":[{"id":"carry-a-vocabulary-sap-does-not-ship-into-the-odata-metadata-in-cap","name":"Carry a vocabulary SAP does not ship into the OData metadata","capability":"capability:fiori-annotations","ecosystem":"cap","flavors":["node"],"outcome":"Annotations written with terms of somebody's own reach the service's OData metadata, with the reference to their vocabulary document beside them, instead of being dropped in translation.","boundary":"Covers getting the terms into the metadata. What reads them at the other end is not part of it: a Fiori elements client reads the OASIS and SAP terms, and anything else needs a renderer of its own.","origin":"Editorial hypothesis from the core boundary: only the standard OASIS and SAP vocabularies are translated by default, which is the fact a developer meets the moment they invent a term.","requirement_dimensions":["Whether anything at the other end reads the terms","Whether the vocabulary document has to be reachable at the URI the metadata names","Whether the terms are meant to reach a Fiori elements client or a renderer of one's own"],"contributions":[{"ref":"artifact:sap-cds","role":"core runtime","state":"documented","flavors":["node"],"description":"cds.cdsc.odataVocabularies names a further vocabulary's alias, namespace and URI, and from then on every annotation prefixed with it is translated and the metadata carries the edmx:Reference to the vocabulary document beside the annotation.","remaining_work":"Make the URI reachable where that matters, and write whatever reads the terms. The compiler has no access to the vocabulary's content, so it checks neither the values nor that a term is applied where its own definition allows.","remaining_kinds":["application-code"],"sources":[{"url":"https://cap.cloud.sap/docs/guides/protocols/odata#annotations","title":"Serving OData APIs — OData Annotations","checked":"2026-10-15","quote":"When translating a CDS model to an OData API, by default only those annotations are considered that are part of the standard OASIS or SAP vocabularies listed below."},{"url":"https://cap.cloud.sap/docs/guides/protocols/odata#additional-vocabularies","title":"Serving OData APIs — Additional Vocabularies","checked":"2026-10-15","quote":"With this configuration, all annotations prefixed with MyVocabulary are considered in the translation."},{"url":"https://cap.cloud.sap/docs/guides/protocols/odata#additional-vocabularies","title":"Serving OData APIs — Additional Vocabularies, generic translation","checked":"2026-10-15","quote":"Unlike for the standard vocabularies listed above, the compiler has no access to the content of the vocabulary, so the values are translated generically."}]},{"ref":"artifact:kamlendra-urp-vocab","role":"published vocabulary","state":"unknown","flavors":["node"],"version_scope":"npm registry record and readme for urp-vocab 0.1.2, read 2026-10-15.","description":"A vocabulary of its author's own, used from CDS as `using urp from 'urp-vocab'` and applied as @urp.display and five further terms. Whether its terms reach the OData metadata is not established: its readme names the terms and the widget types but says nothing about registering the vocabulary with the compiler, nothing about cds.cdsc.odataVocabularies, and nothing about what reads the terms. Its declared repository, github.com/your-username/urp-vocab, is an unedited placeholder, so the package's own files are the only record there is.","remaining_work":"Read the published package's files before treating it as an answer here. On what is written down, it is a vocabulary definition and not a translation path.","sources":[{"url":"https://registry.npmjs.org/urp-vocab","title":"urp-vocab — npm registry record","checked":"2026-10-15","quote":"URP (User-Rendered Patterns) vocabulary definitions for SAP CAP applications"},{"url":"https://registry.npmjs.org/urp-vocab","title":"urp-vocab — readme, usage","checked":"2026-10-15","quote":"using urp from 'urp-vocab';"},{"url":"https://registry.npmjs.org/urp-vocab","title":"urp-vocab — readme, available annotations","checked":"2026-10-15","quote":"`@urp.display` - Structured display specification (recommended)"}]}],"unknowns":["Whether cds.cdsc.odataVocabularies is read the same way in a Maven build was not established, so this record is scoped to the node flavor. The option is documented as compiler configuration in the project's files, and the pages read on 2026-10-15 do not state it from the Java side.","No entry in the corpus explains or shows a vocabulary outside the standard set carried through to anything that reads it, so this record carries no reading."],"assessed_at":"2026-10-15","drafted_with_ai":true,"readings":[],"omitted_contributions":0,"assessment_kind":"documented-contributions"},{"id":"put-a-value-help-on-a-fiori-field-in-cap","name":"Put a value help on a field a Fiori client renders","capability":"capability:fiori-annotations","ecosystem":"cap","flavors":["node","java"],"outcome":"A field in a Fiori elements app offers the values it allows instead of a free-text input, with the list coming from the model rather than from code in the app.","boundary":"Covers getting the value-list annotation onto the field. Where the values are kept — a code list entity, a CDS enum, a table of its own — is the model's design and not this outcome, and so is anything the app adds on top of the control.","origin":"Editorial hypothesis, taken from the boundary this capability already records: the CDS shortcut reaches managed associations and nothing else, which is the first thing a developer meets here.","requirement_dimensions":["Whether the field is a managed association to an entity or a scalar typed by an enum","Whether the allowed values exist as an entity the service can expose","Whether the control should be a dropdown of fixed values or a search dialog"],"also_in":["ui5","abap"],"contributions":[{"ref":"artifact:sap-cds","role":"core runtime","state":"conditional","flavors":["node"],"description":"Two ways, both from the model. @cds.odata.valuelist on the entity that holds the values gives every managed association targeting it a value list, and the reuse types of @sap/cds/common already carry it, so a field typed from a code list there arrives with one. Any other case is the @Common.ValueList record written out in the vocabulary's own structure, which the compiler translates because the mapping is generic rather than written per term.","conditions":["The shortcut reaches a field only where that field is a managed association to the annotated entity.","A field that is not an association needs the @Common.ValueList record written by hand, naming the collection and the parameters that tie the local property to the value-list property."],"remaining_work":"Model the entity the values come from and expose it on the service, then decide field by field whether the shortcut applies or the record has to be written out.","remaining_kinds":["application-code"],"sources":[{"url":"https://cap.cloud.sap/docs/guides/uis/fiori","title":"Serving SAP Fiori UIs — Value Helps","checked":"2026-10-15","quote":"Simply add the @cds.odata.valuelist annotation to an entity, and all managed associations targeting this entity will automatically receive Value Lists in SAP Fiori clients."},{"url":"https://cap.cloud.sap/docs/guides/uis/fiori","title":"Serving SAP Fiori UIs — Value Helps, reuse types","checked":"2026-10-15","quote":"The reuse types in @sap/cds/common already have this added to base types and entities, so all uses automatically benefit from this."},{"url":"https://cap.cloud.sap/docs/guides/protocols/odata#annotations","title":"Serving OData APIs — OData Annotations","checked":"2026-10-15","quote":"we apply a generic, isomorphic approach where names and positions of annotations are exactly as specified in the OData Vocabularies"}]},{"ref":"artifact:cap-java-cds-services-bom","role":"core runtime","state":"conditional","flavors":["java"],"description":"The same two ways on a Java service. The shortcut and the vocabulary translation belong to the compiler, which a CAP Java build runs on Node.js as @sap/cds-dk, and this release serves the metadata that comes out of it.","conditions":["The shortcut reaches a field only where that field is a managed association to the annotated entity.","Which shortcuts a project has follows the @sap/cds-dk version the Maven build installs, which since CDS Maven plugin 3.6.0 is a devDependency in package.json rather than a version in pom.xml."],"remaining_work":"The same modelling as on Node.js. Nothing in this part of the outcome is written in Java.","remaining_kinds":["application-code"],"sources":[{"url":"https://cap.cloud.sap/docs/guides/uis/fiori","title":"Serving SAP Fiori UIs — Value Helps","checked":"2026-10-15","quote":"Simply add the @cds.odata.valuelist annotation to an entity, and all managed associations targeting this entity will automatically receive Value Lists in SAP Fiori clients."},{"url":"https://cap.cloud.sap/docs/java/developing-applications/building","title":"Building CAP Java Applications — CDS Maven Plugin","checked":"2026-10-15","quote":"For instance, the CDS model needs to be compiled to a CSN file which requires a Node.js runtime with module `@sap/cds-dk`."},{"url":"https://cap.cloud.sap/docs/java/developing-applications/building","title":"Building CAP Java Applications — CDS Maven Plugin, cds-dk version","checked":"2026-10-15","quote":"the `@sap/cds-dk` is maintained as a `devDependency` in `package.json` and installed with an `npm ci` during the Maven build."}]},{"ref":"artifact:mpah-enum-value-help","role":"value-help generator for enum fields","state":"documented","flavors":["node"],"version_scope":"README at github.com/mpah/enum-value-help, read 2026-10-15.","description":"Answers the case the shortcut leaves alone, a field typed by a CDS enum. @enumValueHelp on the field makes the plugin add @Common.ValueList against a generated EnumValueHelpView that serves the enum's own values by entity and field, and @enumValueHelpFixedValues adds @Common.ValueListWithFixedValues as well, which is what makes the control a dropdown rather than a search dialog. It scans for the annotations while the CDS model loads and exposes the view to the services that hold an annotated entity.","remaining_work":"Mark each enum field, and @enumValueHelpFixedValues as well where the list should be fixed. Nothing picks the fields.","remaining_kinds":["configuration"],"sources":[{"url":"https://github.com/mpah/enum-value-help","title":"mpah/enum-value-help — README","checked":"2026-10-15","quote":"A CAP (Cloud Application Programming) plugin that automatically generates value help functionality for enum fields in your CDS models."},{"url":"https://github.com/mpah/enum-value-help","title":"mpah/enum-value-help — README, model loading","checked":"2026-10-15","quote":"During the CDS model loading phase, the plugin scans for entities with @enumValueHelp annotations"},{"url":"https://github.com/mpah/enum-value-help","title":"mpah/enum-value-help — README, generated view","checked":"2026-10-15","quote":"The EnumValueHelpView serves enum values dynamically based on entity and field context"},{"url":"https://github.com/mpah/enum-value-help","title":"mpah/enum-value-help — README, annotations added","checked":"2026-09-18","quote":"Automatically adds @Common.ValueList annotations pointing to the EnumValueHelpView"}]}],"readings":[{"ref":"content:smart-filter-value-help-for-fields-that-are-not-associated-entities","relevance":"The case the shortcut assumes away, written by somebody who ran into it: value help on a field with no association behind it, and the workaround they used instead."}],"unknowns":["Whether @mpah/enum-value-help reads an enum whose texts live in a database table or a translation bundle is not established. Its README, read on 2026-10-15, documents the annotations and the generated view and states no limitation at all.","Whether a cds-plugin that injects annotations while the model loads has any effect in a CAP Java project was not established here. The compiler runs under the Maven build, and the three plugins on this capability are Node.js packages @sap/cds loads, so the enum case on the java flavor is recorded as unassessed rather than unsupported."],"assessed_at":"2026-10-15","drafted_with_ai":true,"omitted_contributions":0,"assessment_kind":"documented-contributions"},{"id":"see-the-annotations-rendered-before-a-fiori-app-exists-in-cap","name":"See the annotations rendered before any Fiori app exists","capability":"capability:fiori-annotations","ecosystem":"cap","flavors":["node","java"],"outcome":"A developer changing @UI annotations sees the page they produce straight away, with no UI application in the project to generate or rebuild first.","boundary":"Covers the loop while the annotations are being written. It is not a way to ship a screen: what answers this outcome is a page the server renders, not an app, and the distinction is where the decision sits.","origin":"Editorial hypothesis. The capability already recorded the preview; what it did not record is that the preview is switched off in production and switched back on by a different setting on each runtime, which is the part that decides whether it is any use beyond a laptop.","requirement_dimensions":["Whether the entity is exposed over OData V4","Whether the page is wanted in a deployment as well as locally","Whether a list page is enough to judge the annotation being changed"],"contributions":[{"ref":"artifact:sap-cds","role":"core runtime","state":"conditional","flavors":["node"],"description":"The index page carries a Fiori preview link for every entity exposed over OData V4 and serves a Fiori elements list page from that entity's annotations, so the effect of an annotation change is visible without creating a UI application.","conditions":["The entity has to be exposed over OData V4; the link appears for those entities and not for others.","It is disabled in production. cds.fiori.preview set to true turns it back on in a cloud deployment for a test or a demo."],"remaining_work":"Nothing in the project for the local loop. A real app still has to be generated once the page in question is more than a list report.","sources":[{"url":"https://cap.cloud.sap/docs/guides/uis/fiori","title":"Serving SAP Fiori UIs — Fiori Preview","checked":"2026-10-15","quote":"For entities exposed via OData V4, a Fiori preview link appears on the index page. It dynamically serves an SAP Fiori elements list page that allows you to quickly see the effect of annotation changes without having to create a UI application first."},{"url":"https://cap.cloud.sap/docs/guides/uis/fiori","title":"Serving SAP Fiori UIs — Fiori Preview, not for production","checked":"2026-10-15","quote":"The preview is meant for quick tests and iterations during development, but not for production use, and hence automatically disabled in production."},{"url":"https://cap.cloud.sap/docs/guides/uis/fiori","title":"Serving SAP Fiori UIs — Fiori Preview, enabling it","checked":"2026-10-15","quote":"To also enable it in cloud deployments for test or demo purposes, set cds.fiori.preview:true for Node.js apps, or cds.index-page.enabled:true for Java"}]},{"ref":"artifact:cap-java-cds-services-bom","role":"core runtime","state":"conditional","flavors":["java"],"description":"The same preview from a Java service, with its own switch: cds.index-page.enabled, rather than the cds.fiori.preview a Node.js project sets.","conditions":["The entity has to be exposed over OData V4.","It is disabled in production. cds.index-page.enabled set to true turns it back on in a cloud deployment for a test or a demo."],"remaining_work":"Nothing in the project for the local loop, and the annotations themselves still come from the model the Maven build compiles.","sources":[{"url":"https://cap.cloud.sap/docs/guides/uis/fiori","title":"Serving SAP Fiori UIs — Fiori Preview, enabling it","checked":"2026-10-15","quote":"To also enable it in cloud deployments for test or demo purposes, set cds.fiori.preview:true for Node.js apps, or cds.index-page.enabled:true for Java"},{"url":"https://cap.cloud.sap/docs/guides/uis/fiori","title":"Serving SAP Fiori UIs — Fiori Preview, not for production","checked":"2026-10-15","quote":"The preview is meant for quick tests and iterations during development, but not for production use, and hence automatically disabled in production."}]}],"readings":[{"ref":"content:fullstack-cap-with-hana-cloud-part-2-cds-annotations","relevance":"Somebody working this loop: part one left a service whose preview showed nothing useful, and this part is the UI vocabulary added to the model until the preview's list report had columns worth reading."}],"unknowns":["Which floorplan the preview serves beyond a list page is not established here. The guide calls it a list page, and nothing read on 2026-10-15 says whether an object page is reachable from it.","The reading attached here was not re-read for this assessment, so which runtime it was written against is taken from the entry rather than from the post, and no contribution is recorded as shown working."],"assessed_at":"2026-10-15","drafted_with_ai":true,"omitted_contributions":0,"assessment_kind":"documented-contributions"},{"id":"show-a-self-referencing-entity-as-a-fiori-tree-table-in-cap","name":"Show a self-referencing entity as a Fiori tree table","capability":"capability:fiori-annotations","ecosystem":"cap","flavors":["node","java"],"outcome":"An entity whose rows point at their own parent is rendered as an expandable tree in a Fiori elements list report instead of a flat list.","boundary":"Covers the annotations the service carries and the one setting in the app's manifest.json that the guide requires with them. Building the hierarchy in the data, and anything the app does inside the tree's rows, is outside it.","origin":"Editorial hypothesis from this capability's own release record: @hierarchy arrived in @sap/cds-dk 9.6.0 in December 2025 and replaced several hand-written OData annotations, so what a reader finds written down about this outcome is split across that date.","requirement_dimensions":["Whether the hierarchy is one recursive association on a single entity","Whether a row shows its own values or an aggregate over its descendants","Which @sap/cds-dk version the project compiles with"],"also_in":["abap"],"contributions":[{"ref":"artifact:sap-cds","role":"core runtime","state":"conditional","flavors":["node"],"description":"@hierarchy on the entity expands at compile time to the Fiori-level annotate and extend statements the tree would otherwise need written by hand, and the runtime serves the result.","conditions":["The entity needs a recursive association to itself, which is what the shortcut reads.","The UI5 app's manifest.json has to name the hierarchy qualifier and set the table type to TreeTable; the qualifier follows the pattern <entity name in service>Hierarchy."],"remaining_work":"Add the controlConfiguration block to the app's manifest.json, and keep the qualifier in step with the entity's name in the service, because the pattern is derived from it.","remaining_kinds":["configuration"],"sources":[{"url":"https://cap.cloud.sap/docs/guides/uis/fiori","title":"Serving SAP Fiori UIs — Tree Views","checked":"2026-10-15","quote":"The @hierarchy annotation is a shortcut for the following Fiori-level annotate and extend statements, which you would otherwise have to write manually."},{"url":"https://cap.cloud.sap/docs/guides/uis/fiori","title":"Serving SAP Fiori UIs — Tree Views, qualifier pattern","checked":"2026-10-15","quote":"When naming the hierarchy qualifier, use the following pattern: <entity name in service>Hierarchy"},{"url":"https://cap.cloud.sap/docs/guides/uis/fiori","title":"Serving SAP Fiori UIs — Tree Views, manifest.json","checked":"2026-10-15","quote":"\"hierarchyQualifier\": \"GenresHierarchy\""}]},{"ref":"artifact:cap-java-cds-services-bom","role":"core runtime","state":"conditional","flavors":["java"],"description":"The same @hierarchy shortcut, because a CAP Java build compiles the model with the same Node.js compiler, and one annotation this runtime reads itself: a virtual element marked @cds.java.descendants.aggregate builds the hierarchy view from an aggregation expression, which is how a tree shows an aggregate over a row's descendants rather than the row's own value.","conditions":["The entity needs a recursive association to itself.","The same hierarchy qualifier and TreeTable setting in the app's manifest.json as on Node.js.","The shortcut belongs to the compiler, so it is available once the Maven build installs an @sap/cds-dk that has it, independently of the cds-services-bom version."],"remaining_work":"Add the controlConfiguration block to the app's manifest.json, and write the aggregation expression where the tree is meant to show aggregates.","remaining_kinds":["configuration"],"sources":[{"url":"https://cap.cloud.sap/docs/guides/uis/fiori","title":"Serving SAP Fiori UIs — Tree Views, aggregates in CAP Java","checked":"2026-10-15","quote":"Annotate a virtual element with @cds.java.descendants.aggregate and specify the aggregation expression to build hierarchy views using calculation of aggregates."},{"url":"https://cap.cloud.sap/docs/guides/uis/fiori","title":"Serving SAP Fiori UIs — Tree Views","checked":"2026-10-15","quote":"The @hierarchy annotation is a shortcut for the following Fiori-level annotate and extend statements, which you would otherwise have to write manually."},{"url":"https://cap.cloud.sap/docs/java/developing-applications/building","title":"Building CAP Java Applications — CDS Maven Plugin","checked":"2026-10-15","quote":"For instance, the CDS model needs to be compiled to a CSN file which requires a Node.js runtime with module `@sap/cds-dk`."}]}],"readings":[{"ref":"content:tree-table-support-in-cap-is-now-generally-available","relevance":"SAP's own account of when each piece of this landed, which is what dates any tutorial written before it."},{"ref":"content:display-of-hierarchical-data-in-sap-fiori-elements-using-cap","relevance":"The 2022 record of doing this by hand, carrying its own later update that the framework now supports tree views natively. Read for what the shortcut replaced rather than as a procedure."}],"unknowns":["Whether @hierarchy covers a hierarchy that is not a single recursive association was not established. The guide's example and the expansion it shows are both written against one association on one entity.","No entry in the corpus has been read as showing @hierarchy working, so no reading records this outcome as shown rather than explained."],"assessed_at":"2026-10-15","drafted_with_ai":true,"omitted_contributions":0,"assessment_kind":"documented-contributions"}],"shared_tasks":[],"related_tasks":[],"options":[{"ref":"artifact:mpah-enum-value-help","name":"@mpah/enum-value-help","json":"/artifacts/mpah-enum-value-help.json","ecosystem":"cap","origin_ring":"independent"},{"ref":"artifact:sap-ux-cds-annotation-parser","name":"@sap-ux/cds-annotation-parser","json":"/artifacts/sap-ux-cds-annotation-parser.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:sap-ux-cds-odata-annotation-converter","name":"@sap-ux/cds-odata-annotation-converter","json":"/artifacts/sap-ux-cds-odata-annotation-converter.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:sap-ux-fiori-annotation-api","name":"@sap-ux/fiori-annotation-api","json":"/artifacts/sap-ux-fiori-annotation-api.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:sap-ux-odata-vocabularies","name":"@sap-ux/odata-vocabularies","json":"/artifacts/sap-ux-odata-vocabularies.json","ecosystem":"ui5","origin_ring":"sap-official"},{"ref":"artifact:sap-cds","name":"@sap/cds","json":"/artifacts/sap-cds.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:sap-cds-fiori","name":"@sap/cds-fiori","json":"/artifacts/sap-cds-fiori.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:sap-generator-fiori","name":"@sap/generator-fiori","json":"/artifacts/sap-generator-fiori.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:sap-ux-cds-compiler-facade","name":"@sap/ux-cds-compiler-facade","json":"/artifacts/sap-ux-cds-compiler-facade.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:sap-ux-cds-odata-language-server-extension","name":"@sap/ux-cds-odata-language-server-extension","json":"/artifacts/sap-ux-cds-odata-language-server-extension.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:sebsst-cap-js-geoloc-plugin","name":"cap-js-geoloc-plugin","json":"/artifacts/sebsst-cap-js-geoloc-plugin.json","ecosystem":"cap","origin_ring":"independent"},{"ref":"artifact:uxkjaer-cap-user-info","name":"cap-user-info","json":"/artifacts/uxkjaer-cap-user-info.json","ecosystem":"cap","origin_ring":"independent"},{"ref":"artifact:cap-java-cds-services-bom","name":"com.sap.cds:cds-services-bom","json":"/artifacts/cap-java-cds-services-bom.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:abap2ui5-addons-rap-ext","name":"rap-ext","json":"/artifacts/abap2ui5-addons-rap-ext.json","ecosystem":"abap","origin_ring":"community-org"},{"ref":"artifact:kamlendra-urp-vocab","name":"urp-vocab","json":"/artifacts/kamlendra-urp-vocab.json","ecosystem":"cap","origin_ring":"independent"}],"samples":[{"ref":"artifact:miyasuta-blog-bookshop","name":"blog-bookshop","json":"/artifacts/miyasuta-blog-bookshop.json"},{"ref":"artifact:miyasuta-blog-cap-chart","name":"blog-cap-chart","json":"/artifacts/miyasuta-blog-cap-chart.json"},{"ref":"artifact:miyasuta-cap-alp","name":"cap-alp","json":"/artifacts/miyasuta-cap-alp.json"},{"ref":"artifact:miyasuta-cap-defaultvalue-function","name":"cap-defaultvalue-function","json":"/artifacts/miyasuta-cap-defaultvalue-function.json"},{"ref":"artifact:miyasuta-cap-fe-massedit","name":"cap-fe-massedit","json":"/artifacts/miyasuta-cap-fe-massedit.json"},{"ref":"artifact:miyasuta-cap-feature-control","name":"cap-feature-control","json":"/artifacts/miyasuta-cap-feature-control.json"},{"ref":"artifact:marianfoo-cap-materialbom-graph","name":"cap-materialbom-graph","json":"/artifacts/marianfoo-cap-materialbom-graph.json"},{"ref":"artifact:capire-incidents-app","name":"capire/incidents-app","json":"/artifacts/capire-incidents-app.json"},{"ref":"artifact:miyasuta-fiori-dynamic-feature-control","name":"fiori-dynamic-feature-control","json":"/artifacts/miyasuta-fiori-dynamic-feature-control.json"},{"ref":"artifact:miyasuta-fiori-inline-edit","name":"fiori-inline-edit","json":"/artifacts/miyasuta-fiori-inline-edit.json"},{"ref":"artifact:miyasuta-fiori-navigation-patterns","name":"fiori-navigation-patterns","json":"/artifacts/miyasuta-fiori-navigation-patterns.json"},{"ref":"artifact:marianfoo-fiori-table-maintenance","name":"fiori-table-maintenance","json":"/artifacts/marianfoo-fiori-table-maintenance.json"},{"ref":"artifact:sap-samples-abap-platform-fiori-feature-showcase","name":"SAP-samples/abap-platform-fiori-feature-showcase","json":"/artifacts/sap-samples-abap-platform-fiori-feature-showcase.json"},{"ref":"artifact:sap-samples-cap-sflight","name":"SAP-samples/cap-sflight","json":"/artifacts/sap-samples-cap-sflight.json"},{"ref":"artifact:sap-samples-fiori-elements-feature-showcase","name":"SAP-samples/fiori-elements-feature-showcase","json":"/artifacts/sap-samples-fiori-elements-feature-showcase.json"},{"ref":"artifact:sap-samples-fiori-elements-fpm-exercises-codejam","name":"SAP-samples/fiori-elements-fpm-exercises-codejam","json":"/artifacts/sap-samples-fiori-elements-fpm-exercises-codejam.json"},{"ref":"artifact:sap-samples-fiori-elements-v4-cap-advanced","name":"SAP-samples/fiori-elements-v4-cap-advanced","json":"/artifacts/sap-samples-fiori-elements-v4-cap-advanced.json"},{"ref":"artifact:sap-samples-teched2022-dt181","name":"SAP-samples/teched2022-DT181","json":"/artifacts/sap-samples-teched2022-dt181.json"},{"ref":"artifact:marianfoo-ui5-call-action","name":"ui5-call-action","json":"/artifacts/marianfoo-ui5-call-action.json"},{"ref":"artifact:sap-samples-ui5con-2026-fiori-building-blocks","name":"ui5con-2026-fiori-building-blocks","json":"/artifacts/sap-samples-ui5con-2026-fiori-building-blocks.json"},{"ref":"artifact:sap-samples-wdf2025-fiori-innov-day-building-blocks","name":"wdf2025-fiori-innov-day-building-blocks","json":"/artifacts/sap-samples-wdf2025-fiori-innov-day-building-blocks.json"}],"explained_by":[{"ref":"content:052-10-minutes-from-start-to-launchpad","name":"052: 10 Minutes from Start to Launchpad","json":"/content/052-10-minutes-from-start-to-launchpad.json"},{"ref":"content:rap-navigation-app-to-app","name":"RAP - Navigation (App to App)","json":"/content/rap-navigation-app-to-app.json"},{"ref":"content:cap-foundry-engineering-sap-cap-applications-from-business-intent-with-guardrail","name":"CAP Foundry: Engineering SAP CAP Applications from Business Intent with Guardrailed AI","json":"/content/cap-foundry-engineering-sap-cap-applications-from-business-intent-with-guardrail.json"},{"ref":"content:a-guide-to-cds-metadata-extensions-fiori-app-generation-and-sap-ui5-controller-e","name":"A Guide to CDS Metadata Extensions, Fiori App Generation and SAP UI5 Controller Extensions","json":"/content/a-guide-to-cds-metadata-extensions-fiori-app-generation-and-sap-ui5-controller-e.json"},{"ref":"content:reading-between-the-lines-under-documented-fiori-elements-capabilities-in-sapui5","name":"Reading Between the Lines: Under-Documented Fiori Elements Capabilities in SAPUI5 1.149","json":"/content/reading-between-the-lines-under-documented-fiori-elements-capabilities-in-sapui5.json"},{"ref":"content:on-the-fly-excel-download-in-a-rap-fiori-app-no-database-table-no-persistence-pu","name":"On‑the‑Fly Excel Download in a RAP Fiori App — No Database Table, No Persistence, Pure CDS + ABAP","json":"/content/on-the-fly-excel-download-in-a-rap-fiori-app-no-database-table-no-persistence-pu.json"},{"ref":"content:dynamic-criticality-in-cap-using-fiori-elements-and-nodejs","name":"Dynamic Criticality in SAP CAP Using Fiori Elements and Node.js","json":"/content/dynamic-criticality-in-cap-using-fiori-elements-and-nodejs.json"},{"ref":"content:deep-insert-in-cap-using-composition-and-fiori-elements","name":"Deep Insert in SAP CAPM Using Composition and Fiori Elements","json":"/content/deep-insert-in-cap-using-composition-and-fiori-elements.json"},{"ref":"content:from-segw-and-legacy-ui5-to-rap-with-arc-1","name":"From SEGW and Legacy UI5 to RAP with ARC-1","json":"/content/from-segw-and-legacy-ui5-to-rap-with-arc-1.json"},{"ref":"content:fullstack-cap-with-hana-cloud-part-2-cds-annotations","name":"Fullstack CAP Application with HANA Cloud (Decoupled Architecture) [Part-2]","json":"/content/fullstack-cap-with-hana-cloud-part-2-cds-annotations.json"},{"ref":"content:build-a-btp-cap-app-with-fiori-integration-part-2","name":"Build BTP CAP App with Fiori Integration – Part 2: Implementing End to End App","json":"/content/build-a-btp-cap-app-with-fiori-integration-part-2.json"},{"ref":"content:xml-annotations-the-essentials-before-adapting-documentation-samples","name":"XML Annotations: The Essentials Before Adapting Documentation Samples to Your Project","json":"/content/xml-annotations-the-essentials-before-adapting-documentation-samples.json"},{"ref":"content:creating-material-master-data-in-sap-s-4hana-using-rap-and-eml","name":"Creating Material Master Data in SAP S/4HANA Using RAP and EML .","json":"/content/creating-material-master-data-in-sap-s-4hana-using-rap-and-eml.json"},{"ref":"content:building-an-enterprise-application-with-fiori-elements-and-cap-part-1","name":"Building an Enterprise Application Using Fiori Elements and CAP - Part 1","json":"/content/building-an-enterprise-application-with-fiori-elements-and-cap-part-1.json"},{"ref":"content:building-an-enterprise-application-with-fiori-elements-and-cap-part-2","name":"Building an Enterprise Application Using Fiori Elements and CAP – Part 2","json":"/content/building-an-enterprise-application-with-fiori-elements-and-cap-part-2.json"},{"ref":"content:building-an-enterprise-application-with-fiori-elements-and-cap-part-3","name":"Building an Enterprise Application Using Fiori Elements and CAP – Part 3","json":"/content/building-an-enterprise-application-with-fiori-elements-and-cap-part-3.json"},{"ref":"content:call-bapi-in-custom-entity-through-rap","name":"CALL BAPI IN CUSTOM ENTITY THROUGH RAP","json":"/content/call-bapi-in-custom-entity-through-rap.json"},{"ref":"content:adaptation-project-sap-fiori","name":"Adaptation Project: SAP標準Fioriアプリのフィルタ項目を必須入力へするための方法","json":"/content/adaptation-project-sap-fiori.json"},{"ref":"content:extending-fiori-elements-with-the-flexible-programming-model","name":"SAP BTP Developer's Guide: Extending Fiori Elements with the Flexible Programming Model","json":"/content/extending-fiori-elements-with-the-flexible-programming-model.json"},{"ref":"content:dynamic-field-control-in-cap-java-object-pages","name":"CAP JavaでObject Pageの項目の動的な入力制御を実装する","json":"/content/dynamic-field-control-in-cap-java-object-pages.json"},{"ref":"content:tree-table-support-in-cap-is-now-generally-available","name":"Tree-Table Support in CAP is Now Generally Available","json":"/content/tree-table-support-in-cap-is-now-generally-available.json"},{"ref":"content:control-visibility-of-crud-and-custom-actions-based-on-authorization","name":"How to Control the Visibility of CRUD and Custom Actions in Fiori Elements Based on Authorization","json":"/content/control-visibility-of-crud-and-custom-actions-based-on-authorization.json"},{"ref":"content:capm-basics-part-4","name":"CAPM Basics - Part 4","json":"/content/capm-basics-part-4.json"},{"ref":"content:visualizing-your-sap-bill-of-materials-using-cap-and-fiori-elements","name":"Visualizing Your SAP Bill of Materials Using CAP, Fiori elements, and the UI5 Network Graph","json":"/content/visualizing-your-sap-bill-of-materials-using-cap-and-fiori-elements.json"},{"ref":"content:simple-table-maintenance-in-sap-fiori-using-ui5-smart-controls","name":"Simple Table Maintenance in SAP Fiori Using UI5 Smart Controls","json":"/content/simple-table-maintenance-in-sap-fiori-using-ui5-smart-controls.json"},{"ref":"content:smart-filter-value-help-for-fields-that-are-not-associated-entities","name":"Use SAP CAP SAPUI5 Smart Filter to Show Value Help that are not Associated Entitites","json":"/content/smart-filter-value-help-for-fields-that-are-not-associated-entities.json"},{"ref":"content:calling-bound-and-unbound-cap-actions-from-a-fiori-elements-app","name":"Calling bound / unbound CAP actions from Fiori elements application.","json":"/content/calling-bound-and-unbound-cap-actions-from-a-fiori-elements-app.json"},{"ref":"content:side-effects-in-fiori-triggering-actions-and-updating-data-in-your-unmanaged-rap","name":"Side Effects in Fiori: Triggering Actions and Updating Data in Your Unmanaged RAP Application","json":"/content/side-effects-in-fiori-triggering-actions-and-updating-data-in-your-unmanaged-rap.json"},{"ref":"content:adding-a-custom-action-button-with-an-icon-to-a-fiori-elements-list-report","name":"Fiori Elements のList Reportアプリにカスタムアクションボタンを追加し、カスタムコントローラーを用いてアイコン化する","json":"/content/adding-a-custom-action-button-with-an-icon-to-a-fiori-elements-list-report.json"},{"ref":"content:extend-upload-set-with-table-to-fiori-elements-and-utilize-object-store","name":"Extend Upload Set with Table to Fiori Elements and utilize Object Store","json":"/content/extend-upload-set-with-table-to-fiori-elements-and-utilize-object-store.json"},{"ref":"content:cap-with-fiori-elements-actions-on-list-report-and-object-page-part-1","name":"CAP with Fiori Elements: Actions on List Report / Object Page using Annotations - Part1","json":"/content/cap-with-fiori-elements-actions-on-list-report-and-object-page-part-1.json"},{"ref":"content:cap-with-fiori-elements-actions-on-list-report-and-object-page-part-2","name":"CAP with Fiori Elements: Actions on List Report / Object Page using Annotations – Part2","json":"/content/cap-with-fiori-elements-actions-on-list-report-and-object-page-part-2.json"},{"ref":"content:cap-with-fiori-elements-configure-multiple-views-on-list-report-tables","name":"CAP with Fiori Elements: Configure Multiple Views on List Report Tables","json":"/content/cap-with-fiori-elements-configure-multiple-views-on-list-report-tables.json"},{"ref":"content:cap-dynamically-hide-ui-facets-in-fiori-elements","name":"CAP - Dynamically hide UI facets in Fiori Elements","json":"/content/cap-dynamically-hide-ui-facets-in-fiori-elements.json"},{"ref":"content:create-a-fiori-list-report-with-object-page-using-a-capm-nodejs-service","name":"Create Fiori List Report with object page using CAPM(node.js) Service","json":"/content/create-a-fiori-list-report-with-object-page-using-a-capm-nodejs-service.json"},{"ref":"content:developing-a-fiori-elements-application-using-cap","name":"Developing SAP Fiori Element application by using SAP Cloud Application Programming Model","json":"/content/developing-a-fiori-elements-application-using-cap.json"},{"ref":"content:building-an-analytical-list-page-with-cap-odata-v4","name":"Building an Analytical List Page with CAP OData V4","json":"/content/building-an-analytical-list-page-with-cap-odata-v4.json"},{"ref":"content:fiori-elements-analytical-table-with-cap-does-it-work-with-v2-and-v4","name":"Fiori Elements Analytical Table with CAP: Does it work with V2 and V4?","json":"/content/fiori-elements-analytical-table-with-cap-does-it-work-with-v2-and-v4.json"},{"ref":"content:cap-with-fiori-elements-side-effects-custom-actions-dynamic-expressions","name":"CAP with Fiori Elements: Side Effects, Custom Actions, Dynamic Expressions","json":"/content/cap-with-fiori-elements-side-effects-custom-actions-dynamic-expressions.json"},{"ref":"content:efficient-data-entry-in-sap-fiori-elements-applications","name":"How to ensure that users can efficiently enter data in SAP Fiori elements applications","json":"/content/efficient-data-entry-in-sap-fiori-elements-applications.json"},{"ref":"content:upload-data-from-excel-in-cap-nodejs","name":"Upload data from excel in CAP (Node.js)","json":"/content/upload-data-from-excel-in-cap-nodejs.json"},{"ref":"content:display-of-hierarchical-data-in-sap-fiori-elements-using-cap","name":"Display of hierarchical data in SAP Fiori elements using SAP Cloud Application Programming Model","json":"/content/display-of-hierarchical-data-in-sap-fiori-elements-using-cap.json"},{"ref":"content:case-insensitive-filters-in-fiori-elements-with-a-cap-backend","name":"Case-insensitive filters in Fiori Elements (List report + CAP)","json":"/content/case-insensitive-filters-in-fiori-elements-with-a-cap-backend.json"},{"ref":"content:extend-successfactors-on-btp-with-cap-develop-the-fiori-elements-application","name":"Extend SAP SuccessFactors on SAP BTP with CAP - Develop the SAP Fiori Elements Application","json":"/content/extend-successfactors-on-btp-with-cap-develop-the-fiori-elements-application.json"},{"ref":"content:build-and-deploy-a-cap-nodejs-api-with-fiori-elements-and-a-managed-approuter","name":"Build and deploy a CAP Project Node.js API with a SAP Fiori Elements UI and a managed approuter configuration","json":"/content/build-and-deploy-a-cap-nodejs-api-with-fiori-elements-and-a-managed-approuter.json"},{"ref":"content:the-sap-fiori-elements-feature-showcase-with-cap-cds-annotations","name":"The SAP Fiori elements feature showcase with CAP CDS annotations","json":"/content/the-sap-fiori-elements-feature-showcase-with-cap-cds-annotations.json"},{"ref":"content:tips-and-tricks-for-annotations-in-cap-projects-using-lsp","name":"Tips and Tricks for Working with Annotations in CAP Projects using Language Server Protocol (LSP) capabilities","json":"/content/tips-and-tricks-for-annotations-in-cap-projects-using-lsp.json"},{"ref":"content:fiori-elements-standard-app-extension-using-virtual-elements","name":"Fiori Elements Standard App Extension using virtual Elements: Manage Billing Document ( Real Time Extension Scenario)","json":"/content/fiori-elements-standard-app-extension-using-virtual-elements.json"},{"ref":"content:build-an-overview-page-with-hana-cloud-and-cap-service-annotations","name":"Build SAP Overview Page using SAP HANA Cloud & SAP CAP service annotations in Visual Studio Code","json":"/content/build-an-overview-page-with-hana-cloud-and-cap-service-annotations.json"},{"ref":"content:sap-cap-remote-services-and-sap-fiori-elements","name":"SAP CAP Remote Services & SAP Fiori Elements","json":"/content/sap-cap-remote-services-and-sap-fiori-elements.json"},{"ref":"content:from-r3-abap-to-cap-and-fiori-elements-deployment","name":"From R/3 ABAP to CAP/Fiori Elements on SAP BTP- Deployment","json":"/content/from-r3-abap-to-cap-and-fiori-elements-deployment.json"},{"ref":"content:from-r3-abap-to-cap-and-fiori-elements-on-sap-cloud","name":"From R/3 ABAP to CAP/Fiori Elements on SAP Cloud","json":"/content/from-r3-abap-to-cap-and-fiori-elements-on-sap-cloud.json"},{"ref":"content:discovering-fiori-elements-analytical-functions-with-sap-support-messages","name":"Discovering SAP Fiori Elements Analytical functions by implementing SAP Support Message Reporting","json":"/content/discovering-fiori-elements-analytical-functions-with-sap-support-messages.json"},{"ref":"content:create-a-fiori-elements-ui-for-cap-nodejs-applications-in-bas","name":"Create an SAP Fiori Elements UI for CAP Node.js applications in SAP Business Application Studio","json":"/content/create-a-fiori-elements-ui-for-cap-nodejs-applications-in-bas.json"},{"ref":"content:building-an-s4hana-cloud-extension-with-cap-cloud-sdk-and-fiori-elements-part-2","name":"Part 2: How to build an extension application for SAP S/4HANA Cloud using CAP, SAP Cloud SDK and SAP Fiori elements","json":"/content/building-an-s4hana-cloud-extension-with-cap-cloud-sdk-and-fiori-elements-part-2.json"},{"ref":"content:building-an-s4hana-cloud-extension-with-cap-cloud-sdk-and-fiori-elements-part-1","name":"Part 1: How to build an extension application for SAP S/4HANA Cloud using CAP, SAP Cloud SDK and SAP Fiori elements","json":"/content/building-an-s4hana-cloud-extension-with-cap-cloud-sdk-and-fiori-elements-part-1.json"},{"ref":"content:random-collection-of-useful-code-fragments-for-cap-fiori-elements-and-sapui5","name":"Random collection of useful code fragments for CAP Fiori Elements and SAPUI5","json":"/content/random-collection-of-useful-code-fragments-for-cap-fiori-elements-and-sapui5.json"},{"ref":"content:sap-fiori-elements-using-cap-model-list-report-app","name":"SAP Fiori Element using CAP Model – List Report App","json":"/content/sap-fiori-elements-using-cap-model-list-report-app.json"},{"ref":"content:sap-fiori-elements-using-cap-model-introduction","name":"SAP Fiori Elements using CAP Model - Introduction","json":"/content/sap-fiori-elements-using-cap-model-introduction.json"},{"ref":"content:developing-a-fiori-elements-app-with-cap-and-fiori-tools","name":"Developing a Fiori elements app with CAP and Fiori Tools","json":"/content/developing-a-fiori-elements-app-with-cap-and-fiori-tools.json"},{"ref":"content:developing-a-fiori-elements-list-report-and-object-page-on-a-cap-odata-service","name":"Developing Fiori Element Application (List Report and Object Page) consuming the OData service created using SAP Cloud Application Programming model","json":"/content/developing-a-fiori-elements-list-report-and-object-page-on-a-cap-odata-service.json"},{"ref":"content:introducing-the-cloud-application-programming-model-cap","name":"Introducing the Cloud Application Programming Model (CAP)","json":"/content/introducing-the-cloud-application-programming-model-cap.json"},{"ref":"content:sap-group-develop-full-stack-cap-application","name":"Develop a Full-Stack CAP Application Following SAP BTP Developer's Guide","json":"/content/sap-group-develop-full-stack-cap-application.json"},{"ref":"content:teched-2026-ct1085","name":"Explore SAP Fiori elements for ABAP developers","json":"/content/teched-2026-ct1085.json"},{"ref":"content:teched-2026-jw213","name":"SAP Fiori elements and the age of AI: Build apps that are future ready","json":"/content/teched-2026-jw213.json"}],"normative_context":[]}}