https://raw.githubusercontent.com/ajmaradiaga/feeds/main/scmt/topics/SAPUI5-blog-posts.xmlSAP Community - SAPUI52025-11-15T06:01:37.200420+00:00python-feedgenSAPUI5 blog posts in SAP Communityhttps://community.sap.com/t5/technology-blog-posts-by-members/sapui5-treetable-expand-all-children-of-selected-nodes/ba-p/14230354SAPUI5 TreeTable: Expand All Children of Selected Nodes2025-10-08T12:48:18.544000+02:00anantkamalhttps://community.sap.com/t5/user/viewprofilepage/user-id/680907<H2 id="toc-hId-1761758054">Introduction</H2><P>When working with the <STRONG>SAPUI5 TreeTable</STRONG>, one common requirement is to let users expand nodes beyond just the first level. For example, you may want to <STRONG>expand all children of a selected node</STRONG>, and continue expanding until you reach the deepest leaf level.</P><P>The standard SAPUI5 TreeTable API gives us some basic expand/collapse options like <CODE>expandToLevel()</CODE> or expanding only specific row index, but there’s no direct way to say:</P><P><EM><span class="lia-unicode-emoji" title=":backhand_index_pointing_right:">👉🏼</span>“Take these selected nodes and expand everything under them, no matter how many levels deep.”</EM></P><P>That’s exactly the problem I ran into.</P><P>To solve this, I built a solution where <STRONG>all selected nodes are expanded recursively until their leaf nodes are visible</STRONG>. The logic works with JSON models (and technically also with OData if you load all hierarchy data upfront — with the usual performance caveats).</P><P>Here’s a quick demo of the feature in action <span class="lia-unicode-emoji" title=":backhand_index_pointing_down:">👇🏼</span></P><P><EM><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Recursive expansion ensures all children are opened — no matter how deep the hierarchy goes." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/321076i3691FA83907DC984/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="UI5-TreeTable-ExpandRecursive.gif" alt="Recursive expansion ensures all children are opened — no matter how deep the hierarchy goes." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Recursive expansion ensures all children are opened — no matter how deep the hierarchy goes.</span></span></EM></P><P> <SPAN>At first, I assumed there must be a ready-made API for this — but there isn’t. So, I decided to build a small recursive helper to achieve this behavior. In this blog, I’ll share how I extended the </SPAN><A class="" href="https://ui5.sap.com/#/entity/sap.ui.table.TreeTable/sample/sap.ui.table.sample.TreeTable.JSONTreeBinding" target="_new" rel="noopener noreferrer">official TreeTable sample</A><SPAN> to add this functionality.</SPAN></P><HR /><H2 id="toc-hId-1565244549">Why This Is Useful</H2><P>TreeTables are often used for things like:</P><UL><LI><P>Product catalogs</P></LI><LI><P>Bill of Materials (BOM)</P></LI><LI><P>Organizational hierarchies</P></LI></UL><P>And in all these cases, users don’t just want to expand one level at a time — they often want to open everything under a node they’re interested in.</P><HR /><H2 id="toc-hId-1368731044">My Approach</H2><P>The standard TreeTable APIs include:</P><UL><LI><P><CODE>collapseAll()</CODE></P></LI><LI><P><CODE>expandToLevel(level)</CODE></P></LI><LI><P><CODE>expand(rowIndex)</CODE></P></LI></UL><P>They don’t include a “recursive expand” option. So, I wrote a helper function <CODE>_expandRecursive</CODE> that expands a node and then walks through all of its children, expanding them one by one.</P><P>When recursively expanding multiple selected nodes, the <STRONG>row indices of nodes can change</STRONG> if we start expanding from the top, because expanding a node inserts its child rows and shifts the indices of the rows below it. To prevent this from breaking the expansion of other selected nodes, I sort the selected indices in <STRONG>descending order</STRONG> and expand from the <STRONG>last selected row upwards</STRONG>. Within each node, child nodes are then expanded recursively. The tiny async delay ensures that the TreeTable has time to fully process each expansion before moving to the next child, maintaining correct indexing and avoiding skipped nodes.</P><HR /><H2 id="toc-hId-1172217539">Implementation</H2><H3 id="toc-hId-1104786753">Controller (<CODE>CatalogHierarchy.controller.js</CODE>)</H3><P>Here’s the core of the solution — notice the <CODE>onExpandAllLevelsForSelection</CODE> method and the <CODE>_expandRecursive</CODE> helper:<BR /><BR /></P><pre class="lia-code-sample language-javascript"><code>sap.ui.define([
"sap/ui/core/mvc/Controller"
], (Controller) => {
"use strict";
return Controller.extend("openui5.treetable.recursiveexpand.controller.CatalogHierarchy", {
onInit() {
},
// Collapse all nodes
onCollapseAll: function() {
const oTreeTable = this.byId("TreeTableBasic");
oTreeTable.collapseAll();
},
// Collapse only selected nodes
onCollapseSelection: function() {
const oTreeTable = this.byId("TreeTableBasic");
oTreeTable.collapse(oTreeTable.getSelectedIndices());
},
// Expand first-level nodes for the entire tree
onExpandFirstLevelForAll: function() {
const oTreeTable = this.byId("TreeTableBasic");
oTreeTable.expandToLevel(1);
},
// Expand first-level nodes only for selected entries
onExpandFirstLevelForSelection: function() {
const oTreeTable = this.byId("TreeTableBasic");
oTreeTable.expand(oTreeTable.getSelectedIndices());
},
// Expand all levels recursively for selected nodes
onExpandAllevelsForSelection: function() {
const oTreeTable = this.byId("TreeTableBasic");
oTreeTable.setBusyIndicatorDelay(0).setBusy(true);
const aSelectedIndices = oTreeTable.getSelectedIndices().sort((a, b) => b - a);
// Use a chain of promises to execute the expansion sequentially
let chain = Promise.resolve();
aSelectedIndices.forEach(function (iIndex) {
chain = chain.then(function () {
return this._expandRecursive(oTreeTable, iIndex); // Return a promise from _expandRecursive
}.bind(this));
}.bind(this));
chain.then(function () {
console.log("All selected nodes and their children have been expanded.");
}).catch(function (error) {
console.error("Error expanding nodes:", error);
}).finally(function () {
oTreeTable.setBusy(false);
});
},
/**
* Recursive function to expand a node and all of its children.
* {sap.ui.table.TreeTable} oTreeTable - The TreeTable instance
* {int} iIndex - Index of the node to expand
* @returns {Promise}
*/
_expandRecursive: function (oTreeTable, iIndex) {
oTreeTable.expand(iIndex);
const oContext = oTreeTable.getContextByIndex(iIndex);
if (!oContext) {
return Promise.resolve();
}
const iChildCount = oTreeTable.getBinding("rows").getChildCount(oContext);
let chain = Promise.resolve();
// Process child nodes in reverse order
for (let i = iChildCount - 1; i >= 0; i--) {
chain = chain.then(function () {
const iChildIndex = iIndex + 1 + i;
return this._asyncDelay(0) // Delay using promises
.then(() => this._expandRecursive(oTreeTable, iChildIndex));
}.bind(this));
}
return chain; // Return the promise chain
},
/**
* Helper function to introduce async delay
* {int} ms - delay in milliseconds
* @returns {Promise}
*/
_asyncDelay: function (ms) {
return new Promise(function (resolve) {
setTimeout(resolve, ms);
});
}
});
});</code></pre><P>View (<CODE>CatalogHierarchy.view.xml</CODE>)</P><pre class="lia-code-sample language-markup"><code><mvc:View controllerName="openui5.treetable.recursiveexpand.controller.CatalogHierarchy"
xmlns="sap.ui.table"
xmlns:mvc="sap.ui.core.mvc"
xmlns:m="sap.m"
xmlns:u="sap.ui.unified"
xmlns:core="sap.ui.core"
height="100%">
<m:Page
showHeader="false"
enableScrolling="false">
<m:content>
<TreeTable
id="TreeTableBasic"
rows="{path:'/catalog/clothing', parameters: {arrayNames:['categories']}}"
selectionMode="MultiToggle"
enableSelectAll="true"
ariaLabelledBy="title">
<extension>
<m:OverflowToolbar style="Clear">
<m:Title id="title" text="Clothing"/>
<m:ToolbarSpacer/>
<m:Button text="Collapse all" press="onCollapseAll"/>
<m:Button text="Collapse selection" press="onCollapseSelection"/>
<m:Button text="Expand first level for all" press="onExpandFirstLevelForAll"/>
<m:Button text="Expand first level for selection" press="onExpandFirstLevelForSelection"/>
<m:Button text="Expand all levels for selection" press="onExpandAllevelsForSelection" type="Emphasized"/>
</m:OverflowToolbar>
</extension>
<columns>
<Column width="13rem">
<m:Label text="Categories"/>
<template>
<m:Text text="{name}" wrapping="false" />
</template>
</Column>
<Column width="9rem">
<m:Label text="Price"/>
<template>
<u:Currency value="{amount}" currency="{currency}"/>
</template>
</Column>
<Column width="11rem">
<m:Label text="Size"/>
<template>
<m:Select
items="{path: '/sizes', templateShareable: true}"
selectedKey="{size}"
visible="{= !!${size}}"
forceSelection="false">
<core:Item key="{key}" text="{value}"/>
</m:Select>
</template>
</Column>
</columns>
</TreeTable>
</m:content>
</m:Page>
</mvc:View></code></pre><HR /><H2 id="toc-hId-779190529">Things to Watch Out For</H2><UL><LI><P>Works only if the hierarchy is <STRONG>fully loaded</STRONG> (JSON model, or preloaded OData).</P></LI><LI><P>Won’t work with <STRONG>lazy loading via navigation</STRONG>.</P></LI><LI><P>Be careful with <STRONG>very large datasets</STRONG> — expanding thousands of nodes recursively can impact performance.</P></LI></UL><HR /><H2 id="toc-hId-582677024">Wrap Up</H2><P>This helper solved a real problem for me and might help you if you’re working with hierarchical data in a TreeTable. It’s simple, effective, and can be adapted to your use case.</P><P>Feel free to fork the repo or leave feedback in the comments!</P><HR /><P><span class="lia-unicode-emoji" title=":package:">📦</span><STRONG>Source Code:</STRONG> <A class="" href="https://github.com/anantkamal/ui5-treetable-recursive-expand" target="_blank" rel="noopener nofollow noreferrer">GitHub Repository</A><BR /><span class="lia-unicode-emoji" title=":globe_with_meridians:">🌐</span><STRONG>Live Demo:</STRONG> <A class="" href="https://anantkamal.github.io/ui5-treetable-recursive-expand/index.html" target="_blank" rel="noopener nofollow noreferrer">Try it out here</A></P>2025-10-08T12:48:18.544000+02:00https://community.sap.com/t5/technology-blog-posts-by-sap/what-s-new-in-sap-cloud-application-programming-model-september-2025/ba-p/14242646What's new in SAP Cloud Application Programming Model – September 20252025-10-14T09:43:07.148000+02:00BirgitShttps://community.sap.com/t5/user/viewprofilepage/user-id/41902<P><SPAN>Dear SAP Community,</SPAN></P><P>I’m happy to announce that the September release of SAP Cloud Application Programming Model (CAP) is available. It’s packed with many great new features! <SPAN>This blog post highlights some of the new features</SPAN>. It presents a range of exciting new capabilities, such as the new MCP servers or the integration with Application Frontend service. In addition, we collected <SPAN>some informative blog posts delving into various aspects of CAP and give you an overview on upcoming events.</SPAN></P><P>Check out the details of what's new!</P><P> </P><P><STRONG>Enabling Agentic Development with MCP Servers</STRONG></P><P>The <A href="https://modelcontextprotocol.io/docs/getting-started/intro" target="_blank" rel="noopener nofollow noreferrer">Model Context Protocol (MCP)</A> is an open standard that bridges the gap between large language models (LLMs) and external resources such as services, tools, data, and workflows, so models can fetch context, take actions, and deliver more accurate results. MCP is already supported by clients such as Claude, Cline, Cursor, and VS Code.</P><P>Beginning of September, SAP introduced MCP servers for <SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/boost-your-cap-development-with-ai-introducing-the-mcp-server-for-cap/ba-p/14202849" target="_blank">CAP</A></SPAN>, <SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-fiori-tools-update-first-release-of-the-sap-fiori-mcp-server-for/ba-p/14204694" target="_blank">SAP Fiori elements</A></SPAN>, and <SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/give-your-ai-agent-some-tools-introducing-the-ui5-mcp-server/ba-p/14200825" target="_blank">SAPUI5</A></SPAN>. These MCP servers are designed specifically for building enterprise-grade SAP business applications taking into account proven best practices and providing recommendations tailored to SAP Business Technology Platform.</P><P class="lia-align-center" style="text-align: center;"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="BirgitS_0-1760368014256.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/326856i59D5FACBBE59F6FD/image-size/large?v=v2&px=999" role="button" title="BirgitS_0-1760368014256.png" alt="BirgitS_0-1760368014256.png" /></span><SPAN>Welcome to cap-js/mcp-server</SPAN></P><P>For further information, I highly recommend you to read this blog post: <SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-build-introduces-new-mcp-servers-to-enable-agentic-development-for/ba-p/14205602" target="_blank">SAP Build introduces new MCP Servers to enable agentic development for Enterprise Applications</A></SPAN>.</P><P> </P><P><STRONG>Easily Integrate with Application Frontend Service </STRONG></P><P>The <SPAN><A href="https://help.sap.com/docs/application-frontend-service" target="_blank" rel="noopener noreferrer">Application Frontend service</A></SPAN> is a SaaS application on SAP Business Technology Platform (BTP), which serves as a single entry point for hosting, serving and operating frontend applications. It is part of SAP Build, SAP’s unified solution for application development and process automation. By consolidating all aspects of UI application management under one managed service, Application Frontend service simplifies the development experience and enhances custom application operations. For an introduction to Application Frontend service, please read <SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/introducing-application-frontend-service/ba-p/14091408" target="_blank">this blog post</A></SPAN>.</P><P>With our latest CAP release it is now possible to <SPAN><A href="https://cap.cloud.sap/docs/releases/sep25#cds-add-app-frontend" target="_blank" rel="noopener nofollow noreferrer">easily integrate the Application Frontend service</A></SPAN>. All you have to do is use the command <EM>cds add app-frontend</EM>. This adds all the needed configuration to your project providing you access to Application Frontend’s cool features. No additional work for you to do!</P><P>Please note: The support for this service is currently limited to single-tenant applications.</P><P> </P><P><STRONG>Integration with SAP Integration Suite, Advanced Event Mesh now Generally Available </STRONG></P><P><SPAN><A href="https://www.sap.com/products/technology-platform/integration-suite/advanced-event-mesh.html" target="_blank" rel="noopener noreferrer">SAP Integration Suite, advanced event mesh</A></SPAN> enables real-time, asynchronous communication. It works across hybrid, multi-cloud, and edge environments. The advanced event mesh integrates SAP and non-SAP systems into your event-driven architecture and allows you to form meshes of event brokers. You can publish and subscribe to business events from all kinds of SAP and non-SAP event sources. As a result, event-driven architecture and advanced event mesh keep systems and users up to date when critical changes occur. Advanced event mesh allows to manage, monitor, and visualize decentralized event streaming across your landscape.</P><P>In May, we released the <SPAN><A href="https://cap.cloud.sap/docs/releases/archive/2025/may25#aem" target="_blank" rel="noopener nofollow noreferrer">beta version of our integration with advanced event mesh</A></SPAN>. After a successful test and evaluation phase, we are now happy to tell you that both open-source plugins (for Node.js and for Java) are now <A href="https://cap.cloud.sap/docs/releases/sep25#sap-integration-suite-advanced-event-mesh-ga" target="_blank" rel="noopener nofollow noreferrer">generally available</A> (GA). The GA release comes with a notable addition: the support for cross-subaccount broker validation, allowing you to share advanced event mesh instances between multiple subaccounts.</P><P><SPAN>Additional details can be found </SPAN><A href="https://cap.cloud.sap/docs/plugins/#advanced-event-mesh" target="_blank" rel="noopener nofollow noreferrer">here</A>.</P><P> </P><P><STRONG>Translated Error Messages in CAP Node.js</STRONG></P><P>For a better user experience, error messages that appear on the UI should be translated into the same language as the rest of their application. Therefore, <A href="https://cap.cloud.sap/docs/releases/sep25#translated-error-messages" target="_blank" rel="noopener nofollow noreferrer">CAP Node.js delivers translations for annotation-based input validations</A> out of the box in all CAP-supported languages. For a list of the messages that are currently translated, see the <A href="https://cap.cloud.sap/docs/node.js/events#translations-for-validation-errors" target="_blank" rel="noopener nofollow noreferrer">documentation</A>.</P><P class="lia-align-center" style="text-align: center;"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="BirgitS_1-1760368014280.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/326857i7EC4C47075310316/image-size/large?v=v2&px=999" role="button" title="BirgitS_1-1760368014280.png" alt="BirgitS_1-1760368014280.png" /></span><SPAN>Screenshot: Translation of error codes to German language</SPAN></P><P>To learn more about error handling in Node.js, please read the following <A href="https://cap.cloud.sap/docs/node.js/events#req-reject" target="_blank" rel="noopener nofollow noreferrer">section in the documentation</A>. For additional information about internationalization in Node.js, check out <A href="https://cap.cloud.sap/docs/node.js/cds-i18n" target="_blank" rel="noopener nofollow noreferrer">this section</A>.</P><P>For those of you, who use CAP Java: translated error messages are also <SPAN><A href="https://cap.cloud.sap/docs/releases/archive/2025/jan25#default-runtime-messages-bundle" target="_blank" rel="noopener nofollow noreferrer">supported there</A></SPAN>. Please look at the <SPAN><A href="https://cap.cloud.sap/docs/java/event-handlers/indicating-errors#messages" target="_blank" rel="noopener nofollow noreferrer">documentation</A></SPAN>, to gain further insights.</P><P> </P><P><STRONG>Further Readings & Events</STRONG></P><P><STRONG>Avoiding Data Loss When Loading Initial Data with CSV Files in CAP</STRONG></P><P>Using CSV files to load initial data or sample data is convenient but you must be careful when deploying data to SAP S/4HANA Cloud as you might risk losing data. In his blog post<SPAN> <A href="https://community.sap.com/t5/technology-blog-posts-by-members/avoiding-data-loss-when-loading-initial-data-with-csv-files-in-cap/ba-p/14215172" target="_blank">Avoiding Data Loss When Loading Initial Data with CSV Files in CAP,</A></SPAN> SAP Champion Mio Yasutake explains alternative approaches how to avoid data loss.</P><P> </P><P><STRONG>Providing Feedback on CAP Documentation</STRONG></P><P>Your feedback is crucial for us to improve. Thus, we would like to ask you to share your feedback on our CAP documentation. There are many ways to provide us your feedback. In his blog post<SPAN> <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/multiple-ways-to-give-feedback-on-cap-documentation/ba-p/14199559" target="_blank">Multiple Ways to Give Feedback on CAP Documentation</A>, </SPAN>my colleague Rene guides you through the different options.</P><P><STRONG> </STRONG></P><P><STRONG>SAP Cloud Application Programming Model Customer Roundtable </STRONG></P><P>The next CAP Customer Roundtable is just around the corner. If you are interested in an overview of the recent features, demos, presentations and questions raised by the CAP community, mark your calendar for October 15th, 2025, 11 AM EST | 5 PM CE(S)T. Find further details (including the agenda and dial in data) <SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-cloud-application-programming-model-cap-customer-roundtable-october/ba-p/14222428?emcs_t=S2h8ZW1haWx8dG9waWNfc3Vic2NyaXB0aW9ufE1GWFNRMFVIVjRFMUwxfDE0MjIyNDI4fFNVQlNDUklQVElPTlN8aEs" target="_blank">in this blog post</A></SPAN>.</P><P> </P><P><STRONG>Devtoberfest 2025</STRONG></P><P><SPAN><A href="https://community.sap.com/t5/devtoberfest/gh-p/Devtoberfest" target="_blank">Devtoberfest 2025</A></SPAN> already started. In 2025, the event is taking place from September 29th until October 24th. But you can still consume the content. Devtoberfest is a virtual event giving SAP developers a great opportunity to get ready for SAP TechEd. It is packed with enablement sessions around topics in the area of CAP, ABAP, Tooling and Frontend, Integration, Data and AI, combined with a lot of fun. For further information, read the <SPAN><A href="https://community.sap.com/t5/devtoberfest-blog-posts/devtoberfest-2025-welcome/ba-p/14182817" target="_blank">Devtoberfest 2025 Welcome!</A></SPAN> blog post and join <SPAN><A href="https://community.sap.com/t5/devtoberfest/gh-p/Devtoberfest?sap-outbound-id=C5C40C877E97CD6101872ADE15DCDDA2A45F79F2" target="_blank">the Devtoberfest group</A></SPAN> in SAP Community to take part in this great event!</P><P> </P><P><STRONG>SAP TechEd 2025</STRONG></P><P>From November 4–6, 2025 <SPAN><A href="https://www.sap.com/events/teched.html" target="_blank" rel="noopener noreferrer">SAP TechEd</A></SPAN> takes place providing you the opportunity to learn about the latest innovations and advancements in SAP technologies and to connect with the community. In 2025, SAP TechEd will be a hybrid event combining the best of both worlds: the in-person event in Berlin and the virtual event. Both events are taking place in parallel. Make sure to save the date and register now for <SPAN><A href="https://www.sap.com/germany/events/teched/berlin.html" target="_blank" rel="noopener noreferrer">Berlin</A></SPAN> or <SPAN><A href="https://www.sap.com/germany/events/teched/virtual.html" target="_blank" rel="noopener noreferrer">virtual</A></SPAN>!</P><P>The session catalogs for the <SPAN><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog" target="_blank" rel="noopener noreferrer">in-person</A></SPAN> and the <SPAN><A href="https://www.sap.com/events/teched/virtual/flow/sap/tev25/catalog-virtual/page/catalog" target="_blank" rel="noopener noreferrer">virtual</A></SPAN> event are now live, featuring a wide range of topics across various tracks, where you'll find many sessions on the SAP Cloud Application Programming Model.</P><P> </P><P>For further information on new features, please have a look at the <SPAN><A href="https://cap.cloud.sap/docs/releases/" target="_blank" rel="noopener nofollow noreferrer">SAP Cloud Application Programming Model Release Notes</A></SPAN><STRONG>. If you want to stay up-to-date with news, learning resources, and product and strategy updates for CAP: </STRONG>follow our <SPAN><A href="https://community.sap.com/t5/c-khhcw49343/SAP+Cloud+Application+Programming+Model/pd-p/9f13aee1-834c-4105-8e43-ee442775e5ce" target="_blank">tag</A> </SPAN>in the SAP Community.</P><P>We look forward to seeing how you use these new capabilities to create innovative solutions and drive your projects forward. Stay tuned for more updates and happy coding! <span class="lia-unicode-emoji" title=":smiling_face_with_smiling_eyes:">😊</span></P><P> </P>2025-10-14T09:43:07.148000+02:00https://community.sap.com/t5/frontend-ui5-sap-fiori-blog-posts/how-to-speed-up-ui-development-process-using-ui5-web-components/ba-p/14243159How to speed up UI development process using UI5 web components2025-10-14T10:44:12.002000+02:00Roberto_Urbanhttps://community.sap.com/t5/user/viewprofilepage/user-id/15636<P>In the past few weeks I was asked to build a React application to be deployed on BTP. The application needs to be integrated with authentication and destinations to connect to a backend OData API.</P><P>I started with the templates available in Build Code to create an application skeleton with these capabilities, and it worked fine. The app communicated via a destination to an OData service deployed in my BTP subaccount; it required authentication. So, at first glance, my job was done.</P><P>Then I decided to change the app layout and began modifying the generated components. At that point I realized testing the changes was not straightforward. Running the app locally was possible, but to get the latest changes I had to rebuild the app completely, and that procedure takes time (almost 1 minute).</P><P>I wanted a leaner workflow to make changes and test them locally without a full rebuild every time.</P><P>Since I’m not an expert in React development, I asked a colleague, <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/33824">@rpagni</a>, for help. He has solid experience with the framework and said, “I’ve faced this problem before — let me show you how I solved it.” His idea was great: use a modern React build tool for faster builds and use the app router to handle both dev and prod versions. That way the app router can easily integrate authentication and backend communication via destinations.</P><P>Looking for examples I found this tutorial: <A class="" href="https://developers.sap.com/mission.react-spa.html" target="_new" rel="noopener noreferrer">https://developers.sap.com/mission.react-spa.html</A>. It uses React and Vite, but unfortunately it doesn’t connect to a backend service and isn’t integrated with a multitarget application (MTA).</P><P>So, together with <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/33824">@rpagni</a> we decided to document the solution step by step to share our experience. We described every aspect of what we did and explained the choices we made.</P><P> </P><H1 id="steps-to-create-a-react-application-deployable-in-btp-and-using-uaa-and-destination-services" id="toc-hId-1633686312">Steps to create a React application deployable in BTP and using UAA and Destination services</H1><H2 id="create-basic-multitarget-application" id="toc-hId-1566255526">Create Basic Multitarget Application</H2><P>Open the template wizard and start creating a Multitarget Application project. Assing to the project your preferred name.</P><H2 id="create-an-approuter-module" id="toc-hId-1369742021">Create an Approuter module</H2><P>In the MTA project create an app router module. To do that:</P><OL><LI>right click on the mta.yaml file and select <STRONG>Create MTA module from Template</STRONG>.</LI><LI>select Approuter Configuration module</LI><LI>configure the following screen with these values:<UL><LI>Application Runtime: Standalone Approuter</LI><LI>Add Authentication: Yes</LI><LI>Plan to add UI: Yes</LI></UL></LI><LI>if you want to change the app router module name, change the name to the created folder and change, in the mta.yaml file, any reference to the previous folder name with the new name assigned</LI></OL><H3 id="change-xs-security-json-to-allow-the-local-app-router-to-manage-authentication" id="toc-hId-1302311235">Change xs-security.json to allow the local app-router to manage authentication</H3><P>When you run the application, either in dev mode or in production mode, it could happen to get the error:</P><BLOCKQUOTE><P>OpenID provider cannot process the request because the redirect_uri does not match the configuration. Please contact your system administrator.</P></BLOCKQUOTE><P>This is an error related to the authentication process. The app router redirects the user session to the authetication service and this raises an error. The reason is about the fact that the expected redirect URI, provided as parameter to the authentication service, it is not part of the allowed redirect URIs. To solve this issue, add to the xs-security.json the following allowed URIs patterns. Add the following object property to the configuration (adapt the patterns to your specific subaccount URLs):</P><PRE><CODE>,
<SPAN class="">"oauth2-configuration"</SPAN>: {
<SPAN class="">"redirect-uris"</SPAN>: [
<SPAN class="">"https://*.cfapps.eu10-004.hana.ondemand.com/login/callback"</SPAN>,
<SPAN class="">"https://*.cfapps.eu10.hana.ondemand.com/login/callback"</SPAN>,
<SPAN class="">"https://*.applicationstudio.cloud.sap/login/callback"</SPAN>
]
}</CODE></PRE><H2 id="crate-a-react-vite-project" id="toc-hId-976715011">Crate a React Vite project</H2><P>Create a React project with your preferred build tool, in this case we use Vite template <A href="https://developers.sap.com/tutorials/ui5-webcomponents-react-introduction..html" target="_blank" rel="noopener noreferrer">see an example here.</A> This template will create a React project using the SAPUI5 web components</P><P>Open terminal, navigate to the project root folder and run the commands (events-app is the folder name):</P><BLOCKQUOTE><P>npx degit UI5/webcomponents-react/templates/vite-ts#main events-app</P><P>cd events-app</P><P>npm i</P></BLOCKQUOTE><H3 id="properly-setup-vite-project" id="toc-hId-909284225">Properly setup Vite project</H3><P>In the Vite project perform these activities:</P><OL><LI>change the vite.config.ts with this content:<PRE><CODE>import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; import path from "path";
<SPAN class="">export</SPAN> <SPAN class="">default</SPAN> <SPAN class="">defineConfig</SPAN>({ <BR /><SPAN class=""> plugins</SPAN>: [<SPAN class="">react</SPAN>()], <BR /> server: { <BR /> hmr: { port: <SPAN class="">5174</SPAN>, }, <BR /> }, <BR /><SPAN class=""> build</SPAN>: { <BR /><SPAN class=""> outDir</SPAN>: <SPAN class="">"../test-react-approuter/dist"</SPAN>, <BR /> emptyOutDir: true, <BR /> }, <BR /><SPAN class=""> resolve</SPAN>: { <BR /><SPAN class=""> alias</SPAN>: { <BR /><SPAN class=""> "@"</SPAN>: path.<SPAN class="">resolve</SPAN>(__dirname, <SPAN class="">"./src"</SPAN>), <BR /> }, <BR /> }, <BR />}); </CODE></PRE></LI></OL><P>purpose of this code is:</P><UL><LI>setup a fixed port (5174) for the preview service</LI><LI>define the build directory: once the project is built, this is the place where to store the built files. This config defines to store the /dist folder within the app router folder, this is needed later on when the routes are defined in the xs-app.json</LI><LI><P>set an alias on the subfolders contained within the react project source folder</P></LI><LI><P>import the path library typing the command</P><BLOCKQUOTE><P>npm i path -s</P></BLOCKQUOTE></LI><LI><P>in the tsconfig.json add, in the compilerOptions ojects, the 2 properties</P><PRE><CODE> <SPAN class="">"baseUrl"</SPAN>: <SPAN class="">"."</SPAN>,
<SPAN class="">"paths"</SPAN>: {
<SPAN class="">"@/*"</SPAN>: [<SPAN class="">"./src/*"</SPAN>]
}</CODE></PRE></LI></UL><H2 id="edit-mta-yaml-file" id="toc-hId-583688001">Edit mta.yaml file</H2><P>The purpose of this edting is to add a resource declaration to define a destination service instance, once the mta will be deployed and add a reference to this service to the app router module. The need of this setting is to allow the app router to access the destination service and connect, via a destination reported withint the xs-app.json, to the backend service needed to consume the corresponding APIs (in my case the APIs managing events data). For doing that proceed as defined here:</P><OL><LI>in the resources section (end of the file) add a resource defining a destination service instance. For example:<PRE><CODE><SPAN class=""> - name:</SPAN> dest_events-react-app
<SPAN class=""> type:</SPAN> org.cloudfoundry.managed-service
<SPAN class=""> parameters:</SPAN>
<SPAN class=""> service:</SPAN> destination
<SPAN class=""> service-name:</SPAN> dest_events-react-app
<SPAN class=""> service-plan:</SPAN> lite</CODE></PRE></LI><LI>in the app router module definition, add a reference to such a resource in the requires section:<PRE><CODE> requires:
-<SPAN class=""> <SPAN class="">name:</SPAN> events-react-app_html_repo_runtime</SPAN> <BR /> -<SPAN class=""> <SPAN class="">name:</SPAN> uaa_events-react-app</SPAN> <BR /> -<SPAN class=""> <SPAN class="">name:</SPAN> dest_events-react-app</SPAN>
</CODE></PRE></LI><LI>remove the deployer module: having selected the <STRONG>standalone app router</STRONG> as application runtime, the wizard creates.</LI></OL><H3 id="toc-hId-516257215">Build and deploy the project</H3><P>With this activity the aim is to deploy the mtar file corresponding to this project. The goal is not to have a productive version of the app, but simply to let the deployment process to istantiate the declared xsuaa and destination services. Later you will download the corresponding env data realted to them.</P><OL><LI>right click on the mta.yaml file and select the build command</LI><LI>once the build is finished, find the generated mtar file, right click on it and select to deploy (be sure to be authenticated to any valid BTP subaccount and space with some available runtime resources assigned).</LI></OL><P>Once deployed, check in the space applications to find an app named as the app router module.</P><H2 id="setup-the-app-router-module-to-manage-both-the-productive-and-the-development-app-execution" id="toc-hId-190660991">Setup the app router module to manage both the productive and the development app execution</H2><P>The goal of this step is to properly structure the app router module in order to let the user both test locally the application without any need of code rebuild and having the application working productively, as well.</P><H3 id="create-a-dev-folder-in-the-module" id="toc-hId-123230205">Create a dev folder in the module</H3><P>The purpose of this folder is to define a developer configuration for the app router. The content of this folder is used to serve the application during the development phase and not require any application build process.</P><OL><LI>create a folder called (for example) <STRONG>dev</STRONG> in the <STRONG>app-approuter</STRONG> folder</LI><LI><P>open the <STRONG>package.json</STRONG> and change the script <STRONG>start-local</STRONG> with this command:</P><BLOCKQUOTE><P>node node_modules/@sap/approuter/approuter.js --workingDir dev</P></BLOCKQUOTE><P>this commanda runs the app router with the configuration defined in the next steps in folder <STRONG>dev</STRONG></P></LI><LI>move to folder <STRONG>dev</STRONG> and copy and paste the <STRONG>xs-app.json</STRONG> file, available in the <STRONG>app-approuter</STRONG> folder</LI><LI>create a <STRONG>default-env.json</STRONG> file in the <STRONG>dev</STRONG> folder. This file will be used by the @sap/approuter library to connect to the xsuaa and destination services available in BTP. In this way, during the development phase, the developer can test the authetication/authorization (for example checking whether the assigned scopes are working properly) and the destination connectivity as per the productive version of the app. To create the file:<OL><LI>open BTP cockpit and navigate to the space applications page. Here identify the deployed app router application and click on it</LI><LI>in the menu on the left side click on the item <STRONG>Environment Variables</STRONG></LI><LI>copy the whole content in the area called <STRONG>System Provided</STRONG></LI><LI>paste the content into the file <STRONG>default-env.json</STRONG> then perform these actions:<UL><LI>delete the whole json object containing the property <STRONG>VCAP_APPLICATION</STRONG>, just keep the one containing the <STRONG>VCAP_SERVICES</STRONG> property</LI><LI>in the object VCAP_SERVICES delete the following properties: <STRONG>destination</STRONG> and <STRONG>html5-apps-repo</STRONG></LI><LI>add a property named <STRONG>destinations</STRONG> at the same level of the property <STRONG>VCAP_SERVICES</STRONG>. Its value must be:<PRE><CODE> <SPAN class="">"destinations"</SPAN>:[
{
<SPAN class="">"name"</SPAN>:<SPAN class="">"EventsBooking-app-srv2"</SPAN>,
<SPAN class="">"url"</SPAN>:<SPAN class="">"https://EventsBooking-app-srv2.dest"</SPAN>,
<SPAN class="">"proxyHost"</SPAN>:<SPAN class="">"http://127.0.0.1"</SPAN>,
<SPAN class="">"proxyPort"</SPAN>:<SPAN class="">"8887"</SPAN>
},{
<SPAN class="">"name"</SPAN>: <SPAN class="">"vite-dev-server"</SPAN>,
<SPAN class="">"url"</SPAN>: <SPAN class="">"http://localhost:5174"</SPAN>
}
]</CODE></PRE>In this section you have to add all the destionations the react app will use to get data out of external APIs. In the example above there are declared 2 destinations:<UL><LI><STRONG>EventsBooking-app-srv2</STRONG>: it is the BTP destination targeting the Events Management APIs, will be used by the app to get/store events data. Pay attention to the url parameter, it declares to use the URL defined at BTP destination level, so you don't need to hard code it. Leave the proxy parameters as in the example. These provide to BAS the way to communicate with BTP</LI><LI><STRONG>vite-dev-server</STRONG>: it is the destination targeting the URL of the local running react app. The port reported in the URL is the one defined in the file <STRONG>vite.config.ts</STRONG>. This destination let the local app router to forward the local react app calls to the running vite preview execution</LI></UL></LI></UL></LI></OL></LI><LI><P>Adjust the <STRONG>xs-app.json</STRONG> file in the <STRONG>dev</STRONG> folder: this activity has the aim to define all the local app router configurations, like for example the welcome page, the routes etc. In this case the configuration is as follow:</P><PRE><CODE> {
<SPAN class="">"welcomeFile"</SPAN>: <SPAN class="">"index.html"</SPAN>,
<SPAN class="">"authenticationMethod"</SPAN>: <SPAN class="">"route"</SPAN>,
<SPAN class="">"routes"</SPAN>: [
{
<SPAN class="">"authenticationType"</SPAN>: <SPAN class="">"xsuaa"</SPAN>,
<SPAN class="">"csrfProtection"</SPAN>: <SPAN class="">false</SPAN>,
<SPAN class="">"source"</SPAN>: <SPAN class="">"^/EventsBooking-app-srv2/(.*)$"</SPAN>,
<SPAN class="">"destination"</SPAN>: <SPAN class="">"EventsBooking-app-srv2"</SPAN>,
<SPAN class="">"target"</SPAN>: <SPAN class="">"$1"</SPAN>
},
{
<SPAN class="">"source"</SPAN>: <SPAN class="">"^/user-api(.*)"</SPAN>,
<SPAN class="">"target"</SPAN>: <SPAN class="">"$1"</SPAN>,
<SPAN class="">"service"</SPAN>: <SPAN class="">"sap-approuter-userapi"</SPAN>
},
{
<SPAN class="">"source"</SPAN>: <SPAN class="">"^(.*)$"</SPAN>,
<SPAN class="">"target"</SPAN>: <SPAN class="">"/$1"</SPAN>,
<SPAN class="">"destination"</SPAN>: <SPAN class="">"vite-dev-server"</SPAN>,
<SPAN class="">"authenticationType"</SPAN>: <SPAN class="">"none"</SPAN>
}
],
<SPAN class="">"compression"</SPAN>: {
<SPAN class="">"enabled"</SPAN>: <SPAN class="">false</SPAN>
}
}</CODE></PRE><P>the most important part is the routes array. In this array you have to define all the routes the local app router must use. Rember that the routes are processed from the top (array element 0) to the bottom (array element N). The first that matches is the one executed. In this case the meaning of the routes are:</P><OL><LI>forward to the destinantion <STRONG>EventsBooking-app-srv2</STRONG> all the app calls to URL path starting with the prefix <STRONG>/EventsBooking-app-srv2</STRONG>. All these calls are defined in the app as the once to interact with the events managment OData service</LI><LI>forward all the calls with URL path starting with <STRONG>/user-api</STRONG> to the standard <STRONG>sap-approuter-userapi</STRONG> user api service. This service provides data about current logged in user, like user name and authorization scopes assigned <A href="https://www.npmjs.com/package/@sap/approuter#user-api-service" target="_blank" rel="noopener nofollow noreferrer">see here for more info</A></LI><LI>this route forwards all the local api calls to the vite preview service running. Each and every time the react app needs to donwload an asset, a css, js, etc files these requests are routed to the preview service. this is the route that makes the magic happens, that allows the developer to test the changes without fully rebuilding the application.</LI></OL></LI></OL><H3 id="adjust-the-xs-app-json-for-the-productive-usage" id="toc-hId--148514669">Adjust the xs-app.json for the productive usage</H3><P>In the previous paragraph you setup the environment for the development phase, but once the app will be built and deployed this doesn't served the productive code. For this reason it is needed to setup the xs-app.json in the app router folder module.</P><OL><LI>open the <STRONG>xs-app.json</STRONG> file contained in the root folder of the app router module.</LI><LI>setup its content as expected for the prodcutive usage. In this example its content is:<PRE><CODE>{
<SPAN class="">"authenticationMethod"</SPAN>: <SPAN class="">"route"</SPAN>,
<SPAN class="">"welcomeFile"</SPAN>: <SPAN class="">"index.html"</SPAN>,
<SPAN class="">"routes"</SPAN>: [
{
<SPAN class="">"authenticationType"</SPAN>: <SPAN class="">"xsuaa"</SPAN>,
<SPAN class="">"csrfProtection"</SPAN>: <SPAN class="">false</SPAN>,
<SPAN class="">"source"</SPAN>: <SPAN class="">"^/EventsBooking-app-srv2/(.*)$"</SPAN>,
<SPAN class="">"destination"</SPAN>: <SPAN class="">"EventsBooking-app-srv2"</SPAN>,
<SPAN class="">"target"</SPAN>: <SPAN class="">"$1"</SPAN>
},
{
<SPAN class="">"source"</SPAN>: <SPAN class="">"^/user-api(.*)"</SPAN>,
<SPAN class="">"target"</SPAN>: <SPAN class="">"$1"</SPAN>,
<SPAN class="">"service"</SPAN>: <SPAN class="">"sap-approuter-userapi"</SPAN>
},
{
<SPAN class="">"source"</SPAN>: <SPAN class="">"^(.*)$"</SPAN>,
<SPAN class="">"target"</SPAN>: <SPAN class="">"$1"</SPAN>,
<SPAN class="">"localDir"</SPAN>: <SPAN class="">"dist"</SPAN>,
<SPAN class="">"cacheControl"</SPAN>: <SPAN class="">"no-cache, no-store, must-revalidate"</SPAN>
}
],
<SPAN class="">"compression"</SPAN>: {
<SPAN class="">"enabled"</SPAN>: <SPAN class="">false</SPAN>
}
}</CODE></PRE>the difference with the <STRONG>dev</STRONG> version of the same file is in the third route. This route says to the app router to route all the react app calls, which not have the prefixes defined by the first two ones, to the local folder called <STRONG>dist</STRONG>. This is the folder, set in the <STRONG>vite.config.ts</STRONG>, where the full build process will store the output of the build procedure. In other words, it is the folder containing the productive version of the react app code.</LI></OL><P>Once the app will be deployed and running, every local app call for downloading assets, files (like css, js, etc) will be forwarded to the content of that folder.</P><H2 id="optimize-the-mta-building-procedure" id="toc-hId--51625167">Optimize the mta building procedure</H2><P>To optimize the mta building procedure proceed as described below:</P><OL><LI><P>create a script in the package.json contained in the app router folder with this name and command:</P><BLOCKQUOTE><P>"build": "cd ../events-app && npm run build"</P></BLOCKQUOTE><P>this command allows to trigger che building of the react app as soon as the app router module build is triggered (see next paragraphs). The script move the context to the react app folder and run the build script contained there</P></LI><LI>change the mta.yaml file as following:</LI></OL><P class="lia-indent-padding-left-30px" style="padding-left : 30px;">in the app router module append the following configuration:</P><PRE><CODE> <SPAN class="">build-parameters</SPAN>:
<SPAN class="">ignore</SPAN>:
- node_modules
<SPAN class="">builder</SPAN>: custom
<SPAN class="">commands</SPAN>:
- npm run build</CODE></PRE><P class="lia-indent-padding-left-30px" style="padding-left : 30px;">this configuration avoid to include, in the final mtar file, any node_modules folder and, before build the module, runs the script <STRONG>build</STRONG> created beforehand to trigger the vite build command for the react app</P><H2 id="test-the-app-in-dev-mode" id="toc-hId--248138672">Test the app in dev mode</H2><P>To test the app in dev mode proceed as following:</P><OL><LI>open a terminal window</LI><LI>move to the react app folder</LI><LI><P>run the command</P><BLOCKQUOTE><P>npm run dev</P></BLOCKQUOTE><P>this command starts the application in dev mode on port 5174, as per app configuration. No need to rebuild the app the see the changes</P></LI><LI>open a new terminal window and move in the approuter folder</LI><LI>run the script <STRONG>start-local</STRONG>, this run the app router using the config stored in the <STRONG>dev</STRONG> folder.</LI><LI>run a preview of the app on the port 5000</LI><LI>make any change in the code, refresh the app preview and check whether the change is replicated properly</LI></OL><H2 id="toc-hId--444652177">Test the app in productive mode</H2><P>To test the app in productive mode, simply bluid the mta.yaml file and deploy the generated mtar.</P><P><STRONG>ATTENTION</STRONG>: if you deploy on the same space where you perfomed the first deployment, you need to get again the environment variables of the app, copy just the property <STRONG>xsuaa</STRONG> and used it to replace the same property in the <STRONG>defaul-env.json</STRONG> file. Remind to stop and restart the local running app router to make the change available</P><P>If you don't want to overwrite the value of the property <STRONG>xsuaa</STRONG>, deploy the app in a different space of a different account.</P>2025-10-14T10:44:12.002000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/new-tutorial-for-ui5-middleware-fe-mockserver/ba-p/14242854New tutorial for UI5 Middleware FE Mockserver2025-10-14T13:48:45.302000+02:00Marian_Zeishttps://community.sap.com/t5/user/viewprofilepage/user-id/61<P>A new hands-on tutorial is now available to accompany the Devtoberfest session <A href="https://community.sap.com/t5/devtoberfest/ui5-middleware-fe-mockserver-in-practice-setup-use-cases-live-coding/ev-p/14218989" target="_blank">UI5 Middleware FE Mockserver in Practice — Setup, Use Cases, Live Coding</A>. It’s a guided, step-by-step journey showing how to use <A href="https://www.npmjs.com/package/@sap-ux/ui5-middleware-fe-mockserver" target="_self" rel="nofollow noopener noreferrer">@sap-ux/ui5-middleware-fe-mockserver</A> productively with Fiori Elements and beyond covering setup, data strategies, actions, multi-service scenarios, tenant isolation, offline E2E testing with wdi5, and recording real backend traffic for offline replay.</P><H2 id="toc-hId-1762745962">Why this tutorial matters</H2><P>The mockserver lets you develop and test Fiori apps locally and offline with metadata-accurate data, predictable scenarios, and action implementations without waiting on backend availability. The tutorial distills best practices into small exercises you can run immediately.</P><H2 id="toc-hId-1566232457">What you’ll learn (exercise overview)</H2><TABLE border="1" width="100%"><TBODY><TR><TD><STRONG>Exercise</STRONG></TD><TD><STRONG>Focus</STRONG></TD><TD><STRONG>Key Takeaways</STRONG></TD></TR><TR><TD>1. Basic Setup – Generated Data</TD><TD>Zero-config mock data from metadata</TD><TD>Start fast; remove backend proxy for true offline; draft simulation</TD></TR><TR><TD>2. Custom JSON Data</TD><TD>Predictable datasets</TD><TD>Stable testing scenarios; relationships; consistent IDs and referential keys</TD></TR><TR><TD>3. JavaScript Logic</TD><TD>Dynamic data + actions</TD><TD>Implement <EM>getInitialDataSet</EM> and <EM>executeAction</EM>; validations; latency simulation</TD></TR><TR><TD>4. Multiple Services</TD><TD>Bookshop + Reviews</TD><TD>Microservices-style config with distinct metadata and datasets</TD></TR><TR><TD>5. Cross-Service Communication</TD><TD>Service-to-service flows</TD><TD>Trigger operations across services (e.g., promotion creates review)</TD></TR><TR><TD>6. Context-Based Isolation</TD><TD>Tenant-specific data</TD><TD>Use <EM>?sap-client=</EM> to switch tenants; optional tenant-aware logic</TD></TR><TR><TD>7. Error Handling</TD><TD>Business and system errors</TD><TD>Return 400/404/422/500/501 with helpful messages for UI testing</TD></TR><TR><TD>8. Offline E2E Testing</TD><TD>wdi5 + mockserver</TD><TD>Reliable CI-ready tests without backend dependency</TD></TR><TR><TD>9. Record Live OData</TD><TD>ui5-middleware-odata-recorder</TD><TD>Capture real backend traffic → generate mock datasets for offline replay</TD></TR></TBODY></TABLE><H2 id="toc-hId-1369718952">How to get started</H2><P>The tutorial is available in the README and is designed to run locally in small, focused apps per exercise. You’ll find commands, file locations, and ready-to-run configurations.</P><UL><LI>Tutorial (GitHub README): <A href="https://github.com/marianfoo/ui5-fe-mockserver-tutorial/blob/main/README.md" target="_blank" rel="noopener noreferrer nofollow">ui5-fe-mockserver-tutorial</A></LI><LI>Open UX OData repository: <A href="https://github.com/SAP/open-ux-odata" target="_blank" rel="noopener noreferrer nofollow">github.com/SAP/open-ux-odata</A> | Docs: <A href="https://github.com/SAP/open-ux-odata/blob/main/docs" target="_blank" rel="noopener noreferrer nofollow">API & guides</A></LI><LI>Mockserver API references: <A href="https://github.com/SAP/open-ux-odata/blob/main/docs/MockserverAPI.md#getinitialdataset" target="_blank" rel="noopener noreferrer nofollow">getInitialDataSet</A> | <A href="https://github.com/SAP/open-ux-odata/blob/main/docs/MockserverAPI.md#base-api" target="_blank" rel="noopener noreferrer nofollow">base API</A></LI><LI>OData traffic recorder: <A href="https://github.com/marianfoo/ui5-middleware-odata-recorder" target="_blank" rel="noopener noreferrer nofollow">ui5-middleware-odata-recorder</A> | <A href="https://github.com/marianfoo/ui5-middleware-odata-recorder/blob/main/README.md" target="_blank" rel="noopener noreferrer nofollow">documentation</A></LI><LI>Generate a Fiori Elements app (optional): <A href="https://developers.sap.com/tutorials/fiori-tools-generate-project.html" target="_blank" rel="noopener noreferrer">Create App with Fiori Tools</A> | <A href="https://developers.sap.com/tutorials/cp-cf-sapui5-local-setup.html" target="_blank" rel="noopener noreferrer">EasyUI5 Generator</A></LI></UL><H2 id="toc-hId-1173205447">Session context</H2><P>This tutorial was introduced in the Devtoberfest session <A href="https://community.sap.com/t5/devtoberfest/ui5-middleware-fe-mockserver-in-practice-setup-use-cases-live-coding/ev-p/14218989" target="_blank">UI5 Middleware FE Mockserver in Practice — Setup, Use Cases, Live Coding</A>, featuring live coding around configuration, data providers, offline mode, tenant-specific datasets with fallbacks, cross-service scenarios, and wdi5 integration for robust E2E tests. You can rewatch the session now.</P><H2 id="toc-hId-976691942">Links</H2><UL><LI>Devtoberfest event page: <A href="https://community.sap.com/t5/devtoberfest/ui5-middleware-fe-mockserver-in-practice-setup-use-cases-live-coding/ev-p/14218989" target="_blank">Session details</A></LI><LI>Devtoberfest event: <A href="https://www.youtube.com/watch?v=er6Mx93shJI" target="_blank" rel="noopener nofollow noreferrer">YouTube Live Stream</A></LI><LI>Tutorial (GitHub README): <A href="https://github.com/marianfoo/ui5-fe-mockserver-tutorial/blob/main/README.md" target="_blank" rel="noopener noreferrer nofollow">ui5-fe-mockserver-tutorial</A></LI><LI>Open UX OData repo & docs: <A href="https://github.com/SAP/open-ux-odata" target="_blank" rel="noopener noreferrer nofollow">Repository</A> | <A href="https://github.com/SAP/open-ux-odata/blob/main/docs" target="_blank" rel="noopener noreferrer nofollow">Documentation</A></LI><LI>Recorder middleware: <A href="https://github.com/marianfoo/ui5-middleware-odata-recorder" target="_blank" rel="noopener noreferrer nofollow">GitHub</A> | <A href="https://github.com/marianfoo/ui5-middleware-odata-recorder/blob/main/README.md" target="_blank" rel="noopener noreferrer nofollow">README</A></LI></UL>2025-10-14T13:48:45.302000+02:00https://community.sap.com/t5/technology-blog-posts-by-sap/sap-btp-developer-s-guide-extending-fiori-elements-with-the-flexible/ba-p/14242403SAP BTP Developer's Guide: Extending Fiori Elements with the Flexible Programming Model2025-10-15T10:31:07.489000+02:00Navin_Krishnanhttps://community.sap.com/t5/user/viewprofilepage/user-id/44464<DIV><SPAN>Are you leveraging the full potential of SAP Fiori Elements' Flexible Programming Model in your enterprise applications? While this powerful capability has been available for sometime now, many developers are still discovering how to effectively implement its extension points, building blocks, and controller extensions to solve real-world business requirements.<BR /><BR /></SPAN></DIV><DIV><SPAN>If you've been curious about extending your Fiori elements applications beyond standard floorplans but weren't sure where to start, the <A href="https://help.sap.com/docs/btp/btp-developers-guide/btp-developers-guide?version=Cloud" target="_self" rel="noopener noreferrer">SAP BTP Developer's Guide</A> offers a comprehensive learning path that covers this and much more.</SPAN></DIV><DIV> </DIV><H1 id="toc-hId-1633659243"><SPAN>What is the Flexible Programming Model ?</SPAN></H1><P> </P><DIV><DIV><SPAN>The <A href="https://sapui5.hana.ondemand.com/test-resources/sap/fe/core/fpmExplorer/index.html#/overview/introduction" target="_blank" rel="noopener nofollow noreferrer">Flexible Programming Model</A> offers an extensive toolkit for extending Fiori elements applications beyond standard floorplans. It provides multiple ways to customize and enhance your applications while maintaining enterprise standards and framework compliance.</SPAN></DIV><DIV><DIV><SPAN>The Flexible Programming Model encompasses four main areas:</SPAN></DIV><DIV><UL><LI><SPAN><STRONG>Extension Points: </STRONG></SPAN><SPAN>including custom sections, actions, columns, header facets, dialogs, form elements, filters, pages, views, and KPI tags.</SPAN></LI><LI><SPAN><STRONG>Building Blocks</STRONG>:</SPAN><SPAN> reusable fields such as forms, tables, charts, filter bars, and specialized controls that maintain framework compliance. These are consistently orchestrated by the framework, ensuring you automatically benefit from SAP Fiori compliance and standard application behavior like draft handling and side effects.</SPAN></LI><LI><SPAN><STRONG>Controller Extensions</STRONG>:</SPAN><SPAN> for customizing edit flows, state handling, routing, navigation, and message handling - allowing you to override specific methods to enable more flexibility while preserving framework functionality.</SPAN></LI><LI><STRONG>SAP Fiori Elements Advanced Features:</STRONG><SPAN> including sophisticated capabilities like Side Effects for dynamic UI behavior, UI.Hidden annotations for conditional visibility, UI.PartOfPreview annotations for optimized data loading, and enhanced Value Help configurations for improved user experience.</SPAN></LI></UL><DIV><DIV><SPAN>When using the Flexible Programming Model to extend your Fiori elements applications, you automatically preserve all the enterprise-ready features that SAP Fiori Elements provides out of the box:</SPAN></DIV><DIV><UL class="lia-list-style-type-square"><LI><SPAN>Accessibility</SPAN></LI><LI><SPAN>Internationalization</SPAN></LI><LI><SPAN>Mobile Compatibility</SPAN></LI><LI><SPAN>Performance Optimizations</SPAN></LI><LI><SPAN>Integration</SPAN></LI><LI><SPAN>Security</SPAN></LI><LI><SPAN>Lifecycle Stability</SPAN></LI><LI><SPAN>Test Automation Support</SPAN></LI><LI><SPAN>UX Consistency</SPAN></LI><LI><SPAN>and much more ...</SPAN></LI></UL><DIV><DIV><SPAN>The key advantage is that the Flexible Programming Model allows you to add custom functionality while maintaining all these enterprise features that would otherwise require significant manual implementation and ongoing maintenance in freestyle development.</SPAN></DIV><DIV><H3 id="toc-hId-1695311176"><SPAN>Complementary Development Approaches</SPAN></H3><P> </P><DIV><SPAN>The <A href="https://help.sap.com/docs/btp/btp-developers-guide/btp-developers-guide" target="_self" rel="noopener noreferrer">SAP BTP Developer's Guide</A> provides clear recommendations for building Fiori applications that balance rapid development with flexibility needs. Rather than viewing these as competing alternatives, the guide positions them as complementary approaches that work together to deliver consistent, enterprise-grade solutions.</SPAN></DIV><DIV> </DIV><DIV><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="fpm-options.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/325597iA4676FB41FA8BC38/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="fpm-options.png" alt="fpm-options.png" /></span></SPAN></DIV><DIV> </DIV><DIV><DIV><DIV><FONT color="#333333"><STRONG>Use SAP Fiori elements for OData V4</STRONG></FONT><SPAN> to benefit from a presentation of a common UI and UX. This approach provides the foundation for rapid development while ensuring consistency across your application portfolio. Personalization and theming are automatically supported, giving users the flexibility they need without additional development effort.</SPAN></DIV><BR /><DIV><FONT color="#333333"><STRONG>For more flexibility, use SAP Fiori element's Flexible Programming Model</STRONG></FONT><SPAN> with or without SAPUI5 Freestyle. This approach allows you to extend beyond standard capabilities while maintaining the benefits of the Fiori elements framework. The Flexible Programming Model serves as the bridge between standard floorplans and complete customization.</SPAN></DIV><BR /><DIV><FONT color="#333333"><STRONG>SAP Fiori elements and SAPUI5 help you present one consistent solution experience</STRONG></FONT><SPAN> to your customers, and you benefit from the upcoming designs and UX improvements automatically. This means your applications evolve with the platform without requiring manual updates to maintain modern standards.</SPAN></DIV><BR /><DIV><STRONG>Important consideration</STRONG><SPAN>: Remember that even the simplest UI components or more complex ones like geographic maps have compliance requirements like accessibility and theming. When extending beyond standard Fiori elements capabilities, these requirements must be carefully maintained to ensure enterprise-grade applications.</SPAN></DIV><DIV> </DIV><DIV><DIV><H3 id="toc-hId-1498797671"><SPAN>Enterprise-Grade Development on SAP BTP</SPAN></H3><P> </P><DIV><DIV><SPAN>The SAP BTP Developer's Guide serves as the comprehensive starting point for developing business applications on SAP Business Technology Platform. It provides essential recommendations and best practices that help developers navigate the complexities of enterprise application development.</SPAN></DIV><DIV> </DIV><DIV><DIV><DIV><SPAN>Within this guide, the mission </SPAN><A href="https://discovery-center.cloud.sap/missiondetail/4431/" target="_self" rel="nofollow noopener noreferrer"><SPAN>Develop an Enterprise-Grade CAP Application Following the SAP BTP Developer's Guide</SPAN></A><SPAN> offers hands-on experience with critical enterprise development topics, including Change Tracking, Audit Logging, Attachments, Freestyle SAPUI5, Flexible Programming model and more.</SPAN></DIV><DIV> </DIV><DIV><DIV><DIV><SPAN>While the mission covers multiple enterprise development aspects, the Flexible Programming Model section provides particularly valuable insights for developers looking to extend Fiori elements applications.</SPAN></DIV><DIV> </DIV><DIV><DIV><DIV><SPAN>The learning scenarios are built around the </SPAN><STRONG>Incident Management application, </STRONG><SPAN>a practical business application where organizations can maintain and track incidents on behalf of their customers. This application already features a complete UI based on the SAP Fiori elements List Report Page floorplan, providing the perfect foundation to demonstrate how the Flexible Programming Model can enhance existing standard implementations.</SPAN></DIV><DIV><DIV><DIV><SPAN>The mission showcases several key extension capabilities that go beyond standard Fiori elements floorplans:</SPAN></DIV><DIV> </DIV><DIV><DIV><DIV><STRONG>Extension Points: Custom Column</STRONG></DIV><DIV><DIV><DIV><SPAN>Learn to extend the Incidents table in the List Report Page with a custom column. This custom column demonstrates the integration of the </SPAN><A href="https://sapui5.hana.ondemand.com/#/api/sap.suite.ui.commons.MicroProcessFlow" target="_self" rel="nofollow noopener noreferrer"><SPAN>MicroProcessFlow</SPAN></A><SPAN> control, allowing processors to track incident progress directly within the table view.</SPAN></DIV><DIV> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="intro-custom-column.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/326648iA1E277FD2202C593/image-size/large?v=v2&px=999" role="button" title="intro-custom-column.png" alt="intro-custom-column.png" /></span></DIV><DIV><DIV><DIV> </DIV><DIV><STRONG>Extension Points: Custom Header Facet</STRONG></DIV><DIV><DIV><DIV><SPAN>Discover how to enhance the header section in the Object Page by adding a custom header facet. This implementation showcases the </SPAN><A href="https://sapui5.hana.ondemand.com/#/api/sap.suite.ui.commons.MicroProcessFlow" target="_blank" rel="noopener nofollow noreferrer"><SPAN>MicroProcessFlow</SPAN></A><SPAN> control in the header area, providing processors with immediate visibility into incident progress.</SPAN></DIV><DIV> </DIV><DIV><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="intro-custom-header.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/326651i7B53E28408D56C8E/image-size/large?v=v2&px=999" role="button" title="intro-custom-header.png" alt="intro-custom-header.png" /></span></SPAN></DIV><DIV> </DIV><DIV><DIV><DIV><STRONG>Extension Points: Custom Action</STRONG></DIV><DIV><DIV><DIV><SPAN>Implement a custom </SPAN><STRONG>Location</STRONG><SPAN> action in the Object Page that demonstrates practical integration of the </SPAN><A href="https://sapui5.hana.ondemand.com/#/api/sap.ui.vbm.GeoMap" target="_self" rel="nofollow noopener noreferrer"><SPAN>GeoMap</SPAN></A><SPAN> control. This custom action opens a dialog displaying customer locations, showing how to integrate specialized controls for business-specific functionality.</SPAN></DIV><DIV> </DIV><DIV><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="intro-custom-action.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/326652iAB3AAEBF3079B425/image-size/large?v=v2&px=999" role="button" title="intro-custom-action.png" alt="intro-custom-action.png" /></span></SPAN></DIV><DIV> </DIV><DIV><DIV><DIV><STRONG>Extension Points: Custom Section</STRONG></DIV><DIV><DIV><DIV><SPAN>Add a comprehensive </SPAN><STRONG>Process Flow</STRONG><SPAN><STRONG> </STRONG>custom section to the Object Page. This section demonstrates the implementation of the </SPAN><A href="https://sapui5.hana.ondemand.com/#/api/sap.suite.ui.commons.ProcessFlow" target="_self" rel="nofollow noopener noreferrer"><SPAN>ProcessFlow</SPAN></A><SPAN> control, providing detailed visualization of incident workflows and status transitions.</SPAN></DIV><DIV> </DIV><DIV><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="intro-custom-section.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/326653iF00F609BC88704A7/image-size/large?v=v2&px=999" role="button" title="intro-custom-section.png" alt="intro-custom-section.png" /></span></SPAN></DIV><DIV> </DIV><DIV><DIV><DIV><STRONG>Controller Extension</STRONG></DIV><DIV><DIV><DIV><SPAN>Learn to extend the Fiori Elements Object Page controller to customize standard behaviors. This section demonstrates how to override the edit flow while maintaining framework compliance and enterprise standards.</SPAN></DIV><DIV> </DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="intro-edit-flow.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/326654i726A2A9BA2C63984/image-size/large?v=v2&px=999" role="button" title="intro-edit-flow.png" alt="intro-edit-flow.png" /></span></DIV></DIV></DIV><DIV><SPAN> </SPAN></DIV><H1 id="toc-hId-1044118728"><SPAN>Conclusion</SPAN></H1><DIV><SPAN><SPAN>The mission </SPAN></SPAN><A href="https://discovery-center.cloud.sap/missiondetail/4431/" target="_self" rel="nofollow noopener noreferrer"><SPAN>Develop an Enterprise-Grade CAP Application Following the SAP BTP Developer's Guide</SPAN></A><SPAN> provides a comprehensive learning experience that goes beyond traditional tutorials. By combining Flexible Programming Model techniques with other essential enterprise development skills, you'll be equipped to build applications that meet real-world business requirements while maintaining the highest standards of enterprise software development.</SPAN><DIV><BR /><DIV><SPAN>Whether you're looking to extend existing Fiori elements applications or planning new enterprise solutions, this mission offers the practical, hands-on experience you need to master the art of enterprise application development on SAP BTP.</SPAN></DIV><DIV> </DIV><DIV><SPAN>Happy Learning !</SPAN></DIV><DIV> </DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV>2025-10-15T10:31:07.489000+02:00https://community.sap.com/t5/technology-blog-posts-by-sap/get-familiar-with-sap-fiori-development-portal-and-the-power-of-the/ba-p/14240041Get familiar with SAP Fiori development portal and the power of the building blocks (2 of 6)2025-10-17T11:26:13.713000+02:00marcel_waechterhttps://community.sap.com/t5/user/viewprofilepage/user-id/302397<P>In our first <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/introducing-the-sap-fiori-development-portal-your-gateway-to-rapid-sap/ba-p/14236768" target="_self">post</A>, we introduced the <A href="https://ui5.sap.com/test-resources/sap/fe/core/fpmExplorer/index.html" target="_self" rel="noopener noreferrer">SAP Fiori development portal</A> and explored the concept of building blocks. Now it's time to dive deeper and see how this portal unlocks the full potential of these enterprise-ready components. Whether you're a developer, designer, or business analyst, the portal provides an intuitive way to explore, understand, and leverage the comprehensive capabilities that SAP Fiori elements building blocks offer.</P><H2 id="toc-hId-1762678658">Exploring the Portal's Structure</H2><P>The <A href="https://ui5.sap.com/test-resources/sap/fe/core/fpmExplorer/index.html" target="_self" rel="noopener noreferrer">SAP Fiori development</A> portal organizes everything you need into four main sections, each designed to guide you through different aspects of SAP Fiori app development</P><P><STRONG>Building Blocks</STRONG><SPAN> </SPAN>- This is where the magic begins. Here you'll find all available building blocks, from the fundamental field component that forms the foundation of nearly every application, to sophisticated components like tables and charts. Each building block comes packed with enterprise-grade features that would take months to develop from scratch.</P><P><STRONG>Global Patterns</STRONG><SPAN> </SPAN>- Don't overlook this section! These non-visual building blocks are what make your applications truly enterprise-ready. Features like draft handling, internal and external navigation, and error handling ensure your apps meet the high standards users expect from SAP applications.</P><P><STRONG>Standard Floorplans</STRONG><SPAN> </SPAN>- When you need proven layouts fast, this section provides predefined combinations of building blocks optimized for common use cases like List Report and Object Page. These floorplans represent years of UX research and customer feedback, delivering consistency and developer productivity. The section also helps you explore the extension points provided by SAP Fiori elements to extend the standard floorplans. If your targeted SAP Fiori app is close to a standard floorplan, extending it using the extension points provided by SAP Fiori elements gets you to the result easily and quickly.</P><P><STRONG>Custom Pages</STRONG><SPAN> </SPAN>- For unique requirements, this section shows you how to combine both visual and non-visual building blocks to create custom layouts while retaining all the enterprise features and annotation-driven benefits.<BR /><BR /></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Structured Feature List" style="width: 263px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/325517iE7CC2E6997B3A641/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="marcel_waechter_0-1760090791648.png" alt="Structured Feature List" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Structured Feature List</span></span></P><P> </P><H2 id="toc-hId-1566165153">The Power Behind Every Building Block</H2><P>What makes these building blocks truly powerful isn't just their visual appeal - it's the comprehensive feature set that comes built-in. Take the table building block, for example. Out of the box, you get:</P><UL><LI><STRONG>Personalization capabilities</STRONG><SPAN> </SPAN>that let users customize their view</LI><LI><STRONG>Variant management</STRONG><SPAN> </SPAN>for saving and sharing different table configurations</LI><LI><STRONG>Export and import functionality</STRONG><SPAN> </SPAN>for seamless data exchange</LI><LI><STRONG>Multiple visualization options</STRONG><SPAN> </SPAN>to present data in the most effective way</LI><LI><STRONG>Extension points</STRONG><SPAN> </SPAN>that allow developers to add custom functionality without breaking the core features</LI><LI><STRONG>Responsive behavior</STRONG><SPAN> </SPAN>that adapts to different screen sizes and devices</LI><LI><STRONG>Accessibility compliance</STRONG><SPAN> </SPAN>ensuring your apps work for all users</LI></UL><P>This enterprise-grade functionality would typically require significant development effort, but with SAP Fiori elements building blocks, it's available immediately through simple annotations.</P><H2 id="toc-hId-1369651648">Hands-On Exploration Made Easy</H2><P>Every page in the portal follows a consistent structure designed for learning and experimentation:</P><UL><LI><STRONG>Focused introduction</STRONG><SPAN> </SPAN>- Each feature gets a clear, concise explanation</LI><LI><STRONG>Live samples</STRONG><SPAN> </SPAN>- See the building block in action with real data in both display and edit modes</LI><LI><STRONG>Implementation guidance</STRONG><SPAN> </SPAN>- Clear instructions showing the annotations, manifest settings, or code needed</LI><LI><STRONG>Multiple annotation formats</STRONG><SPAN> </SPAN>- Examples in CAP CDS, RAP CDS, and XML annotations for maximum compatibility</LI><LI><STRONG>Live code editing</STRONG><SPAN> </SPAN>- The integrated code editor lets you experiment and see changes instantly</LI><LI><STRONG>Further reading</STRONG><SPAN> </SPAN>- Use the link to the specific product documentation to understand further details</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Page Overview" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/325536i316C68618EAC223B/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="marcel_waechter_1-1760092109768.png" alt="Page Overview" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Page Overview</span></span></P><P> </P><H2 id="toc-hId-1173138143">What's Next</H2><P>In our next post, we'll explore how complex building blocks can be combined to create sophisticated user interfaces that handle the most demanding business scenarios. We'll show you how the portal helps you understand the relationships between different building blocks and guides you in creating cohesive, powerful applications.<BR /><BR /></P><DIV class="">To get the full overview about the SAP Fiori development portal, check out the following blog posts of the mini-series:</DIV><UL class=""><LI><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/introducing-the-sap-fiori-development-portal-your-gateway-to-rapid-sap/ba-p/14236768" target="_blank">Introducing the SAP Fiori Development Portal: Your Gateway to Rapid SAP Fiori App Creation (1 of 6)</A></LI><LI>Get familiar with SAP Fiori development portal and the power of the building blocks (2 of 6)</LI><LI><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/explore-the-potential-of-sap-fiori-development-portal-using-complex/ba-p/14257622" target="_self">Explore the potential of SAP Fiori development portal using complex building blocks (3 of 6)</A></LI><LI>Use SAP Fiori development portal to understand extension options for standard floorplans (4 of 6)</LI><LI>Prepare building custom pages by using SAP Fiori development portal (5 of 6)</LI><LI>Bringing the SAP Fiori development portal and its use to the next level (6 of 6)</LI></UL>2025-10-17T11:26:13.713000+02:00https://community.sap.com/t5/technology-blog-posts-by-sap/sap-teched-berlin-2025-analyze-and-optimize-front-end-application/ba-p/14246129SAP TechEd Berlin 2025: Analyze and optimize front-end application performance2025-10-17T17:26:12.174000+02:00Joaquin_RecioHuertashttps://community.sap.com/t5/user/viewprofilepage/user-id/1643099<P><SPAN><STRONG>A couple of words about me:</STRONG></SPAN><SPAN> </SPAN></P>
<P><SPAN>My name is Joaquin Recio Huertas and I’m a Front-End Performance Expert</SPAN><SPAN> at SAP in Germany. I have been at SAP for the past 18 years, working on several topics and positions like consultant, developer and architect but always with a strong technology focus. And this year I would be at TechEd in Berlin .</SPAN><SPAN> </SPAN></P>
<P><SPAN>Join My <A title="CA262 | Analyze and optimize front-end application performance" href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1750236796529001vunQ" target="_blank" rel="noopener noreferrer">Session</A>!</SPAN></P>
<P><SPAN>CA262 | Analyze and optimize front-end application performance</SPAN></P>
<P><SPAN><span class="lia-unicode-emoji" title=":spiral_calendar:">🗓</span> <SPAN class="">Wednesday, Nov 5 <span class="lia-unicode-emoji" title=":timer_clock:">⏲</span> </SPAN><SPAN class="">3:30 PM - 5:30 PM CET</SPAN></SPAN></P>
<P><SPAN> </SPAN></P>
<P><SPAN><STRONG>What you will learn about:</STRONG></SPAN><SPAN> </SPAN><SPAN><STRONG> </STRONG></SPAN><SPAN> </SPAN></P>
<P><SPAN>You will learn how to apply your optimization skills toward application performance. Also you will learn how to analyze for performance bottlenecks in the front-end of your application and how to identify performance problems. Find out what tools and best practices can help improve your applications based on SAPUI5 or the SAP Fiori design system.</SPAN></P>
<P><SPAN> </SPAN></P>
<P><SPAN><STRONG>Co-speakers (optional):</STRONG></SPAN><SPAN> </SPAN></P>
<P><SPAN>Simon Stemmle - Senior Developer, Performance & Scalability, SAP SE</SPAN></P>
<P><SPAN>Heiko Lenk - Product Manager for SAP Business Suite, Customer & User Experience, SAP SE</SPAN></P>
<P><SPAN>Sebastian Steinhauer - VP UX Foundation, SAP Labs, LLC. (Palo Alto)</SPAN></P>
<P><SPAN> </SPAN></P>
<P><SPAN><STRONG>Other related sessions I recommend: </STRONG></SPAN><SPAN> </SPAN></P>
<P><SPAN><A title="CA260 | Learn how to build your own app and use it in SAP Mobile Start" href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749126071945001BoPB" target="_blank" rel="noopener noreferrer">CA260 | Learn how to build your own app and use it in SAP Mobile Start</A> </SPAN></P>
<P><SPAN>Hands-on Workshop</SPAN></P>
<P><SPAN><SPAN class=""><span class="lia-unicode-emoji" title=":spiral_calendar:">🗓</span> Tuesday, Nov 4 <span class="lia-unicode-emoji" title=":timer_clock:">⏲</span> </SPAN><SPAN class="">12:30 PM - 2:30 PM CET</SPAN></SPAN></P>
<HR />
<P><A title="CA263 | Flexibility at scale with freestyle SAPUI5 and SAP Fiori elements" href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749133031978001Fkzl" target="_blank" rel="noopener noreferrer">CA263 | Flexibility at scale with freestyle SAPUI5 and SAP Fiori elements</A> </P>
<P><SPAN>Hands-on Workshop</SPAN></P>
<P><SPAN><SPAN class=""><span class="lia-unicode-emoji" title=":spiral_calendar:">🗓</span> Wednesday, Nov 5 <span class="lia-unicode-emoji" title=":timer_clock:">⏲</span> 1:00 PM - 3:00 PM CET</SPAN></SPAN></P>
<HR />
<P><A title="AD260 | UI extensibility on top of cloud and ABAP: What's in it for you" href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749723016864001j4id" target="_blank" rel="noopener noreferrer">AD260 | UI extensibility on top of cloud and ABAP: What's in it for you</A> </P>
<P><SPAN>Hands-on Workshop</SPAN></P>
<P><SPAN><SPAN class=""><span class="lia-unicode-emoji" title=":spiral_calendar:">🗓</span> Tuesday, Nov 4 <span class="lia-unicode-emoji" title=":timer_clock:">⏲</span> 10:00 AM - 12:00 PM CET</SPAN></SPAN></P>
<HR />
<P><A title="AD106 | The art and science of SAPUI5 in SAP Build" href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749120324490001V4gx" target="_blank" rel="noopener noreferrer">AD106 | The art and science of SAPUI5 in SAP Build</A> </P>
<P><SPAN>Deep Dive</SPAN></P>
<P><SPAN><SPAN class=""><span class="lia-unicode-emoji" title=":spiral_calendar:">🗓</span>Wednesday, Nov 5 <span class="lia-unicode-emoji" title=":timer_clock:">⏲</span> 10:15 AM - 11:00 AM CET</SPAN></SPAN></P>
<HR />
<P><A title="AD166 | Taking UI to the next level: Develop SAPUI5 with SAP Build" href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749120606929001fEIj" target="_blank" rel="noopener noreferrer">AD166 | Taking UI to the next level: Develop SAPUI5 with SAP Build</A> </P>
<P><SPAN>Hands-on Workshop</SPAN></P>
<P><SPAN><SPAN class=""><span class="lia-unicode-emoji" title=":spiral_calendar:">🗓</span>Thursday, Nov 6 <span class="lia-unicode-emoji" title=":timer_clock:">⏲</span> 9:00 AM - 11:00 AM CET</SPAN></SPAN></P>
<P><SPAN> </SPAN></P>
<P><SPAN><STRONG>Related community </STRONG></SPAN><SPAN><A href="https://pages.community.sap.com/topics" target="_blank" rel="noopener noreferrer"><STRONG>topic pages</STRONG></A></SPAN><SPAN><STRONG>:</STRONG></SPAN><SPAN> </SPAN></P>
<P><A title="SAPUI5" href="https://pages.community.sap.com/topics/ui5" target="_blank" rel="noopener noreferrer">SAPUI5</A> </P>
<P><SPAN> </SPAN></P>
<P><SPAN><STRONG>Looking forward to seeing you:</STRONG></SPAN><SPAN> </SPAN></P>
<P><SPAN>Don't miss the chance to get learn about front-end performance and how to optimize your application to the limit! <A href="https://www.sap.com/events/teched/berlin.html" target="_blank" rel="noopener noreferrer">Register</A> now and be part of this interactive workshop.</SPAN></P>
<P><SPAN><STRONG>Now let’s hear from you:</STRONG></SPAN><SPAN> </SPAN><SPAN> </SPAN></P>
<UL>
<LI><SPAN>What would you like to learn about Front-End Performance?</SPAN></LI>
<LI><SPAN>What is the maximum number of sequential requests? Why?</SPAN></LI>
<LI><SPAN>Do you know how to use UI5 Build and how to tweak the parameters to get the optimal result? </SPAN></LI>
</UL>
<P><SPAN> Feel free to</SPAN><SPAN> answer these questions by adding a comment in the comments section. Looking forward to hearing from you!</SPAN></P>2025-10-17T17:26:12.174000+02:00https://community.sap.com/t5/technology-blog-posts-by-sap/local-annotations-example-for-sapui5-smart-control/ba-p/14248206Local annotations example for SAPUI5 smart control2025-10-21T05:14:03.293000+02:00daniel_wang09https://community.sap.com/t5/user/viewprofilepage/user-id/138255<P>Hi All,</P><P>while developing the custom free-style UI5 app with OData v2, I’m using SAP smart controls to save some development time, and I have some examples to share.</P><H3 id="toc-hId-1892001508">PresentationVariant Annotation</H3><UL class="lia-list-style-type-lower-alpha"><LI>Defines the visualizations and sort order for the UI presentation.</LI><LI>Visualizations are defined using UI.LineItem annotation.</LI><LI>Sort order is based on the given field property in descending order.</LI><LI>Note: under my experience, if you use ResponsiveTable type, then the sorter can not be applied by annotation.</LI></UL><pre class="lia-code-sample language-markup"><code><Annotations Target="your_srv.entity_type">
<Annotation Term="com.sap.vocabularies.UI.v1.PresentationVariant">
<Record>
<PropertyValue Property="Visualizations">
<Collection>
<AnnotationPath>@UI.LineItem</AnnotationPath>
</Collection>
</PropertyValue>
<PropertyValue Property="SortOrder">
<Collection>
<Record Type="Common.SortOrderType">
<PropertyValue Property="Property" PropertyPath="field1" />
<PropertyValue Property="Descending" Bool="true"/>
</Record>
</Collection>
<Collection>
<Record Type="Common.SortOrderType">
<PropertyValue Property="Property" PropertyPath="field2" />
<PropertyValue Property="Descending" Bool="true"/>
</Record>
</Collection>
</PropertyValue>
</Record>
</Annotation>
</Annotations></code></pre><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="daniel_wang09_0-1761015055565.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/329990i1B883BDB25EE9CB9/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="daniel_wang09_0-1761015055565.png" alt="daniel_wang09_0-1761015055565.png" /></span></P><H3 id="toc-hId-1695488003"> </H3><H3 id="toc-hId-1498974498">FilterRestrictions Annotation:</H3><UL><LI>Specifies the filter restrictions for the entity type.</LI><LI>Requires filters to be applied and lists properties with filter expression restrictions.</LI><LI>In this example, both field1 and field2 are set as mandatory filters, and only a single value is allowed.</LI></UL><pre class="lia-code-sample language-markup"><code><Annotations Target="your_srv.your_srv_Entities/EntitySet">
<Annotation Term="Org.OData.Capabilities.V1.FilterRestrictions">
<Record Type="Capabilities.FilterRestrictionsType">
<PropertyValue Property="RequiresFilter" Bool="true"/>
<PropertyValue Property="RequiredProperties">
<Collection>
<PropertyPath>field1</PropertyPath>
<PropertyPath>field2</PropertyPath>
</Collection>
</PropertyValue>
<PropertyValue Property="FilterExpressionRestrictions">
<Collection>
<Record Type="Capabilities.FilterExpressionRestrictionType">
<PropertyValue Property="Property" PropertyPath="field1"/>
<PropertyValue Property="AllowedExpressions" String="SingleValue"/>
</Record>
<Record Type="Capabilities.FilterExpressionRestrictionType">
<PropertyValue Property="Property" PropertyPath="field2"/>
<PropertyValue Property="AllowedExpressions" String="SingleValue"/>
</Record>
</Collection>
</PropertyValue>
</Record>
</Annotation>
</Annotations></code></pre><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RequiresFilter to set mandatory" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/329991iD9A92E43DD13AC56/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="daniel_wang09_1-1761015210744.png" alt="RequiresFilter to set mandatory" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">RequiresFilter to set mandatory</span></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Single Value only in value help" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/329992i7F2BDE405C85D97E/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="daniel_wang09_2-1761015276270.png" alt="Single Value only in value help" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Single Value only in value help</span></span></P><H3 id="toc-hId-1302460993"> </H3><H3 id="toc-hId-1105947488">Common.FieldControl:</H3><UL><LI>Hides certain fields or properties based on field control type.</LI><LI>Used to hide fields like field1.</LI></UL><pre class="lia-code-sample language-markup"><code><Annotations Target="your_srv.EntityType/field1">
<Annotation Term="com.sap.vocabularies.Common.v1.FieldControl" EnumMember="com.sap.vocabularies.Common.v1.FieldControlType/Hidden"/>
</Annotations></code></pre><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="daniel_wang09_6-1761015921505.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/329996i3D4CB9D0554CEA4D/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="daniel_wang09_6-1761015921505.png" alt="daniel_wang09_6-1761015921505.png" /></span></P><P>You can also use this annotation to field binded Value List.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="daniel_wang09_4-1761015605116.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/329994iAD85FEF35D22E9E3/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="daniel_wang09_4-1761015605116.png" alt="daniel_wang09_4-1761015605116.png" /></span></P><P> </P><H3 id="toc-hId-909433983">Common.Text and UI.TextArrangement Annotations:</H3><UL><LI>Specifies the text arrangement.</LI><LI>Defines whether text should be displayed first, last, or only.</LI><LI>Example see below value list annotation.</LI></UL><pre class="lia-code-sample language-markup"><code><Annotations Target="your_srv.EntityType/field1">
<Annotation Term="Common.Text" Path="field1_name">
<Annotation Term="UI.TextArrangement" EnumMember="UI.TextArrangementType/TextFirst"/></Annotation>
<Annotation Term="Common.ValueList">
<Record>
<PropertyValue Property="Label" String="{i18n&gt;Field1}"/>
<PropertyValue Property="CollectionPath" String="ZEXAMPLE_VH"/>
<PropertyValue Bool="true" Property="SearchSupported"/>
<PropertyValue Property="Parameters">
<Collection>
<Record Type="Common.ValueListParameterOut">
<PropertyValue Property="LocalDataProperty" PropertyPath="field1"/>
<PropertyValue Property="ValueListProperty" String="ValueList_field1"/>
</Record>
<Record Type="Common.ValueListParameterDisplayOnly">
<PropertyValue Property="ValueListProperty" String="ValueList_field1_name" />
</Record>
</Collection>
</PropertyValue>
</Record>
</Annotation>
</Annotations></code></pre><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="daniel_wang09_5-1761015801692.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/329995iFA1586D29A3609F9/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="daniel_wang09_5-1761015801692.png" alt="daniel_wang09_5-1761015801692.png" /></span></P><P> </P><H3 id="toc-hId-712920478"> UI.HiddenFilter Annotation:</H3><UL><LI>Hides certain filters in the mentioned entity in Target attribute.</LI><LI>this can be implemented in both your data entity (hide in smartFilters) or value help entity(hide in value help dialog).</LI></UL><pre class="lia-code-sample language-markup"><code><Annotations Target="your_srv.EntityType/field1">
<Annotation Term="UI.HiddenFilter" Bool="true"/>
</Annotations></code></pre><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="daniel_wang09_7-1761015965872.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/329997iE64CA7BDB52186EC/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="daniel_wang09_7-1761015965872.png" alt="daniel_wang09_7-1761015965872.png" /></span></P><P> </P><P>You can also find some local annotation examples in this blog by <SPAN>Chandra: <A title="Some of UI annotations/Local annotations for LROP Fiori application." href="https://community.sap.com/t5/technology-blog-posts-by-members/some-of-ui-annotations-local-annotations-for-lrop-fiori-application/ba-p/13526816" target="_blank">https://community.sap.com/t5/technology-blog-posts-by-members/some-of-ui-annotations-local-annotations-for-lrop-fiori-application/ba-p/13526816</A> </SPAN></P><P><SPAN>I hope my examples are clear and can save some of your development time.</SPAN></P><P> </P><P><SPAN>Thanks,</SPAN></P><P><SPAN>Daniel</SPAN></P><P> </P>2025-10-21T05:14:03.293000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/sap-ui5-application-to-export-data-to-spreadsheet-from-sap-ui5-tree-table/ba-p/14249006SAP UI5 application to Export Data to spreadsheet from SAP UI5 tree table (sap.ui.table.TreeTable)2025-10-23T06:28:28.730000+02:00sreevedavyasarangarajasre91https://community.sap.com/t5/user/viewprofilepage/user-id/834934<P><STRONG>Introduction</STRONG> : <BR /><SPAN> In this article, we are going to understand how to implement </SPAN><STRONG>export</STRONG><SPAN> functionality the</SPAN><STRONG><SPAN> </SPAN>sap.ui.table.TreeTable</STRONG><SPAN> table data to the </SPAN><STRONG>excel(Spreadsheet)</STRONG><SPAN> using </SPAN><STRONG>sap.ui.export.Spreadsheet</STRONG><SPAN> library. In this application, we are going to create an SAP UI5 free style application which has sample JSON data that has employees and their family details for the expense share percentage of the medical insurance (taken as an example) and that has been binded to the UI table and a toggle button has been added to trigger the export or downloading the excel data.</SPAN><BR /><BR /><STRONG>Procedure: </STRONG><BR />This is step by step guide to create a fiori application with SAP UI5 UI table and Export Button<STRONG><BR />Step 1: Create a Fiori Project</STRONG></P><P>To begin, create a new SAP Fiori project using the <STRONG> Fiori Generator Freestyle - Basic</STRONG> template. This will serve as the foundation for our application.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sreevedavyasarangarajasre91_0-1761026930836.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/330059iEE3F334A4641AD01/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="sreevedavyasarangarajasre91_0-1761026930836.png" alt="sreevedavyasarangarajasre91_0-1761026930836.png" /></span></P><P> </P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sreevedavyasarangarajasre91_1-1761026930838.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/330061iF1BDA0F0F094AF26/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="sreevedavyasarangarajasre91_1-1761026930838.png" alt="sreevedavyasarangarajasre91_1-1761026930838.png" /></span></P><P> </P><P>Application Folder Structure: </P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sreevedavyasarangarajasre91_2-1761026930840.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/330060iCB5EEBE655CB2AC3/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="sreevedavyasarangarajasre91_2-1761026930840.png" alt="sreevedavyasarangarajasre91_2-1761026930840.png" /></span></P><P> </P><P><STRONG>Step 2 : Create a Dynamic Page , add UI Table Details and Add the sample JSON Data in controller </STRONG></P><P> In TreeTableView.view.xml, Add this code and add the Sample JSON data model object in the onInit() in TreeTableView.Controller.js .<BR /><BR />TreeTableView.view.xml</P><pre class="lia-code-sample language-markup"><code><mvc:View
controllerName="com.example.treeexporttoexcel.controller.TreeTableView"
xmlns:mvc="sap.ui.core.mvc"
xmlns="sap.m"
xmlns:table="sap.ui.table"
>
<Page
id="page"
title="{i18n>title}"
>
<content>
<table:TreeTable
id="employeeTreeTable"
selectionMode="None"
enableColumnReordering="false"
rows="{
path : '/Employees',
parameters :{
arrayNames:['Employees','FamilyMembers']
}
}"
>
<table:extension>
<OverflowToolbar>
<Title text="{i18n>title}" />
<ToolbarSpacer />
<ToggleButton id="export_btn" text="{i18n>export_btn}" icon="sap-icon://excel-attachment" press="onExcelExport"/>
</OverflowToolbar>
</table:extension>
<table:columns>
<table:Column>
<table:label>
<Text text="{i18n>employeeID}" />
</table:label>
<table:template>
<Text text="{EmployeeID}" />
</table:template>
</table:Column>
<table:Column>
<table:label>
<Text text="{i18n>employeeName}" />
</table:label>
<table:template>
<Text text="{EmployeeName}" />
</table:template>
</table:Column>
<table:Column>
<table:label>
<Text text="{i18n>designation}" />
</table:label>
<table:template>
<Text text="{Designation} " />
</table:template>
</table:Column>
<table:Column>
<table:label>
<Text text="{i18n>familyMemberName}" />
</table:label>
<table:template>
<Text text="{MemberName}" />
</table:template>
</table:Column>
<table:Column>
<table:label>
<Text text="{i18n>relation}" />
</table:label>
<table:template>
<Text text="{Relationship}" />
</table:template>
</table:Column>
<table:Column>
<table:label>
<Text text="{i18n>age}" />
</table:label>
<table:template>
<Text text="{Age}" />
</table:template>
</table:Column>
<table:Column>
<table:label>
<Text text="{i18n>expense}" />
</table:label>
<table:template>
<Text text="{ExpenseShare}" />
</table:template>
</table:Column>
</table:columns>
</table:TreeTable>
</content>
</Page>
</mvc:View></code></pre><P>TreeTable.controller.js</P><pre class="lia-code-sample language-javascript"><code>sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/json/JSONModel",
"sap/m/MessageToast",
"sap/ui/export/Spreadsheet"
], (Controller, JSONModel, MessageToast, Spreadsheet) => {
"use strict";
return Controller.extend("com.example.treeexporttoexcel.controller.TreeTableView", {
onInit() {
var oView = this.getOwnerComponent();
var oDataModel = new JSONModel();
var aData = {
"Employees": [
{
"EmployeeID": "E001",
"EmployeeName": "Ramesh",
"Designation": "Manager",
"FamilyMembers": [
{
"MemberName": "Anitha",
"Age": 35,
"Relationship": "Wife",
"ExpenseShare": 40
},
{
"MemberName": "Rohith",
"Age": 10,
"Relationship": "Son",
"ExpenseShare": 20
},
{
"MemberName": "Ramanaiah",
"Age": 65,
"Relationship": "Father",
"ExpenseShare": 20
},
{
"MemberName": "Kamala",
"Age": 60,
"Relationship": "Mother",
"ExpenseShare": 20
}
]
},
{
"EmployeeID": "E002",
"EmployeeName": "Sumana",
"Designation": "Developer",
"FamilyMembers": [
{
"MemberName": "Bhargav",
"Age": 35,
"Relationship": "Husband",
"ExpenseShare": 20
},
{
"MemberName": "Prasanna",
"Age": 9,
"Relationship": "Daughter",
"ExpenseShare": 20
},
{
"MemberName": "Ananda",
"Age": 58,
"Relationship": "Father",
"ExpenseShare": 40
},
{
"MemberName": "Srinidhi",
"Age": 55,
"Relationship": "Mother",
"ExpenseShare": 20
}
]
},
{
"EmployeeID": "E003",
"EmployeeName": "Manish",
"Designation": "Auditor",
"FamilyMembers": [
{
"MemberName": "Bhumesh",
"Age": 58,
"Relationship": "Father",
"ExpenseShare": 60
},
{
"MemberName": "Rajeswari",
"Age": 50,
"Relationship": "Mother",
"ExpenseShare": 40
}
]
}
]
}
oDataModel.setData(aData);
oView.setModel(oDataModel);
},
});
}); </code></pre><P><STRONG>Step 3 : Implement the press event trigger of the Export To excel Button<BR /></STRONG> Add this logic in controller.js . "sap/ui/export/Spreadsheet" is the library should be used for excel export.<BR />_convertTreeForExport() is a recursive function to fetch the child records converts to flat structure and pushes to the export data where this export data is passed to the settings of the excel sheet data.<BR />TableView.controller.js</P><pre class="lia-code-sample language-javascript"><code> onExcelExport() {
var oBundle = this.getOwnerComponent().getModel("i18n").getResourceBundle();
var oTable = this.byId("employeeTreeTable");
var oBinding = oTable.getBinding("rows");
var aData = oBinding.getModel().getProperty("/Employees");
var aExportData = this._convertTreeForExport(aData);
var aCols = [
{
label : oBundle.getText("employeeID"),
property :"EmployeeID"
},
{
label : oBundle.getText("employeeName"),
property :"EmployeeName"
},
{
label : oBundle.getText("designation"),
property :"Designation"
},
{
label :oBundle.getText("familyMemberName"),
property :"MemberName"
},
{
label : oBundle.getText("relation"),
property :"Relationship"
},
{
label : oBundle.getText("age"),
property :"Age"
}, {
label : oBundle.getText("expense"),
property :"ExpenseShare"
}
]
var oSettings = {
workbook: {
columns: aCols,
context: {
sheetName: oBundle.getText("sheetName")
}
},
dataSource: aExportData,
fileName: oBundle.getText("fileName"),
worker: false
};
var oSpreadsheet = new Spreadsheet(oSettings);
oSpreadsheet.build().then(function () {
MessageToast.show(oBundle.getText("successMessage"));
}).finally(function () {
oSpreadsheet.destroy();
})
},
_convertTreeForExport(aNodes, iLevel =0, aResult =[]){
// aNodes will have the tree table data
// iLevel -> current hierarchy depth initializes with 0
// aResult -> collector array of the flattened data
aNodes.forEach(oNode => {
// taking shallow copy of each node to perform manipulations on the copy node without // disturbing the actual data node
var oCopy = { ...oNode };
// deleting FamilyMembers nested structure to avoid recursion loops if not deleted it will throw // the maximum call stack exceeded error
delete oCopy.FamilyMembers;
oCopy.level = iLevel + 1;
// creates a new field for visualize indentation parent, child, grandchild etc.,
oCopy.IndentedName = `${"".repeat(iLevel*4)}${oNode.name}`
aResult.push(oCopy);
if(oNode.FamilyMembers && oNode.FamilyMembers.length > 0){
this._convertTreeForExport(oNode.FamilyMembers, iLevel + 1, aResult);
}
});
return aResult
}</code></pre><P><STRONG>Application Screen</STRONG>:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sreevedavyasarangarajasre91_3-1761027084786.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/330065iD2998D9246DD1A27/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="sreevedavyasarangarajasre91_3-1761027084786.png" alt="sreevedavyasarangarajasre91_3-1761027084786.png" /></span></P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sreevedavyasarangarajasre91_4-1761027084790.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/330066iA38049D75D1F41D9/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="sreevedavyasarangarajasre91_4-1761027084790.png" alt="sreevedavyasarangarajasre91_4-1761027084790.png" /></span></P><P> </P><P>ExportData.xlsx</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sreevedavyasarangarajasre91_5-1761027084792.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/330064iEB0B7E12C7040BBA/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="sreevedavyasarangarajasre91_5-1761027084792.png" alt="sreevedavyasarangarajasre91_5-1761027084792.png" /></span></P><P> </P><P> </P><P>Git Link for reference<BR /><A href="https://github.com/RangarajasreeSV/tree-table-export-to-excel-ui5" target="_blank" rel="noopener nofollow noreferrer">https://github.com/RangarajasreeSV/tree-table-export-to-excel-ui5</A><BR /><BR /></P><P><STRONG>Conclusion: <BR /></STRONG>By following these steps, We can achieve the export functionality of the The SAP UI tree table data to the Excel spreadsheet.<BR /><BR /><BR />Thanks and Regards,<BR />Sree Vedavyasa Rangarajasree</P>2025-10-23T06:28:28.730000+02:00https://community.sap.com/t5/technology-blog-posts-by-sap/exciting-ux-talks-at-teched-virtual-or-meet-us-in-berlin-and-on-the-road/ba-p/14252047Exciting UX talks at TechEd – Virtual, or meet us in Berlin and On The Road (USA, India, Australia)2025-10-23T20:25:57.813000+02:00ThomasReisshttps://community.sap.com/t5/user/viewprofilepage/user-id/149639<P>For <A href="https://www.sap.com/germany/events/teched.html" target="_blank" rel="noopener noreferrer">TechEd 2025</A> we have an exciting agenda lined up for all of you interested in SAP user experience. We not only have many interesting talks and hands-on sessions for creators (designer and developers) but also some talks showing our strategy and latest innovations for end users – which hopefully will inspire you when creating your own applications!</P><P>With TechEd Virtual, you can watch some of these talks from wherever you are around the world. Here’s an overview of the talks which are primarily relevant for user experience, starting with TechEd Virtual, and then moving on to the individual locations.</P><P>For TechEd Virtual, Berlin and Bangalore: the main sub-tracks to look out for are:</P><UL><LI><STRONG>Product and User Experience</STRONG>,<BR />in the Cloud Application (CA) track<SPAN>.</SPAN></LI></UL><UL><LI><STRONG>AI-driven user experiences with SAP Build</STRONG>,<BR />in the Application Development and Automation (AD) track.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="TechEd 2025 screenshot.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/331753i425F7C9F3AA437B3/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="TechEd 2025 screenshot.png" alt="TechEd 2025 screenshot.png" /></span></P><H1 id="toc-hId-1634579048">TechEd Virtual</H1><UL><LI><A href="https://www.sap.com/events/teched/virtual/flow/sap/tev25/catalog-virtual/page/catalog/session/1751961508905001rpeo" target="_blank" rel="noopener noreferrer">ST112v</A> |<STRONG> AI and the future of product and user experience on the web and mobile </STRONG>(Strategy Talk – 25 Min.)</LI><LI><A href="https://www.sap.com/events/teched/virtual/flow/sap/tev25/catalog-virtual/page/catalog/session/1753179705783001L1CP" target="_blank" rel="noopener noreferrer">CA201v</A> | <STRONG>Creating AI-enhanced UX for your own applications with SAP Design System</STRONG><STRONG> (</STRONG>Deep Dive – 45 Min.)</LI><LI><A href="https://www.sap.com/events/teched/virtual/flow/sap/tev25/catalog-virtual/page/catalog/session/1752171998192001r6Q2" target="_blank" rel="noopener noreferrer">ST116v</A> | <STRONG>SAP Build for all: A shift toward AI-assisted developer-centric tools</STRONG> (Strategy Talk – 25 Min.)</LI><LI><A href="https://www.sap.com/events/teched/virtual/flow/sap/tev25/catalog-virtual/page/catalog/session/1752166265407001r3vW" target="_blank" rel="noopener noreferrer">AD106v</A> | <STRONG>The art and science of SAPUI5 in SAP Build</STRONG> (Deep Dive – 45 Min.)</LI><LI><A href="https://www.sap.com/events/teched/virtual/flow/sap/tev25/catalog-virtual/page/catalog/session/1752166275661001rDNm" target="_blank" rel="noopener noreferrer">AD820v</A> | <STRONG>Future of app dev in SAP Build: Simplifying clean core and LoB extensions</STRONG> (Road Map – 25 Min.)</LI></UL><P> </P><H1 id="toc-hId-1438065543">TechEd Berlin (and Bangalore)</H1><P>All the sessions below are taking place in <A href="https://www.sap.com/events/teched/berlin.html" target="_blank" rel="noopener noreferrer">TechEd Berlin</A>, and also <A href="https://go4.events.sap.com/apj-savethedatetechedontourbangalore2025/en_us/home.html" target="_blank" rel="noopener noreferrer">TechEd On Tour Bangalore</A> except the strategy sessions (which is available on-demand via TechEd Virtual), and the demo stations, since Bangalore has a different approach to providing demos.</P><H2 id="toc-hId-1370634757">Cloud Applications - Product and User Experience</H2><UL><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749124796213001k8GQ" target="_blank" rel="noopener noreferrer">ST112</A> | <STRONG>AI and the future of product and user experience on the web and mobile</STRONG> - Strategy Talk</LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749125066259001P578" target="_blank" rel="noopener noreferrer">CA811</A> | <STRONG>User and product experience innovations by SAP—on the web and mobile</STRONG> - Road Map</LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749126203112001bccw" target="_blank" rel="noopener noreferrer">CA201</A> | <STRONG>Creating AI-enhanced UX for your own applications with SAP Design System</STRONG> - Deep Dive</LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749126322451001Fcbi" target="_blank" rel="noopener noreferrer">CA261</A> | <STRONG>Create great UX with AI, SAP Design System, SAP Fiori elements, and SAPUI5</STRONG> – Hands-On</LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1750839413578001LMH0" target="_blank" rel="noopener noreferrer">CA105</A> | <STRONG>Intelligent app development at scale with AI and SAP Fiori elements</STRONG> – Deep Dive</LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1750236796529001vunQ" target="_blank" rel="noopener noreferrer">CA262</A> | <STRONG>Analyze and optimize front-end application performance</STRONG> – Hands-on</LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749125350426001FplJ" target="_blank" rel="noopener noreferrer">CA200</A> | <STRONG>An overview of our AI-enhanced mobile products across SAP Business Suite</STRONG> - Deep Dive</LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1750411628629001DsH7" target="_blank" rel="noopener noreferrer">AD170</A> | <STRONG>Build scalable enterprise mobile solutions with SAP Build</STRONG> - Hands-on</LI></UL><P>In addition to the above talks, you can come and visit us at our demo station:</P><UL><LI><U><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749125243833001V7mT" target="_blank" rel="noopener noreferrer">CA914</A></U> | <STRONG>AI-based user and product experience innovations on the web and mobile </STRONG>– Demo station</LI></UL><H2 id="toc-hId-1174121252">Application Development and Automation</H2><UL><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749723196132001T2Gq" target="_blank" rel="noopener noreferrer">ST117</A> | <STRONG>SAP’s user experience strategy with SAP Build</STRONG> – Strategy</LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749722686293001POLV" target="_blank" rel="noopener noreferrer">ST116</A> | <STRONG>SAP Build for all: A shift toward AI-assisted developer-centric tools</STRONG> – Strategy</LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749724635699001LeeG" target="_blank" rel="noopener noreferrer">AD818</A> | <STRONG>Explore the road map for user experience with SAP Build</STRONG> – Road Map</LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749725274909001arjs" target="_blank" rel="noopener noreferrer">AD820</A> |<STRONG> Future of app dev in SAP Build: Simplifying clean core and LoB extensions</STRONG></LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749120324490001V4gx" target="_blank" rel="noopener noreferrer">AD106</A> | <STRONG>The art and science of SAPUI5 in SAP Build</STRONG> – Deep Dive</LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749120606929001fEIj" target="_blank" rel="noopener noreferrer">AD166</A> | <STRONG>Taking UI to the next level: Develop SAPUI5 with SAP Build</STRONG> – Hands-on</LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749035762077001TCJM" target="_blank" rel="noopener noreferrer">AD200</A> | <STRONG>Unlocking the full potential of business users with SAP Build</STRONG> – Deep Dive</LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749120430213001bT4O" target="_blank" rel="noopener noreferrer">AD165</A> | <STRONG>Build it yourself: Your modern digital workplace</STRONG> – Hands-on</LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1748962788551001QkBk" target="_blank" rel="noopener noreferrer">AD100</A> | <STRONG>SAP Joule for developers: How AI can boost your development in SAP Build</STRONG> – Deep Dive</LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749026440693001OGfF" target="_blank" rel="noopener noreferrer">AD160</A> | <STRONG>Get hands-on with Joule: Boost your SAP Build development with AI</STRONG> – Hands-on</LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749110615653001ATih" target="_blank" rel="noopener noreferrer">AD201</A> | <STRONG>Explore ABAP Cloud in SAP Build: What's in it for ABAP developers</STRONG> – Deep Dive</LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749111362893001Nrqs" target="_blank" rel="noopener noreferrer">AD163</A> | <STRONG>Fusion development with ABAP Cloud in SAP Build </STRONG>– Hands-on</LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749722922001001vBgc" target="_blank" rel="noopener noreferrer">AD203</A> | <STRONG>Fact-checking UI extensibility on cloud and ABAP: What's in it for you</STRONG> – Deep Dive</LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749723016864001j4id" target="_blank" rel="noopener noreferrer">AD260</A> | <STRONG>UI extensibility on top of cloud and ABAP: What's in it for you</STRONG> – Hands-on</LI></UL><P>The corresponding demo station is:</P><P><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1752569494228001NGZf" target="_blank" rel="noopener noreferrer">AD901</A> | <STRONG>SAP Build: AI agents, automations, and digital workspaces </STRONG>– Demo station</P><P>For a comprensive overview of sessions relevant for SAPUI5 developers, including the abstracts, look at:</P><UL><LI><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/join-sapui5-sessions-at-sap-teched-2025/ba-p/14227900" target="_blank">Join SAPUI5 Sessions at SAP TechEd 2025</A></LI></UL><P>Similarly, for an overview of all the sessions of interest for mobile development, including abstracts, see:</P><UL><LI><A href="https://community.sap.com/t5/sap-teched-blog-posts/sap-teched-2025-go-mobile/ba-p/14223700" target="_blank">SAP TechEd 2025 - Go Mobile!!!</A></LI></UL><P>Joule and Agentic AI is of course also relevant for creating a great user experience, here are some recommended deep dives:</P><UL><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749827411517001HYj5" target="_blank" rel="noopener noreferrer">AI100</A> | <STRONG>Build custom AI solutions with the generative AI hub</STRONG></LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749828436581001o7y8" target="_blank" rel="noopener noreferrer">AI103</A> | <STRONG>Integrating Joule with other tools such as WalkMe and Microsoft 365 Copilot</STRONG></LI><LI><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1750239638703001lq4E" target="_blank" rel="noopener noreferrer">AI105</A> | <STRONG>Building custom AI agents and skills with Joule Studio</STRONG></LI></UL><H2 id="toc-hId-977607747">Usability Testing sessions on-site in Berlin</H2><P>You can sign up to test one of these interesting topics in Berlin:</P><OL><LI>Exploring Joule and voice – understanding mobile AI in your daily work</LI><LI>Redesigning the dashboard building experience with SAP Analytics Cloud</LI><LI>Building AI agents with Joule Studio in SAP Build</LI><LI>Vibe coding with SAP Build</LI><LI>Accelerate your cloud implementation: Business configuration templates in SAP Central Business Configuration</LI><LI>Supercharge your SAP Fiori elements app development with SAP Fiori tools and AI</LI></OL><P><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/join-sap-usability-testing-sessions-at-sap-teched-berlin-influence-your/ba-p/14196924" target="_blank">Find out more and register for testing!</A></P><P> </P><H1 id="toc-hId-652011523">TechEd On Tour USA</H1><P><A href="https://events.asug.com/event/ahttps:/events.asug.com/event/e7bd56fe-4c89-4e90-bc2c-ff75b4cc099b/asug-tech-connect" target="_blank" rel="noopener nofollow noreferrer">ASUG Tech Connect</A> November 4 – 6 in Louisville, Kentucky has a number of interesting talks and hands-on sessions for you. These are my selection of <A href="https://events.asug.com/event/e7bd56fe-4c89-4e90-bc2c-ff75b4cc099b/agenda?3f61bad9-5e63-4e7a-81be-1601e70a47c0_3f61bad9=SAP%20Fiori%20(User%20Experience)" target="_blank" rel="noopener nofollow noreferrer">sessions related to SAP Fiori</A>:</P><UL><LI>Creating Better User Experiences with AI-Powered SAP Fiori Apps</LI><LI>Using Generative AI to Accelerate SAP Fiori App Development</LI><LI>Extensibility with ABAP Cloud and AI in SAP Cloud ERP</LI><LI>Explore ABAP Cloud in SAP Build: What's in it For ABAP Developers</LI><LI>Customer Show and Tell: From CDS View to Fiori Launchpad: Full-Stack Development with Eclipse ADT with Naturipe</LI></UL><P>Here are my <A href="https://events.asug.com/event/e7bd56fe-4c89-4e90-bc2c-ff75b4cc099b/agenda?" target="_blank" rel="noopener nofollow noreferrer">selected Hands-on Lab sessions</A>:</P><UL><LI>Get Started with ABAP Cloud for Classic ABAP Developers</LI><LI>Hands-on Lab: Explore Joule for Developers, ABAP AI Capabilities</LI><LI>Hands-on Lab: Build On-Stack Extensions with ABAP Cloud in SAP Cloud ERP</LI></UL><P>This blog post by Peter Spielvogel, who is a speaker there, gives an overview including abstracts:</P><UL><LI><A href="https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-sap/ux-and-application-development-with-ai-at-asug-tech-connect-2025-a/ba-p/14252832" target="_blank">UX and application development with AI at ASUG Tech Connect 2025 a companion event to SAP TechEd</A>.</LI></UL><P> </P><H1 id="toc-hId-455498018">TechEd On Tour Australia</H1><P><A href="https://events.masteringsap.com/sydney2025" target="_blank" rel="noopener noreferrer">Mastering SAP, Sydney</A> November 12 – 14 in Sydney has these UX talks for you, each 45 minutes. The first one is unique to Sydney, by Jocelyn Dart, the other four are the same as in Berlin and Bangalore:</P><UL><LI><A href="https://www.masteringsap.events/collaborate-sap-teched-on-tour/session/3382255/ad300-sap-user-experience-is-the-foundation-for-ai-and-clean-core" target="_blank" rel="noopener nofollow noreferrer">AD300</A> | <STRONG>SAP User Experience is the foundation for AI and Clean Core</STRONG></LI><LI><A href="https://www.masteringsap.events/collaborate-sap-teched-on-tour/session/3382250/ad301-ai-for-app-development-at-scale-with-sap-design-system-sap-fiori-elements" target="_blank" rel="noopener nofollow noreferrer">AD301</A> | <STRONG>AI for App Development at Scale with SAP Design System & SAP Fiori Elements</STRONG></LI><LI><A href="https://www.masteringsap.events/collaborate-sap-teched-on-tour/session/3382276/ad302-ai-assisted-user-experience-innovations-in-sap-cloud-erp" target="_blank" rel="noopener nofollow noreferrer">AD302</A> | <STRONG>AI-Assisted User Experience Innovations in SAP Cloud ERP</STRONG></LI><LI><A href="https://www.masteringsap.events/collaborate-sap-teched-on-tour/session/3341652/ad106-the-art-and-science-of-sapui5-in-sap-build" target="_blank" rel="noopener nofollow noreferrer">AD106</A> | <STRONG>The art and science of SAPUI5 in SAP Build</STRONG></LI><LI><A href="https://www.masteringsap.events/collaborate-sap-teched-on-tour/session/3341658/ad200-unlocking-the-full-potential-of-business-users-with-sap-build" target="_blank" rel="noopener nofollow noreferrer">AD200</A> | <STRONG>Unlocking the Full Potential of Business Users with SAP Build</STRONG></LI></UL><P>These AI-related talks also sound relevant for UX:</P><UL><LI><A href="https://www.masteringsap.events/collaborate-sap-teched-on-tour/session/3341597/ad202-agent-building-101-all-that-you-can-do-with-joule-studio" target="_blank" rel="noopener nofollow noreferrer">AD202</A> | <STRONG>Agent building 101: All that you can do with Joule Studio</STRONG></LI><LI><A href="https://www.masteringsap.events/collaborate-sap-teched-on-tour/session/3341642/dt105-sap-business-ai-in-sap-cloud-erp" target="_blank" rel="noopener nofollow noreferrer">DT105</A> | <STRONG>SAP Business AI in SAP Cloud ERP</STRONG></LI></UL><P> </P><P>I myself will be in Berlin and Bangalore, giving the strategy talk, the road map talk and a deep-dive talk about creating apps with the SAP Design System (<A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749124796213001k8GQ" target="_blank" rel="noopener noreferrer">ST112</A>, <A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749125066259001P578" target="_blank" rel="noopener noreferrer">CA811</A> and <A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749126203112001bccw" target="_blank" rel="noopener noreferrer">CA201</A> respectively).</P><UL><LI>Looking forward to meeting you!</LI></UL>2025-10-23T20:25:57.813000+02:00https://community.sap.com/t5/frontend-ui5-sap-fiori-blog-posts/usage-of-standard-workflow-steps-reuse-library-in-your-custom-free-styled/ba-p/14249114Usage of standard Workflow Steps reuse library in your custom free-styled Fiori apps2025-10-24T09:03:47.100000+02:00daniel_wang09https://community.sap.com/t5/user/viewprofilepage/user-id/138255<P>Hi All,</P><P>During the development of a custom free-styled UI5 app, I received a request to integrate the workflow steps component from a standard app into the custom app.</P><P>The Component is used in different standard SAP apps, and it normally looks like this:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="daniel_wang09_2-1761027516647.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/330069i460CA39DE4F1A1C6/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="daniel_wang09_2-1761027516647.png" alt="daniel_wang09_2-1761027516647.png" /></span></P><P>In the standard SAP Fiori apps, this component can show different workflow steps of a particular document, and if you press one line item, it will navigate to an object page where it shows a bit more details of this step.</P><P>The requirement I received is to show the component in my custom app's object page. Only columns Type, Name, Status, and Recipients in the list should be visible, and the line item navigation should be removed.</P><P>Here is what I achieved in my app:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="daniel_wang09_3-1761027560708.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/330070i2C0E8FE92F8DB23A/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="daniel_wang09_3-1761027560708.png" alt="daniel_wang09_3-1761027560708.png" /></span></P><H3 id="toc-hId-1892030367">View</H3><P>Add below ComponentContainer into the correct page section.</P><pre class="lia-code-sample language-markup"><code><uxap:ObjectPageSection title="{i18n>prApprovalDetails}" titleUppercase="false">
<uxap:subSections>
<uxap:ObjectPageSubSection id="workflowPRSection" title="{i18n>prApprovalDetails}">
<core:ComponentContainer id="workflowPRComponentContainer" propagateModel="true" height="100%"/>
</uxap:ObjectPageSubSection>
</uxap:subSections>
</uxap:ObjectPageSection></code></pre><P> </P><H3 id="toc-hId-1695516862">Controller</H3><P>Function to create approval details component, using re-use library stworkflowinstance. </P><P>This whole createComponent part was found in one of the standard Fiori app, which consumed the workflow steps library, and I edited it by the request I received to make it work.</P><pre class="lia-code-sample language-javascript"><code>_loadPoConWfContainer: function (workflowInstanceId, scenarioID, ID, parentControlId) {
let _parentControl = this.byId(parentControlId);
_parentControl.setBusy(true);
let sWorkflowInstanceId = workflowInstanceId;
let sScenarioID = scenarioID;
if (!this.oPoWfComponent) {
var _control = this.byId(ID);
let oPoWfComponent = sap.ui
.getCore()
.createComponent({
name: "sap.io.bpm.sworkfloweditor.lib.reuse.stworkflowinstance",
async: true,
title: "{{workflowComponentTitle}}",
settings: {
objectIdentifier: sWorkflowInstanceId,
scenarioId: sScenarioID,
objectContext: "empty string",
},
})
.then(
function (successValue) {
let oWorkflowComponent = successValue;
oWorkflowComponent.setScenarioId(scenarioID);
oWorkflowComponent.setObjectIdentifier(sWorkflowInstanceId);
oWorkflowComponent.setIsDraft(false);
oWorkflowComponent.initWorkflow().then(
function () {
_control.setComponent(oWorkflowComponent);
_parentControl.setBusy(false);
}
);
this.oWorkflowComponent = oWorkflowComponent;
try {
var embeddedComponent = this.oWorkflowComponent.getRootControl().getContent()[0].getContent()[1];
embeddedComponent.attachComponentCreated(function (oEvent) {
var steps = oEvent.getParameter("component").getRootControl().getContent()[0].getItems();
for (var i = 0; i < steps.length; i++) {
steps[i].setType("Inactive");
}
let columns = oEvent.getParameter("component").getRootControl().getContent()[0].getColumns();
columns.forEach((column) => {
if (column.sId.indexOf("columnProcessors") > -1) {
column.mBindingInfos = {};
}
});
for (var j = 0; j < columns.length; j++) {
if (
columns[j].sId.indexOf("columnDeadline") > -1 ||
columns[j].sId.indexOf("columnProcessors") > -1 ||
columns[j].sId.indexOf("columnFirstProperty") > -1
) {
columns[j].setVisible(false);
}
}
});
} catch (e) {
_parentControl.setBusy(false);
}
}.bind(this)
);
}
},</code></pre><P>You can find the parameters used in the function:</P><P><STRONG>workflowInstanceId</STRONG>: Workflow instance ID , which is the document number like PO or PR number<BR /><STRONG>scenarioID</STRONG>: Workflow scenario ID<BR /><STRONG>ID</STRONG>: ComponentContainer ID<BR /><STRONG>parentControlId</STRONG>: ObjectPageSection ID</P><P>After the embeddedComponent created, I try to fetch the workflow step list to hide columns and set the line item as inactive to avoid the line item navigation. </P><P> </P><P>By the above code, you can implement the Workflow Steps component in your custom free-styled Fiori app. </P><P>Thanks,</P><P>Daniel </P><P> </P>2025-10-24T09:03:47.100000+02:00https://community.sap.com/t5/technology-blog-posts-by-sap/explore-the-potential-of-sap-fiori-development-portal-using-complex/ba-p/14257622Explore the potential of SAP Fiori development portal using complex building blocks (3 of 6)2025-10-31T07:43:01.269000+01:00marcel_waechterhttps://community.sap.com/t5/user/viewprofilepage/user-id/302397<P>In our previous posts, we introduced the SAP Fiori development portal and explored its structure. Now it's time to see the real power in action. Complex building blocks like the table don't just display data - they bring intelligent behavior, enterprise-grade features, and multiple visualization options that adapt to your business needs. Let's dive into how the portal helps you explore and understand these sophisticated capabilities.</P><P><STRONG>Beyond Visual Display: Intelligent Behavior</STRONG></P><P>The table building block exemplifies how SAP Fiori elements transforms simple annotations into comprehensive business functionality. When you annotate your UI.LineItems, you're not just defining columns - you're enabling a complete data management experience.</P><P>The table automatically adapts its behavior based on your entity's capabilities which are defined in the service metadata and annotations, for example:</P><UL><LI><STRONG>Insertable entities</STRONG> enable users to create new records directly in the table</LI><LI><STRONG>Deletable entities</STRONG> provide deletion capabilities with proper confirmation dialogs</LI><LI><STRONG>Updatable entities</STRONG> allow inline editing, with optional mass edit features for bulk changes</LI><LI><STRONG>Annotated actions</STRONG> become available as table actions, properly integrated with selection states</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Built-in Delete Feature" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334589i2CF6EC89DC0AF46A/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="marcel_waechter_0-1761892835790.png" alt="Built-in Delete Feature" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Built-in Delete Feature</span></span></P><P>This intelligence means your users get the functionality they need without additional development effort on your part.</P><P><STRONG>Multiple Visualizations at Your Fingertips</STRONG></P><P>The portal showcases how a single building block can transform into different visualizations based on your requirements:</P><UL><LI><STRONG>Responsive Table</STRONG> - Optimized for mobile and varying screen sizes</LI><LI><STRONG>Grid Table</STRONG> - High-performance display for large datasets</LI><LI><STRONG>Analytical Table</STRONG> - Built-in aggregation and grouping capabilities</LI><LI><STRONG>Tree Table</STRONG> - Hierarchical data representation</LI></UL><P>But the capabilities don't stop there. The table building block comes packed with enterprise-grade features that users expect from modern business applications:</P><UL><LI><STRONG>File Operations</STRONG> - Upload and download functionality for seamless document management</LI><LI><STRONG>Data Export</STRONG> - Export to Excel and PDF for offline analysis</LI><LI><STRONG>Clipboard Integration</STRONG> - Copy and paste operations for efficient data entry</LI><LI><STRONG>Personalization</STRONG> - Column reordering, resizing, and hiding based on user preferences</LI><LI><STRONG>Variant Management</STRONG> - Save and share different table configurations across users</LI><LI><STRONG>Filtering & Sorting</STRONG> - Built-in capabilities for data exploration and organization</LI><LI><STRONG>Mass Operations</STRONG> - Bulk actions and mass editing for productivity</LI></UL><P>And this is just the beginning - the portal showcases dozens of additional features that activate automatically based on your metadata annotations, entity capabilities and configuration. Each feature is documented with examples showing exactly how to enable it in your application.</P><P><STRONG>Extensibility When Standard Features Aren't Enough</STRONG></P><P>The portal demonstrates how building blocks balance out-of-the-box functionality with extensibility. When standard features don't meet your specific needs for, you can:</P><UL><LI><STRONG>Add custom controls</STRONG> to display calculated or derived data</LI><LI><STRONG>Integrate custom actions</STRONG> for business-specific operations</LI><LI><STRONG>Use the building block API</STRONG> in your controller code for advanced scenarios</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Custom Column in Table" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334582iFD199F4B779C3DCE/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="marcel_waechter_0-1761892181262.png" alt="Custom Column in Table" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Custom Column in Table</span></span></P><P>This extensibility ensures you're never locked into standard behavior while still benefiting from enterprise-grade foundation features.</P><P><STRONG>Multi-Format Code Examples: A New Level of Support</STRONG></P><P>One of the portal's newest and most valuable features is showing the same annotations in multiple formats. When you explore a building block like the table, you'll see the implementation in:</P><UL><LI><STRONG>CAP CDS</STRONG> - For SAP Cloud Application Programming Model development</LI><LI><STRONG>RAP CDS</STRONG> - For ABAP RESTful Application Programming (since 1.142)</LI><LI><STRONG>XML annotations</STRONG> - For local annotations when service changes aren't possible</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Line Item Implementation" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334585iE8A19980B8F617A2/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="marcel_waechter_2-1761892442161.png" alt="Line Item Implementation" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Line Item Implementation</span></span></P><P>The portal's multi-format code examples ensure every developer can find the implementation pattern that fits their development context. <STRONG>CAP CDS</STRONG> examples offer full interactivity - modify annotations and see immediate results in the preview. <STRONG>RAP CDS</STRONG> examples provide static but comprehensive guidance for ABAP developers working in modern SAP environments, showing exactly how to implement the same functionality using ABAP RESTful Application Programming patterns. It also helps you find a running sample in the RAP Feature Showcase. <STRONG>XML annotations</STRONG> serve as your fallback option when service-level changes aren't feasible. This comprehensive approach means whether you're building with CAP, RAP, or working with existing services, you have the code examples you need to implement any building block feature.</P><P><STRONG>See It in Action: Table Building Block Example</STRONG></P><P>Let's explore the table's responsive behavior. When you open the Table Overview on a desktop, you'll see columns for ID, begin date, end date, agency, and status. But here's where the intelligence kicks in:</P><OL><LI>Click "Show Code" next to the UI.LineItems annotation.</LI><LI>The code editor opens, the preview adjusts to a smaller viewport, and you'll notice fewer columns are displayed.<BR />Note that the status column remains visible even though it's the 5th column in the annotation. This happens because of its <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1445379">@ui</a>.Importance: #High setting.</LI><LI>Now try changing <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1445379">@ui</a>.Importance from #High to #Low and watch the status column disappear from the table in real-time.</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Changing UI.Importance" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334586i76B3CBF16A1F8C24/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="marcel_waechter_3-1761892570467.png" alt="Changing UI.Importance" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Changing UI.Importance</span></span></P><P>This demonstrates how building blocks intelligently prioritize content based on your annotations and available screen space.</P><P><STRONG>Interactive Learning Through Live Code</STRONG></P><P>The portal's live code editing capability transforms learning from passive reading to active experimentation. You can:</P><UL><LI>Modify annotations and see immediate visual results</LI><LI>Test different configuration combinations</LI><LI>Understand the relationship between metadata and UI behavior</LI><LI>Experiment safely without affecting your actual development environment</LI></UL><P>This hands-on approach helps you understand not just what's possible, but how different annotation patterns affect the user experience and can serve as input for your app development.</P><P><STRONG>What's Next</STRONG></P><P>In our next post, "Use SAP Fiori development portal to understand extension options for standard floorplans (4 of 6)," we'll shift focus from individual building blocks to complete pages. We'll explore how the portal guides you through extending standard floorplans like List Report and Object Page, showing you exactly where and how to add custom functionality while maintaining the enterprise-grade foundation these pages provide.</P><P>To get the full overview about the SAP Fiori development portal, check out the following blog posts of the mini-series:</P><UL><LI><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/introducing-the-sap-fiori-development-portal-your-gateway-to-rapid-sap/ba-p/14236768" target="_self">Introducing the SAP Fiori Development Portal: Your Gateway to Rapid SAP Fiori App Creation (1 of 6)</A></LI><LI><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/get-familiar-with-sap-fiori-development-portal-and-the-power-of-the/ba-p/14240041" target="_self">Get familiar with SAP Fiori development portal and the power of the building blocks (2 of 6)</A></LI><LI>Explore the potential of SAP Fiori development portal using complex building blocks (3 of 6)</LI><LI>Use SAP Fiori development portal to understand extension options for standard floorplans (4 of 6)</LI><LI>Prepare building custom pages by using SAP Fiori development portal (5 of 6)</LI><LI>Bringing the SAP Fiori development portal and its use to the next level (6 of 6)</LI></UL>2025-10-31T07:43:01.269000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/sap-user-experience-update-what-s-new-for-sap-s-4hana-2025-private-cloud/ba-p/14257694SAP User Experience Update: What’s New for SAP S/4HANA 2025 (Private Cloud and On-Premise)2025-10-31T13:35:46.042000+01:00ThomasReisshttps://community.sap.com/t5/user/viewprofilepage/user-id/149639<P><STRONG><SPAN>SAP S/4HANA 2025 comes with a whole host of user experience innovations and improvements. Web access via My Home and the SAP Fiori launchpad has many useful improvements, as does SAP Mobile Start for mobile access. Joule gives conversational access to Private Cloud Edition using natural language, now also with analytical insights. There are additional collaboration capabilities, and many improvements in details: some towards providing a more consistent and integrated SAP Business Suite, some simply making a user’s life easier. Finally, design and UI technology is also advancing, with powerful AI support for developers now available.</SPAN></STRONG></P><P>This post covers:</P><UL><LI><SPAN>UX Updates for Consistent and Integrated Business Suite</SPAN></LI><LI><SPAN>Web access: My Home and SAP Fiori launchpad</SPAN></LI><LI><SPAN>Mobile access: SAP Mobile Start</SPAN></LI><LI><SPAN>Joule</SPAN></LI><LI>Situation Handling news</LI><LI><SPAN>AI-Assisted capabilities: outlook</SPAN></LI><LI><SPAN>New collaboration capabilities</SPAN></LI><LI><SPAN>UX improvements in details</SPAN></LI><LI><SPAN>UI adaptation improvements for key users</SPAN></LI><LI><SPAN>Design and Technology news</SPAN></LI></UL><P>If you want to get an impression of how good SAP S/4HANA Cloud Private Edition, looks across all the main product areas, have a look at the online <SPAN><A href="https://www.sap.com/products/erp/s4hana-private-edition/product-tour.html" target="_blank" rel="noopener noreferrer">Product Tour</A>.</SPAN></P><P>Since this post covers what’s new, building on the previous 2023 release, you might want to have a look at the UX innovations which came with the <SPAN><A href="https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/8308e6d301d54584a33cd04a9861bc52/4e8cdcc8cbaf4b909217bda9965b7db4.html?locale=en-US" target="_blank" rel="noopener noreferrer">Feature Pack Stacks</A> 00, 01 and 02 of the 2023 release:</SPAN></P><UL><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-user-experience-update-what-s-new-for-sap-s-4hana-2023-private-cloud/ba-p/13578447" target="_blank">SAP User Experience Update: What’s New for SAP S/4HANA 2023 (Private Cloud and On-Premise)</A>.</SPAN></LI><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/user-experience-advances-with-sap-s-4hana-2023-fps01-private-cloud-and-on/ba-p/13634354" target="_blank">User Experience Advances with SAP S/4HANA 2023 FPS01 (Private Cloud and On-Premise)</A>.</SPAN></LI><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-user-experience-q4-2024-news-for-sap-s-4hana-cloud-private-edition-2023/ba-p/13894277" target="_blank">SAP User Experience Q4/2024 News for SAP S/4HANA Cloud Private Edition 2023</A>.</SPAN></LI></UL><P>For a full overview of what’s new since the FPS00 shipment of the 2023 release, have a look at the documentation (note that it includes features from the above 2023 FPS01 and FPS02 blog posts, as well as this one):</P><UL><LI><SPAN><A href="https://help.sap.com/whats-new/5fc51e30e2744f168642e26e0c1d9be1?Business_Area=ABAP+Platform&q=Fiori+Launchpad&locale=en-US" target="_blank" rel="noopener noreferrer">What’s New for SAP Fiori launchpad for SAP S/4HANA and SAP S/4HANA Cloud Private Edition</A>.</SPAN></LI></UL><P> </P><H1 id="toc-hId-1634733921"><SPAN>UX Updates for Consistent and Integrated Business Suite</SPAN></H1><P>We aim to provide a consistent and integrated experience for all users of the SAP Business Suite, which means providing an entry point for users to access all the various SAP products within the suite, and ensuring that the user experience across these products is consistent, making it easy for users to use applications from different products.</P><H2 id="toc-hId-1567303135"><SPAN>Entry Points</SPAN></H2><P>Figure 1 shows our approach for providing a web and a native mobile entry point to the products of the suite, such as SAP S/4HANA Cloud. I’d like to highlight that Joule can also be seen as an entry point to access the entire suite, since our goal is to provide Joule wherever you are, be it in our web applications or native mobile apps. Using Joule, our goal is to allow users to query and perform actions on all the products and applications which they are authorized to use, simply using natural language. As you’ll see below, we are making good progress towards this goal.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 1: Entry points providing an integrated workplace for accessing the SAP Business Suite. Alt Text: Image showing Joule on the left, “available web and mobile”, and on the right a diagram with boxes indicating that SAP Mobile Start, SAP Start, and SAP Build Work Zone provide central access to SAP, with three boxes below for SAP S/4HANA Cloud, SAP SuccessFactors and Other SAP Products." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334638i2C40AB6723AB37F6/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="01 Integrated workplace for accessing your work.png" alt="Figure 1: Entry points providing an integrated workplace for accessing the SAP Business Suite. Alt Text: Image showing Joule on the left, “available web and mobile”, and on the right a diagram with boxes indicating that SAP Mobile Start, SAP Start, and SAP Build Work Zone provide central access to SAP, with three boxes below for SAP S/4HANA Cloud, SAP SuccessFactors and Other SAP Products." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 1: Entry points providing an integrated workplace for accessing the SAP Business Suite. Alt Text: Image showing Joule on the left, “available web and mobile”, and on the right a diagram with boxes indicating that SAP Mobile Start, SAP Start, and SAP Build Work Zone provide central access to SAP, with three boxes below for SAP S/4HANA Cloud, SAP SuccessFactors and Other SAP Products.</span></span></P><H2 id="toc-hId-1370789630"><SPAN>Web Central Access</SPAN></H2><P><SPAN>I have covered recent UX innovations in our web central entry points, such as SAP Start and SAP Build Work Zone, and central services such as SAP Task Center, in my recent cloud UX blog posts. Since these capabilities also apply to SAP S/4HANA Cloud Private Edition as well as SAP S/4HANA (except for SAP Start), I will not repeat them here, but rather refer you to them:</SPAN></P><UL><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-user-experience-q1-2025-update-part-1-many-new-innovations-available-ai/ba-p/14012822" target="_blank">SAP User Experience Q1/2025 Update – Part 1: Many New Innovations Available (AI, Joule and More)</A>.</SPAN></LI><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-ux-q3-2025-update-part-1-ai-joule-sap-build-work-zone-sap-mobile-start/ba-p/14161847" target="_blank">SAP UX Q3/2025 Update – Part 1: AI, Joule, SAP Build Work Zone, SAP Mobile Start</A>.</SPAN></LI></UL><P><SPAN> </SPAN><SPAN>What we will look at in this post in detail are UX innovations for local access from web or mobile, via My Home and the SAP Fiori launchpad, and via SAP Mobile Start. Each has a dedicated section further below.</SPAN></P><H2 id="toc-hId-1174276125"><SPAN>Design Updates for Suite Consistency</SPAN></H2><P>To achieve consistency across the suite, we have made design improvements which are relevant for a consistent user experience across the entire SAP Business Suite, and which are now available with SAP S/4HANA Cloud Private Edition 2025 and SAP S/4HANA 2025. As I mentioned in my April blog post <SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/upcoming-design-updates-for-the-sap-business-suite-sap-fiori-for-web/ba-p/14083427" target="_blank">Upcoming Design Updates for the SAP Business Suite (SAP Fiori for Web)</A></SPAN>, consistency of the user experience across the various applications used by a user is an important part of overall usability, helping users to feel confident and at ease when using a suite of products – no unexpected surprises.</P><P>In this section, we’ll look at four design updates provided by the SAP Fiori launchpad, as well as examples of the new design for illustrations:</P><UL><LI>Navigation menu: Side navigation</LI><LI>Updated shell bar</LI><LI>Updated user menu</LI><LI>Updated notifications</LI><LI>New illustrations design</LI></UL><H3 id="toc-hId-1106845339"><SPAN>Navigation Menu: Side Navigation</SPAN></H3><P>Many SAP products already offer a navigation menu on the left of the screen, a pattern already familiar to many people. Hence, we have decided to apply that approach to navigation across the SAP Business Suite in upcoming releases.</P><P>In SAP S/4HANA Cloud Private Edition and SAP S/4HANA, the side navigation is displayed as an overlay, as you can see in Figure 2. It gives you direct access to your favorite apps, either directly or via the folders you have created. It also gives you direct access to your Spaces and Pages. The previously available menu to access all your spaces and pages along with personalization options is available via the entry “All Spaces” at the bottom of the menu.</P><P>A big benefit of this new navigation menu is that you can now access your favorite apps directly from any application. Previously, you would have to return to My Home and then click on your favorite app, now you can access it directly from the menu, as shown in Figure 2.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 2: The new navigation menu, opened up from the new shell bar, showing direct access to Favourite Apps, My Spaces and All Spaces. Alt Text: an image showing a list of sales orders and on the left a pop-over with a navigation menu with the sections already mentioned. Below the “Favourite App” eight apps are listed as well as two folders for favorite apps, plus the folder “Insights” for the insight tiles." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334641iF2F012AF87389352/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="02 Side Navigation S4H 2508.jpg" alt="Figure 2: The new navigation menu, opened up from the new shell bar, showing direct access to Favourite Apps, My Spaces and All Spaces. Alt Text: an image showing a list of sales orders and on the left a pop-over with a navigation menu with the sections already mentioned. Below the “Favourite App” eight apps are listed as well as two folders for favorite apps, plus the folder “Insights” for the insight tiles." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 2: The new navigation menu, opened up from the new shell bar, showing direct access to Favourite Apps, My Spaces and All Spaces. Alt Text: an image showing a list of sales orders and on the left a pop-over with a navigation menu with the sections already mentioned. Below the “Favourite App” eight apps are listed as well as two folders for favorite apps, plus the folder “Insights” for the insight tiles.</span></span></P><H3 id="toc-hId-910331834"><SPAN>New Shell Bar – need to switch it on!</SPAN></H3><P>The new shell bar design for the SAP Business Suite is available for SAP S/4HANA Cloud Public Edition. The immediately visible difference is that now the product name is displayed to the right of the SAP Logo, in this case “S/4HANA Cloud” as you can see at the top of Figure 2. The logo and the name are all contained within a clickable area, which brings the user to the start page (e.g. My Home).</P><P><STRONG>The new shell bar enables the next two design updates to the user menu and to notifications</STRONG>.</P><P>By default, after upgrading, the old shell bar will be shown, with the new navigation menu. We advise that you check any test automation and RPA (Robotic Process Automation) you may have before switching on the new shell bar, since you may need to make some adjustments – in particular if you log off at the end of a test.</P><P>You can switch on the new shell bar via the Activate New Features application, with the feature “/UI2/SHELL_BAR_TOGGLE”.</P><H3 id="toc-hId-713818329"><SPAN>Updated User Menu</SPAN></H3><P>The new user menu design shown in Figure 3 provides more space for the avatar of the user, and provides more space between items for easier selection. The settings are always at the top as the first entry, and the “Sign Out” option is separated from the actual navigation options in the list, to make it easier to find.</P><P><SPAN> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 3: Updated design of user menu and notifications. Alt Text: On the left an image of the previous user menu and the updated user menu. On the right an image of the updated notifications list, showing four notifications in the group “Last Month”, each with a title, two lines of description and a line with the data and a “more” link." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334643i095CC5796C06B00B/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="03 User Menu and Notifications S4H 2508.jpg" alt="Figure 3: Updated design of user menu and notifications. Alt Text: On the left an image of the previous user menu and the updated user menu. On the right an image of the updated notifications list, showing four notifications in the group “Last Month”, each with a title, two lines of description and a line with the data and a “more” link." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 3: Updated design of user menu and notifications. Alt Text: On the left an image of the previous user menu and the updated user menu. On the right an image of the updated notifications list, showing four notifications in the group “Last Month”, each with a title, two lines of description and a line with the data and a “more” link.</span></span></SPAN></P><H3 id="toc-hId-517304824"><SPAN>Updated Notifications Design</SPAN></H3><P>The new simplified design of notifications shown on the right in Figure 3 fits better with the overall design of SAP S/4HANA Cloud Private Edition and SAP S/4HANA, and provides simpler interactions. By default notifications are sorted by date, with grouping by “Today”, “Yesterday”, “Last Week”, “Last Month”. Users can also choose to sort by importance.</P><H3 id="toc-hId-320791319"><SPAN>New Illustrations Design</SPAN></H3><P>We have modernized the design of our illustrations, and also made them easier to understand. Figure 4 shows two examples – one for indicating that something went wrong (the fallen ice cream cone), one for search, with an example of where the search illustration is used when opening a list report application without any filter values defined.</P><P><SPAN> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 4: Examples of new illustrations. Alt Text: On the left top three different size illustrations showing an ice cream cone fallen on the ground; bottom left an illustration of a globe with a magnifying glass, representing “search”. On the right an image of a list report showing the search illustration since no data has been selected." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334644i269163A149D89B15/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="04 New illustrations S4H 2508.jpg" alt="Figure 4: Examples of new illustrations. Alt Text: On the left top three different size illustrations showing an ice cream cone fallen on the ground; bottom left an illustration of a globe with a magnifying glass, representing “search”. On the right an image of a list report showing the search illustration since no data has been selected." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 4: Examples of new illustrations. Alt Text: On the left top three different size illustrations showing an ice cream cone fallen on the ground; bottom left an illustration of a globe with a magnifying glass, representing “search”. On the right an image of a list report showing the search illustration since no data has been selected.</span></span></SPAN></P><P> </P><H1 id="toc-hId--133887624"><SPAN>Web Access: My Home and SAP Fiori Launchpad</SPAN></H1><P><SPAN>The 2025 release brings a number of improvements in My Home, the start page in the SAP Fiori launchpad, as well as some improvements in the launchpad itself (beyond the design updates mentioned above) – for users as well as for administrators.</SPAN></P><H2 id="toc-hId-145935947"><SPAN>My Home</SPAN></H2><P><SPAN>Here is an overview of the enhancements with this release:</SPAN></P><UL><LI><STRONG>To-Dos</STRONG>:<UL><LI><STRONG>Tasks</STRONG>: Enhanced <STRONG>workflow relevant information </STRONG>and <STRONG>in-place actions</STRONG></LI><LI><STRONG>Situations</STRONG> from both <STRONG>standard and extended framework-</STRONG> are displayed</LI></UL></LI><LI><STRONG>Intelligent homepage experience</STRONG> to boost productivity (cloud only):<UL><LI>Intelligent app recommendations.</LI><LI>Intelligent generation of pre-delivered cards.</LI></UL></LI><LI><STRONG>Improved user experience: </STRONG><UL><LI>Drag & drop is now enabled in the insights section, so you can directly rearrange your tiles and cards.</LI><LI>Information about deprecated apps: any such apps are marked with an “deprecated2 icon .</LI></UL></LI><LI><STRONG><SPAN>Manage News application.</SPAN></STRONG></LI></UL><P><SPAN> </SPAN><SPAN>This collection of videos shows the individual features of My Home – both new and already existing ones:</SPAN></P><UL><LI><SPAN><A href="https://dam.sap.com/mac/app/p/assets/user_experience/13JPtWY?hierarchy=true&sort=Default&rc=10" target="_blank" rel="noopener noreferrer">My Home - Deep Dive</A> (video collection)</SPAN></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 5: My Home in SAP S/4HANA Cloud Private Edition 2025 and SAP S/4HANA2025. Alt Text: A screenshot showing all the sections of My Home: To-Dos with tabs for Tasks (selected) and Situations;, a row with News on the left and Pages showing 8 pages on the right; Apps, with tabs for Favorites (selected – showing 2 folders and 7 apps), Most Used, Recently Used, Recommended; Insight Tiles, showing 8 tiles; Insights Cards, showing 4 cards, 1 with a list and 3 with charts." style="width: 818px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334645iA755910C391B37DA/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="05 My Home.jpg" alt="Figure 5: My Home in SAP S/4HANA Cloud Private Edition 2025 and SAP S/4HANA2025. Alt Text: A screenshot showing all the sections of My Home: To-Dos with tabs for Tasks (selected) and Situations;, a row with News on the left and Pages showing 8 pages on the right; Apps, with tabs for Favorites (selected – showing 2 folders and 7 apps), Most Used, Recently Used, Recommended; Insight Tiles, showing 8 tiles; Insights Cards, showing 4 cards, 1 with a list and 3 with charts." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 5: My Home in SAP S/4HANA Cloud Private Edition 2025 and SAP S/4HANA2025. Alt Text: A screenshot showing all the sections of My Home: To-Dos with tabs for Tasks (selected) and Situations;, a row with News on the left and Pages showing 8 pages on the right; Apps, with tabs for Favorites (selected – showing 2 folders and 7 apps), Most Used, Recently Used, Recommended; Insight Tiles, showing 8 tiles; Insights Cards, showing 4 cards, 1 with a list and 3 with charts.</span></span></P><H3 id="toc-hId--343980565"><SPAN>To-Dos Enhancements</SPAN></H3><P>The <EM>To-Dos</EM> task cards now offer action buttons, for example to approve or reject items. Often, this requires some key information about the item, for example the name of the product and the value for a purchase requisition. These details are now visualized directly in the task cards, as you can see in Figure 5, making the workflow more efficient.</P><P><EM>To-Dos</EM> now also shows custom Situations, created using the extended Situation Handling framework, in addition to the standard situations delivered by SAP.</P><H3 id="toc-hId--540494070"><SPAN>Intelligent Homepage Experience</SPAN></H3><P>Another useful new feature is AI recommendations for applications: as you can see in Figure 5 in the Apps section of My Home, a new tab <EM>Recommended</EM> has been introduced which uses AI to create a list of applications which are recommended to the user to add to their Favorites.</P><P>To help users get started with My Home, we provide intelligent generation of pre-delivered cards, so that when they first log on, the <EM>Insights Cards</EM> section is not blank, but rather has a number of pre-delivered cards relevant to the user’s role.</P><H2 id="toc-hId--443604568"><SPAN>Manage News Application</SPAN></H2><P>I’m glad to announce that administrators can now easily create their own news to be displayed on My Home, using the new Manage News application. Figure 6 shows the start page of the application, listing news articles.</P><P>You can specify title, subtitle and main text, a background image, the start and end dates for publishing, as well as categorizing and targeting the news for specific groups of users. Also, you can mark a news article as being “Critical”, so that it is highlighted accordingly. You can see an example in Figure 5.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 6: Manage News application. Alt Text: Screenshot of the Manage News application, showing a filter bar and a list of two news articles with their title, subtitle, footer text, criticality, status “published” and publish start and end dates." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334647i634D974E03FA6360/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="06 My Home Manage News.jpg" alt="Figure 6: Manage News application. Alt Text: Screenshot of the Manage News application, showing a filter bar and a list of two news articles with their title, subtitle, footer text, criticality, status “published” and publish start and end dates." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 6: Manage News application. Alt Text: Screenshot of the Manage News application, showing a filter bar and a list of two news articles with their title, subtitle, footer text, criticality, status “published” and publish start and end dates.</span></span></P><P>To get a better impression of how it works, watch this video:</P><UL><LI>Video: <SPAN><A href="https://dam.sap.com/mac/app/p/video/asset/preview/7QzcGYy?ltr=a&rc=10&doi=SAP1227637" target="_blank" rel="noopener noreferrer">Manage News Application in My Home for SAP S/4HANA Cloud Public Edition</A></SPAN> (2:00 min.)</LI></UL><P>You can find out more about these My Home innovations here:</P><UL><LI><SPAN><A href="https://help.sap.com/docs/ABAP_PLATFORM_NEW/a7b390faab1140c087b8926571e942b7/8a60279e8d2041b5ad8d3455fab0f3ef.html?locale=en-US" target="_blank" rel="noopener noreferrer">My Home documentation</A></SPAN>.</LI></UL><H2 id="toc-hId--640118073"><SPAN>SAP Fiori Launchpad</SPAN></H2><P><SPAN>The launchpad provides more than just the spaces and pages for finding and starting apps: it provides the runtime shell in which all the applications run, and hence the updates mentioned above such as the new navigation, the new shell bar and user menu. It also controls navigation between apps, as well as settings such as which theme to apply. Here are some additional improvements with the 2025 release.</SPAN><SPAN> </SPAN></P><H3 id="toc-hId--1130034585"><SPAN>Automatic high-contrast and dark-mode detection, also for custom themes</SPAN></H3><P>Users can define on their front-end device’s operating system whether applications should appear in a light mode or a dark mode, or a high-contrast mode. Now these settings are taken into account also for custom themes, in addition to SAP visual themes.</P><P>Technically this is done by the launchpad supporting theme sets, which is a group of themes of the same family with different flavors – such as the Horizon theme, with a light and dark version along with high contrast black and high contrast white versions. Customers can create their own theme sets using the UI theme designer. Have a look at the documentation:</P><UL><LI><A href="https://help.sap.com/docs/ABAP_PLATFORM_NEW/a7b390faab1140c087b8926571e942b7/5bc5a24e86a14feea5f2d223d4abf1a4.html?locale=en-US&version=202510.000&q=fiori+launchpad" target="_blank" rel="noopener noreferrer">Managing Your Settings</A> (see the setting <EM>Appearance</EM>).</LI></UL><H3 id="toc-hId--1326548090"><SPAN>Hiding empty pages and spaces</SPAN></H3><P>The apps which a user sees on a page on the SAP Fiori launchpad, and the pages which appear in a space, depend on a user’s authorizations. This can lead to a page being defined in such a way that certain users are not authorized to use any of the apps therein; similarly, a space can end up not having any pages available to a user. Now, if this happens, any such empty pages or spaces are hidden from the user, rather than being shown empty. Find out more here:</P><UL><LI><SPAN><A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-fiori-launchpad-hiding-empty-spaces-and-pages/ba-p/13998371" target="_blank">SAP Fiori launchpad: Hiding empty spaces and pages</A>.</SPAN></LI></UL><H3 id="toc-hId--1523061595"><SPAN>Improved About Dialog for Application Information</SPAN></H3><P>We have simplified the about screen, organizing it into separate tabs for Application, System and Environment information, so that there is a clear separation between the different types of information – see it in action in Figure 7:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 7: New About dialog. Alt Text: A short video showing the list view of the Manage Sales Orders – Version 2 app. The user opens the user settings menu in the shell header bar, selects “about”, and a popover appears with the same design as the user settings, showing three separate tabs listed vertically on the left for “Application”, “System” and “Environment”, with “Application” the default. Application shows title and ID of the app, along with framework version; System shows the product, system and tenant name; Environment shows the client device type and user agent details." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334649i659911F0290A5F86/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="07 FLP new About UI in 2502 (no fade).gif" alt="Figure 7: New About dialog. Alt Text: A short video showing the list view of the Manage Sales Orders – Version 2 app. The user opens the user settings menu in the shell header bar, selects “about”, and a popover appears with the same design as the user settings, showing three separate tabs listed vertically on the left for “Application”, “System” and “Environment”, with “Application” the default. Application shows title and ID of the app, along with framework version; System shows the product, system and tenant name; Environment shows the client device type and user agent details." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 7: New About dialog. Alt Text: A short video showing the list view of the Manage Sales Orders – Version 2 app. The user opens the user settings menu in the shell header bar, selects “about”, and a popover appears with the same design as the user settings, showing three separate tabs listed vertically on the left for “Application”, “System” and “Environment”, with “Application” the default. Application shows title and ID of the app, along with framework version; System shows the product, system and tenant name; Environment shows the client device type and user agent details.</span></span></P><H2 id="toc-hId--1426172093"><SPAN>Update for Administrators of SAP Fiori Launchpad</SPAN></H2><H3 id="toc-hId--1916088605"><SPAN>Redesign</SPAN> of Apps for Managing Spaces and Pages</H3><P>Up until now, the apps “Manage Launchpad Spaces” and “Manage Launchpad Pages” distinguished between entries which could be edited within a given tenant and entries which could only be used as templates when creating new spaces or pages. The editable ones were listed in the tab “Customer-Created”, the others in the tab “Predefined”.</P><P>Our customers gave us feedback that this was in fact confusing, because a page which was listed as “Customer-Created” in a non-productive tenant and which was transferred to a productive tenant became “Predefined” there, i.e. it was not listed under “Customer-Created” despite it being customer-created.</P><P>Now, the design has been changed, with two tabs for editable entities (spaces or pages) and non-editable ones. For example, in the app “Manage Launchpad Pages”, the tabs are called “Pages” and “Page Templates”, as shown in Figure 8. No matter what tenant you are in, you cannot change or edit page templates, you can only use them to create new pages. The same applies to spaces in the Manage Launchpad Spaces app.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 8: The redesigned app Manage Launchpad Pages with Tabs for “Pages” and “Page Templates”. Alt Text: image shows an extract of the app showing the two tabs." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334652i748E33A97343D586/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="08 FLP Manage Launchpad Pages.jpg" alt="Figure 8: The redesigned app Manage Launchpad Pages with Tabs for “Pages” and “Page Templates”. Alt Text: image shows an extract of the app showing the two tabs." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 8: The redesigned app Manage Launchpad Pages with Tabs for “Pages” and “Page Templates”. Alt Text: image shows an extract of the app showing the two tabs.</span></span></P><H3 id="toc-hId--1944418419">Role-dependent Launchpad Configuration Parameters</H3><P>We provide administrators a new option to apply launchpad settings role-based, so that different roles can have different settings being applied. This can be helpful if a specific group of users need different settings, for example if you want to gradually introduce Spaces and Pages, you no longer have to switch it on for all users. Find out more, and further examples, in the documentation:</P><UL><LI><SPAN><A href="https://help.sap.com/docs/ABAP_PLATFORM_NEW/a7b390faab1140c087b8926571e942b7/6cca90f90b37436ab917fdc5585fee2c.html?locale=en-US" target="_blank" rel="noopener noreferrer">Setting Parameters per Profile</A></SPAN></LI></UL><P> </P><H1 id="toc-hId--1554125910"><SPAN>Mobile Access: SAP Mobile Start</SPAN></H1><P><SPAN>The recent innovations I would like to highlight here are directly relevant for users accessing SAP S/4HANA directly:</SPAN></P><UL><LI><SPAN>Personalization</SPAN></LI><LI><SPAN>News – now with images and top news</SPAN></LI><LI><SPAN>Document AI</SPAN></LI><LI><SPAN>Joule for Mobile (covered in the section on Joule further below)</SPAN></LI></UL><H2 id="toc-hId--2044042422"><SPAN>Personalizing SAP Mobile Start</SPAN></H2><P>For a good and satisfying user experience, being able to personalize the UI so that it fits with how you like to work is a key element. To this end, SAP Mobile Start has now introduced <STRONG>personalization of the start page, </STRONG>allowing you to rearrange the order of sections as well as hiding sections which you don’t need – take a look at it in Figure 9.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 9: SAP Mobile Start personalization of the start screen. Alt Text: Four mobile phone images. On the left the start page, with the sections Insights and News visible. Next, an image of the edit screen, with five sections listed: Latest To-Dos, Favorites, Insights, App Suggestions (deselected), News. Next, an image of the five sections, all selected, now with Favorites first and Latest To-Dos second. On the right, the start page with the sections Favorites at the top (containing flat cards for apps), below that Latest To-Dos (containing larger cards for ToDos, one shocing a purchase requisition with Total Amount $799.99)." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334653iB14BF4B6FE38A0E1/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="09 Mobile Start - Start Page Personalization.png" alt="Figure 9: SAP Mobile Start personalization of the start screen. Alt Text: Four mobile phone images. On the left the start page, with the sections Insights and News visible. Next, an image of the edit screen, with five sections listed: Latest To-Dos, Favorites, Insights, App Suggestions (deselected), News. Next, an image of the five sections, all selected, now with Favorites first and Latest To-Dos second. On the right, the start page with the sections Favorites at the top (containing flat cards for apps), below that Latest To-Dos (containing larger cards for ToDos, one shocing a purchase requisition with Total Amount $799.99)." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 9: SAP Mobile Start personalization of the start screen. Alt Text: Four mobile phone images. On the left the start page, with the sections Insights and News visible. Next, an image of the edit screen, with five sections listed: Latest To-Dos, Favorites, Insights, App Suggestions (deselected), News. Next, an image of the five sections, all selected, now with Favorites first and Latest To-Dos second. On the right, the start page with the sections Favorites at the top (containing flat cards for apps), below that Latest To-Dos (containing larger cards for ToDos, one shocing a purchase requisition with Total Amount $799.99).</span></span></P><H2 id="toc-hId-2054411369"><SPAN>News with Images and Top News</SPAN></H2><P><SPAN>News can now include images. Furthermore, we have also introduced <STRONG>Top News</STRONG> – news that is so important to users, that it is shown prominently on the Start Screen. You can see examples of top news with an image as well as regular news with images in Figure 10. For more information, check out the</SPAN></P><UL><LI><SPAN> <A href="https://help.sap.com/docs/mobile-start/mobile-start-administration-guide/specific-settings-in-site-manager" target="_blank" rel="noopener noreferrer">SAP Mobile Start Administration Guide</A> (documentation).</SPAN></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 10: News with images, including Top News. Alt Text: Two mobile phone images shown, on the left the start page with Top News at the top, with an article and an image; below that sections for Favorites and Latest To-Dos. On the right a list of five news articles with text on the left and an image on the right." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334656iB1A0631543DD0C01/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="10 Mobile Start top news with images.png" alt="Figure 10: News with images, including Top News. Alt Text: Two mobile phone images shown, on the left the start page with Top News at the top, with an article and an image; below that sections for Favorites and Latest To-Dos. On the right a list of five news articles with text on the left and an image on the right." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 10: News with images, including Top News. Alt Text: Two mobile phone images shown, on the left the start page with Top News at the top, with an article and an image; below that sections for Favorites and Latest To-Dos. On the right a list of five news articles with text on the left and an image on the right.</span></span></P><H2 id="toc-hId-1857897864"><SPAN>Document AI Integrated into SAP Mobile Start</SPAN></H2><P><SPAN>With the integration with SAP Document AI, users can scan or upload documents directly from SAP Mobile Start, which are then processed by the SAP Document AI service. So, if you for instance need to scan and upload a quality certificate, you can start the upload process right from SAP Mobile Start, and the SAP Document AI service takes care of all needed follow-up steps, like extracting the data and assigning it to the right business objects. </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 11: Screenshots of SAP Mobile Start with SAP Document AI. Alt Text: 3 mobile phone images: on the left the start screen, in the middle a screen Select Document Type, with choices Standard Delivery Note (selected) and Supplier or Procurement quality certificates, on the camera showing an document, with a Save button." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334657iE23648AC249E7AA3/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="11 Mobile Start with Document AI.png" alt="Figure 11: Screenshots of SAP Mobile Start with SAP Document AI. Alt Text: 3 mobile phone images: on the left the start screen, in the middle a screen Select Document Type, with choices Standard Delivery Note (selected) and Supplier or Procurement quality certificates, on the camera showing an document, with a Save button." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 11: Screenshots of SAP Mobile Start with SAP Document AI. Alt Text: 3 mobile phone images: on the left the start screen, in the middle a screen Select Document Type, with choices Standard Delivery Note (selected) and Supplier or Procurement quality certificates, on the camera showing an document, with a Save button.</span></span></P><P><SPAN> </SPAN><SPAN>Find further information and a detailed step by step guide on how to setup SAP Document AI service within SAP Mobile Start here:</SPAN></P><UL><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/new-in-sap-mobile-start-v2-4-integrate-and-launch-sap-document-ai-on-mobile/ba-p/14162770" target="_blank">New in SAP Mobile Start V2.4: Integrate and Launch SAP Document AI on Mobile</A>. </SPAN></LI></UL><H3 id="toc-hId-1367981352"><SPAN>Further Innovations and Information on SAP Mobile Start</SPAN></H3><P><SPAN>SAP Mobile Start has further innovations related to integrating with SAP Build Work Zone, such as supporting spaces and pages from its new site experience, supporting its declarative UI integration cards, or supporting integration with the advanced edition.</SPAN></P><P>To find out more about all the recent innovations as well as what is planned in our road map, have a look at:</P><UL><LI><SPAN><A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-mobile-start-v2-0-release-update/ba-p/13871838" target="_blank">SAP Mobile Start V2.0 - Release Update</A></SPAN></LI><LI><SPAN><A href="https://community.sap.com/t5/technology-blogs-by-sap/joule-on-mobile-amp-start-screen-personalization-sap-mobile-start-v2-1/ba-p/13955048" target="_blank">Joule on Mobile & Start Screen Personalization: SAP Mobile Start V2.1 - Release Update</A></SPAN></LI><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/support-of-sap-build-work-zone-advanced-and-much-more-sap-mobile-start-v2-2/ba-p/14011330" target="_blank">Support of SAP Build Work Zone, advanced and much more: SAP Mobile Start V2.2 & 2.3 - Release Update</A>.</SPAN></LI><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-mobile-start-v2-4-sap-document-ai-integration-and-much-more-release/ba-p/14170599" target="_blank">SAP Mobile Start V2.4: SAP Document AI integration and much more. Release Update</A></SPAN>.</LI><LI><SPAN><A href="https://roadmaps.sap.com/board?PRODUCT=73554900100800003452&range=FIRST-LAST#Q1%202025" target="_blank" rel="noopener noreferrer">SAP Mobile Start Road Map</A></SPAN>.</LI></UL><P> </P><H1 id="toc-hId-1758273861"><SPAN>Joule User Experience Innovations</SPAN></H1><P>Joule is the AI-powered copilot for SAP’s cloud products, offering a powerful new user experience, using natural language to access them and providing a nice flow for the user wherever they are, on desktop, laptop or mobile devices.</P><P>First, we’ll have a look at the latest generic or cross-product UX innovations in the web and mobile, before I give you some pointers to the product-specific innovations as well as news about developing custom capabilities.</P><H2 id="toc-hId-1268357349"><SPAN>Cross-Product Joule UX Innovations</SPAN></H2><P>This section covers these user experience innovations:</P><UL><LI>Joule Analytical Pattern.</LI><LI>Joule supports multiple conversations.</LI><LI>Use Joule in 11 languages.</LI><LI>Joule in Microsoft 365 Copilot and Microsoft Teams</LI><LI>Customer specific skills and agents.</LI></UL><H3 id="toc-hId-778440837"><SPAN>Joule Analytical Pattern</SPAN></H3><P>This new pattern is available in all products which give users access to our Joule copilot. This new pattern is powered by SAP Analytics Cloud, with data from models that are indexed by the <SPAN><A href="https://community.sap.com/t5/technology-blogs-by-sap/initial-release-of-sap-analytics-cloud-just-ask/ba-p/13583721" target="_blank">Just Ask feature of SAP Analytics Cloud</A></SPAN>.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 12: Example Joule Analytical Pattern. Alt Text: an animated GIF showing how a user asks Joule “Show me sales commission by agend for model bike sales”, and how Joule shows a horizontal bar chart for top 5 sales commissions per sales agent." style="width: 374px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334658i40A74A2FA1038621/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="12 Joule_Analytical_Pattern_Sales_Commission.gif" alt="Figure 12: Example Joule Analytical Pattern. Alt Text: an animated GIF showing how a user asks Joule “Show me sales commission by agend for model bike sales”, and how Joule shows a horizontal bar chart for top 5 sales commissions per sales agent." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 12: Example Joule Analytical Pattern. Alt Text: an animated GIF showing how a user asks Joule “Show me sales commission by agend for model bike sales”, and how Joule shows a horizontal bar chart for top 5 sales commissions per sales agent.</span></span></P><P>As you can see in figure 12, users can now access analytical insights from the product they are working in, without having to first navigate to SAP Analytics Cloud, making work more efficient and hence also more enjoyable.</P><P>The example in figure 12 is what we call a descriptive question, but Joule can respond to a wide range of queries:</P><UL><LI><STRONG>Descriptive questions</STRONG>, such as “What is the total revenue for Q1?” or “Show me sales by region in 2025”.</LI><LI><STRONG>Comparative analysis, </STRONG>such as “Compare sales between 2023 and 2024" Or How do profits in Germany compare to France?”</LI><LI><STRONG>Time series analysis</STRONG>, such as “Show me sales by month” or “Show the trend of customer acquisitions over the last 6 months”.</LI><LI><STRONG>Top / Bottom N analysis</STRONG>, such as “Show me top 5 sales by store” or “List the bottom 3 regions in terms of sales”.</LI></UL><P>Find out more in this blog post:</P><UL><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/introducing-analytical-insights-in-joule-empowering-smarter-decisions/ba-p/14083673" target="_blank">Introducing Analytical Insights in Joule: Empowering Smarter Decisions, Instantly</A></SPAN>.</LI></UL><P>With the introduction of this new pattern, Joule now supports four interaction patterns:</P><OL><LI><STRONG>Informational pattern</STRONG>, for querying written documents, such as SAP documentation in the SAP Help Portal, or customer policies etc.</LI><LI><STRONG>Navigational pattern</STRONG>, for finding and navigating to applications.</LI><LI><STRONG>Transactional pattern</STRONG>, for interacting directly with business applications.</LI><LI><STRONG>Analytical pattern</STRONG>, for answering analytical queries directly in Joule.</LI></OL><H3 id="toc-hId-581927332"><SPAN>Joule Supports Multiple Conversations</SPAN></H3><P>When having a conversation with Joule, you can ask follow-up questions, building on the previous questions and answers in the conversation, since Joule keeps the context.</P><P>Now you can initiate up to ten conversations in parallel, with Joule keeping the context for each of the conversations, so that when you return to a previous conversation you can continue where you left off. Figure 13 shows what this looks like.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 13: Joule supports multiple conversations. On the left, a conversation was started by asking “How many languages does Joule support”. On the right, you see how active and expired conversations are shown. Alt Text: On the left, Joule replies with “Joule currently supports eleven language officially” and then lists them, below the answer a link to the source document “Joule Multi Language Support” is provided. On the right, the conversation history sidebar is visible on the left, overlaying half the screen, with a button “+ New Conversation” at the top, followed by a section “Active” with two conversations and a section “Expired” with four. The bottom contains a link to “Settings” and on to “AI Notice”." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334659i6DDD87C6CD49DB5B/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="13 Joule - languages plus multiple conversations.jpg" alt="Figure 13: Joule supports multiple conversations. On the left, a conversation was started by asking “How many languages does Joule support”. On the right, you see how active and expired conversations are shown. Alt Text: On the left, Joule replies with “Joule currently supports eleven language officially” and then lists them, below the answer a link to the source document “Joule Multi Language Support” is provided. On the right, the conversation history sidebar is visible on the left, overlaying half the screen, with a button “+ New Conversation” at the top, followed by a section “Active” with two conversations and a section “Expired” with four. The bottom contains a link to “Settings” and on to “AI Notice”." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 13: Joule supports multiple conversations. On the left, a conversation was started by asking “How many languages does Joule support”. On the right, you see how active and expired conversations are shown. Alt Text: On the left, Joule replies with “Joule currently supports eleven language officially” and then lists them, below the answer a link to the source document “Joule Multi Language Support” is provided. On the right, the conversation history sidebar is visible on the left, overlaying half the screen, with a button “+ New Conversation” at the top, followed by a section “Active” with two conversations and a section “Expired” with four. The bottom contains a link to “Settings” and on to “AI Notice”.</span></span></P><P><EM> </EM>You can return to conversations within 8 hours. To start a new conversation, simply click on “New Conversation”. The old conversation will be listed in the “Active” section, as you can see in Figure 13. The title of the conversation is automatically created by Joule using AI; users can rename the titles when they return to the conversation. Joule supports a maximum of 10 active conversations.</P><P>After 8 hours, the conversation expires but is not deleted. It is kept read-only in the “Expired” section, as shown in Figure 13. Conversations are finally deleted 7 days after the creation date.</P><P>In the browser, Joule can be expanded to fill the screen, as shown in Figure 14.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 14: Joule expanded to full-screen mode, showing the conversation history sidebar and the chat side by side. Alt Text: The same information is shown as on both screens of Figure 2, since the conversation history sidebar does not overlay the chat, and the chat is shown on the right with much more screen width." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334660iC892D92210BE12A0/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="14 Joule full-screen (with shadow).jpg" alt="Figure 14: Joule expanded to full-screen mode, showing the conversation history sidebar and the chat side by side. Alt Text: The same information is shown as on both screens of Figure 2, since the conversation history sidebar does not overlay the chat, and the chat is shown on the right with much more screen width." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 14: Joule expanded to full-screen mode, showing the conversation history sidebar and the chat side by side. Alt Text: The same information is shown as on both screens of Figure 2, since the conversation history sidebar does not overlay the chat, and the chat is shown on the right with much more screen width.</span></span></P><P>Find out more in the documentation:</P><UL><LI><SPAN><A href="https://help.sap.com/docs/joule/serviceguide/using-joule-as-standalone-application?locale=en-US#managing-multiple-conversations" target="_blank" rel="noopener noreferrer">Using the Joule Web Client</A></SPAN>.</LI></UL><H3 id="toc-hId-553597518"><SPAN>Use Joule in 11 Languages</SPAN></H3><P>Figure 14 shows that you can ask Joule which languages it supports, and it will answer with the list of 11 languages. Here they are in alphabetical order, with the variant of the language in brackets.</P><UL><LI>Chinese (Simplified)</LI><LI>English (US)</LI><LI>French (France)</LI><LI>German (Germany)</LI><LI>Greek</LI><LI>Japanese</LI><LI>Korean</LI><LI>Polish</LI><LI>Portugese (Brazil)</LI><LI>Spanish (Spain)</LI><LI>Vietnamese </LI></UL><H3 id="toc-hId-357084013"><SPAN>Joule in Microsoft 365 Copilot and Microsoft Teams</SPAN></H3><P>How often have you been in a chat with a colleague and needed to find some information from an SAP system? Up until now this would involve you leaving the chat, going to a different window and navigating to the right SAP application to get what were looking for.</P><P>Now, you can chat directly with Joule in Microsoft Teams, use Joule in Microsoft Teams and Microsoft Teams Mobile as an app, and ask Joule questions directly in Microsoft 365 Copilot. To get an idea of how powerful this is, watch this video:</P><P><div class="video-embed-center video-embed"><iframe class="embedly-embed" src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FYtCA_Xjysb4%3Ffeature%3Doembed&display_name=YouTube&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DYtCA_Xjysb4&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FYtCA_Xjysb4%2Fhqdefault.jpg&type=text%2Fhtml&schema=youtube" width="600" height="337" scrolling="no" title="Joule and Microsoft 365 Copilot: A new, unified work experience" frameborder="0" allow="autoplay; fullscreen; encrypted-media; picture-in-picture;" allowfullscreen="true"></iframe></div></P><P>To get started, have a look at the documentation:</P><UL><LI><SPAN><A href="https://help.sap.com/docs/joule/integrating-joule-with-sap/integrating-joule-with-microsoft-365-copilot?locale=en-US" target="_blank" rel="noopener noreferrer">Integrating Joule with Microsoft 365 Copilot</A></SPAN></LI></UL><H2 id="toc-hId-453973515"><SPAN>Joule Available on Mobile</SPAN></H2><P>Joule is also now generally available for mobile, running natively with SAP Mobile Start. It is now also available integrated in the SAP apps <EM>SAP SuccessFactors</EM> and <EM>SAP Sales Cloud</EM>. Figure 1 shows examples of Joule running on a mobile phone.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 15: Examples showing Joule integrated in SAP Mobile Start, showing from left to right: the start page, the informational pattern accessing SAP Help Portal, and the transactional pattern used to interact with SAP S/4HANA Cloud and then with SAP SuccessFactors. ALT Text: Four images are shown: the start page shows a “How can I help you” text, followed by some suggested prompts as buttons; the informational pattern shows the prompt “How can I customize a sales order”. Below that, the sixteen-line written answer is shown, followed by a “Search results” selector and three top search results. The navigational pattern shows the prompt “Show sales orders with delivery status not completed”, below that, the reply from Joule “Here’s what I’ve found” is followed by a card containing three lines and an “Open” button. A second transactional example with the prompt “Show profile of Maria Alvares”, followed by the result and a button for navigating to her profile." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334661i0EFFAD0562E62EB4/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="15 Joule for Mobile Start.jpg" alt="Figure 15: Examples showing Joule integrated in SAP Mobile Start, showing from left to right: the start page, the informational pattern accessing SAP Help Portal, and the transactional pattern used to interact with SAP S/4HANA Cloud and then with SAP SuccessFactors. ALT Text: Four images are shown: the start page shows a “How can I help you” text, followed by some suggested prompts as buttons; the informational pattern shows the prompt “How can I customize a sales order”. Below that, the sixteen-line written answer is shown, followed by a “Search results” selector and three top search results. The navigational pattern shows the prompt “Show sales orders with delivery status not completed”, below that, the reply from Joule “Here’s what I’ve found” is followed by a card containing three lines and an “Open” button. A second transactional example with the prompt “Show profile of Maria Alvares”, followed by the result and a button for navigating to her profile." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 15: Examples showing Joule integrated in SAP Mobile Start, showing from left to right: the start page, the informational pattern accessing SAP Help Portal, and the transactional pattern used to interact with SAP S/4HANA Cloud and then with SAP SuccessFactors. ALT Text: Four images are shown: the start page shows a “How can I help you” text, followed by some suggested prompts as buttons; the informational pattern shows the prompt “How can I customize a sales order”. Below that, the sixteen-line written answer is shown, followed by a “Search results” selector and three top search results. The navigational pattern shows the prompt “Show sales orders with delivery status not completed”, below that, the reply from Joule “Here’s what I’ve found” is followed by a card containing three lines and an “Open” button. A second transactional example with the prompt “Show profile of Maria Alvares”, followed by the result and a button for navigating to her profile.</span></span></P><P>On Apple devices you can now use Siri and Siri Shortcuts to seamlessly start a conversation with Joule - which even works better with Apple Intelligence. Simply say "Hey Siri, ask SAP. Show my sales orders with delivery status not completed" and Joule will provide you with the respective content within the app.</P><P>Note that as of today, not all your prompts and web apps are supported on the phone; however, we are continuously adding further Joule business skills and scenarios.</P><P>Find out more here:</P><UL><LI><SPAN><A href="https://community.sap.com/t5/technology-blogs-by-sap/joule-on-mobile-amp-start-screen-personalization-sap-mobile-start-v2-1/ba-p/13955048" target="_blank">Joule on Mobile & Start Screen Personalization: SAP Mobile Start V2.1 - Release Update</A></SPAN></LI></UL><H2 id="toc-hId-257460010"><SPAN>Product-specific capabilities </SPAN></H2><P>In addition to the above generic capabilities, we provide Joule skills for getting your work done more efficiently, for specific use cases. Find out more about these in the SAP Discovery Center and in the documentation:</P><UL><LI><SPAN><A href="https://discovery-center.cloud.sap/ai-feature/98ee8608-82bb-49c3-b4ca-805bd6594314/" target="_blank" rel="noopener nofollow noreferrer">SAP S/4HANA Cloud Private Edition, Joule</A> (SAP Discovery Center).<BR /></SPAN>Here you’ll also find links to many further resources.</LI><LI><SPAN><A href="https://help.sap.com/docs/joule/capabilities-guide/joule-in-sap-s-4hana-cloud-private-edition?locale=en-US&version=CLOUD" target="_blank" rel="noopener noreferrer">Joule in SAP S/4HANA Cloud Private Edition</A> (Documentation).</SPAN></LI></UL><H2 id="toc-hId-60946505"><SPAN>Customer-specific Joule skills and agents</SPAN></H2><P>You can now build your own Joule skills and beta-test agents using Joule Studio, which has now been made generally available. Read Michael Ameling’s overview blog post:</P><UL><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/joule-studio-is-generally-available-in-sap-build-empower-your-business-with/ba-p/14137882" target="_blank">Joule Studio is generally available in SAP Build: Empower your business with intelligent automation</A></SPAN></LI></UL><H3 id="toc-hId--428970007"><SPAN>Joule Agents</SPAN></H3><P>We are bringing SAP Business AI to the next level via Joule Agents, that can autonomously plan and execute multi-step workflows.</P><P>Why do I include this in a section on user experience updates? Aren’t Joule Agents a back-end thing? Well… the reason is simple: Joule Agents significantly enhance the overall user <EM>experience</EM>, as opposed to the user <EM>interface</EM>, because the system will do a lot more for you based on your requests. This means that the overall experience you have using SAP goes up a level, since you can get a lot done much more easily than before.</P><P>Joule Agents can be triggered from Joule directly or embedded within applications.</P><P>For a general overview of Joule Agents, have a look here:</P><UL><LI><SPAN><A href="https://www.sap.com/products/artificial-intelligence/ai-agents.html" target="_blank" rel="noopener noreferrer">Joule Agents</A></SPAN> on sap.com.</LI><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/ai-agents-in-action/ba-p/14073817" target="_blank">AI Agents in Action</A></SPAN> (blog post).</LI><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/envision-the-future-of-generative-ai-with-sap-s-ai-agents/ba-p/14029219" target="_blank">Envision the Future of Generative AI with SAP's AI Agents</A></SPAN> (blog post).</LI><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/how-sap-s-ai-agent-architecture-enables-unprecedented-automation-and/ba-p/14158296" target="_blank">How SAP’s AI Agent Architecture Enables Unprecedented Automation and Decision Augmentation</A></SPAN> (blog post by Philipp Herzig).</LI></UL><P> </P><H1 id="toc-hId--38677498"><SPAN>Intelligent Situation Handling news</SPAN></H1><P><SPAN><A href="https://community.sap.com/topics/intelligent-situation-handling" target="_blank">Intelligent Situation Handling</A> speeds up the resolution of critical business situations by automatically and hence proactively alerting users about urgent issues, proposing follow-up actions, letting you monitor situations, and automating the resolution by using business rules.</SPAN></P><P><SPAN>If you’re not familiar with Intelligent Situation Handling, I recommend that you watch the introductory video and read the “Get started” blog posts on the SAP Community topic page:</SPAN></P><UL><LI><SPAN><A href="https://pages.community.sap.com/topics/intelligent-situation-handling" target="_blank" rel="noopener noreferrer">Intelligent Situation Handling topic page</A>.</SPAN></LI></UL><P><SPAN> </SPAN><SPAN>With the 2025 release, SAP provides nine new situation templates in the areas of finance, public sector, service, sourcing and procurement, and supply chain:</SPAN></P><UL><LI><SPAN><A href="https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/f5d3e1005efd4e86acf9a65abf428082/0dd53d53b6654cdab30b71d95d966c0f.html?version=2025.000&locale=en-US&parentHref=https://help.sap.com/whats-new/5fc51e30e2744f168642e26e0c1d9be1?locale=en-US%26q=situation&parentName=What%27s+New+Viewer+-+SAP+S/4HANA+and+SAP+S/4HANA+Cloud+Private+Edition" target="_blank" rel="noopener noreferrer">New use cases for Situation Handling</A>.</SPAN></LI></UL><P><SPAN> </SPAN><SPAN>For the full list of available templates provided by SAP, look here:</SPAN></P><UL><LI><SPAN><A href="https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/8308e6d301d54584a33cd04a9861bc52/fdbf5eabf0e84621a15c6965b3e01649.html?locale=en-US" target="_blank" rel="noopener noreferrer">Use Cases for Situation Handling</A>.</SPAN></LI></UL><H2 id="toc-hId--528594010"><SPAN>New Situation Handling Framework Capabilities</SPAN></H2><P><SPAN>Already with the 2023 release we made it possible for partners and customers to create their own situation objects with ABAP Development Tooling (ADT) via developer extensibility. This becomes even more powerful with the 2025 release, with the extended framework supporting the collection of data context, support for custom objects in your own use cases, and support for the standard translation option. Let’s have a look at these in a bit more detail.</SPAN></P><H3 id="toc-hId--1018510522"><SPAN>Data Context supported by the Extended Framework </SPAN></H3><P><SPAN>The data context is business data from business objects involved in a situation instance that can be collected, distributed, and used for advanced analytics – for example using the <EM>Monitor Situations – Extended</EM> app. If enabled in a situation type, data context is collected when a situation instance is created, updated, or completed. For example, If you use the situation template <A href="https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/8308e6d301d54584a33cd04a9861bc52/f1a8c585e3ca4132b3ae595fde3ee58b.html?locale=en-US&state=PRODUCTION&version=2025.000" target="_blank" rel="noopener noreferrer">Quantity Deficit in Supplier's Delivery</A> to inform specific members in your purchasing organization about a deficit in the quantity of materials to be delivered by the supplier, you'll get, for example, the material, plant, or supplier as part of the data context.</SPAN></P><P><SPAN>With the 2025 release, every extended object-based situation template supports data context. You can activate it in the <EM>Manage Situation Types - Extended</EM> app. Doing so results in an event being triggered that includes the data context every time a situation instance is created, updated or completed. For more information, look at the documentation:</SPAN></P><UL><LI><SPAN><A href="https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/8308e6d301d54584a33cd04a9861bc52/a067c316e34143e581299ebf6b4c84de.html?locale=en-US" target="_blank" rel="noopener noreferrer">Data Context</A> (documentation).</SPAN></LI><LI><SPAN><A href="https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/f5d3e1005efd4e86acf9a65abf428082/d4704481bd914c829849cc7f7c3ad4aa.html?version=2025.000&locale=en-US&parentHref=https://help.sap.com/whats-new/5fc51e30e2744f168642e26e0c1d9be1?locale=en-US%26q=situation&parentName=What%27s+New+Viewer+-+SAP+S/4HANA+and+SAP+S/4HANA+Cloud+Private+Edition" target="_blank" rel="noopener noreferrer">Data Context in the What’s New documentation</A>.</SPAN></LI></UL><H3 id="toc-hId--1215024027"><SPAN>Custom Object Types Supported</SPAN></H3><P><SPAN>You can now use <A href="https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/f5d3e1005efd4e86acf9a65abf428082/04da821f802240b7ba8b35cfb2926c36.html?version=2025.000&locale=en-US&parentHref=https://help.sap.com/whats-new/5fc51e30e2744f168642e26e0c1d9be1?locale=en-US%26q=situation&parentName=What%27s+New+Viewer+-+SAP+S/4HANA+and+SAP+S/4HANA+Cloud+Private+Edition" target="_blank" rel="noopener noreferrer">custom object types and object node types</A>, that you have created with the ABAP development tools for Eclipse (ADT), in situation objects in the <EM>Manage Situation Objects</EM> app as well as in ADT. Until now, you could only use those delivered by SAP. Hence you have far more flexibility in supporting your own Situation Handling use cases.</SPAN></P><H3 id="toc-hId--1243353841"><SPAN>Translation with Standard Function Supported</SPAN></H3><P><SPAN>With this feature, you can use the standard function for translating texts included in situation objects, situation scenarios, and situation types. This means that you now can use the <EM>Maintain Translations </EM>app, so that all your translation work can be done in a consistent way now. Find out more in the documentation: </SPAN></P><UL><LI><SPAN><A href="https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/8308e6d301d54584a33cd04a9861bc52/5be5b15698b54885880eb2e7fb02b4a0.html?locale=en-US" target="_blank" rel="noopener noreferrer">Translate Texts from Situation Objects, Situation Scenarios, and Situation Types</A>.</SPAN></LI></UL><P> </P><H1 id="toc-hId--853061332"><SPAN>AI-Assisted Capabilities: Outlook</SPAN></H1><P><SPAN> </SPAN><SPAN>We have introduced a number of AI-assisted capabilities in the SAP S/4HANA Cloud Public Edition, as presented in my blog post <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-ux-q3-2025-update-part-2-sap-s-4hana-cloud-public-edition-2508-and-sap/ba-p/14171291" target="_blank">SAP UX Q3/2025 Update – Part 2: SAP S/4HANA Cloud Public Edition 2508 and SAP Fiori Launchpad</A>, in particular:</SPAN></P><UL><LI><STRONG>AI-assisted enterprise search</STRONG>.</LI><LI><STRONG>AI-assisted easy filter</STRONG>.</LI><LI><STRONG>AI-assisted smart summarization</STRONG>.</LI><LI><STRONG><SPAN>AI-assisted financial business insights.</SPAN></STRONG></LI></UL><P><SPAN> </SPAN><SPAN>These are currently on our road map for delivery in Q4/2026 for SAP S/4HANA Cloud Private Edition. Please not that, as usual with such forward-looking statements, our plans are subject to change.</SPAN></P><P><SPAN> </SPAN><SPAN>If you look at the above public cloud blog post, you might also notice the new Salutation Bar and the Recap feature in My Home. These are also currently on the road map for delivery in Q4/2026.</SPAN></P><P> </P><H1 id="toc-hId--1049574837"><SPAN>New Collaboration Capabilities</SPAN></H1><H2 id="toc-hId--1539491349"><SPAN>Collaborative Draft</SPAN></H2><P><SPAN>Some selected applications support collaborative draft handling of business objects. This means that more than one user can edit a business object, such as a payment advice, at the same time, and see changes made by others before the object is finally saved. </SPAN></P><P><SPAN> </SPAN><SPAN>Within the object page, the object header shows the avatars of those who are editing; you also get the avatar shown next to fields which they are editing. Also, we have extended the grid table to indicate which entries are currently in a draft state, as well as showing those currently being edited by someone else (see Figure 16); this is also available in the responsive tables.</SPAN></P><P><SPAN> </SPAN><SPAN>You can invite other users to join you in working on an object, as you can also see in Figure 16.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 16: Collaborative draft. On the top left you see how you can invite colleagues to edit the draft with you. The image on the right shows how you can see who else is editing the object, in this case “Payment Advice”, and which field they are currently editing. On the bottom left you can see the new indicators in grid tables. Alt Text: three screenshots are shown as described, the names of the colleagues editing are shown as pop-overs." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334662iC247C155B1D6F050/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="16 Collaborative Draft - all in one.jpg" alt="Figure 16: Collaborative draft. On the top left you see how you can invite colleagues to edit the draft with you. The image on the right shows how you can see who else is editing the object, in this case “Payment Advice”, and which field they are currently editing. On the bottom left you can see the new indicators in grid tables. Alt Text: three screenshots are shown as described, the names of the colleagues editing are shown as pop-overs." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 16: Collaborative draft. On the top left you see how you can invite colleagues to edit the draft with you. The image on the right shows how you can see who else is editing the object, in this case “Payment Advice”, and which field they are currently editing. On the bottom left you can see the new indicators in grid tables. Alt Text: three screenshots are shown as described, the names of the colleagues editing are shown as pop-overs.</span></span></P><P><SPAN> </SPAN><SPAN>Collaborative draft utilizes the latest SAP Fiori elements for OData V4 technology.</SPAN></P><H2 id="toc-hId--1736004854"><SPAN>To-Dos in Microsoft Teams</SPAN></H2><P>Important notifications should not go unnoticed, so we help to ensure that by providing an additional way for users to be notified about To-Dos from SAP S/4HANA Cloud Public Edition. Tasks and Situations which are shown on <EM>My Home</EM> can now also pushed to users via Microsoft Teams, where they show up as new activities. Figure 17 shows how tasks are integrated. As you can see, not only are users notified directly in Teams, they also get direct access to their task embedded in Teams and can take direct action, such as approve or reject a request.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 17: Tasks appearing as activities in Microsoft Teams. ALT Text: The “Activity” tab in Microsoft Teams is shown , with a list showing on the left one activity “New tasks in SAP S/4HANA – There is 1 new task for you – ToDos” and on the right embedded within Teams the screen from My Inbox, showing the header data plus a list of Items and Bidders, and action buttons at the bottom for Approve, Reject, Show Log, Claim, Forward and Suspend." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334663iF54483405432B4EC/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="17 S4H ToDos in MS Teams.jpg" alt="Figure 17: Tasks appearing as activities in Microsoft Teams. ALT Text: The “Activity” tab in Microsoft Teams is shown , with a list showing on the left one activity “New tasks in SAP S/4HANA – There is 1 new task for you – ToDos” and on the right embedded within Teams the screen from My Inbox, showing the header data plus a list of Items and Bidders, and action buttons at the bottom for Approve, Reject, Show Log, Claim, Forward and Suspend." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 17: Tasks appearing as activities in Microsoft Teams. ALT Text: The “Activity” tab in Microsoft Teams is shown , with a list showing on the left one activity “New tasks in SAP S/4HANA – There is 1 new task for you – ToDos” and on the right embedded within Teams the screen from My Inbox, showing the header data plus a list of Items and Bidders, and action buttons at the bottom for Approve, Reject, Show Log, Claim, Forward and Suspend.</span></span></P><P><SPAN> </SPAN>See it in action here:</P><UL><LI>Video: <SPAN><A href="https://dam.sap.com/mac/embed/public/vp/a/Eeyz8aH?rc=10&doi=SAP1166601" target="_blank" rel="noopener noreferrer">To-Dos in Microsoft Teams</A></SPAN> (1:00 min.)</LI></UL><P><SPAN> </SPAN>In addition to being able to process To-Dos for tasks directly in Microsoft Teams, you can also process To-Dos for Business Situations directly in Microsoft Teams.</P><P>This means that you get notified in your Teams activity feed about new Business Situations, and you can process Business Situations in place, without having to leave Teams, as you can see in Figure 18.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 18: To-Dos for Business Situations are available via Activities in Microsoft Teams. Alt Text: Two screenshots are shown, the top one shows an row of Situation cards in My Home, the bottom one shows the Activity view in Teams, with the activity “Situations in SAP S/4HANA” and sub-text “There are 9 situations for you” selected on the left, and the right two thirds of the screen showing a list with the same situations as shown in My Home." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334664iA4B7E2ED9AC5F348/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="18 Situation To Dos in MS Teams.jpg" alt="Figure 18: To-Dos for Business Situations are available via Activities in Microsoft Teams. Alt Text: Two screenshots are shown, the top one shows an row of Situation cards in My Home, the bottom one shows the Activity view in Teams, with the activity “Situations in SAP S/4HANA” and sub-text “There are 9 situations for you” selected on the left, and the right two thirds of the screen showing a list with the same situations as shown in My Home." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 18: To-Dos for Business Situations are available via Activities in Microsoft Teams. Alt Text: Two screenshots are shown, the top one shows an row of Situation cards in My Home, the bottom one shows the Activity view in Teams, with the activity “Situations in SAP S/4HANA” and sub-text “There are 9 situations for you” selected on the left, and the right two thirds of the screen showing a list with the same situations as shown in My Home.</span></span></P><P>To enable this, you need to install the <SPAN><A href="https://appsource.microsoft.com/en-us/product/office/WA200005087?exp=ubp8" target="_blank" rel="noopener nofollow noreferrer">SAP S/4HANA for Microsoft Teams app</A></SPAN>.</P><P>For further information:</P><UL><LI>Documentation: <SPAN><A href="https://help.sap.com/docs/SAP_S4HANA_CLOUD/0f69f8fb28ac4bf48d2b57b9637e81fa/257ec7408db6420682462cd1d000e744.html?locale=en-US" target="_blank" rel="noopener noreferrer">Integrating Microsoft Teams</A></SPAN>.</LI></UL><H2 id="toc-hId--1932518359"><SPAN>Contact Cards Show Contact’s Availability Status</SPAN></H2><P><SPAN>Since FPS02 of the 2023 release, users can initiate a chat or call with Microsoft Teams directly from a contact card. I featured this in my previous blog post, look at Figure 5 there for two examples:</SPAN></P><UL><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-user-experience-q4-2024-news-for-sap-s-4hana-cloud-private-edition-2023/ba-p/13894277" target="_blank">SAP User Experience Q4/2024 News for SAP S/4HANA Cloud Private Edition 2023</A>.</SPAN></LI></UL><P><SPAN>Now, with the 2025 release, this has been enhanced to show the availability status of the contact as provided by Teams.</SPAN></P><H2 id="toc-hId--2129031864"><SPAN>Share as Card via Adaptive Card-based Loop Component</SPAN></H2><P>We now offer the option to enable embedding of interactive cards with information and actions from SAP S/4HANA Cloud and SAP S/4HANA directly into Microsoft Teams chats. The data and actions are only shown to users with the necessary authorizations. Technically this is done via adaptive card-based Loop component, for applications built with SAP Fiori elements. Figure 19 shows an example.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 19: An example of an adaptive card embedded in a Teams chat. Alt Text: A screenshot of a chat, with a request text to Megan at the top, followed by a URL to access the app, and then a card showing a purchase contract, with the text Quantity Contract as a hyperlink, along with 9 further fields from the contract. At the bottom clickable buttons “Copy” and “Withdraw from Approval”." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334666i37366BD67A8965E4/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="19 Adaptive card-based loop component.jpg" alt="Figure 19: An example of an adaptive card embedded in a Teams chat. Alt Text: A screenshot of a chat, with a request text to Megan at the top, followed by a URL to access the app, and then a card showing a purchase contract, with the text Quantity Contract as a hyperlink, along with 9 further fields from the contract. At the bottom clickable buttons “Copy” and “Withdraw from Approval”." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 19: An example of an adaptive card embedded in a Teams chat. Alt Text: A screenshot of a chat, with a request text to Megan at the top, followed by a URL to access the app, and then a card showing a purchase contract, with the text Quantity Contract as a hyperlink, along with 9 further fields from the contract. At the bottom clickable buttons “Copy” and “Withdraw from Approval”.</span></span></P><P><SPAN> </SPAN><SPAN>Find out more, including how to set it up:</SPAN></P><UL><LI><SPAN><A href="https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/8308e6d301d54584a33cd04a9861bc52/02c274deb10e44068bc0a47b1d5610c8.html?locale=en-US" target="_blank" rel="noopener noreferrer">Integrating the Share: Microsoft Teams > As Card – Authentication-Enabled Option</A> (documentation).<BR /><BR /></SPAN></LI></UL><H1 id="toc-hId--2032142362"><SPAN>UX Improvements in Details</SPAN></H1><P>As I never tire of saying: the details matter if you want to provide a great UX! We continue to work on these details, which can often result in higher satisfaction for users. With the 2025 release, we bring you a large number of improvements, as outlined in the following subsections. Note that we have four interesting ones related to working with tables towards the end of this section.</P><H2 id="toc-hId-1772908422"><SPAN>New Options for Filtering Dates (Semantic Date Range)</SPAN></H2><P>We have two new features here:</P><UL><LI>We now offer the semantic date range also for selecting dates in the table settings dialog, if you want to define a specific filter on a given field in the table. (Note that the table settings dialog allows you to define filters on all the fields in the table, irrespective of which fields appear in the filter bar at the top of the screen).</LI><LI>I’m pleased to say that, on request of many users, we now provide the option to define filters on date fields for the “Last X days/weeks/months/… to date” as well as the “Next X days/weeks/months/… to date”, where users can specify the number “X”.</LI></UL><P>An example of how tricky such seemingly simple things can be: if, on December 11th, you choose “Last 2 months to date”, do you mean the period from November 1st to December 11th, which would be up to the current date but not a full two months, or do you mean “the last two full months”, i.e. October 1st to November 30th? Since both make sense, the selection screen gives users the option to choose, with the default being the “full month” case, described as “exclude current period”, as you can see in Figure 20.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 20: New option for semantic date range. Alt Text: A list of cost centers shown in the Manage Cost Centers application, with a popover below the “Valid On” field in the filter bar showing “Last X Days / Weeks / Months / …”, a field for entering the number (2), a field for the unit of time (Months) and radio buttons to select “Exclude current period, with the period shown below the button ( 01.10.2024 – 30.11.2024)” or “Include current period (01.11.2024 – 11.12.2024)”." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334667iC39DBBCDC905F12D/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="20 Semantic date range new options.jpg" alt="20 Semantic date range new options.jpg" /></span></P><H2 id="toc-hId-1576394917"><SPAN>Column Size Persisted in Flexible Column Layout</SPAN></H2><P>When users open up an application which uses the Flexible Column Layout, it will now remember where the user had placed the separator last time, rather than putting it in the default position. Figure 21 shows an example where at the top you see the default position, and below you see the separator moved to the right slightly, so that all the text is visible in the table on the left. Next time the app is opened, the separator will open in the same place.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 21: Flexible Column Layout now remembers the previously used column width. The image at the top shows the default column width, the image below shows the last column width the user chose. Alt Text: two images of Manage Cost Centers application is shown, the upper one has the separator bar between the list on the left and the details on the right further to the left than the image on the right." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334668iCDF321FEE95123B9/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="21 Flexible Column Layout width saved.jpg" alt="Figure 21: Flexible Column Layout now remembers the previously used column width. The image at the top shows the default column width, the image below shows the last column width the user chose. Alt Text: two images of Manage Cost Centers application is shown, the upper one has the separator bar between the list on the left and the details on the right further to the left than the image on the right." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 21: Flexible Column Layout now remembers the previously used column width. The image at the top shows the default column width, the image below shows the last column width the user chose. Alt Text: two images of Manage Cost Centers application is shown, the upper one has the separator bar between the list on the left and the details on the right further to the left than the image on the right.</span></span></P><H2 id="toc-hId-1548065103"><SPAN>All Data Dictionary Help Texts Available to Users</SPAN></H2><P>This feature was requested by many customers, and I am happy to announce that it is now available: all the help texts for individual fields which are stored in the back-end data dictionary are now available to users using the built-in help, powered by SAP Companion. In other words, users of SAP Fiori apps have access to the same help texts as were shown with the classic UIs such as SAP GUI. You can see an example in Figure 22.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 22: Data Dictionary help texts now available in SAP Fiori apps. Alt Text: The Manage Purchase Contracts screen is shown, with question marks next to all fields and column headers. On the right the Help Topics are listed, with the Purchase Contract Number selected. Next to the corresponding column header a popover shows the definition text." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334669iC947D84368D419E0/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="22 DDIC F1 texts shown.jpg" alt="Figure 22: Data Dictionary help texts now available in SAP Fiori apps. Alt Text: The Manage Purchase Contracts screen is shown, with question marks next to all fields and column headers. On the right the Help Topics are listed, with the Purchase Contract Number selected. Next to the corresponding column header a popover shows the definition text." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 22: Data Dictionary help texts now available in SAP Fiori apps. Alt Text: The Manage Purchase Contracts screen is shown, with question marks next to all fields and column headers. On the right the Help Topics are listed, with the Purchase Contract Number selected. Next to the corresponding column header a popover shows the definition text.</span></span></P><H2 id="toc-hId-1351551598"><SPAN>Documentation of Keyboard Shortcuts within Applications</SPAN></H2><P>Power users are often quicker when only using the keyboard, rather than switching back and forth between keyboard and mouse – but only if they know all the relevant keyboard shortcuts. With the 2508 release we provide information about available keyboard shortcuts directly where you need them, in the context of the application. By selecting “Keyboard Shortcuts” in the user menu, a new window appears explaining all the available shortcuts for the application area currently in focus. If you click on a different part of the application, or navigate somewhere else, then the window showing the available shortcuts is updated immediately for the new context.</P><P>Figure 23 shows an example for <EM>Manage Journal Entries</EM>, where the focus is currently on the filter bar. Clicking on the the table results in many more shortcuts being shown, for example for the arrow keys for moving up and down etc., as shown in Figure 24.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 23: In-context documentation of keyboard shortcuts, for the filter bar. Alt Text: A screenshot of the app “Manage Journal Entries” with the focus on the filter bar, with a second window on the right containing Keyboard Shortcuts in two groups, “Global Shortcuts” and “Generic Keyboard Interactions”." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334670i13176E53F311908C/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="23 In-place keyboard shortcuts (filter bar).jpg" alt="Figure 23: In-context documentation of keyboard shortcuts, for the filter bar. Alt Text: A screenshot of the app “Manage Journal Entries” with the focus on the filter bar, with a second window on the right containing Keyboard Shortcuts in two groups, “Global Shortcuts” and “Generic Keyboard Interactions”." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 23: In-context documentation of keyboard shortcuts, for the filter bar. Alt Text: A screenshot of the app “Manage Journal Entries” with the focus on the filter bar, with a second window on the right containing Keyboard Shortcuts in two groups, “Global Shortcuts” and “Generic Keyboard Interactions”.</span></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 24: In-context documentation of keyboard shortcuts, for the table. Alt Text: A screenshot of the app “Manage Journal Entries” with the focus on the table, with a second window on the right containing Keyboard Shortcuts in two groups, “Global Shortcuts” and “Journal Entries (43,854)”. The latter contains descriptions for shortcuts for the table, such as the arrow up, down, left, right keys, or using “Cmd + D” to delete." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334671i9AF7459AB01570B0/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="24 In-place keyboard shortcuts (table).jpg" alt="Figure 24: In-context documentation of keyboard shortcuts, for the table. Alt Text: A screenshot of the app “Manage Journal Entries” with the focus on the table, with a second window on the right containing Keyboard Shortcuts in two groups, “Global Shortcuts” and “Journal Entries (43,854)”. The latter contains descriptions for shortcuts for the table, such as the arrow up, down, left, right keys, or using “Cmd + D” to delete." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 24: In-context documentation of keyboard shortcuts, for the table. Alt Text: A screenshot of the app “Manage Journal Entries” with the focus on the table, with a second window on the right containing Keyboard Shortcuts in two groups, “Global Shortcuts” and “Journal Entries (43,854)”. The latter contains descriptions for shortcuts for the table, such as the arrow up, down, left, right keys, or using “Cmd + D” to delete.</span></span></P><H2 id="toc-hId-1155038093"><SPAN>Automatic Update of SAP Fiori Apps Upon Change of Data in Backend</SPAN></H2><P>There are quite a few cases where users would appreciate seeing absolutely up-to-date data in their application, so that the data is automatically updated if changes occur in the backend. These changes could be made by other users, or by automated background processing . An example for the latter is the Traceability Results application, which is now automatically updated if a batch run has created new traceability items.</P><P>Note that this only supported by applications built with SAP Fiori elements using OData V4.</P><H2 id="toc-hId-958524588"><SPAN>Improved performance for scrolling in grid tables</SPAN></H2><P>Our engineers have done some magic so that now scrolling is very fast in grid tables, which are the table type typically used for working with large volumes of data.</P><P>Why do I call it magic? Well, modern web-based UIs have the UI layer running in the browser, managing direct user interactions, and calling services in the backend to get and update data. However, if you are working with a list of say over 100,000 items, you would have to wait quite a long time when starting the application until all items have been loaded into the browser. Hence we only load a certain number to start with, such as 100. This however means that when a user scrolls beyond the 100 which have been loaded, additional data needs to be fetched from the backend, which slows down scrolling. Now, our engineers have found a way to minimize this effect to almost zero, so that you have fast scrolling all the time – magic!</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 25: Performance improvement for scrolling in grid tables. Alt Text: a short video showing scrolling through a grid table." style="width: 895px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334672i7C39F7BFC8877273/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="25 Scrolling grid table (Manage Journal Entries).gif" alt="Figure 25: Performance improvement for scrolling in grid tables. Alt Text: a short video showing scrolling through a grid table." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 25: Performance improvement for scrolling in grid tables. Alt Text: a short video showing scrolling through a grid table.</span></span></P><P>Whenever the threshold is reached and more data needs to be loaded, there is a very short delay, with the progress indicator being shown for a few milliseconds, as you can see in Figure 25. In most cases, this is completely negligible. Nevertheless, we do also provide customers the option to change the number of entries loaded by default when the application is started. This is useful if a customer knows that, for a certain application, the number of entries will not exceed 2.000 for example. Then they can set the threshold to 2.000, which means that the application will take a little bit longer to load first time around, but then scrolling will be instantaneous for all the data. Figure 26 shows the UI for doing this, as part of UI adaptation. The “Threshold” determines the maximum number of entries loaded when the application is started, the “Scroll Threshold” determines the maximum number that are loaded during scrolling if new entries need to be fetched.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 26: UI adaptation to determine the threshold determining the maximum number of entries loaded in a table when an application is started. Alt Text: A screenshot with a pop-over “Configure Table” with two new fields “Threshold”, being edited with the value 3000, and “Scroll Threshold”, containing the value 300." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334673iB181B536929EBA47/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="26 Scrolling settings in UI adaptation.jpg" alt="Figure 26: UI adaptation to determine the threshold determining the maximum number of entries loaded in a table when an application is started. Alt Text: A screenshot with a pop-over “Configure Table” with two new fields “Threshold”, being edited with the value 3000, and “Scroll Threshold”, containing the value 300." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 26: UI adaptation to determine the threshold determining the maximum number of entries loaded in a table when an application is started. Alt Text: A screenshot with a pop-over “Configure Table” with two new fields “Threshold”, being edited with the value 3000, and “Scroll Threshold”, containing the value 300.</span></span></P><H2 id="toc-hId-762011083"><SPAN>Table Grouping and/or “Show more per row” State can be Shared</SPAN></H2><P>If a user personalizes a table by grouping entries by one of the fields, such as the date, this grouping is persisted when sharing the link with a colleague: when the colleague opens the application with the link, they see the same grouping applied.</P><P>Similarly, if “show more per row” was selected by the user before sharing the link, the recipient will also see more information per row upon opening the application via the link. This information is also stored when saving a view of a table.</P><H2 id="toc-hId-565497578"><SPAN>Sort or Group Tables by ID or Description </SPAN></H2><P>SAP Fiori apps display the ID and the description in the same column within a table, which provides a better experience than having them in two separate columns.</P><P>Now, we offer users a choice when sorting or grouping the table by a column which contains both ID and description: they can choose to do this by ID or by description. As you can see in Figure 27, this selection is very intuitive. The example shows what it looks like when sorting by Company Code. At the bottom of the table you see an entry “1710 (BestRun US)”, where the Company Code (the ID) is 1710 and the Company Name (the Description) is “BestRun US”. In the popover “Sort By” section, the row of icons next to Company Code and Company Name indicate that currently no sorting is active, with the option to sort either bei Code or by Name ascending or descending.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 27: Sort or group tables by ID (in this case Company Code) or by Description (Company Name) when both are displayed together in one column . Alt Text: A screenshot of part of the Manage Journal Entries app, with a list of journal entries and a pop-over “Column Settings” with two sections “Sort By” and “Group By”. The “Sort By” section has two lines, “Company Code” and “Company Name”, and offers three buttons with icons for each of these, representing “no sorting”, “ascending”, “descending”." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334674i43AB07C6823A0561/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="27 Sort table by ID or Description.jpg" alt="Figure 27: Sort or group tables by ID (in this case Company Code) or by Description (Company Name) when both are displayed together in one column . Alt Text: A screenshot of part of the Manage Journal Entries app, with a list of journal entries and a pop-over “Column Settings” with two sections “Sort By” and “Group By”. The “Sort By” section has two lines, “Company Code” and “Company Name”, and offers three buttons with icons for each of these, representing “no sorting”, “ascending”, “descending”." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 27: Sort or group tables by ID (in this case Company Code) or by Description (Company Name) when both are displayed together in one column . Alt Text: A screenshot of part of the Manage Journal Entries app, with a list of journal entries and a pop-over “Column Settings” with two sections “Sort By” and “Group By”. The “Sort By” section has two lines, “Company Code” and “Company Name”, and offers three buttons with icons for each of these, representing “no sorting”, “ascending”, “descending”.</span></span></P><H2 id="toc-hId-368984073"><SPAN>Hiding Description Fields in List of Fields in Table Settings</SPAN></H2><P>For tables as above where ID and description are displayed in one column, technically, the ID and description are stored in two different fields. Until now, when users personalize the table, both the ID and the description were listed in the list of columns, which confused some users.</P><P>Now, we have addressed this by providing the option to hide the descriptions (see Figure 28), and hence simplifying personalization. This option is on by default, i.e. the description fields are automatically hidden now.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 28: Description fields can be hidden from the list of fields shown when personalizing tables. Alt Text: A screenshot with a pop-over “View Settings” containing tabs “Columns”, “Sort”, “Filter”, and a pop-over “Filters” with two options “Hide descriptions” (selected) and “Hide Unselected” (deselected) . “Columns” is selected and shows a list of columns with check marks. The third entry is “Company Code”, followed by “Created On” – i.e. the description column “Company Name” is not listed next to the “Company Code”." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334675i903DA3A08AAFAE94/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="28 Hide descriptions in table settings.jpg" alt="Figure 28: Description fields can be hidden from the list of fields shown when personalizing tables. Alt Text: A screenshot with a pop-over “View Settings” containing tabs “Columns”, “Sort”, “Filter”, and a pop-over “Filters” with two options “Hide descriptions” (selected) and “Hide Unselected” (deselected) . “Columns” is selected and shows a list of columns with check marks. The third entry is “Company Code”, followed by “Created On” – i.e. the description column “Company Name” is not listed next to the “Company Code”." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 28: Description fields can be hidden from the list of fields shown when personalizing tables. Alt Text: A screenshot with a pop-over “View Settings” containing tabs “Columns”, “Sort”, “Filter”, and a pop-over “Filters” with two options “Hide descriptions” (selected) and “Hide Unselected” (deselected) . “Columns” is selected and shows a list of columns with check marks. The third entry is “Company Code”, followed by “Created On” – i.e. the description column “Company Name” is not listed next to the “Company Code”.</span></span></P><P>These are the highlights of our changes in details. For the full list of what’s new since the FPS00 shipment of the 2023 release, have a look at the What’s New Viewer:</P><UL><LI><SPAN><A href="https://help.sap.com/whats-new/5fc51e30e2744f168642e26e0c1d9be1?Business_Area=ABAP+Platform&q=Fiori+Launchpad&locale=en-US" target="_blank" rel="noopener noreferrer">What’s New for SAP Fiori launchpad for SAP S/4HANA and SAP S/4HANA Cloud Private Edition</A>.</SPAN></LI></UL><P><SPAN> </SPAN></P><H1 id="toc-hId-465873575"><SPAN>UI adaptation improvements for key users</SPAN></H1><P><SPAN>We have made significant enhancements to UI Adaptation for key users with the 2025 release. The “Adapt UI” option which key users see in their user menu shows you what you can change in the app, in a very intuitive way. And you can change and adapt far more than in the past. See below for some highlights.</SPAN></P><P><SPAN>Also good to know: the Adapt UI menu entry is also available when using a Classic app (SAP GUI for HTML) from within the SAP Fiori launchpad. It will bring up the Adapt UI app for Screen Personas <A href="https://fioriappslibrary.hana.ondemand.com/sap/fix/externalViewer/#/detail/Apps('F5740')/S35" target="_blank" rel="noopener nofollow noreferrer">F5740 Adapt UI for Classic Applications with Screen Personas</A>, which allows key users to adapt the layout of these classic UIs. </SPAN></P><H2 id="toc-hId--24042937"><SPAN>Key Users Can Rearrange ID and Description Within a Field or Column</SPAN></H2><P>SAP applications come with a standard arrangement of ID and description within a field or a column, based on user research. We have found that for financial users, it is usually best to have the ID first and the description in brackets: Company Code (Company Description), for example “1710 (BestRun US)” as shown in Figure 27. For users in sales and logistics, it is usually best to have the name first and the ID in brackets: for example Customer Name (Customer ID), for example “US Specialty Cycles 5 (USCU_S05)” as shown in Figure 2.</P><P>Now, key users can use UI adaptation to rearrange the order for a given application. Doing this change applies then to all occurrences of the field in the application, i.e. the filter bar, the table or in a form on an object page.</P><H3 id="toc-hId--513959449"><SPAN>Far More Options for Key Users to Adapt UIs</SPAN></H3><P>Key users can now make far more significant changes to UIs than before. For example, they can add a button to clear all filter values in the filter bar, remove buttons such as the “Export to Excel”, and much more. Figure 29 shows the options for configuring a table for example.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 29: Many more options for Key Users to adapt UIs. Alt Text: UI Adaptation is shown switched on for the application Manage Bank Hierarchies, with a popover called “Configure Table” filling half the screen, and showing 12 options such as “Enable Table Export”, “Frozen Column Count” with a field for entering the number, “Sorting”, “Columns” etc." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334709i480AD145F30CAD52/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="29 Key User Manifest Changes.jpg" alt="Figure 29: Many more options for Key Users to adapt UIs. Alt Text: UI Adaptation is shown switched on for the application Manage Bank Hierarchies, with a popover called “Configure Table” filling half the screen, and showing 12 options such as “Enable Table Export”, “Frozen Column Count” with a field for entering the number, “Sorting”, “Columns” etc." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 29: Many more options for Key Users to adapt UIs. Alt Text: UI Adaptation is shown switched on for the application Manage Bank Hierarchies, with a popover called “Configure Table” filling half the screen, and showing 12 options such as “Enable Table Export”, “Frozen Column Count” with a field for entering the number, “Sorting”, “Columns” etc.</span></span></P><P> </P><H1 id="toc-hId-44516751"><SPAN>Design and Technology News</SPAN></H1><P><SPAN>For a comprehensive overview of the recent design and technology news, have a look at my blog posts from Q1 and Q3 2025. These are also relevant for the SAP S/4HANA Cloud Private Edition and SAP S/4HANA 2025 release, since the design and technology are already available in the cloud:</SPAN></P><UL><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-user-experience-q1-2025-update-part-7-ui-design-and-technology-for-web/ba-p/14034290" target="_blank">SAP User Experience Q1/2025 Update – Part 7: UI Design and Technology for Web and Mobile</A></SPAN></LI><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-ux-q3-2025-update-part-7-ui-design-and-technology-for-web-and-mobile/ba-p/14197128" target="_blank">SAP UX Q3/2025 Update – Part 7: UI Design and Technology for Web and Mobile</A><BR /></SPAN><SPAN>Note though that the SAP Build Extensibility Wizard presented there is currently only integrated with for SAP S/4HANA Cloud Public Edition.</SPAN></LI></UL><P><SPAN>We are progressing at such a pace, that I have some additional news to share with you, not covered by the above posts. In addition, I would like to explicitly mention some particular highlights here from the above posts too. </SPAN></P><P><SPAN>Regarding extensibility: do have a look at the new <A href="https://extensibilityexplorer.cfapps.eu10.hana.ondemand.com/ExtensibilityExplorer/" target="_blank" rel="noopener nofollow noreferrer">SAP Extensibility Explorer</A>.</SPAN></P><H2 id="toc-hId--445399761"><SPAN>SAP Design System Portal and UI Kits – now with AI Components</SPAN></H2><P>We recently introduced the new <SPAN><A href="http://www.sap.com/design-system" target="_blank" rel="noopener noreferrer">SAP Design System portal</A></SPAN> that brings together the product design guidelines SAP Fiori for web, SAP Fiori for iOS, and SAP Fiori for Android, as well as to the new digital design system guidelines. With its enhanced usability, simplified versioning and improved performance, designers (and developers!) get a better user experience compared with the previous SAP Fiori design guidelines.</P><P>The new UI Kits available for designers in Figma make it easy for designers to design accessible UIs at enterprise scale, for web applications, mobile iOS and Android applications as well as wearables. The UI Kits provide reusable components for web and mobile, along with web floorplans, which give you what you need out-of-the-box.</P><P>We have just released SAP Web UI Kit v8.0 which includes a full set of <STRONG>AI components</STRONG>: AI Button, AI Menu Button, AI Split Menu Button, AI Prompt Input, AI Input, AI Text Area, and AI Rich Text Editor.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 30: The SAP Design System portal start page (on the left), and SAP’s UI Kits for designers in Figma (on the right). Alt Text: Two screenshots. The portal page shows four main sections SAP Fiori for Web, … for Android, … for iOS, and SAP Digital Design System, each followed by links to UI elements, Figma kits, and overviews. The UI Kits show 8 cards, SAP Fiori for Android, Web, iOS, watchOS, Wear OS, Performance, Accessibility and SAP S/4HANA." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334710iC1EFB6A0FADBC1B1/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="30 Design System Portal and UI Kits.jpg" alt="Figure 30: The SAP Design System portal start page (on the left), and SAP’s UI Kits for designers in Figma (on the right). Alt Text: Two screenshots. The portal page shows four main sections SAP Fiori for Web, … for Android, … for iOS, and SAP Digital Design System, each followed by links to UI elements, Figma kits, and overviews. The UI Kits show 8 cards, SAP Fiori for Android, Web, iOS, watchOS, Wear OS, Performance, Accessibility and SAP S/4HANA." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 30: The SAP Design System portal start page (on the left), and SAP’s UI Kits for designers in Figma (on the right). Alt Text: Two screenshots. The portal page shows four main sections SAP Fiori for Web, … for Android, … for iOS, and SAP Digital Design System, each followed by links to UI elements, Figma kits, and overviews. The UI Kits show 8 cards, SAP Fiori for Android, Web, iOS, watchOS, Wear OS, Performance, Accessibility and SAP S/4HANA.</span></span></P><P>Find out more here:</P><UL><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/new-sap-design-system-portal-for-sap-fiori-design-guidelines-and-new-ui/ba-p/14109558" target="_blank">New SAP Design System Portal for SAP Fiori Design Guidelines, and New UI Kits for Designers</A></SPAN>.</LI></UL><H2 id="toc-hId--641913266">SAP Fiori Development Portal</H2><P>I’m also happy to inform you about the new SAP Fiori development portal, introduced a few weeks ago. It is designed to help developers maximize the benefits of SAP Fiori elements for OData V4, which <SPAN>is more than just a UI framework: it’s a metadata-driven approach that leverages the <A href="https://www.sap.com/design/design-system" target="_blank" rel="noopener noreferrer">SAP Design System</A> as its guiding principle, incorporating the most relevant design system options for typical business tasks.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 31: The SAP Fiori development portal. Alt text: A screenshot showing the Introduction page. On the left a menu has entries Using the Portal, Building Blocks, Global Patterns, Floorplans, SAP Fiori Tools. The Introduction page has a full width card “Building Blocks” at the top, with a description and tiles representing various building blocks. Below that “Choose Your Option” heading above two side-by-side cards for “Floorplans” and “Customer Layout”, each with an image and description, and a “Learn More” button." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334919iD4095AB7BBC7EBF3/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="30.5 SAP Fiori development portal.jpg" alt="Figure 31: The SAP Fiori development portal. Alt text: A screenshot showing the Introduction page. On the left a menu has entries Using the Portal, Building Blocks, Global Patterns, Floorplans, SAP Fiori Tools. The Introduction page has a full width card “Building Blocks” at the top, with a description and tiles representing various building blocks. Below that “Choose Your Option” heading above two side-by-side cards for “Floorplans” and “Customer Layout”, each with an image and description, and a “Learn More” button." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 31: The SAP Fiori development portal. Alt text: A screenshot showing the Introduction page. On the left a menu has entries Using the Portal, Building Blocks, Global Patterns, Floorplans, SAP Fiori Tools. The Introduction page has a full width card “Building Blocks” at the top, with a description and tiles representing various building blocks. Below that “Choose Your Option” heading above two side-by-side cards for “Floorplans” and “Customer Layout”, each with an image and description, and a “Learn More” button.</span></span></SPAN></P><P>The SAP Fiori development portal puts building blocks front and center. <SPAN>These building blocks - such as tables, forms, filter bars, and charts - are orchestrated by SAP Fiori elements and form the basis of every OData V4 application. They provide standardized layouts and interaction patterns, ensuring UI consistency and boosting developer productivity. The great advantage of using building blocks is that you can use them to create a customer layout and yet still benefit from the advantages of the metadata driven approach: low code, built in enterprise-grade capabilities such as multi-language support, accessibility, security and performance, and design system consistency.</SPAN></P><P>Find out more in this six-part series of blog posts, here is the first one, which contains links to the others:</P><UL><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/introducing-the-sap-fiori-development-portal-your-gateway-to-rapid-sap/ba-p/14236768" target="_blank">Introducing the SAP Fiori Development Portal: Your Gateway to Rapid SAP Fiori App Creation (1 of 6)</A>.</SPAN></LI></UL><H2 id="toc-hId--838426771">Using AI to Develop UIs</H2><P>The above posts from <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-user-experience-q1-2025-update-part-7-ui-design-and-technology-for-web/ba-p/14034290" target="_self">Q1/2025</A> and <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-ux-q3-2025-update-part-7-ui-design-and-technology-for-web-and-mobile/ba-p/14197128" target="_self">Q3/2025</A> introduced a number of powerful ways to accelerate UI development by using AI, such as:</P><UL><LI>Creating SAP Fiori elements apps from a sketch (in the Q1 post), now integrated in SAP Build Code and Joule (Q3 post)</LI><LI>Joule for SAPUI5 freestyle development (Q1 post)</LI><LI>AI-assisted auto-fix of coding errors with UI5 linter (Q3 post)</LI></UL><P>Recently, we have gone even further and introduced MCP servers for freestyle SAPUI5 development as well as for developing with SAP Fiori elements and the associated building blocks. These<SPAN> open-source <A href="https://modelcontextprotocol.io/" target="_blank" rel="noopener nofollow noreferrer">Model Context Protocol (MCP)</A> servers provide AI agents with comprehensive UI5 and SAP Fiori elements knowledge, including best practices and project-aware context information, and thus provide developers with valuable support. Figure 32 shows examples.</SPAN><SPAN> </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 32: Examples of the UI5 MCP Server (on the left) and the MCP Server for SAP Fiori (on the right) in action. Alt Text: both images show screenshots of a CLINE console view with a task entered as text at the top, followed by a list of steps which the system proposes to do to solve the task." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/334711i05B30EF15EF3FE5A/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="31 MCP Servers UI5 and Fiori.jpg" alt="Figure 32: Examples of the UI5 MCP Server (on the left) and the MCP Server for SAP Fiori (on the right) in action. Alt Text: both images show screenshots of a CLINE console view with a task entered as text at the top, followed by a list of steps which the system proposes to do to solve the task." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 32: Examples of the UI5 MCP Server (on the left) and the MCP Server for SAP Fiori (on the right) in action. Alt Text: both images show screenshots of a CLINE console view with a task entered as text at the top, followed by a list of steps which the system proposes to do to solve the task.</span></span></P><P><SPAN> </SPAN><SPAN>Read about these new MCP servers in these blog posts:</SPAN></P><UL><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/give-your-ai-agent-some-tools-introducing-the-ui5-mcp-server/ba-p/14200825" target="_blank">UI5 MCP Server</A></SPAN>.</LI><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-fiori-tools-update-first-release-of-the-sap-fiori-mcp-server-for/ba-p/14204694" target="_blank">MCP Server for SAP Fiori</A></SPAN>.</LI></UL><H2 id="toc-hId--1034940276"><SPAN>Accessibility taken to the next level: WCAG 2.2 support</SPAN></H2><P>Accessibility is key to using SAP's business solutions. Adopting the latest standards gives applications a true cutting edge, ensuring that solutions are inclusive and meet the diverse needs of users globally. When creating apps with SAP Build and SAPUI5, developers can leverage the latest Web Content Accessibility Guidelines (WCAG) 2.2.</P><P>For example, two of the key new requirements in the 2.2 version are:</P><UL><LI>The minimum target size of an interactive element now needs to be 24x24 px, so that users don’t accidentally activate a neighbouring element.</LI><LI>Each operation that can be performed by dragging can also be performed alternatively without dragging – so that people who cannot use a mouse to drag can still use the UI.</LI></UL><P>See more details:</P><UL><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sapui5-is-leading-the-way-in-accessibility-with-wcag-2-2/ba-p/14101596" target="_blank">SAPUI5 is Leading the Way in Accessibility with WCAG 2.2</A></SPAN> </LI></UL><H2 id="toc-hId--1231453781"><SPAN>Blue Crystal and Belize Themes No Longer Available in the Web</SPAN></H2><P><SPAN>As announced in April (<A href="https://community.sap.com/t5/technology-blog-posts-by-sap/upcoming-removal-of-sap-fiori-themes-belize-and-blue-crystal/ba-p/14063111" target="_blank">Upcoming Removal of SAP Fiori Themes Belize and Blue Crystal</A>), the visual themes Blue Crystal and Belize have been removed from our web UI technology with the 2025 release of SAP S/4HANA Cloud Private Edition and SAP S/4HANA.</SPAN></P><P><SPAN> </SPAN><STRONG>After upgrading, existing usages of Belize or Blue Crystal will be automatically redirected to the Horizon theme</STRONG>.</P><P><STRONG>If you have created your own custom theme based on Belize or Blue Crystal using the UI theme designer, you will need to migrate this to an available theme.</STRONG> Our strong recommendation is to base the new version on the Horizon theme.</P><P>For more information about the web UI technologies affected, and how to migrate custom themes, have a look at this blog post:</P><UL><LI><SPAN><A href="https://community.sap.com/t5/technology-blogs-by-sap/announcement-removal-of-belize-theme-of-sap-fiori/ba-p/14061924" target="_blank">Announcement: Removal of Belize theme of SAP Fiori</A></SPAN>.</LI></UL><P>Note that SAP GUI for Windows continues to support older themes, including Blue Crystal and Belize.</P><P> </P><H1 id="toc-hId--1134564279"><SPAN>Final words</SPAN></H1><P><SPAN>Come join us at <A href="https://www.sap.com/germany/events/teched.html" target="_blank" rel="noopener noreferrer">TechEd 2025</A>, November 4 - 6, either virtually or in Berlin, or at one of the TechEd On The Road events in Louisville (USA), Bangalore (India) and Sydney (Australia), to find out more about our latest user experience innovations. I myself will be in Berlin and Bangalore, so feel free to approach me after my talks if you have any specific questions. I’m looking forward to meeting some of you!</SPAN></P><P><SPAN> </SPAN><SPAN>This blog posts gives an overview of all the UX related sessions at all four events:</SPAN></P><UL><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/exciting-ux-talks-at-teched-virtual-or-meet-us-in-berlin-and-on-the-road/ba-p/14252047" target="_blank">Exciting UX talks at TechEd – Virtual, or meet us in Berlin and On The Road (USA, India, Australia)</A></SPAN>.</LI></UL><P><SPAN> </SPAN><SPAN>Please continue using the community to share your learnings and best practices, either by posting articles yourselves or via comments on this post. You can also follow me in the community if you want to be notified about further similar updates from me.</SPAN></P>2025-10-31T13:35:46.042000+01:00https://community.sap.com/t5/technology-blog-posts-by-members/hybrid-server-side-rendering-for-ui5-bridging-cap-and-ai-generated-views/ba-p/14258541Hybrid Server-Side Rendering for UI5: Bridging CAP and AI-Generated Views2025-11-02T13:28:19.682000+01:00WouterLemairehttps://community.sap.com/t5/user/viewprofilepage/user-id/9863<P>What if your UI5 views could be generated automatically by AI and pre-rendered on the server before ever reaching the browser? This isn't science fiction, it's an experimental approach I've been developing that combines Cloud Application Programming (CAP) with UI5 server-side rendering and AI-powered view generation.</P><P> </P><H2 id="toc-hId-1763845312">The Core Concept: Hybrid SSR for UI5</H2><P class="">Server-side rendering in UI5 doesn't have to mean fully rendering HTML on the server. My approach takes a hybrid path: pre-populating XML views with data on the server using Handlebars templating, while still letting UI5 handle the final rendering on the client.</P><P class="">This creates a practical architecture that addresses two critical concerns in enterprise applications:</P><UL><LI><STRONG>Enhanced Security</STRONG>: By populating data directly into XML views on the server, you avoid exposing raw OData services to the client. Users receive only XML files with the specific data they need, no access to full OData endpoints through browser debugging tools.</LI><LI><STRONG>Improved Performance</STRONG><SPAN>: Rather than making separate OData calls for each view, the application receives XML views with data already embedded, reducing round trips and potentially improving load times.</SPAN></LI></UL><P> </P><H2 id="toc-hId-1567331807">From Concept to Reality</H2><P class="">I first introduced this concept at <STRONG>reCAP</STRONG>, where I demonstrated how to combine UI5 and CAP to implement server-side pre-rendering of UI5 artifacts. The session covered:</P><UL class=""><LI>Pre-rendering UI5 fragments and views using CAP</LI><LI>How these two SAP frameworks can enhance each other's capabilities</LI><LI>My approach to implementation and ideas for future improvements</LI></UL><P class="">The goal was to show how leveraging UI5 and CAP together can elevate both frameworks to the next level.</P><P class=""><STRONG>Watch the reCAP session</STRONG>: <A class="" href="https://www.youtube.com/watch?v=6CrGqNyxfsU&list=PLJDFklpD_2cT6lFS3kSq55bUmzTUi9bn7&index=8" target="_blank" rel="noopener nofollow noreferrer">Hybrid UI5 Server-Side Rendering with CAP</A></P><H2 id="toc-hId-1370818302"><div class="video-embed-center video-embed"><iframe class="embedly-embed" src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F6CrGqNyxfsU%3Flist%3DPLJDFklpD_2cT6lFS3kSq55bUmzTUi9bn7&display_name=YouTube&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D6CrGqNyxfsU&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F6CrGqNyxfsU%2Fhqdefault.jpg&type=text%2Fhtml&schema=youtube" width="200" height="112" scrolling="no" title="reCAP 2025: Server Side UI5 Pre-rendering with CAP" frameborder="0" allow="autoplay; fullscreen; encrypted-media; picture-in-picture;" allowfullscreen="true"></iframe></div></H2><P> </P><H2 id="toc-hId-1174304797">Taking It Further: AI-Generated Views</H2><P class="">At <STRONG>Devtoberfest</STRONG>, I pushed this concept into really exciting territory by adding AI-powered view generation. This is where things get interesting.</P><H3 id="toc-hId-1106874011">How AI Changes Everything</H3><P class="">Traditional UI5 development requires developers to manually create XML views for every entity, form, and table in their application. What if AI could do this work for you, not just as a one-time code generator, but dynamically, on every request?</P><P class="">Here's how it works:</P><OL class=""><LI><STRONG>AI analyzes your CAP entity definitions</STRONG> - It understands your data model, relationships, field types, and annotations</LI><LI><STRONG>AI generates appropriate UI5 views</STRONG> - Forms for editing, tables for lists, master-detail layouts, whatever makes sense for your data</LI><LI><STRONG>Views are pre-rendered on the server</STRONG> with actual data from your OData service</LI><LI><STRONG>Instant delivery to the client</STRONG> - Pre-populated, ready-to-display views arrive in milliseconds</LI></OL><H3 id="toc-hId-910360506">The Power of On-Demand UI Generation</H3><P class="">This approach means your UIs are generated fresh when needed, rather than maintained as static files. Imagine:</P><UL class=""><LI><STRONG>Zero view maintenance</STRONG>: Change your entity model, and your UI automatically adapts</LI><LI><STRONG>Instant prototyping</STRONG>: From data model to working UI in seconds</LI><LI><STRONG>Smart adaptability</STRONG>: AI can generate different views based on user roles, device types, or business context</LI><LI><STRONG>Automatic best practices</STRONG>: The AI understands your annotations and generates appropriate labels, help text, and validations</LI></UL><P class=""><STRONG>Watch the Devtoberfest session</STRONG>: <A class="" href="https://community.sap.com/t5/devtoberfest/taking-ui5-server-side-rendering-to-the-next-level-with-ai/ev-p/14212554" target="_blank">Taking UI5 Server-Side Rendering to the Next Level with AI</A></P><H2 id="toc-hId-584764282"><div class="video-embed-center video-embed"><iframe class="embedly-embed" src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FX8Q59aRg6lA&display_name=YouTube&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DX8Q59aRg6lA&image=http%3A%2F%2Fi.ytimg.com%2Fvi%2FX8Q59aRg6lA%2Fhqdefault.jpg&type=text%2Fhtml&schema=youtube" width="200" height="112" scrolling="no" title="YouTube embed" frameborder="0" allow="autoplay; fullscreen; encrypted-media; picture-in-picture;" allowfullscreen="true"></iframe></div></H2><P> </P><H2 id="toc-hId-388250777">Get Started: Available Resources</H2><P class="">Ready to experiment with this approach? I've made everything available as open-source plugins and a demo application:</P><H3 id="toc-hId-320819991">CAP Backend Plugin</H3><P class=""><STRONG><A class="" href="https://www.npmjs.com/package/ui5-cap-serverside-rendering-plugin" target="_blank" rel="noopener nofollow noreferrer">ui5-cap-serverside-rendering-plugin</A></STRONG><BR />Enables server-side rendering capabilities in your CAP backend. Handles Handlebars templating, data population, and view serving.</P><H3 id="toc-hId-124306486">UI5 Frontend Library</H3><P class=""><STRONG><A class="" href="https://www.npmjs.com/package/be.wl.serversiderendering.library" target="_blank" rel="noopener nofollow noreferrer">be.wl.serversiderendering.library</A></STRONG><BR />The UI5 library that enables client-side handling of server-rendered views, including custom routing and view management.</P><H3 id="toc-hId--147438388">Complete Demo Application</H3><P class=""><STRONG><A class="" href="https://github.com/lemaiwo/ui5-cap-serverside-rendering-demo/tree/main" target="_blank" rel="noopener nofollow noreferrer">ui5-cap-serverside-rendering-demo</A></STRONG><BR />A fully functional example showing how to integrate both plugins, configure routing, and implement server-side rendering in a real application.</P><P class=""> </P><H2 id="toc-hId--50548886">Try It Out</H2><P class="">This is an ongoing experiment, and I'd love to see what the community builds with these tools. Whether you're interested in the basic SSR approach or the AI integration, the plugins and demo provide everything you need to start experimenting.</P>2025-11-02T13:28:19.682000+01:00https://community.sap.com/t5/technology-blog-posts-by-members/beyond-ui5-controls-using-web-components-across-frameworks/ba-p/14258549Beyond UI5 Controls: Using Web Components Across Frameworks2025-11-02T13:49:55.751000+01:00WouterLemairehttps://community.sap.com/t5/user/viewprofilepage/user-id/9863<P class="">When building UI5 applications, you need to decide: should you create a classic UI5 Control or use a UI5 Web Component? This question matters even more when your organization uses different frameworks and wants a consistent user experience everywhere.</P><P class="">I recently presented this topic at both UI5con and SAP Devtoberfest 2025, sharing what we learned from integrating custom web components into UI5. This work showed us how to keep a consistent look and feel across applications while going beyond the standard SAP Fiori design.</P><P class=""><STRONG>Watch the full sessions:</STRONG></P><UL class=""><LI><STRONG><A class="" href="https://youtu.be/jVslHo5I5qg?si=xU3RZeY8d7JfNE_x" target="_blank" rel="noopener nofollow noreferrer">Devtoberfest 2025 - Beyond UI5 Controls with the Rise of Web Components</A></STRONG> - Detailed walkthrough with live demo</LI></UL><P><div class="video-embed-center video-embed"><iframe class="embedly-embed" src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FjVslHo5I5qg%3Ffeature%3Doembed&display_name=YouTube&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DjVslHo5I5qg&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FjVslHo5I5qg%2Fhqdefault.jpg&type=text%2Fhtml&schema=youtube" width="200" height="112" scrolling="no" title="🟣 Beyond UI5 Controls with the Rise of Web Components" frameborder="0" allow="autoplay; fullscreen; encrypted-media; picture-in-picture;" allowfullscreen="true"></iframe></div></P><UL class=""><LI><STRONG><A class="" href="https://www.youtube.com/live/0D0_M4RDiZY" target="_blank" rel="noopener nofollow noreferrer">UI5con 2025 - Same Topic, Different Perspective</A></STRONG> - Original presentation with Q&A</LI></UL><H2 id="toc-hId-1763845320">Why Web Components Matter</H2><P class="">UI5 controls have always been great for building SAP applications. They give you pre-built components with Fiori design, theming, and internationalization built in. No need to worry about CSS or making things look right.</P><P class="">But things are changing. Many organizations now use Angular, React, Vue, and UI5 across different teams. Web components let you build once and use everywhere. They work with any framework while keeping their style and functionality intact.</P><P class="">This helps organizations:</P><UL class=""><LI><STRONG>Standardize UI/UX</STRONG> across teams using different frameworks</LI><LI><STRONG>Use company-specific design systems</STRONG> instead of only SAP Fiori</LI><LI><STRONG>Share components</STRONG> between Angular, React, Vue, and UI5 apps</LI><LI><STRONG>Save development time</STRONG> by reusing components</LI></UL><H2 id="toc-hId-1567331815">When to Use What?</H2><P class=""><STRONG>Use traditional UI5 controls when:</STRONG></P><UL class=""><LI>Your app only uses UI5</LI><LI>You're happy with SAP Fiori design</LI><LI>You don't need cross-framework support</LI></UL><P class=""><STRONG>Use UI5 web components when:</STRONG></P><UL class=""><LI>You want Fiori design in non-UI5 frameworks</LI><LI>You need components for Angular, React, and Vue</LI><LI>You're building a shared component library</LI></UL><P class=""><STRONG>Use native web components when:</STRONG></P><UL class=""><LI>Your company has its own design system</LI><LI>You need company branding everywhere</LI><LI>You work with different technologies</LI></UL><H2 id="toc-hId-1370818310">Our Proof of Concept</H2><P class="">We integrated Nova design system web components into a UI5 application. This meant creating proxy controls that connect UI5 to the web components, handling properties, events, and data binding.</P><P class="">Our demo app, a simple To-Do list, replaced standard UI5 controls with Nova web components. Everything still worked like a normal UI5 app. Check out the <A class="" href="https://github.com/lemaiwo/ui5con25-webc-demo" target="_blank" rel="noopener nofollow noreferrer">GitHub repository</A> to see how it works.</P><H3 id="toc-hId-1303387524">What We Learned</H3><P class=""><STRONG>Technical stuff:</STRONG></P><UL class=""><LI>You need proxy controls to connect UI5 with web components</LI><LI>Event handling sometimes needs extra code</LI><LI>Data binding requires attention, especially with components built differently</LI></UL><P class=""><STRONG>Deployment:</STRONG> Web components work fine with SAP BTP. You can keep your consistent UI while using all BTP features.</P><P class=""><STRONG>Current state:</STRONG> Web components work well in production, but the ecosystem is still growing. You might need extra code for some edge cases. It might be early for productive usage <span class="lia-unicode-emoji" title=":winking_face:">😉</span></P><H2 id="toc-hId-977791300">What's Next</H2><P class="">Web components are changing how we think about UI development in SAP. Traditional UI5 controls are still great for many cases, but web components give you more options.</P><P class="">As more organizations share their component libraries on npm, we'll see better standardization and teamwork across companies. It's not about picking UI5 or something else, it's about using the right tool for each job.</P><P class="">Whether you're a UI5 developer, an architect planning UI strategy or a consultant helping clients, understanding web components and UI5 integration will be useful.</P><H2 id="toc-hId-781277795">Resources</H2><UL class=""><LI><STRONG><A class="" href="https://youtu.be/jVslHo5I5qg?si=xU3RZeY8d7JfNE_x" target="_blank" rel="noopener nofollow noreferrer"><span class="lia-unicode-emoji" title=":television:">📺</span> Devtoberfest 2025 Session</A></STRONG> - Watch the full presentation with live demo</LI><LI><STRONG><A class="" href="https://www.youtube.com/live/0D0_M4RDiZY" target="_blank" rel="noopener nofollow noreferrer"><span class="lia-unicode-emoji" title=":television:">📺</span> UI5con 2025 Session</A></STRONG> - Original talk with Q&A</LI><LI><STRONG><A class="" href="https://github.com/lemaiwo/ui5con25-webc-demo" target="_blank" rel="noopener nofollow noreferrer"><span class="lia-unicode-emoji" title=":laptop_computer:">💻</span> Demo Application</A></STRONG> - GitHub Repository with code examples</LI><LI><STRONG><A class="" href="https://community.sap.com/t5/devtoberfest/beyond-ui5-controls-with-the-rise-of-web-components/ev-p/14219001?source=social-Global-YouTube-No-Developer_Community-Fiori-Devtoberfest-Educate%2FEnable-Blog-Video-18368359794&campaigncode=CRM-YA23-SMS-1941768&sprinklrid=18368359794" target="_blank"><span class="lia-unicode-emoji" title=":calendar:">📅</span> Event Page</A></STRONG> - Devtoberfest event details</LI></UL>2025-11-02T13:49:55.751000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/sap-fiori-adding-field-validation-based-on-other-field-values-using/ba-p/14259241SAP Fiori: Adding Field Validation Based on Other Field Values Using Controller Extensions OData V22025-11-03T14:13:25.458000+01:00Sahil2508https://community.sap.com/t5/user/viewprofilepage/user-id/1527875<P><SPAN>In many project use cases, we often encounter situations where </SPAN><STRONG>the validity of one field depends on the value of another</STRONG><SPAN>. For example, when a flag is updated or a key date is modified, the user must provide additional comments before saving the record.</SPAN></P><P><SPAN><BR /></SPAN>In this blog post, I’ll walk you through how I implemented such <STRONG>conditional validations</STRONG> in a Fiori Elements Object Page using <STRONG>Controller Extensions</STRONG>.<BR /><BR /></P><H3 id="toc-hId-1892954939"><STRONG>Scenario</STRONG></H3><P>I had a requirement where:</P><OL><LI><P>If the <STRONG>Last Working Date (LWD)</STRONG> was changed, then the <STRONG>Additional Comments (ARD Comments)</STRONG> field must not be empty.</P></LI><LI><P>If certain flags or dropdown values were set to specific conditions (like “Y” or a specific code), corresponding comment fields were required before allowing the user to save.</P></LI></OL><P>Instead of modifying the generated metadata or annotations, I handled these validations using the <STRONG>Controller Extension’s <CODE>beforeSaveExtension</CODE> hook</STRONG>, which is triggered before the save action.<BR /><BR /></P><H3 id="toc-hId-1696441434"><SPAN>Implementation</SPAN></H3><P><SPAN>1. Adding controller extension :- Add the controller extension file in app/webapp/ext/controller as ObjectPageExt.controller.js</SPAN></P><P><SPAN>2. Add the controller file in manifest.json</SPAN></P><pre class="lia-code-sample language-json"><code>"sap.ui5": {
"flexEnabled": true,
// other fields
"resources": {
"css": []
},
"routing": {
"config": {},
"routes": [],
"targets": {}
},
"extends": {
"extensions": {
"sap.ui.controllerExtensions": {
"sap.suite.ui.generic.template.ObjectPage.view.Details": {
"controllerName": "app.ext.controller.ObjectPageExt"
}
}
}
}
},</code></pre><P>3. <CODE>ObjectPageExt.controller.js</CODE></P><pre class="lia-code-sample language-json"><code>sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/m/MessageBox"], function (ControllerExtension, MessageBox) {
"use strict";
return ControllerExtension.extend("offboardingdashboard.ext.controller.ObjectPageExt", {
override: {
beforeSaveExtension: function () {
const oContext = this.getView().getBindingContext();
if (!oContext) return Promise.resolve();
const oModel = oContext.getModel();
const sPath = oContext.getPath();
const oNewData = oContext.getObject(); // Current draft data
// --- Step 1: Get the original (active) entity data ---
const oOriginalData = oModel.getOriginalProperty
? oModel.getOriginalProperty(sPath)
: null;
// --- Step 2: Detect change in Last Working Date ---
let bLwdChanged = false;
if (oOriginalData && oOriginalData.cust_lastworkingdate && oNewData.cust_lastworkingdate) {
const dNew = new Date(oNewData.cust_lastworkingdate);
const dOld = new Date(oOriginalData.cust_lastworkingdate);
bLwdChanged = dNew.getTime() !== dOld.getTime();
} else if (oOriginalData && oOriginalData.cust_lastworkingdate !== oNewData.cust_lastworkingdate) {
bLwdChanged = true;
}
// --- Step 3: Apply validation rules ---
const aMessages = [];
if (oNewData.cust_rehire === "Y" && (!oNewData.cust_rehirecomments || oNewData.cust_rehirecomments.trim() === "")) {
aMessages.push("• Rehire comments are required when rehire flag is set to 'Yes'.");
}
if (bLwdChanged && (!oNewData.cust_ardcomments || oNewData.cust_ardcomments.trim() === "")) {
aMessages.push("• ARD comments are required when Last Working Date has been changed.");
}
// --- Step 4: Show error message and prevent save ---
return new Promise(function (fnResolve, fnReject) {
if (aMessages.length > 0) {
const sMessage = "Please address the following issues before saving:\n\n" + aMessages.join("\n");
MessageBox.error(sMessage, {
actions: [MessageBox.Action.OK],
onClose: fnReject
});
} else {
fnResolve();
}
});
}
}
});
});</code></pre><H3 id="toc-hId-1499927929"><STRONG>How It Works</STRONG></H3><OL><LI><P>The <FONT color="#000000"><CODE>beforeSaveExtension</CODE></FONT> method is triggered automatically before the <STRONG>Save</STRONG> action on the Object Page.</P></LI><LI><P>We first read the <STRONG>current draft data</STRONG> and the <STRONG>original active entity</STRONG>.</P></LI><LI><P>We compare fields like <CODE>cust_lastworkingdate</CODE> to detect changes.</P></LI><LI><P>Based on certain conditions (like flag = ‘Y’ ), we push validation messages into an array.</P></LI><LI><P>If there are validation errors, a <STRONG>MessageBox</STRONG> appears with all issues listed, and the save action is <STRONG>prevented</STRONG>.<BR /><BR /></P></LI></OL><H3 id="toc-hId-1303414424">UI Screenshots</H3><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Sahil2508_0-1762170076532.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/335346iB9CDF5D193F95B37/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="Sahil2508_0-1762170076532.png" alt="Sahil2508_0-1762170076532.png" /></span> <BR /><BR />When both the conditions are met :<BR />-> last working day is changed and rehire flag is set to 'Y'</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Sahil2508_1-1762170282958.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/335347i4CE007290692BAD5/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="Sahil2508_1-1762170282958.png" alt="Sahil2508_1-1762170282958.png" /></span></P><P>-> only last working day is changed<BR /><BR /></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Sahil2508_2-1762175135420.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/335386i2DD743A98D7E1C6A/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="Sahil2508_2-1762175135420.png" alt="Sahil2508_2-1762175135420.png" /></span></P><P>-> only rehire flag is set to 'Y'<BR /><BR /></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Sahil2508_4-1762175308970.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/335390i3D71C81A5905338C/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="Sahil2508_4-1762175308970.png" alt="Sahil2508_4-1762175308970.png" /></span></P><P> </P><H3 id="toc-hId-1106900919"><STRONG>Key Takeaways</STRONG></H3><UL><LI><P>Always perform <STRONG>value-dependent validations</STRONG> in the <CODE>beforeSaveExtension</CODE> hook for extensibility.</P></LI><LI><P>Use <CODE>getOriginalProperty</CODE> to safely compare values between draft and active entities.</P></LI><LI><P>Consolidate all validation messages for a <STRONG>better user experience</STRONG> rather than showing multiple alerts.</P></LI></UL>2025-11-03T14:13:25.458000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/effortless-sapui5-patch-management-introducing-the-new-sapui5-runtime/ba-p/14259246Effortless SAPUI5 Patch Management: Introducing the New SAPUI5 Runtime Repository2025-11-06T17:45:58.182000+01:00kirilinhttps://community.sap.com/t5/user/viewprofilepage/user-id/135581<P>For years, the MIME repository has been the standard location for storing SAPUI5 runtime artifacts for SAP S/4HANA and SAP S/4HANA Cloud Private Edition. In contrast, the S/4HANA Cloud Public Edition retrieves SAPUI5 from the cloud CDN. Although the MIME repository has served its purpose, many customers working with SAPUI5, especially system operators installing new SAPUI5 patches, face common challenges. These include poor performance, numerous manual steps, issues with transports, and risk of inconsistent states.<BR /><BR />The good news is that SAP introduces the <STRONG>SAPUI5 Runtime Repository</STRONG> with the release of <STRONG>SAP S/4HANA 2025</STRONG>. This modern replacement overcomes these challenges and prepares you for the next generation of SAPUI5. To ensure efficiency for all customers, downports to all maintained lower releases are available, except for SAP S/4HANA 1809 using SAPUI5 1.38. You can access this repository through SAP Notes containing <A href="https://help.sap.com/docs/ABAP_PLATFORM_NEW/9d6aa238582042678952ab3b4aa5cc71/81a0376ed9b64194b8ecff6f02f32652.html?locale=en-US" target="_self" rel="noopener noreferrer">transport-based correction instructions</A> (TCIs).</P><P><SPAN>Let's explore how this new repository significantly enhances your workflow.</SPAN></P><H2 id="toc-hId-1763872225">Performance Where It Matters</H2><UL><LI><STRONG>MIME Repository</STRONG>: SAPUI5 patch updates can take up to 2 hours. Loading debug-sources with sap-ui-debug=true can take up to 10 minutes.</LI><LI><STRONG>SAPUI5 Runtime Repository</STRONG>: Patch upgrades are approximately 20 times faster. During runtime, loading debug sources also occurs about 20 times faster. These improvements ensure smoother operations and faster response times.</LI></UL><H2 id="toc-hId-1567358720">From Complexity to Simplicity</H2><UL><LI><STRONG>MIME Repository</STRONG>: Handles more than 70,000 individual ABAP objects. This volume poses a risk of errors and inconsistent updates.</LI><LI><STRONG>SAPUI5 Runtime Repository</STRONG>: All runtime content is bundled into just one ABAP object. This approach guarantees consistent updates and reduces operational risks.</LI></UL><H2 id="toc-hId-1370845215">Automation First</H2><UL><LI><STRONG>MIME Repository</STRONG>: Updates rely on custom, manual procedures, which increases the maintenance effort.</LI><LI><STRONG>SAPUI5 Runtime Repository</STRONG>: Uses SAP TCI Notes and comes with an automated process specifically for SAP S/4HANA cloud operations. This makes updates easier and more reliable.</LI></UL><H2 id="toc-hId-1174331710">Zero Downtime Deployments</H2><UL><LI><STRONG>MIME Repository:</STRONG> No support for zero-downtime deployments. <SPAN>This limitation might cause interruptions during system upgrades. </SPAN></LI><LI><STRONG>SAPUI5 Runtime Repository</STRONG>: Fully supports online deployment with zero downtime. This feature ensures that SAPUI5 content remains continuously available, even during system upgrades.</LI></UL><H2 id="toc-hId-977818205"><SPAN>Safe, Standardized Rollbacks</SPAN></H2><UL><LI><SPAN><STRONG>MIME Repository</STRONG>: Reverting patches can be error-prone, often requiring manual fixes and risking inconsistent system states.</SPAN></LI><LI><SPAN><STRONG>SAPUI5 Runtime Repository</STRONG>: Reverting SAPUI5 patches is fully supported. Runtime content is delivered as a single ABAP object, and the update process integrates with TCIs. Rollbacks are straightforward, consistent, and safe. This approach simplifies the validation of new patches</SPAN><SPAN>: if issues arise, you can reliably revert to the previous stable state without lengthy manual intervention or risking inconsistencies across systems.</SPAN></LI></UL><H2 id="toc-hId-781304700">Future-Proof </H2><UL><LI><STRONG>MIME Repository</STRONG>: Not compatible with multiple SAPUI5 versions.</LI><LI><STRONG>SAPUI5 Runtime Repository</STRONG>: Supports multiple SAPUI5 versions in parallel, making it ready for the future while ensuring backward compatibility.</LI></UL><P><SPAN>Here's an overview of all the improvements:<BR /></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="srr.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/336982i3BA99AB0B7644090/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="srr.png" alt="srr.png" /></span></P><H2 id="toc-hId-584791195">Why This Matters</H2><P>The move from MIME Repository to the new SAPUI5 Runtime Repository isn’t just a technical upgrade — it’s a significant step toward:</P><UL><LI>Faster and safer patch updates.</LI><LI>Reduced operational effort.</LI><LI>Continuous availability.</LI><LI>Future compatibility.</LI></UL><P><SPAN>If your organization uses on-premise landscapes and works with SAPUI5, it's time to embrace this change: the <STRONG>SAPUI5 Runtime Repository</STRONG> becomes automatically available with the current <STRONG>SAP</STRONG> <STRONG>S/4HANA 2025</STRONG> release and in the latest support packages of all maintained SAP S/4HANA versions except SAP S/4HANA 1809.</SPAN></P><P>Even if you do not want to upgrade to a new support package, you can still use the SAPUI5 runtime repository by installing SAP Note <A href="https://me.sap.com/notes/3599156" target="_self" rel="noopener noreferrer">3599156</A>. If you have hesitated to install a new SAPUI5 patch, now is the time to try the new procedure and benefit from its efficacy and ease. Installing the latest SAPUI5 patches ensures your applications run efficiently today and are prepared for the future.</P><P><span class="lia-unicode-emoji" title=":backhand_index_pointing_right:">👉</span>Have you performed any SAPUI5 patch upgrades recently? What has your experience been like so far? To get started, refer to SAP Note <A href="https://me.sap.com/notes/3599156" target="_self" rel="noopener noreferrer">3599156</A>.</P>2025-11-06T17:45:58.182000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/let-s-talk-about-ui5-your-questions-will-steer-our-december-ui5ers-live/ba-p/14266567Let’s Talk About UI5: Your Questions Will Steer Our December UI5ers Live Session2025-11-12T18:01:26.594000+01:00Margothttps://community.sap.com/t5/user/viewprofilepage/user-id/8844<P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="UI5ers live - Special Edition - Cover.jpg" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/339593iDCDC752DEC87F8CE/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="UI5ers live - Special Edition - Cover.jpg" alt="UI5ers live - Special Edition - Cover.jpg" /></span></P><P> <SPAN>This December, we’re flipping the script for our final UI5ers live session of the year. Instead of us presenting, we want you to set the agenda. Join us on </SPAN><STRONG>Thursday, 4th December, at 15:15 CET</STRONG><SPAN>, for a special “</SPAN><STRONG>Ask Us Anything</STRONG><SPAN>” session where </SPAN><STRONG>Stefan Beck, Andreas Kunz</STRONG><SPAN>, </SPAN><STRONG>Peter Muessig</STRONG><SPAN>, and </SPAN><STRONG>Margot Wollny</STRONG><SPAN> will be ready to tackle your questions on UI5’s future, architecture, and more.</SPAN></P><P>This is more than just a Q&A; it’s a conversation. Your questions, your feedback, and your perspective are what help guide the evolution of UI5. We genuinely want to know what’s on your mind, what challenges you, and what you’re excited about.</P><P><FONT size="5"><STRONG>Help Us Shape the Conversation</STRONG></FONT></P><P>To make this session as insightful as possible, we invite you to send us your questions in advance. We’re especially looking for questions that spark discussion around broader topics. To get you thinking, here are a few examples of the kinds of questions we’d love to explore:</P><UL><LI><STRONG><span class="lia-unicode-emoji" title=":world_map:">🗺</span>️</STRONG><STRONG> The Future & Roadmap:</STRONG><UL><LI><EM>“What are the long-term plans for Web Components in UI5 applications?”</EM></LI><LI><EM>“Are there still plans for an open-source tool for theming?”</EM></LI></UL></LI></UL><UL><LI><STRONG><span class="lia-unicode-emoji" title=":building_construction:">🏗</span>️</STRONG><STRONG> Architecture & Design Decisions:</STRONG><UL><LI><EM>“Why does the architecture of the OData V4 model differ so much from the one for the OData V2 model?”</EM></LI><LI><EM>"Could you explain the trade-offs considered when designing the current routing system?”</EM></LI></UL></LI><LI><STRONG><span class="lia-unicode-emoji" title=":thumbs_up:">👍</span><span class="lia-unicode-emoji" title=":thumbs_down:">👎</span></STRONG><STRONG>Constructive Feedback (The Good and The Bad):</STRONG><EM>“</EM><UL><LI><EM>"I find the data binding syntax incredibly powerful. Are there plans to expand on this?”</EM></LI><LI><EM>“Managing dependencies across multiple libraries can feel complex. Have you considered ways to simplify this?”</EM></LI></UL></LI></UL><P><FONT size="5"><STRONG>Why Send Your Questions in Advance?</STRONG></FONT></P><P>While we will absolutely take questions live, submitting them beforehand helps us make the session better for everyone. It allows our team to:</P><UL><LI><STRONG>Prepare thoughtful, in-depth answers</STRONG> instead of just off-the-cuff replies.</LI><LI><STRONG>Spot common themes</STRONG> and group related questions to address a topic more comprehensively.</LI><LI><STRONG>Bring in the right expert</STRONG> from the team if a question requires specific knowledge.</LI><LI><STRONG>Prepare a quick code sample</STRONG> or visual aid if it helps clarify a complex concept.</LI></UL><P>Your early submissions will directly contribute to a more valuable and well-prepared discussion.</P><P><FONT size="5"><STRONG>Ready to Ask? Here’s How:</STRONG></FONT></P><P>To ensure our team has time to review everything, please send your questions by <STRONG>Monday, 1st December 2025</STRONG>. You have a few options:</P><UL><LI><STRONG>Comments below: </STRONG>Simply add your question as a comment on this article</LI><LI><STRONG>Email:</STRONG> If you prefer, send your question to us at <A href="mailto:openui5@sap.com" target="_blank" rel="noopener nofollow noreferrer">openui5@sap.com</A></LI></UL><P>We are truly looking forward to this open dialogue and hearing directly from you. Let’s make this a fantastic final session of the year, together.</P>2025-11-12T18:01:26.594000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/joule-in-sap-build-code-can-now-create-freestyle-ui5-apps/ba-p/14264445Joule in SAP Build Code can now create freestyle UI5 apps2025-11-13T15:58:38.496000+01:00AndreasKunzhttps://community.sap.com/t5/user/viewprofilepage/user-id/189706<P>Last year, we <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/joule-for-freestyle-sapui5-development-in-sap-build-code/ba-p/13650005" target="_blank">introduced the SAPUI5 extension for the Joule coding assistant in SAP Build Code</A> and <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/now-ai-helps-you-developing-sapui5-applications/ba-p/13649767" target="_blank">wrote about how to use it</A>. Over time, it has received more features, like the AI-supported <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sapui5-meets-typescript-a-smooth-migration-journey-with-joule/ba-p/13958872" target="_blank">conversion of UI5 apps to TypeScript</A> and setting up new pages and the respective navigation.</P><P>The latest improvement, available from November 2025, lets you <STRONG>create new freestyle UI5 apps</STRONG> according to your requirements. The feature is not absolutely groundbreaking, as there are other tools doing a similar job like the <A href="https://github.com/ui5-community/generator-easy-ui5" target="_self" rel="nofollow noopener noreferrer">Easy-UI5 templates</A> and the recently published <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/give-your-ai-agent-some-tools-introducing-the-ui5-mcp-server/ba-p/14200825" target="_self">UI5 MCP Server</A>. But:</P><OL><LI>It brings the functionality right to the fingertips of developers using SAP Build Code—no other tools needed.</LI><LI>It extends the template capabilities beyond what the Easy-UI5 templates provide.</LI><LI>Implementing it within the Build Code Joule environment yielded interesting insights and further improvements. More on this in my <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/inside-joule-lessons-from-building-an-ai-coding-assistant-for-sap-build/ba-p/14264447" target="_self">other article</A>.</LI></OL><P> </P><H1 id="toc-hId-1635565993">The feature</H1><P>Joule makes specific features available using "slash commands". The new one is <FONT face="andale mono,times">/ui5-create-app</FONT>. When you open the Joule panel in SAP Build Code and start typing <FONT face="andale mono,times">/ui5</FONT>, you might see it suggested, as well as other UI5 features. But which commands appear depends on the context. While some are only available <EM>within</EM> UI5 apps, this new feature is only available when you are <EM>not</EM> in a UI5 app. It won't be available e.g. in a workspace which has a ui5.yaml at top-level, or when you have a UI5 controller open in the code editor!</P><P class="lia-align-center" style="text-align: center;"> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AndreasKunz_0-1762783668270.png" style="width: 368px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/338077i84DC1A2BF1286B93/image-dimensions/368x637/is-moderation-mode/true?v=v2" width="368" height="637" role="button" title="AndreasKunz_0-1762783668270.png" alt="AndreasKunz_0-1762783668270.png" /></span></P><P>Try it in a workspace with a <A href="https://cap.cloud.sap/docs/about/" target="_self" rel="nofollow noopener noreferrer">CAP</A> project at root level, so you see some of its magic immediately: as soon as you finish typing the slash command or select it from the suggestion list, another suggestion list with sample prompts comes up. These are based on the actual data structures of the CAP project.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="AndreasKunz_1-1762360829864.png" style="width: 470px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/336598i81FF249A52996728/image-dimensions/470x310?v=v2" width="470" height="310" role="button" title="AndreasKunz_1-1762360829864.png" alt="AndreasKunz_1-1762360829864.png" /></span></P><P>This means you can simply select the desired entity and service, then the actual full prompt will automatically be entered into the field(but of course you can also write your own prompt!). This full prompt includes even more details than the short prompt in the suggestion list did.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="AndreasKunz_2-1762360943920.png" style="width: 426px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/336599iE4DE35FC0A4A5C5B/image-dimensions/426x146?v=v2" width="426" height="146" role="button" title="AndreasKunz_2-1762360943920.png" alt="AndreasKunz_2-1762360943920.png" /></span></P><P>Note that the prompt includes a concrete list of properties and the service URL. This information has been extracted from CAP using good old deterministic code—no Large Language Model (LLM) used. In fact, this is an area where AI would likely make up ("hallucinate") property names which do not actually exist. Acquiring all this information in advance in a deterministic way not only gives you the chance to review and adjust the prompt with little effort, but also leads to a more reliable functionality overall.</P><P>The paradigm: use LLMs (Large Language Models) where they excel—processing and "understanding" language—and use deterministic code for hard facts and well-defined operations, where possible. </P><P>The AI part starts soon enough, when you submit this prompt. It proposes a specific app setup, highlighting the key choices for you to review. For example, it will suggest a sensible name (if you didn't provide one) or suggest the best location inside the project structure (which it knows from its context).</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="AndreasKunz_3-1762361609611.png" style="width: 419px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/336631iE19FE81A151525DB/image-dimensions/419x840?v=v2" width="419" height="840" role="button" title="AndreasKunz_3-1762361609611.png" alt="AndreasKunz_3-1762361609611.png" /></span></P><P>But you can do more than just review those <EM>parameters</EM>. A suggested version of the app has already been created behind the scenes, so you can scroll through the 30+ files listed in the box at the bottom and click those you want to preview. If the result already looks fine to you—perfect. Just press the "Accept Application" button and the app will be set up in your workspace.</P><H1 id="toc-hId-1439052488">Refining the app</H1><P>But of course you are free to continue the conversation and tweak the result. The LLM in Joule will put its true strength at work, mapping its understanding of your request to what the underlying template can do. No need to type "change parameter x to value y": LLMs also understand you when you are less formal and direct. Look at the below screenshot for an example: it responds almost too compassionately to the developer who is "hesitant about new technologies" and recreates the app with changed parameters—using JavaScript instead of TypeScript. The user did not even mention the programming language specifically, but still the LLM decided that changing it would be the best way to accommodate the app code to the user's preferences.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="AndreasKunz_4-1762362503152.png" style="width: 453px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/336633i0D1C4439BEED17A1/image-dimensions/453x307?v=v2" width="453" height="307" role="button" title="AndreasKunz_4-1762362503152.png" alt="AndreasKunz_4-1762362503152.png" /></span></P><P>At this stage, you can refine the setup of the initial app—within the limits imposed by the application template used behind the scenes, which only has limited degrees of freedom. We want this <EM>initial</EM> app to be robust and follow best-practice code. We also want those 30+ files to be created in <EM>one</EM> fast step. Hence the code is not written by AI, but by using predefined template files we are back in the world of traditional deterministic coding here. You have plenty of opportunity for using AI later on to extend the app from this solid starting point.</P><P>Joule is aware of its limits in this step, so it will not say "yes" to every request you throw at it. Asking for "a trillion tables" or other features beyond the template scope will be politely rejected.</P><P class="lia-align-center" style="text-align: center;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AndreasKunz_5-1762362958997.png" style="width: 444px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/336641i7605E4A29BE73A9E/image-dimensions/444x350?v=v2" width="444" height="350" role="button" title="AndreasKunz_5-1762362958997.png" alt="AndreasKunz_5-1762362958997.png" /></span></P><H1 id="toc-hId-1242538983">Accepting the app</H1><P>When the preview looks good and you have pressed the <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AndreasKunz_0-1762363122124.png" style="width: 120px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/336642i611B7F59F8108180/image-dimensions/120x28?v=v2" width="120" height="28" role="button" title="AndreasKunz_0-1762363122124.png" alt="AndreasKunz_0-1762363122124.png" /></span> button, the job of this <FONT face="andale mono,times">/ui5-create-app</FONT> assistant is done. After app setup has finished (which may take a while because the dependencies need to be installed), it concludes with hints how to continue, including instructions on how to start the app in your respective workspace setup.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="AndreasKunz_1-1762363265947.png" style="width: 433px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/336644i28549BEB965E64F1/image-dimensions/433x492?v=v2" width="433" height="492" role="button" title="AndreasKunz_1-1762363265947.png" alt="AndreasKunz_1-1762363265947.png" /></span></P><P>The created application looks roughly like this, with a table and a detail form below. Note: only OData V4 services are supported at this time.</P><P class="lia-align-center" style="text-align: center;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AndreasKunz_0-1762439788736.png" style="width: 852px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/336941iA1EC68BDFAA86432/image-dimensions/852x529/is-moderation-mode/true?v=v2" width="852" height="529" role="button" title="AndreasKunz_0-1762439788736.png" alt="AndreasKunz_0-1762439788736.png" /></span></P><P>You get this kind of UI when you specify an OData V4 service and entity. If you don't, then there is just a generic "Hello World" success page instead.</P><P>Of course this UI structure might not be exactly what is desired in the app or even requested in the prompt, but this is what the template can do. When an OData service and entity but no properties are requested, then the tool tries to detect existing properties. If this fails, the table will be empty (no columns at all)—but Joule's success message should then mention this.</P><H1 id="toc-hId-1046025478">After creation</H1><P>As the assistant suggests, please move to the other Joule assistants <FONT face="andale mono,times">/ui5</FONT> and <FONT face="andale mono,times">/ui5-create-page</FONT> for developing the app further. In order to create more apps, reset the conversation with the <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AndreasKunz_2-1762363377944.png" style="width: 23px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/336645iB9B5AF8D09E44E81/image-dimensions/23x23?v=v2" width="23" height="23" role="button" title="AndreasKunz_2-1762363377944.png" alt="AndreasKunz_2-1762363377944.png" /></span> button at the top of the Joule pane.</P><P>Because <FONT face="andale mono,times">/ui5-create-app</FONT> <EM>knows</EM> that it cannot modify the app or re-create it, it will politely guide you to the options you have, no matter what your request is. It may even give instructions on how to achieve the given goal within a UI5 app, but it will not be able to modify the code and it will make this clear when needed.</P><H1 id="toc-hId-849511973">AI Learnings</H1><P>While there is not much more to say about this feature—simply try it!—there are some facts and learnings about its implementation! If you are curious, head over to the second part of this blog post: <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/inside-joule-lessons-from-building-an-ai-coding-assistant-for-sap-build/ba-p/14264447" target="_self">Inside Joule: Lessons from building an AI coding assistant for SAP Build.</A></P>2025-11-13T15:58:38.496000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/inside-joule-lessons-from-building-an-ai-coding-assistant-for-sap-build/ba-p/14264447Inside Joule: Lessons from building an AI coding assistant for SAP Build2025-11-13T16:00:38.750000+01:00AndreasKunzhttps://community.sap.com/t5/user/viewprofilepage/user-id/189706<H1 id="toc-hId-1635565995">Flashback: the feature</H1><P>This is a <EM>"making of"</EM> article about the implementation of the new <FONT face="andale mono,times">/ui5-create-app</FONT> slash command available within Joule in SAP Build Code. In short, this new feature enables a conversation between AI assistant and application developer about a new freestyle UI5 application to build, with a full-fledged best-practice application starting point as result.</P><P>To see screenshots of this feature in action and understand it better, feel invited to read <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/joule-in-sap-build-code-can-now-create-freestyle-ui5-apps/ba-p/14264445" target="_self">my previous blog post</A>. <SPAN>If you are just here for the background and AI-related learnings—go ahead!</SPAN></P><P> </P><H1 id="toc-hId-1439052490">General considerations</H1><P>With open‑ended prompting, users aren’t restricted to predefined interactions. The user could ask for <EM>anything</EM>. In contrast to traditional programming, a prompt input field can’t be handled with a sprawling web of if/else logic trying to cover all possible use-cases. Attempting this will lead to a frustrating user experience where the user often gets an "I do not understand your request".</P><P>Some developers try to mimic this traditional programming pattern when crafting prompts and contexts for LLMs, telling an LLM "<EM>if the user asks for x, then answer y</EM>". Instead, as demonstrated below, tell the LLM what it <EM>can</EM> and <EM>cannot</EM> do and give it a goal to achieve. It's "smart" enough to figure out a suitable response to whatever the user will throw at it.</P><P> </P><H1 id="toc-hId-1242538985">A fundamental choice</H1><P>Looking at this specific feature in the specific environment, the implementation options on the table were (for a variety of reasons) these two:</P><UL><LI>Either just provide a system prompt (a prompt that is added behind the scenes in addition to what the user typed) without interfering with the specific prompts and replies entered during the conversation.</LI><LI>Or adopt a new way of creating an "agentic" multi-step execution plan. Similar to a guided activity, this would allow phases of data collection, possibly in different steps for different data, then an app creation step and so forth.</LI></UL><P>Surely "agentic" and "well-defined steps" sound good for app creation from a template, no? In fact, the initial implementation started like this, but it was soon apparent that this would neither provide the expected flexibility nor allow for a truly intelligent app creation experience. Defining phases in which to acquire specific information and having the application code created at a specific stage in this process did not feel right. The user would still feel like clicking through a traditional template creation process, as something specific was expected from the user at every stage, instead of giving the user the freedom to tweak every aspect at every stage. The true power of AI, on the other hand, would be totally underused.</P><P>But then again... just a system prompt and that's it? No file read access to explore the environment, no dynamically updated instructions? Is this enough for an intelligent coding assistant?</P><P> </P><H1 id="toc-hId-1046025480">Creating an "AI agent" out of nothing</H1><P>Consider the now common definition of an "AI agent" which has settled over the course of this year: it's nothing more than "<A href="https://www.researchgate.net/publication/395657404_An_LLM_Agent_Runs_Tools_in_a_Loop_to_Achieve_a_Goal_A_Comprehensive_Semantic_Framework_for_Defining_AI_Agents_and_Agentic_Systems_by_Simon_Willison_and_Leading_Research_Laboratories" target="_self" rel="nofollow noopener noreferrer"><EM>an LLM with tools, called in a loop to achieve a goal</EM></A>". The chat conversation provided by Joule can be our loop, an application template with its parameters is the tool and the goal of assisting the developer to create an app can be stated in the system prompt. Of course a real <EM>autonomous</EM> agent would require the loop to run without user interaction, but for this feature a loop involving the user is just right.</P><P>The system prompt used for this feature literally includes: "<EM>Y<SPAN>ou help users create new UI5 applications by analyzing </SPAN><SPAN>their requirements and filling the project template parameters. [...] </SPAN><SPAN>Your goal is to gather all necessary information to create a new UI5 application. </SPAN></EM><EM><SPAN>The application will be generated from a template which </SPAN></EM><SPAN><EM>has only one page and a hardcoded UI, but can optionally display data from an OData V4 service. [...] </EM></SPAN><EM><SPAN>You cannot create the application yourself, but the user will see a preview...</SPAN></EM><SPAN>". There you have it: the goal and the tool!</SPAN></P><P><SPAN>It then goes on with some behavioral hints and of course a detailed description of what exactly the template parameters do. Finally, it requests <EM>each reply</EM> to contain a JSON object with the best choice of template parameters according to the current understanding of the user request. The JSON object could look like this example:</SPAN></P><DIV><PRE><SPAN>{<BR />
</SPAN><SPAN> "appNamespace": "com.myorg.myapp",</SPAN>
<BR /><SPAN> "basePath": "/path/to/workspace",</SPAN><SPAN><BR />
"createAppDirectory": true,<BR />
</SPAN><SPAN> "framework": "SAPUI5",</SPAN><BR />
<SPAN> "frameworkVersion": "1.136.0",</SPAN><BR />
<SPAN> "author": "John Doe",</SPAN><BR />
<SPAN> "oDataV4Url": "https://services.odata.org/TripPinRESTierService/(S(s5xrj1t51r41s3ooztsynysq))/",</SPAN><BR />
<SPAN> "oDataEntitySet": "Airports",</SPAN><BR />
<SPAN> "entityProperties": ["Name", "Address"],</SPAN><BR />
<SPAN> "runNpmInstall": true,</SPAN><BR />
<SPAN> "initializeGitRepository": true,</SPAN><BR />
<SPAN> "typescript": true</SPAN><BR />
<SPAN>}</SPAN></PRE></DIV><P><SPAN>This JSON object is removed from the LLM response before displaying it, then the application is generated with these parameters, so the user can accept it or request changes. In an environment where tools with a well-defined interface like MCP servers are not enabled, this JSON object as part of the conversation is how the integration with the templating tool is achieved. A note to make this very clear: this environment is <EM>not</EM> the official SAP Joule assistant running inside end-user applications, as it is now also being enabled for development by customers. Instead, it is a sort of predecessor implementation specifically available in SAP Build Code since spring 2024.</SPAN></P><P>Some of these parameters in the JSON object are more important than others with regards to the user explicitly influencing them or having to accept them. Whether the app code is generated as TypeScript or JavaScript is something the user should not be surprised with <EM>after</EM> accepting the app! On the other hand, the author name, which is only written into package.json, can be reliably defaulted to the logged-in user name and also very easily changed later on if needed. Hence, the parameter descriptions explain not only <EM>what</EM> they do, but also how much the user should be bothered with them. As result, Joule usually does not even mention half of the parameters, thus keeping the conversation focused.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="AndreasKunz_0-1762953076854.png" style="width: 455px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/339533i8B53DC0B3A50E913/image-dimensions/455x912/is-moderation-mode/true?v=v2" width="455" height="912" role="button" title="AndreasKunz_0-1762953076854.png" alt="AndreasKunz_0-1762953076854.png" /></span></P><P> </P><H1 id="toc-hId-849511975"><SPAN>How to stop the agent</SPAN></H1><P><SPAN>Regarding the state <EM>after</EM> the app was accepted, the prompt explains "</SPAN><EM><SPAN>AFTER the user has generated the application, you **MUST NOT** continue discussing parameters for generation, but rather [...] i</SPAN><SPAN>n particular by referring the user to the '/ui5' command for most requests or '/ui5-create-page' </SPAN><SPAN>for adding pages to the app, because they are much better than you in developing features, as they have the capability to automatically select a suitable context of files.</SPAN></EM><SPAN>".</SPAN></P><P><SPAN>This means the transition in the overall process between refining parameters and "no more changes possible" is not a hardcoded step or denoted by changing the system prompt, but rather explained up-front. That's enough. Can you talk Joule into proposing another set of parameters after the app was accepted? Maybe. But its <EM>normal</EM> behavior is just right: it will explain that the app can not be created again without restarting the conversation. Nevertheless, there are also non-AI guardrails in place to prevent the app from being generated again, thus causing trouble.</SPAN></P><P><SPAN>All in all, we shape Joule’s behavior by explaining the templating tool and its limits, by stating the goal and desired behavior towards this goal, and by explaining the general flow, in particular the state after app acceptance. This is enough to guide it to a suitable reaction for whatever the user requests.</SPAN></P><P><SPAN>Even if the user insists like this:</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="AndreasKunz_0-1762962593436.png" style="width: 457px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/339649i5AAFEF728BB75C51/image-dimensions/457x620/is-moderation-mode/true?v=v2" width="457" height="620" role="button" title="AndreasKunz_0-1762962593436.png" alt="AndreasKunz_0-1762962593436.png" /></span></P><P> </P><H1 id="toc-hId-652998470"><SPAN>Context, context, context!</SPAN></H1><P><SPAN>To make the entire feature really user-friendly, however, it is not sufficient to write a good prompt, but the context must also provide enough information to the LLM to allow for informed decisions. Hence, information like the list of project root files and folders, whether a Git repository is present, plus CAP service/entity/property info, and more, are gathered (e.g. using the <A href="https://www.npmjs.com/package/@sap-ux/project-access" target="_blank" rel="noopener nofollow noreferrer">@sap-ux/project-access</A> package). This knowledge is provided as prompt context behind the scenes or used in another way (like as content of the suggested prompts). This makes Joule aware of the environment it acts in, leading to better responses, like automatically avoiding app names that would conflict with existing folder names.</SPAN></P><P><SPAN>Agentic coding assistants like Cline, GitHub Copilot, Cursor etc. usually have the ability to read files and execute shell commands as needed to understand their environment. In this pure user request + LLM response environment this might have been a bit harder to build. Basically, more tools could have been defined, e.g. by describing other JSON object structures for invoking them. But control would not so easily return to the LLM until after the user has entered another prompt.</SPAN></P><P><SPAN>But for a narrow scenario like app creation this wasn't necessary. Collecting the most relevant information up front not only provides sufficient context, but also improves performance and reliability by avoiding repeated tool calls and unpredictable LLM loops.</SPAN></P><P> </P><H1 id="toc-hId-456484965"><SPAN>In-response prompting</SPAN></H1><P><SPAN>The real-world context, however, changes over time. Specifically, once the app is created and accepted, there are new additional files present.</SPAN></P><P><SPAN>When developing the <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/give-your-ai-agent-some-tools-introducing-the-ui5-mcp-server/ba-p/14200825" target="_self">UI5 MCP server</A>, we observed that the agentic AI tool (e.g. Cline) using the MCP server often decided to inspect the new app directory tree after creation, causing several LLM roundtrips which cost time and tokens. Or it would run "npm install" again, even though it had already been executed. Or it would make specific coding errors very often in subsequent modifications. </SPAN></P><P><SPAN>To avoid this, we extended the response of the MCP server after creating the app. Normally, it contains just the success message. <A href="https://github.com/UI5/mcp-server/blob/a5a06382e0b3b8b39beaf1f40e95f2d887b3b50b/src/tools/create_ui5_app/createSuccessMessage.ts#L30-L66" target="_self" rel="nofollow noopener noreferrer">But now it includes</A> a full list of generated files, it states that "npm install" was already executed and it instructs how to prevent those coding errors. Basically, the MCP server response added further updated instructions to the conversation context. </SPAN></P><P><SPAN>Exactly the same principle was applied in this new Joule feature. While there is no autonomous agent loop in this case which would inspect the new files, the knowledge <EM>which</EM> files were created can be valuable for the conversation with the user. And while the<FONT face="andale mono,times">/ui5-create-app</FONT> command doesn't modify any code after app creation (thus avoiding the coding issues), facts like whether "npm install" was already executed, or whether the created UI5 Table in the MainView is lacking any columns, are useful for giving the user hints how to continue. Therefore, the context is extended by adding a hidden message to the conversation history.</SPAN></P><P> </P><H1 id="toc-hId-259971460"><SPAN>Traditional coding has its place(s)</SPAN></H1><DIV><DIV><SPAN>In addition to the process of context collection, deterministic coding is also used <EM>after</EM> the app has been accepted by the user for making the app consumption as smooth as possible. When inside a CAP project, it for example ensures that the <EM>cds-plugin-ui5</EM> is added as dependency. This allows the UI5 tooling, including TypeScript transpilation of the UI5 app when needed, to run as part of the "cds watch" or "npm start" script of the CAP project itself.</SPAN></DIV><DIV> </DIV><DIV><SPAN>Also, this dependency and all the UI5 app dependencies need to be installed. Unfortunately, there is a wide range of options and specific setups which might be used for dependency management in the already existing app. Probably <EM>npm</EM>? With or without workspaces? <EM>yarn</EM>? <EM>pnpm</EM>? Others? The code detects what is used and tries to cover the 95% case. The initial setup might not be complete in <EM>every</EM> scenario, but for most users it will “just work,” providing a good developer experience.</SPAN></DIV><DIV><SPAN>AI is fine and all, but sometimes one has to go the extra mile and do some coding.</SPAN></DIV><DIV> </DIV></DIV><H1 id="toc-hId-63457955"><SPAN>Key takeaways</SPAN></H1><UL><LI><SPAN>Use deterministic code where reasonable (because the space of possibilities is bounded and a deterministic and quick result is beneficial) .</SPAN></LI><LI><SPAN>Use LLMs for language understanding or dealing with an unpredictable range of possible requests.</SPAN></LI><LI><SPAN>Don't try to "program" the LLM with an if/else prompt, but treat it like an intelligent human: state the goal, options and boundaries—and let it decide on its own.</SPAN></LI><LI><SPAN>Provide solid pre-collected context so the LLM can make good decisions reliably.</SPAN></LI></UL><P> </P><H1 id="toc-hId--133055550"><SPAN>P.S.:</SPAN></H1><P><SPAN>For those who prefer graphics over text to gain an understanding of something, here is a depiction of the overall information flow inside this feature.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AndreasKunz_0-1763130462734.png" style="width: 931px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340805i5BAE698E5DCD6369/image-dimensions/931x498/is-moderation-mode/true?v=v2" width="931" height="498" role="button" title="AndreasKunz_0-1763130462734.png" alt="AndreasKunz_0-1763130462734.png" /></span></P><P> </P>2025-11-13T16:00:38.750000+01:00