# SAP Fiori Elements Guide **Source**: Official SAP SAPUI5 Documentation **Documentation**: [https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements](https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements) **Last Updated**: 2025-11-21 --- ## Overview SAP Fiori Elements provides metadata-driven templates for creating enterprise applications without writing JavaScript UI code. Applications are configured through OData annotations and manifest.json settings. **Key Benefits**: - Rapid application development - Consistent UX across apps - Automatic updates with framework upgrades - Reduced maintenance effort - Built-in best practices **Documentation**: [https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements](https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements) --- ## Application Types ### List Report Displays data in searchable, filterable tables or charts. **Use Cases**: - Product catalogs - Sales orders - Employee lists - Any tabular data display **Key Features**: - Smart filter bar - Multi-view (table/chart) - Export to Excel/PDF - Variant management - Mass editing **Annotations**: ```xml Category Price Status ``` **manifest.json Configuration**: ```json { "sap.ui5": { "routing": { "targets": { "ProductsList": { "type": "Component", "id": "ProductsList", "name": "sap.fe.templates.ListReport", "options": { "settings": { "contextPath": "/Products", "variantManagement": "Page", "initialLoad": true, "tableSettings": { "type": "ResponsiveTable", "selectAll": true } } } } } } } } ``` --- ### Object Page Displays detailed information about a single business object across multiple sections. **Use Cases**: - Product details - Sales order details - Employee profile - Any detailed view with related data **Key Features**: - Header with key info - Sections and subsections - Facets (forms, tables, charts) - Edit mode - Actions (approve, reject, etc.) - Related objects navigation **Annotations**: ```xml ``` **manifest.json Configuration**: ```json { "sap.ui5": { "routing": { "targets": { "ProductObjectPage": { "type": "Component", "id": "ProductObjectPage", "name": "sap.fe.templates.ObjectPage", "options": { "settings": { "contextPath": "/Products", "editableHeaderContent": true, "showRelatedApps": true } } } } } } } ``` --- ### Analytical List Page Combines visual filters, charts, and tables for analytical data exploration. **Use Cases**: - Sales analytics - Financial reporting - KPI dashboards - Performance monitoring **Key Features**: - Visual filters (bar, line, donut charts) - Interactive charts - Smart filter bar - Table view - Drill-down capabilities **Annotations**: ```xml Region Sales @UI.Chart @UI.LineItem ``` --- ### Overview Page Card-based dashboard displaying key metrics and lists. **Use Cases**: - Executive dashboards - Overview screens - KPI monitoring - Multi-source data aggregation **Key Features**: - Cards (list, analytical, table) - Automatic refresh - Filter bar - Navigation to detail apps - Responsive layout **Card Configuration**: ```json { "sap.ovp": { "cards": { "salesCard": { "model": "mainService", "template": "sap.ovp.cards.charts.analytical", "settings": { "title": "Sales by Region", "subTitle": "Current Year", "entitySet": "SalesData", "chartAnnotationPath": "com.sap.vocabularies.UI.v1.Chart", "selectionAnnotationPath": "com.sap.vocabularies.UI.v1.SelectionVariant", "presentationAnnotationPath": "com.sap.vocabularies.UI.v1.PresentationVariant" } }, "productsCard": { "model": "mainService", "template": "sap.ovp.cards.list", "settings": { "title": "Top Products", "entitySet": "Products", "listType": "extended", "sortBy": "Sales", "sortOrder": "desc" } } } } } ``` --- ### Worklist Simplified list report for task-oriented applications. **Use Cases**: - Task lists - Approval workflows - Simple data management - To-do lists **Key Features**: - Table with basic filtering - Search - Item count - Quick navigation - Simplified UI compared to List Report --- ## Common Annotations ### UI Annotations **@UI.LineItem**: Table columns **@UI.SelectionFields**: Filter bar fields **@UI.HeaderInfo**: Object page header **@UI.HeaderFacets**: Header quick view **@UI.Facets**: Object page sections **@UI.FieldGroup**: Grouped fields **@UI.DataPoint**: KPI or micro-chart **@UI.Chart**: Chart definition **@UI.Identification**: Form fields ### Common Annotations **@Common.Label**: Field label **@Common.Text**: Display text for coded values **@Common.ValueList**: Value help **@Common.SemanticObject**: Navigation target ### Capabilities Annotations **@Capabilities.FilterRestrictions**: Filter limitations **@Capabilities.SortRestrictions**: Sort limitations **@Capabilities.InsertRestrictions**: Create permissions **@Capabilities.UpdateRestrictions**: Edit permissions **@Capabilities.DeleteRestrictions**: Delete permissions ### Communication Annotations **@Communication.Contact**: Contact information **@Communication.Address**: Address fields **Documentation**: [https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements](https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements) (search: annotations) --- ## Actions ### Standard Actions Automatically available for editable entities: - Create - Edit - Delete - Save - Cancel ### Custom Actions **OData Action Definition**: ```xml ``` **Annotation**: ```xml ``` **Determining Actions**: Actions shown in object page footer: ```xml ``` **Documentation**: [https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements](https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements) (search: actions) --- ## Draft Handling Enable users to save incomplete work: **OData Service**: ```xml ``` **Annotations**: ```xml ``` **Behavior**: - Edit creates draft copy - Save updates draft - Save & Exit activates draft - Cancel discards draft - Warning on navigation if unsaved changes **Documentation**: [https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements](https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements) (search: draft) --- ## Flexible Column Layout Multi-column responsive layout for master-detail-detail views: **manifest.json**: ```json { "sap.ui5": { "routing": { "config": { "routerClass": "sap.f.routing.Router", "flexibleColumnLayout": { "defaultTwoColumnLayoutType": "TwoColumnsMidExpanded", "defaultThreeColumnLayoutType": "ThreeColumnsMidExpanded" } }, "routes": [ { "pattern": "", "name": "ProductsList", "target": ["ProductsList"] }, { "pattern": "Products({key})", "name": "ProductDetail", "target": ["ProductsList", "ProductDetail"] }, { "pattern": "Products({key})/Items({itemKey})", "name": "ItemDetail", "target": ["ProductsList", "ProductDetail", "ItemDetail"] } ] } } } ``` **Layout Types**: - OneColumn - TwoColumnsBeginExpanded - TwoColumnsMidExpanded - ThreeColumnsMidExpanded - ThreeColumnsEndExpanded **Documentation**: [https://github.com/SAP-docs/sapui5/tree/main/docs/10_More_About_Controls](https://github.com/SAP-docs/sapui5/tree/main/docs/10_More_About_Controls) (search: flexible-column-layout) --- ## Building Blocks Reusable UI components for custom pages: **Usage**: ```xml ``` **Available Building Blocks**: - Table - Chart - FilterBar - Form - Field - MicroChart - ValueHelp **Documentation**: [https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements](https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements) (search: building-blocks) --- ## Extension Points Customize Fiori Elements apps without modifying templates: ### Controller Extensions **manifest.json**: ```json { "sap.ui5": { "extends": { "extensions": { "sap.ui.controllerExtensions": { "sap.fe.templates.ListReport.ListReportController": { "controllerName": "com.mycompany.myapp.ext.ListReportExtension" } } } } } } ``` **ext/ListReportExtension.controller.js**: ```javascript sap.ui.define([ "sap/ui/core/mvc/ControllerExtension" ], function(ControllerExtension) { "use strict"; return ControllerExtension.extend("com.mycompany.myapp.ext.ListReportExtension", { override: { onInit: function() { // Custom initialization }, routing: { onBeforeBinding: function(oBindingContext) { // Custom logic before binding } } }, customAction: function() { // Custom function } }); }); ``` ### Fragment Extensions Add custom content to specific locations: **manifest.json**: ```json { "sap.ui5": { "extends": { "extensions": { "sap.ui.viewExtensions": { "sap.fe.templates.ListReport.ListReport": { "ResponsiveTableColumnsExtension::Products": { "className": "sap.ui.core.Fragment", "fragmentName": "com.mycompany.myapp.ext.CustomColumns", "type": "XML" } } } } } } } ``` **ext/CustomColumns.fragment.xml**: ```xml ``` **Documentation**: [https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements](https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements) (search: extensibility, extension-points) --- ## manifest.json Configuration **Complete Example**: ```json { "_version": "1.42.0", "sap.app": { "id": "com.mycompany.products", "type": "application", "title": "{{appTitle}}", "description": "{{appDescription}}", "applicationVersion": { "version": "1.0.0" }, "dataSources": { "mainService": { "uri": "/sap/opu/odata/sap/PRODUCT_SRV/", "type": "OData", "settings": { "annotations": ["annotation"], "localUri": "localService/metadata.xml", "odataVersion": "2.0" } }, "annotation": { "type": "ODataAnnotation", "uri": "annotations/annotation.xml", "settings": { "localUri": "annotations/annotation.xml" } } } }, "sap.ui5": { "dependencies": { "minUI5Version": "1.120.0", "libs": { "sap.fe.templates": {} } }, "models": { "i18n": { "type": "sap.ui.model.resource.ResourceModel", "settings": { "bundleName": "com.mycompany.products.i18n.i18n" } }, "": { "dataSource": "mainService", "preload": true, "settings": { "defaultBindingMode": "TwoWay", "defaultCountMode": "Inline", "refreshAfterChange": false, "metadataUrlParams": { "sap-value-list": "none" } } } }, "routing": { "config": { "flexibleColumnLayout": { "defaultTwoColumnLayoutType": "TwoColumnsMidExpanded", "defaultThreeColumnLayoutType": "ThreeColumnsMidExpanded" }, "routerClass": "sap.f.routing.Router" }, "routes": [ { "pattern": ":?query:", "name": "ProductsList", "target": ["ProductsList"] }, { "pattern": "Products({key}):?query:", "name": "ProductDetail", "target": ["ProductsList", "ProductDetail"] } ], "targets": { "ProductsList": { "type": "Component", "id": "ProductsList", "name": "sap.fe.templates.ListReport", "options": { "settings": { "contextPath": "/Products", "variantManagement": "Page", "navigation": { "Products": { "detail": { "route": "ProductDetail" } } }, "initialLoad": true, "tableSettings": { "type": "ResponsiveTable", "selectAll": true, "selectionMode": "Multi" } } } }, "ProductDetail": { "type": "Component", "id": "ProductDetail", "name": "sap.fe.templates.ObjectPage", "options": { "settings": { "contextPath": "/Products", "editableHeaderContent": true } } } } } }, "sap.fiori": { "registrationIds": [], "archeType": "transactional" } } ``` --- ## Links to Official Documentation - **Fiori Elements Overview**: [https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements](https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements) - **Annotations**: [https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements](https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements) (search: annotations) - **Building Blocks**: [https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements](https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements) (search: building-blocks) - **Extensions**: [https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements](https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements) (search: extensibility) - **Draft Handling**: [https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements](https://github.com/SAP-docs/sapui5/tree/main/docs/06_SAP_Fiori_Elements) (search: draft) --- **Note**: This document covers SAP Fiori Elements configuration and usage. For specific templates and advanced scenarios, refer to the official documentation links provided.