https://raw.githubusercontent.com/ajmaradiaga/feeds/main/scmt/topics/SAP-Build-Code-blog-posts.xmlSAP Community - SAP Build Code2026-02-13T15:00:28.458230+00:00python-feedgenSAP Build Code blog posts in SAP Communityhttps://community.sap.com/t5/technology-blog-posts-by-sap/sap-teched-berlin-2025-da262-enabling-clean-core-development-with-sap-hana/ba-p/14244488SAP TechEd Berlin 2025: DA262-Enabling clean core development with SAP HANA Cloud and SAP Build Code2025-10-15T11:51:18.065000+02:00shraddhashettyhttps://community.sap.com/t5/user/viewprofilepage/user-id/44579<P><STRONG><FONT face="arial,helvetica,sans-serif">A couple of words about me:</FONT></STRONG></P>
<P><FONT face="arial,helvetica,sans-serif">My name is Shraddha Shetty and I’m a Product Manager on the SAP HANA Product Management team, with a focus on Developer Experience. I began my journey at SAP in 2021 as a Developer and later transitioned into Product Management.</FONT></P>
<P><STRONG><FONT face="arial,helvetica,sans-serif">Join My <A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1750944208146001fQIb" target="_self" rel="noopener noreferrer">Session</A>!</FONT></STRONG><BR /><STRONG><FONT face="arial,helvetica,sans-serif">DA262 | Enabling Clean Core Development with SAP HANA Cloud and SAP Build Code</FONT></STRONG><BR /><span class="lia-unicode-emoji" title=":spiral_calendar:">🗓</span><STRONG><FONT face="arial,helvetica,sans-serif">️ Wednesday, Nov 5 | 3:30 PM – 5:30 PM CET</FONT></STRONG></P>
<P><STRONG><FONT face="arial,helvetica,sans-serif">What you will learn about:</FONT></STRONG></P>
<P><FONT face="arial,helvetica,sans-serif">Join our hands-on workshop <STRONG>DA262 | Enabling Clean Core Development with SAP HANA Cloud and SAP Build Code</STRONG> to explore how side-by-side extensions can help you innovate without compromising your clean core.</FONT></P>
<P>In this hands-on session, you’ll explore how SAP HANA Cloud, the SAP Cloud Application Programming Model (CAP), and SAP Build Code work together to simplify and accelerate development. Through guided exercises, participants will learn to create full-stack applications, integrate business services, and extend SAP solutions with agility and intelligence. You’ll also get hands-on experience exploring HANA Cloud features such as adding native artifacts, and accessing data lake files to build smarter, data-driven applications.</P>
<P><FONT face="arial,helvetica,sans-serif">By the end of the workshop, you’ll gain practical insights and skills to confidently build scalable, cloud-ready applications while maintaining a clean and extensible core. Don’t miss this opportunity to enhance your developer experience and unlock the full potential of SAP HANA Cloud and SAP Build Code.</FONT></P>
<P><FONT face="arial,helvetica,sans-serif"><STRONG>Co-speakers</STRONG>:</FONT></P>
<UL>
<LI>
<P><FONT face="arial,helvetica,sans-serif">Thomas Hammer – Lead Product Manager, SAP HANA Cloud, SAP SE</FONT></P>
</LI>
<LI>
<P><FONT face="arial,helvetica,sans-serif">Christoph Morgen – Senior Product Manager, SAP HANA Cloud AI, SAP SE</FONT></P>
</LI>
<LI>
<P><FONT face="arial,helvetica,sans-serif">Roman Belosludtsev – Product Manager, SAP HANA Cloud, SAP SE</FONT></P>
</LI>
</UL>
<P><STRONG><FONT face="arial,helvetica,sans-serif">Other related sessions I recommend:</FONT></STRONG></P>
<P><FONT face="arial,helvetica,sans-serif"><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1750942224655001QASw" target="_self" rel="noopener noreferrer">DA261 | Unlocking AI-Driven Insights from Your Business Data in SAP HANA Cloud</A></FONT><BR /><FONT face="arial,helvetica,sans-serif">Hands-on Workshop</FONT><BR /><FONT face="arial,helvetica,sans-serif">When: Tue, Nov 4 | 12:30 PM – 2:30 PM CET</FONT></P>
<HR />
<P><FONT face="arial,helvetica,sans-serif"><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749162361982001F4ao" target="_self" rel="noopener noreferrer">DA200 | Help Future-Proof Your Database Landscape with SAP HANA Cloud</A></FONT><BR /><FONT face="arial,helvetica,sans-serif">Deep Dive</FONT><BR /><FONT face="arial,helvetica,sans-serif">When: Wed, Nov 5 | 10:15 AM – 11:00 AM CET</FONT></P>
<HR />
<P><FONT face="arial,helvetica,sans-serif"><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749163148352001SQuW" target="_self" rel="noopener noreferrer">DA202 | Extensibility at Scale: Build Intelligent Applications with SAP HANA Cloud</A></FONT><BR /><FONT face="arial,helvetica,sans-serif">Deep Dive</FONT><BR /><FONT face="arial,helvetica,sans-serif">When: Wed, Nov 5 | 1:15 PM – 2:00 PM CET</FONT></P>
<HR />
<P><FONT face="arial,helvetica,sans-serif"><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749152727860001w9vr" target="_self" rel="noopener noreferrer">ST115 | SAP HANA Cloud: The Database for Business AI</A></FONT><BR /><FONT face="arial,helvetica,sans-serif">Strategy Talk</FONT><BR /><FONT face="arial,helvetica,sans-serif">When: Wed, Nov 5 | 2:15 PM – 2:40 PM CET</FONT></P>
<HR />
<P><FONT face="arial,helvetica,sans-serif"><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749162869410001srCl" target="_self" rel="noopener noreferrer">DA201 | Accelerating Your AI Strategy with SAP HANA Cloud</A></FONT><BR /><FONT face="arial,helvetica,sans-serif">Deep Dive</FONT><BR /><FONT face="arial,helvetica,sans-serif">When: Thu, Nov 6 | 9:00 AM – 9:45 AM CET</FONT></P>
<HR />
<P><FONT face="arial,helvetica,sans-serif"><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1753711419407001DDdJ" target="_self" rel="noopener noreferrer">DA263 | SAP HANA Cloud: Advisors and Automation</A></FONT><BR /><FONT face="arial,helvetica,sans-serif">Hands-on Workshop</FONT><BR /><FONT face="arial,helvetica,sans-serif">When: Thu, Nov 6 | 9:00 AM – 11:00 AM CET</FONT></P>
<HR />
<P><FONT face="arial,helvetica,sans-serif"><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749153071344001t73s" target="_self" rel="noopener noreferrer">DA817 | What's Next for SAP HANA Cloud: Road Map and Innovation Highlights</A></FONT><BR /><FONT face="arial,helvetica,sans-serif">Road Map</FONT><BR /><FONT face="arial,helvetica,sans-serif">When: Thu, Nov 6 | 1:30 PM – 1:55 PM CET</FONT></P>
<HR />
<P><FONT face="arial,helvetica,sans-serif"><A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1753711750909001NoWH" target="_self" rel="noopener noreferrer">DA904 | SAP HANA Cloud: A Database for SAP Business AI</A></FONT><BR /><FONT face="arial,helvetica,sans-serif">Demo Station</FONT></P>
<P><STRONG><FONT face="arial,helvetica,sans-serif" size="3">Related community topic pages:</FONT></STRONG></P>
<P><FONT face="arial,helvetica,sans-serif"><A class="" href="https://community.sap.com/t5/technology-blog-posts-by-sap/best-practice-collection-working-with-business-application-studio-bas-and/ba-p/13542813" target="_blank">Best Practice collection working with Business Application Studio(BAS) and HANA Deployment Infrastructure(HDI)</A></FONT></P>
<P><FONT face="arial,helvetica,sans-serif">Looking forward to seeing you! </FONT><span class="lia-unicode-emoji" title=":waving_hand:">👋</span><span class="lia-unicode-emoji" title=":sparkles:">✨</span><span class="lia-unicode-emoji" title=":rocket:">🚀</span></P>
<P><FONT face="arial,helvetica,sans-serif">Don’t miss this opportunity to get hands-on with SAP HANA Cloud and SAP Build Code, and learn how to extend your SAP landscape while keeping your core clean. Join us to gain practical skills, connect with experts, and see firsthand how to accelerate innovation in your applications. <A href="https://www.sap.com/events/teched/berlin.html" target="_self" rel="noopener noreferrer">Register</A> and be part of this interactive workshop.</FONT></P>
<H3 id="toc-hId-1891884516"><FONT face="arial,helvetica,sans-serif" size="3"><span class="lia-unicode-emoji" title=":speech_balloon:">💬</span>Now let’s hear from you:</FONT></H3>
<P><FONT face="arial,helvetica,sans-serif">As you gear up for SAP TechEd 2025, we’d love to hear your thoughts and experiences with SAP HANA Cloud and clean core development. Share your insights, ideas, and challenges with us:</FONT></P>
<UL>
<LI>
<P><FONT face="arial,helvetica,sans-serif">When building full-stack applications, do you prefer CAP services or other development approaches? Why?</FONT></P>
</LI>
<LI>
<P><FONT face="arial,helvetica,sans-serif">How do you currently manage data modeling and business logic in your SAP HANA Cloud applications</FONT></P>
</LI>
<LI>
<P><FONT face="arial,helvetica,sans-serif">What are your expectations for SAP TechEd 2025, and which hands-on topics excite you the most?</FONT></P>
</LI>
</UL>
<P><STRONG><FONT face="arial,helvetica,sans-serif">Drop your thoughts in the comments below</FONT></STRONG></P>2025-10-15T11:51:18.065000+02: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?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. It's basically a use-case-tailored alternative to MCP. 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 and about to be replaced by advanced solutions. So do not draw conclusions about SAP Joule based on this article.</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. Or, there could have been one "preprocessor" LLM request asking for needed files, like it is done for the other <FONT face="andale mono,times">/ui5*</FONT> commands.</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:00https://community.sap.com/t5/technology-blog-posts-by-sap/the-art-and-science-of-sapui5-in-sap-build-insights-from-sap-teched-2025/ba-p/14269053The Art and Science of SAPUI5 in SAP Build: Insights from SAP TechEd 20252025-11-17T05:35:29.369000+01:00OliverGraeffhttps://community.sap.com/t5/user/viewprofilepage/user-id/4124<P><SPAN>At SAP TechEd Berlin 2025, we had the opportunity to present “The Art and Science of SAPUI5 in SAP Build.” The deep dive session explores how SAPUI5, SAP’s strategic UI framework, is transforming user experiences and developer efficiency across SAP. This blog post shares key takeaways from the session and questions from the audience.<BR /><STRONG>If you’ve missed it, watch the session recording in <A href="https://www.sap.com/events/teched/virtual/flow/sap/tev25/catalog-virtual/page/catalog/session/1752166265407001r3vW" target="_blank" rel="noopener noreferrer">AD106v | The art and science of SAPUI5 in SAP Build</A>.</STRONG></SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Berlin.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340648iB3B47006232C8262/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="Berlin.png" alt="Berlin.png" /></span></SPAN></P><H1 id="toc-hId-1635711133"><SPAN><BR />The Art of SAPUI5 in SAP Fiori User Experience</SPAN></H1><P><SPAN>SAP’s approach to user experience (UX) centers on making applications easier and more enjoyable to use, helping users accomplish their tasks with greater efficiency and satisfaction. The framework enables the SAP Fiori design system to evolve seamlessly across SAP solutions, providing flexible tools for developers to efficiently build apps using SAP Build Code.</SPAN></P><H3 id="toc-hId-1697363066"><SPAN>SAP Web Components: Bridging Frameworks and Enhancing Extensibility</SPAN></H3><P><SPAN>SAP Web Components extend the capabilities of SAPUI5, to other programming model, such as Angular, React, or Vue. This interoperability supports a consistent and streamlined UX throughout the SAP portfolio. SAP Web Components can now also be easily consumed in SAPUI5 apps just like regular controls. Going forward, SAP plans to provide new UI elements as SAP Web Components, minimizing the effort required for adopting new standards and ensuring compliance with SAP guidelines and modern Web standards.</SPAN></P><H3 id="toc-hId-1500849561"><SPAN>SAPUI5 is leading is the Way in Accessibility</SPAN></H3><P><SPAN>SAPUI5 is at the forefront of accessibility, with recent implementations (SAPUI5 1.136 and UI5 Web Components 2.9.0) aligned to the latest Web Content Accessibility Guidelines (WCAG) 2.2. This commitment ensures that applications built with SAPUI5 are inclusive and accessible to users worldwide, meeting diverse needs and regulatory requirements.</SPAN></P><H1 id="toc-hId-1046170618"><SPAN><BR />The Science of SAPUI5 in SAP Build</SPAN></H1><P><SPAN>SAP Build is SAP’s unified solution to build apps and extensions, automations, agents and digital workspaces. SAP Build helps to increase developer productivity and to future-proof IT investments by leveraging proven technologies like SAPUI5, SAP Fiori elements, CAP and ABAP Cloud.</SPAN></P><H3 id="toc-hId-1107822551"><SPAN>Extending SAP standard apps with SAPUI5 flexibility and Clean Core</SPAN></H3><P><SPAN>SAPUI5 flexibility enables upgrade-safe, clean core extensions with intuitive low-code/no-code tools for different personas: end users, key users, and developers. New capabilities include consistent text changes for field labels and a “What's New” / “UI Adaptation Tour” for key users. Developers creating adaptation projects benefit from a "Replace original tile option and coding efficiency with TypeScript and Joule.</SPAN></P><P><SPAN>The new SAPUI5 runtime repository accelerates patch updates, improves startup performance, and supports zero-downtime deployments.</SPAN></P><H3 id="toc-hId-911309046"><SPAN>Future-Proofing apps with UI5 best practices and UI5 linter</SPAN></H3><P><SPAN>Technical debt and legacy code can slow down innovation within SAP Fiori projects. Here the UI5 linter helps finding and fixing the usage of deprecated APIs and making your code is ready for upcoming SAPUI5 versions. </SPAN>The new SAPUI5 / OpenUI5 legacy-free version helps validating how compliant your code is to UI5 best practices, i.e. ensuring your code is state of the art and future-proof.</P><H3 id="toc-hId-714795541"><SPAN>AI-Powered Development: Joule Copilot and MCP server </SPAN></H3><P><SPAN>AI is revolutionizing SAPUI5 development. The Joule copilot accelerates app creation, view and control addition, code formatting, migration to TypeScript and much more. The UI5 MCP server enables agentic AI app development in SAP Build, combining generative AI with algorithmic logic if the UI5 linter.</SPAN></P><H1 id="toc-hId-260116598"><SPAN><BR />Key Takeaways</SPAN></H1><UL><LI><SPAN>SAPUI5 delivers a streamlined, consistent UX across SAP Business Suite, driving both user satisfaction and business outcomes.</SPAN></LI><LI><SPAN>SAP Build and SAPUI5 flexibility empower organizations to extend SAP standard apps efficiently, future-proofing their investments.</SPAN></LI><LI><SPAN>AI-powered tools accelerate development and let you future-proof your apps with UI5 best practices.</SPAN></LI></UL><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Screenshot 2025-11-14 at 13.00.20.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340650iC451FC9D8A460C8C/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Screenshot 2025-11-14 at 13.00.20.png" alt="Screenshot 2025-11-14 at 13.00.20.png" /></span></SPAN></P><P> </P><H1 id="toc-hId-63603093"><SPAN>Selected questions from the audience</SPAN></H1><P><SPAN><STRONG>Q:</STRONG> Is Using VS code still recommended or the SAP Build for development</SPAN></P><P><SPAN><STRONG>A: </STRONG> In addition to the turnkey solution of SAP Build running on SAP BTP, </SPAN>SAP plans to focus on releasing development tools on the VS Code marketplace. VS Code is the number-one IDE worldwide, especially among web, cloud, and full-stack developers. Investing more in VS Code helps SAP meet developers where they are, making it easier for new developers to adopt SAP technologies (such as CAP, SAP BTP, SAPUI5, ABAP Cloud).<BR /><BR /></P><P><SPAN><STRONG>Q:</STRONG> New controls will be components from now on?</SPAN></P><P><SPAN><STRONG>A:</STRONG> Exactly, SAP plans to deliver most new UI components as Web Components, which can be use across any Web framework, including SAPUI5.<BR /><BR /></SPAN></P><P><SPAN><STRONG>Q:</STRONG> How AI compatibilities work in more complex application</SPAN></P><P><SPAN><STRONG>A:</STRONG> Beyond Generative AI capabilities, agentic development tool (e.g. with 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="_blank">UI5 MCP server</A>) offer impressive results for developing complex (fullstack) apps, from design up to deployment. You might want to check out <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="_blank">Inside Joule: Lessons from building an AI coding assistant for SAP Build</A> for an inside view.<BR /><BR /></SPAN></P><P><SPAN><STRONG>Q:</STRONG> What is the benefit of using the Web Components from the example compared to sap.m.Input?</SPAN></P><P><SPAN><STRONG>A:</STRONG> Please continue using SAPUI5 controls if they fulfil your needs. There is no change to that. Most upcoming, new UI elements will be provided as Web Component, serving *all* technology stacks, including SAPUI5.<BR /><BR /></SPAN></P><P><SPAN><STRONG>Q:</STRONG> What are Components bringing when compared to Classic controls if we are using UI5 only approach</SPAN></P><P><SPAN><STRONG>A:</STRONG> see above<BR /><BR /></SPAN></P><P><SPAN><STRONG>Q:</STRONG> how will be the future scope of Fiori elements applications over ui5, do both will have same scope</SPAN></P><P><SPAN><STRONG>A:</STRONG> SAP Fiori elements is an option to develop SAPUI5 app more efficiently. SAP recommends using as much SAP Fiori elements as possible and as much freestyle SAPUI5 as needed. This is what we do in SAP as well. Check out the <A href="https://ui5.sap.com/1.141.0/test-resources/sap/fe/core/fpmExplorer/index.html#/overview/introduction" target="_blank" rel="noopener noreferrer">SAP Fiori Development Portal</A> on more details.<BR /><BR /></SPAN></P><P><STRONG>Q</STRONG><SPAN><STRONG>:</STRONG> What would be best approach to extend freestyle standard Fiori apps? Also, will adaptation projects have more extension powers?</SPAN></P><P><SPAN><STRONG>A:</STRONG> <A href="https://help.sap.com/viewer/UI5_Flex" target="_blank" rel="noopener noreferrer">SAPUI5 flexibility</A> to the strategic way to extend/adapt SAPUI5 apps. The UI5 team continues to invest a lot in this area, as it is top priority for many partners/customers. SAPUI5 flexibility covers freestyle SAPUI5 as well as apps built with SAP Fiori elements. Adaptation projects offer best capabilities to create future-proof app extensions.<BR /><BR /></SPAN></P><P><SPAN><STRONG>Q:</STRONG> Will the Build Code Joule CoPilot also support the Vibe Coding with MCP in the future?</SPAN></P><P><SPAN><STRONG>A:</STRONG> Yes, SAP plans for vibe coding tools (incl. MCP servers) in SAP Build to empower business users to create application prototypes and start new SAP solutions without heavy coding knowledge.<BR /><BR /></SPAN></P><P><SPAN><STRONG>Q:</STRONG> SAP develops SAPUI5 while promoting low-code tools like RAP, CAP, and key user adaptations. Isn’t it inconsistent to advance the core framework while encouraging less direct UI5 development?</SPAN></P><P><SPAN><STRONG>A:</STRONG> Key user adaptation as well as metadata- / annotation-driven apps on RAP/CAP (using SAP Fiori elements) all use SAPUI5 as their UI technology. Innovations ‘in the UI’ are built in SAPUI5, benefitting all these models. Also, there remains a strong use case for a freestyle SAPUI5 implementation approach for apps which cannot follow the patterns of SAP Fiori elements.<BR /><BR /></SPAN></P><P><SPAN><STRONG>Q:</STRONG> As a partner, if we build an SAPUI5 application and deploy it to customer systems, can SAPUI5 flexibility be used to create customer specific adaption projects for it?</SPAN></P><P><SPAN><STRONG>A:</STRONG> This is planned for Q4/2025: <A href="https://roadmaps.sap.com/board?PRODUCT=73554900100800001361&range=CURRENT-LAST#Q4%202025;INNO=000D3AAC9DD21FD0A6A548C104441945" target="_blank" rel="noopener noreferrer">Developer adaptation: enabling customer and partner applications for adaptation projects</A> (As always with forward-looking statements, this is subject to change.)<BR /><BR /></SPAN></P><P><SPAN><STRONG>Q:</STRONG> The build errors just prove you are really building live and not faking it. </SPAN><span class="lia-unicode-emoji" title=":slightly_smiling_face:">🙂</span></P><P><SPAN><STRONG>A:</STRONG> Right. Not sure though whether Tommy enjoyed the moment <span class="lia-unicode-emoji" title=":winking_face:">😉</span><BR /><BR /></SPAN></P><P><SPAN><STRONG>Q:</STRONG> Now that CDS support UI annotations will UI5 become obsolete?</SPAN></P><P><SPAN><STRONG>A:</STRONG> Definitely not. SAPUI5 remains SAP’s strategic UI framework. SAP Fiori elements with its annotations is built on SAPUI5. The annotations control what SAPUI5 is showing.</SPAN></P>2025-11-17T05:35:29.369000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/discover-the-insights-of-your-sap-btp-extension-with-sap-leanix/ba-p/14271204Discover the insights of your SAP BTP extension with SAP LeanIX2025-11-17T17:10:00.036000+01:00Marco_Dornhttps://community.sap.com/t5/user/viewprofilepage/user-id/9255<P>When joining SAP LeanIX in Q2 this year, the mission I was sent on was creating transparency on your custom-built applications and extensions on SAP BTP. As SAP LeanIX helps you not only to plan your landscape transformation, but as well to proactively identify and manage obsolete technology in your IT landscape, you need to have as much transparency as possible. That’s not only true for your standard software, but also the artefacts which make your company unique.</P><P>I’d like to bring together the story of what the great team I work with has provided throughout the year in the context of SAP BTP and combine it with what was already available in regard to self-build software, as all now comes together:</P><UL><LI>See what’s going on in SAP Build,</LI><LI>Know what has been deployed in SAP BTP, Cloud Foundry environment,</LI><LI>Dig into the tech stack of these deployments</LI></UL><P>See below how you can follow along.</P><H1 id="toc-hId-1636398094">Create an application with SAP’s Cloud Application Programming model</H1><P>This is nothing new in the world of SAP BTP developers and inside this community. Thus, I simply followed <SPAN class=""><SPAN class=""><A href="https://developers.sap.com/tutorials/hana-cloud-cap-create-project..html" target="_blank" rel="noopener noreferrer">https://developers.sap.com/tutorials/hana-cloud-cap-create-project..html</A></SPAN></SPAN> which gave me an application based on <SPAN class=""><SPAN class=""><A href="https://cap.cloud.sap/docs/about/" target="_blank" rel="noopener nofollow noreferrer">https://cap.cloud.sap/docs/about/</A></SPAN></SPAN>. Two things I did which are important for moving along:</P><OL><LI>I synced the artifacts to github.com,</LI><LI>I deployed the CAP application to SAP BTP, Cloud Foundry runtime.</LI></OL><P>Both should bring this closer to reality of non-tutorial-based developments. So far, for the typical SAP BTP consumer, this is an old hat, right? Therefore, I’d like to bring in the angle of the enterprise architects (EA), who want to see what custom applications are built and which technologies are being used, so that it’s easier to keep track of these details. This is where SAP LeanIX Application Portfolio Management (APM) comes into the picture.</P><H1 id="toc-hId-1439884589">Keep track easily</H1><P>Your EAs want to keep track of what’s going in your company's technology stack. Continuing on the flow, <A href="https://help.sap.com/docs/leanix/ea/configuring-sap-build-integration" target="_blank" rel="noopener noreferrer">connect your SAP Build instance</A> which is used for production-related extensions to SAP LeanIX APM. This will provide you transparency on what SAP Build projects exist and will suggest modeling your SAP BTP account structure along LeanIX’s BTP <A href="https://help.sap.com/docs/leanix/ea/modeling-sap-btp?locale=en-US&version=LATEST" target="_blank" rel="noopener noreferrer">modeling best practices</A>.<span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP_Build_item.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/341951i0CF5ECCFD7E13339/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="SAP_Build_item.png" alt="SAP_Build_item.png" /></span></P><P>The SAP Build Code project is suggested to being created as an “Application” fact sheet. It is based on SAP Build Code, hence two related “IT Component” fact sheets are suggested. SAP BTP, your global account, and the subaccount are recommended as 3-leveled ”Platform” fact sheets. Let’s wait with its creation though.</P><P>While this is nice, it won’t give you any insights into the actual Cloud Foundry applications and the SAP BTP services you use. This is where you want to <A href="https://help.sap.com/docs/leanix/ea/configuring-sap-btp-cloud-foundry-integration?locale=en-US&version=LATEST" target="_blank" rel="noopener noreferrer">connect SAP BTP, Cloud Foundry environment</A> of your global account to SAP LeanIX APM. The good news is that you only need to setup one integration per global account to APM and it will enable you to crawl all the Cloud Foundry spaces and organizations inside of it. As long as you use the same platform user + IAS certificate + password, the integration will fetch details about deployed applications and their bound SAP BTP services.</P><P>Following the above tutorial, the discovery inside my Cloud Foundry space looks like this:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="CF_Inbox.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/341957i4030C01D39855E2C/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="CF_Inbox.png" alt="CF_Inbox.png" /></span></P><P>Diving into one application, it reveals you</P><UL><LI>the deployed CF application,</LI><LI>if it’s part of a multi-target-application, the recommendation is creating a fact sheet for that too,</LI><LI>the bound SAP BTP services suggested as IT components</LI><LI>the Cloud Foundry buildpack including its version.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="CF_Item.png" style="width: 813px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/341958i28D03622507D3A1E/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="CF_Item.png" alt="CF_Item.png" /></span></P><P>Go ahead and create the two “application” fact sheets and the IT components. The fact sheet for the actual deployment will be of the subtype “Microservice” and its MTA will be the “Business Application” subtype.</P><P>To combine the SAP Build Code “application” fact sheet with the MTA, you can edit the suggested line item of the SAP Build Code discovery item to point to the MTA fact sheet. That will give you the transparency of the used SAP BTP services as part of your deployment <STRONG>and</STRONG> the SAP Build project details.</P><P>After creating the other two applications of the CF MTA to your inventory and linking it to the MTA-fact-sheet, you have the insights into your CF-based & SAP-Build-Code-created application:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="CF_relationship_explorer.png" style="width: 939px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/341959i36557EF52EB7F959/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="CF_relationship_explorer.png" alt="CF_relationship_explorer.png" /></span></P><H1 id="toc-hId-1243371084">Knowing the inside</H1><P>This takes you already quite far when it comes to making your SAP BTP, Cloud Foundry deployments transparent for the enterprise architecture team. With this modeling, it’s easy to identify which applications across all deployments in BTP use which build pack version. Once the build pack ages, application owners can be asked to update.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Buildpack_relationship_explorer.png" style="width: 945px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/341960iDDAFC77A35DC7B2A/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Buildpack_relationship_explorer.png" alt="Buildpack_relationship_explorer.png" /></span></P><P>This might not be enough though for mitigating technology risks and compliance upfront. An add-on to SAP LeanIX APM addresses exactly this gap. Let’s explore how to extend the above use case with <A href="https://help.sap.com/docs/leanix/ea/sap-leanix-technology-risk-and-compliance?locale=en-US&version=LATEST" target="_blank" rel="noopener noreferrer">SAP LeanIX Technology Risk and Compliance</A>.</P><H1 id="toc-hId-1046857579">Add the Software Bill of Materials (SBOM) to the mix</H1><P>“Software Bill of Materials (SBOM) files play a vital role in managing and understanding dependencies among microservices. These files, typically adhering to the widely-used <A href="https://spdx.dev/" target="_blank" rel="noopener nofollow noreferrer">System Package Data Exchange (SPDX)</A> or <A href="https://cyclonedx.org/" target="_blank" rel="noopener nofollow noreferrer">CycloneDX</A> format, provide a comprehensive inventory of all software components, libraries, and modules used by a microservice.” (<A href="https://help.sap.com/docs/leanix/ea/software-bill-of-materials-sbom#introduction" target="_blank" rel="noopener noreferrer">source</A>)</P><P>Let’s blend these into the above Node.js tutorial. For the three deployments, I used <A href="https://github.com/CycloneDX/cyclonedx-cli" target="_blank" rel="noopener nofollow noreferrer">CycloneDX</A> to generate three individual SBOMs (there are <A href="https://github.com/cybeats/sbomgen" target="_blank" rel="noopener nofollow noreferrer">more open source tools</A> to check out)<SPAN>:</SPAN></P><UL><LI>for “MyHANAApp-srv” one in the folder “gen/srv”,</LI><LI>for “MyHANAApp-db-deployer” in “gen/db”, and</LI><LI>for “MyHANAApp” in “app/router”.</LI></UL><P>In the end, the <FONT face="courier new,courier">mta.yaml</FONT> tells you where to generate these SBOMs. Run <FONT face="courier new,courier">cyclonedx-npm -o sbom.json</FONT> in each folder to store the SBOMs in separate JSON files. After <A href="https://help.sap.com/docs/leanix/ea/workspace-setup-for-self-built-software-discovery" target="_blank" rel="noopener noreferrer">setting up your LeanIX workspace for the self-build software</A> use case, you can push it to the fact sheets of each application created beforehand with the path:</P><pre class="lia-code-sample language-bash"><code>https://{SUBDOMAIN}.leanix.net/services/technology-discovery/v1/factSheets/{factSheetId}/sboms</code></pre><P>The exact details are <A href="https://help.sap.com/docs/leanix/ea/software-bill-of-materials-sbom?locale=en-US&version=LATEST" target="_blank" rel="noopener noreferrer">well documented</A>. Pushing these to your fact sheets will give you insights into which libraries and frameworks are being used inside every application (see details in the <A href="https://help.sap.com/docs/leanix/ea/tech-stack-discovery-from-sboms?locale=en-US" target="_blank" rel="noopener noreferrer">tech stack discovery documentation</A>). This allows you to proactively address technical risks. Here is how it looks like for the above “MyHANAApp” in the LeanIX relations explorer:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SBOM_CF-App.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/341963iF0FFDD00A9EA05E6/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="SBOM_CF-App.png" alt="SBOM_CF-App.png" /></span></P><P>It blends the SAP BTP services, the used Cloud Foundry buildpack, and used libraries inside the deployment. All the details of the Node.js dependencies can be listed in the SBOM explorer:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SBOM_Explorer.png" style="width: 396px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/341964iF16C3B4D845FEF63/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="SBOM_Explorer.png" alt="SBOM_Explorer.png" /></span></P><H2 id="toc-hId-979426793">Update (20.11.25): Tracking the CAP-versions</H2><P>This might be telling the obvious, but I want to highlight it after my first discussions on the blog post: when you follow along this tutorial and you analyze the SBOM components e.g. of “MyHANAApp-srv”, you can see the <A href="https://cap.cloud.sap/docs/releases/#major-versions" target="_blank" rel="noopener nofollow noreferrer">version of CAP</A>. In the side panel, you can then see which other microservice applications are based on that version, hence identify who's still using outdated CAP versions. Just saying...</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SBOM_cap_version.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/343152iEA7E7078F8F04226/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="SBOM_cap_version.png" alt="SBOM_cap_version.png" /></span></P><H1 id="toc-hId-653830569">Mission accomplished</H1><P>That’s it. It’s quite a bit indeed, but now I have the full insight into</P><UL><LI>where did I create the CF MTA app,</LI><LI>where is the app deployed, and</LI><LI>which tech stack is this built on.</LI></UL><P>For regular updates of the SBOMs, you can integrate their generation and push to the API endpoints in your CI/CD pipeline. For CI/CD, use <A href="https://developers.sap.com/tutorials/cicd-start-cap.html" target="_blank" rel="noopener noreferrer">the SAP BTP CI/CD service</A> or create a <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/authenticating-github-actions-workflows-deploying-to-the-sap-btp-cloud/ba-p/14075047" target="_blank">Github-actions-based flow</A> and the transparency of your tech stack will stay up-to-date.</P><P>Let me know of your comments and feedback here in the community! The team and I are now looking into the same storyline for <A href="https://roadmap.leanix.net/c/634-sap-discovery-btp-extension-discovery?&utm_medium=social&utm_source=share" target="_blank" rel="noopener nofollow noreferrer">SAP BTP, Kyma runtime</A>. Furthermore, I want to bring in the transformation flow for <A href="https://roadmap.leanix.net/c/661-application-discovery-discover-classic-on-stack-sap-erp-extensions?&utm_medium=social&utm_source=share" target="_blank" rel="noopener nofollow noreferrer">classical on-stack extensions</A>.</P><P>For both, I’d love to hear your thoughts!</P>2025-11-17T17:10:00.036000+01:00https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-sap/sap-fiori-development-newsletter-november-2025-issue-37/ba-p/14268465SAP Fiori development newsletter November 2025 (issue #37)2025-11-19T15:59:31.079000+01:00PeterSpielvogelhttps://community.sap.com/t5/user/viewprofilepage/user-id/543<P>We are in the midst of “conference season”, so this means lots of great announcements about new innovations. See the events section below for details on the European and U.S. iterations.</P><P>If you are looking to try the latest AI-powered development tools, such as MCP servers, please join us at our next <A href="https://events.sap.com/eur-fiori-innovation-day-walldorf-2025/en_us/home.html" target="_blank" rel="noopener noreferrer">SAP Fiori Innovation Day in Walldorf</A> on December 9. This is a great way to learn about where to focus your learning resources in 2026 and what tools you can use to accelerate your development projects.</P><P>For ongoing updates, I encourage you to join our monthly SAP Fiori development roundtable. <A href="https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdocs.google.com%2Fforms%2Fd%2F1ZqIX3zzGBOOIqehmlIRz_HhpQEhqunkLSzN1gnaOwP8%2Fedit&data=05%7C02%7Cpeter.spielvogel%40sap.com%7C1744854ba1f649092b6b08dd30c5a09e%7C42f7676cf455423c82f6dc2d99791af7%7C0%7C0%7C638720347573866887%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=xgQxtmNy3e97xOOJC304tGHhsgIVLId5KJSRNyshxq0%3D&reserved=0" target="_blank" rel="noopener nofollow noreferrer">Register online</A> or email me for an invitation.</P><P><SPAN>If you prefer to receive this in your inbox, please </SPAN><A href="https://www.sap.com/cmp/nl/sap-fiori-development-newsletter/index.html" target="_blank" rel="noopener noreferrer">subscribe to the SAP Fiori development newsletter.</A></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP_Fiori_Dev_Newsletter_37.png" style="width: 657px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/342029i26C79D8966F56D4B/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="SAP_Fiori_Dev_Newsletter_37.png" alt="SAP_Fiori_Dev_Newsletter_37.png" /></span></P><H2 id="toc-hId-1759972518" id="toc-hId-1764767938"><STRONG>Development news</STRONG></H2><P><STRONG>Introducing the SAP Fiori Development Portal<BR /></STRONG>In this 6-part series, Katrin Polloczek and Marcel Waechter provide a thorough look at the new SAP Fiori development portal, which replaces the Flexible Programming Model Explorer. The series covers building blocks, floor plans, extension options, custom pages, and how all these pieces fit together. <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">Read more</A>.</P><P><STRONG>Installing SAPUI5 patches is now better in every respect<BR /></STRONG>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. Although the MIME repository has served its purpose, many customers working with SAPUI5, especially system operators installing new SAPUI5 patches, face challenges. Now, the UI5 team introduces the SAPUI5 Runtime Repository to improve this in every respect: <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/effortless-sapui5-patch-management-introducing-the-new-sapui5-runtime/ba-p/14259246" target="_blank">Angelika Kirilin explains</A>.</P><P><STRONG>Goodbye UI5 tooling - Hello UI5 CLI<BR /></STRONG>Over the last decade, UI5 Tooling became the best-in-class tool to develop UI5 projects. It offers a range of features to make your life as a developer easy when serving and building projects. It turned out that the name UI5 Tooling led to much confusion and even support requests. The UI5 team settled for a new name "UI5 CLI" to align with industry best practices. <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/goodbye-ui5-tooling-hello-ui5-cli/ba-p/14211769" target="_blank">See details</A>.</P><P><STRONG>Start your SAPUI5 coding journey in the SAPUI5 Demo Kit<BR /></STRONG>The SAPUI5 SDK, or the Demo Kit, is the one-stop shop for modern developers who want to build state-of-the-art enterprise-grade SAP applications. <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/rise-with-the-phoenix-your-sapui5-coding-journey-using-the-demo-kit/ba-p/14198923" target="_blank">Discover the features</A>.</P><P><STRONG>Streamlining local app previews: virtual endpoints for seamless development<BR /></STRONG>In traditional app development setup, local app previews and testing rely heavily on physical sandbox files. While this method provides a level of consistency and stability, it often falls short in terms of up-to-dateness and maintenance effort. This post explores a new approach to local app previews and testing, which can now be virtually served by middleware. <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/streamlining-local-app-previews-virtual-endpoints-for-seamless-development/ba-p/14155498" target="_blank">Learn more</A>.</P><H2 id="toc-hId-1563459013" id="toc-hId-1568254433">Events</H2><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="PeterSpielvogel_0-1763065923831.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340306iCCCED3B677DECEB7/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="PeterSpielvogel_0-1763065923831.png" alt="PeterSpielvogel_0-1763065923831.png" /></span></P><P>Register for SAP Fiori Innovation Day in Walldorf (customers and sponsoring partners only): <BR /><A href="https://events.sap.com/eur-fiori-innovation-day-walldorf-2025/en_us/home.html" target="_blank" rel="noopener noreferrer">https://events.sap.com/eur-fiori-innovation-day-walldorf-2025/en_us/home.html</A></P><H3 id="toc-hId-1500823647">In case you missed it </H3><P><STRONG>SAP TechEd summary articles<BR /></STRONG><A href="https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-sap/asug-tech-connect-2025-summary-vibe-coding-ux-innovation-and-ai-everywhere/ba-p/14264755" target="_blank">ASUG Tech Connect</A> in Louisville, Kentucky, USA, had lots of great content on vibe coding, the evolution of SAP Fiori, and lots of hands-on sessions to test SAP’s latest development tools and technologies.</P><P><STRONG>The art and science of SAPUI5 in SAP Build<BR /></STRONG>If you’re an SAPUI5 developer and couldn’t attend SAP TechEd in Berlin, here’s one highlight you can watch as a replay: A deep dive session on “The art and science of SAPUI5 in SAP Build”: <A href="https://www.sap.com/events/teched/virtual/flow/sap/tev25/catalog-virtual/page/catalog/session/1752166265407001r3vW" target="_blank" rel="noopener noreferrer">https://www.sap.com/events/teched/virtual/flow/sap/tev25/catalog-virtual/page/catalog/session/1752166265407001r3vW</A></P><H2 id="toc-hId-1311650375" id="toc-hId-1175227423"><STRONG>Back issues from the past year</STRONG></H2><P><A href="https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-sap/sap-fiori-development-newsletter-september2025-issue-36/ba-p/14212556" target="_self">SAP Fiori development newsletter September 2025 (issue #36)</A></P><P><A href="https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-sap/sap-fiori-development-newsletter-july-2025-issue-35/ba-p/14139032" target="_self">SAP Fiori development newsletter July 2025 (issue #35)</A></P><P><A href="https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-sap/sap-fiori-development-newsletter-may-2025-issue-34/ba-p/14091410" target="_self">SAP FIori development newsletter May 2025 (Issue #34)</A></P><P><A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-fiori-development-newsletter-march-2025-issue-33/ba-p/14036207" target="_self">SAP Fiori development newsletter March 2025 (Issue #33)</A></P><P><A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-fiori-development-newsletter-january-2025-issue-32/ba-p/13984589" target="_self">SAP Fiori development newsletter January 2025 (issue #32)</A></P><P><A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-fiori-development-newsletter-november-2024-issue-31/ba-p/13929385" target="_blank">SAP Fiori development newsletter November 2024 (issue #31)</A></P>2025-11-19T15:59:31.079000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/teched-recap-creating-ai-enhanced-ux-for-your-own-applications-with-sap/ba-p/14273694TechEd Recap: Creating AI-Enhanced UX for Your Own Applications with SAP Design System2025-11-20T15:55:07.560000+01:00ThomasReisshttps://community.sap.com/t5/user/viewprofilepage/user-id/149639<P><EM>By Sophia Levens and Thomas Reiss</EM></P><P>We were thrilled to speak at this year’s TechEd conference in Berlin on how the SAP Design System is powering the next generation of AI-led product design. Our Deep Dive talk entitled “Creating AI-enhanced UX for your own applications with SAP Design System” focused on three key areas: an introduction into the SAP Design System, new AI patterns for the design system and SAPUI5, and our AI-powered tools for our UI technologies. We then closed the session with an overview of the resources available to designers and developers today.</P><P>Below we’ll share a recap of the major points and announcements from the session. You can also <STRONG>watch the recorded session <A href="https://www.sap.com/events/teched/virtual/flow/sap/tev25/catalog-virtual/page/catalog/session/1753179705783001L1CP" target="_blank" rel="noopener noreferrer">here</A>.</STRONG></P><P> </P><H1 id="toc-hId-1636461799"><SPAN>Introduction to the SAP Design System</SPAN></H1><P>The overall mission of the <SPAN><A href="https://www.sap.com/design-system/" target="_blank" rel="noopener noreferrer">SAP Design System</A></SPAN> is to unify and advance the SAP user experience. We achieve this in two ways:</P><UL><LI><STRONG>Unify</STRONG>: The SAP Design System serves as the central hub of ready-to-use assets, guidance and standards for building delightful experiences that are consistent across the SAP portfolio. This is how we directly contribute to SAP’s Suite-First strategy.</LI><LI><STRONG>Advance: </STRONG>The SAP Design System provides the essential patterns and tools to embed transformative AI experiences across all products and touchpoints. This is how we directly contribute to the AI-First goal.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="01 Our mission.jpg" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/343227iB5AE153E9EEBDC33/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="01 Our mission.jpg" alt="01 Our mission.jpg" /></span></P><P><STRONG>What exactly is a design system?</STRONG></P><P>In order to deliver consistent and inclusive UX, the SAP Design System is made up of the following elements:</P><OL><LI><STRONG>Design Language</STRONG>: The most foundational elements that go into any brand. For example, color, type, iconography, illustrations, etc.</LI><LI><STRONG>Components</STRONG>: The building blocks for creating user interfaces, like buttons, drop down menus, or input fields.</LI><LI><STRONG>Patterns</STRONG>: Covers a use case or user flow, things like exporting data to PDF or a search workflow.</LI><LI><STRONG>Floorplans</STRONG>: A full UI layout. Typically, floorplans are a complete page or even span several pages.</LI></OL><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%2F5hybr7zNvjI%3Ffeature%3Doembed&display_name=YouTube&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D5hybr7zNvjI&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F5hybr7zNvjI%2Fhqdefault.jpg&type=text%2Fhtml&schema=youtube" width="200" height="112" scrolling="no" title="SAP Design system - Are you ready to design a new way to work?" frameborder="0" allow="autoplay; fullscreen; encrypted-media; picture-in-picture;" allowfullscreen="true"></iframe></div></P><P>The SAP Design System extends across SAP. It helps to unify all touchpoints across the SAP brand including our products, our digital experiences like sap.com, and other marketing and communications including interactive events like TechEd. And because the system is open source, our customers can also use the design system to build upon and customize our products and platforms.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="02 Design System (naming).jpg" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/343238i8F1C38F4A1E8B813/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="02 Design System (naming).jpg" alt="02 Design System (naming).jpg" /></span></P><P><STRONG>What UI technologies are supported with the SAP Design System? </STRONG></P><P>For each element in the SAP Design System, we build reusable components in code that developers can leverage to accelerate their workflow. There are two ways to leverage SAP technologies—via “floorplans and building blocks” or “freestyle”.</P><UL><LI><STRONG>Build “freestyle” with SAPUI5 and SAP Web Components: </STRONG>Freestyle allows you full control of every element on the screen.</LI><LI><STRONG>Use “floorplans and building blocks” with SAP Fiori Elements: </STRONG>This lets you accelerate development when the desired app or workflow is close to one of the out-of-the box floorplans or building blocks.</LI></UL><P>Because both of these choices are based on SAPUI5, you don’t have to choose one or the other, you can mix both ways of developing leveraging each when needed.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="03 SAP UI technologies.jpg" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/343229iF4C39AC4719A0B06/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="03 SAP UI technologies.jpg" alt="03 SAP UI technologies.jpg" /></span></P><P> </P><H1 id="toc-hId-1439948294"><SPAN>New AI Patterns for the SAP Design System and SAPUI5</SPAN></H1><P>SAP is proud to offer AI components and patterns for web and mobile. We’re investing in making it easy to design and build great AI experiences that are responsible, flexible, and work across ecosystems. Our AI experience principles are built on the following six pillars: design for clarity, earn trust, give control, design fairly, boost flow, fail-safe.</P><P>Find the latest AI patterns and components:</P><UL><LI><SPAN><A href="https://www.sap.com/design-system/fiori-design-web/ui-elements/" target="_blank" rel="noopener noreferrer">SAP Design System portal</A></SPAN></LI><LI><SPAN><A href="https://www.figma.com/community/file/1494295794601744471/sap-fiori-for-web-ui-kit" target="_blank" rel="noopener nofollow noreferrer">SAP Web UI Kit</A></SPAN></LI><LI><SPAN><A href="https://www.figma.com/community/file/1450853598524410675/sap-fiori-for-ios-ui-kit" target="_blank" rel="noopener nofollow noreferrer">SAP Fiori for iOS UI Kit</A></SPAN></LI><LI><SPAN><A href="https://www.figma.com/community/file/1497649798412067020/sap-fiori-for-android-ui-kit" target="_blank" rel="noopener nofollow noreferrer">SAP Fiori for Android UI Kit</A></SPAN></LI><LI><SPAN><A href="https://ui5.github.io/webcomponents/" target="_blank" rel="noopener nofollow noreferrer">UI5 Web Components</A></SPAN></LI></UL><P>Our AI components and patterns have gone through the process of reviews and testing by our experts in user assistance, accessibility, user research, and are compliant with SAP’s legal and ethical AI standards. These are patterns you and your users can trust.</P><H2 id="toc-hId-1372517508"><SPAN> </SPAN></H2><H1 id="toc-hId-1046921284"><SPAN>Using our AI-powered UI Technologies to Help You Build Faster</SPAN></H1><P>We have introduced powerful AI tools to help you build UIs and applications faster.</P><P><SPAN><A href="https://www.sap.com/products/artificial-intelligence/joule-for-developers.html" target="_blank" rel="noopener noreferrer"><STRONG>SAP Joule for Developers</STRONG></A> </SPAN>is a collection of embedded AI capabilities for SAP Build as well as for ABAP, delivered through Joule, that accelerates development of apps and extensions, reduces costs, and improves developer proficiency.</P><P>The SAP Fiori tools project accelerator, which can be started from Joule in SAP Build Code, enables developers to create CAP-based (Cloud Application Programming model based) SAP Fiori elements applications directly from an image of the intended outcome. These images can be high fidelity Figma models, lower fidelity screenshots or a sketch on paper. Simply upload the image and use AI to generate the data models, services and the UI. Find out more in this blog post: <SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/from-idea-to-app-using-ai-powered-project-accelerator-to-develop-sap-fiori/ba-p/14095300" target="_blank">From idea to app: using AI-powered Project Accelerator to develop SAP Fiori apps</A></SPAN>.</P><P><SPAN> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Generate a complete CAP-based application from a sketch with SAP Fiori tools project accelerator: data models, services and UI." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/343232iB9228A4C5F5D8701/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="04 AI generate Fiori elements from sketch.jpg" alt="Generate a complete CAP-based application from a sketch with SAP Fiori tools project accelerator: data models, services and UI." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Generate a complete CAP-based application from a sketch with SAP Fiori tools project accelerator: data models, services and UI.</span></span></SPAN></P><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 open-source <SPAN><A href="https://modelcontextprotocol.io/" target="_blank" rel="noopener nofollow noreferrer">Model Context Protocol (MCP)</A></SPAN> servers equip developers with valuable support by providing AI agents with comprehensive UI5 and SAP Fiori elements knowledge, including best practices and project-aware context information.</P><P>Read about the new MCP servers in these blog posts:</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>.<SPAN><BR /><BR /></SPAN></LI></UL><H1 id="toc-hId-850407779"><SPAN>Key Takeaways</SPAN></H1><P>This deep dive session gave an overview of how customers and partners can create AI-enhanced UX for their own applications with the SAP Design System and SAP’s UI technologies. Find everything you need to get started designing and developing:</P><UL><LI>Get started with the <SPAN><A href="https://www.sap.com/design-system/" target="_blank" rel="noopener noreferrer">SAP Design System portal.</A></SPAN></LI><LI>Use <SPAN><A href="https://www.figma.com/@sap" target="_blank" rel="noopener nofollow noreferrer">SAP's UI kits</A></SPAN> with the new AI patterns.</LI><LI>Use <SPAN><A href="https://ui5.sap.com/" target="_self" rel="noopener noreferrer">SAPUI5.</A></SPAN></LI></UL><P><SPAN> </SPAN></P>2025-11-20T15:55:07.560000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/driving-extensibility-innovation-and-automation-with-sap-build-s-clean-core/ba-p/14271996Driving Extensibility, Innovation and Automation with SAP Build's Clean Core2025-11-21T13:53:48.961000+01:00valeriavlhttps://community.sap.com/t5/user/viewprofilepage/user-id/2041160<P>Below you'll find a summary of what was discussed during our latest Clean Core webinar, led by NTT Data, looking into ways to extend SAP environments and accelerate innovation through SAP Build's Clean Core methodology. </P><P><span class="lia-unicode-emoji" title=":spiral_calendar:">🗓</span><STRONG>Agenda Highlights and session recap</STRONG> <span class="lia-unicode-emoji" title=":spiral_calendar:">🗓</span></P><OL><LI><P><STRONG>Current context: The importance of Clean Core in SAP S/4HANA modernization</STRONG><BR />A Clean Core strategy keeps the SAP S/4HANA system free from heavy customizations that complicate upgrades. By reducing technical debt and streamlining updates, organizations gain more stability and agility. This approach lays the foundation for continuous innovation and smooth cloud adoption.</P></LI><LI><P><STRONG>Overview of SAP’s Side-by-Side extensibility strategy: Pro-Code and Low-Code/No-Code</STRONG><BR />SAP's side-by-side extensibility allows organizations to innovate without modifying the core system. It offers both pro-code development for complex scenarios and low-code/no-code tools for business users. This ensures fast, secure innovation while keeping extensions isolated and easy to maintain.</P></LI><LI><P><STRONG>Tools and frameworks for Pro-Code and Low-Code/No-Code developers</STRONG><BR />SAP BTP provides a unified set of tools supporting both professional developers and low-code/no-code creators. Pro-code users access advanced IDEs and SDKs, while business users work with visual development tools. Together, these frameworks accelerate development, enhance collaboration, and ensure secure, scalable extensions.</P></LI><LI><P><STRONG>Main components: Build Apps, Build Process Automation, and Build Work Zone</STRONG><BR />The SAP Build suite includes three main elements that empower users across the organization. Build Apps enables rapid app creation, Build Process Automation streamlines workflows, and Build Work Zone centralizes access to applications and information. Combined, they create a cohesive digital workplace experience.</P></LI><LI><P><STRONG>Basic principles of SAP Build Apps</STRONG><BR /><SPAN>SAP Build Apps focuses on visual, intuitive development to make app creation accessible to more users. It provides drag-and-drop tools, pre-built templates, and seamless integration with SAP and non-SAP systems. With cloud-native deployment and Fiori-aligned design, it supports user-friendly, governed, enterprise-ready innovation.</SPAN></P></LI></OL><P><SPAN>You can find in the link below the slides shared during the presentation with all of the content presented today by NTT Data. </SPAN></P><P><A href="https://d.dam.sap.com/a/zJ3ezsJ/SAP_BTP_Extensibility.pdf?rc=10&inline=true&doi=SAP1259826" target="_self" rel="noopener noreferrer"><SPAN>Link to presentation</SPAN></A></P><P><STRONG> <span class="lia-unicode-emoji" title=":exclamation_question_mark:">⁉️</span>Still curious about clean core? <span class="lia-unicode-emoji" title=":exclamation_question_mark:">⁉️</span></STRONG></P><P><span class="lia-unicode-emoji" title=":white_heavy_check_mark:">✅</span>Contact your BTP Customer Success Manager for further discussion</P><P><span class="lia-unicode-emoji" title=":white_heavy_check_mark:">✅</span> <SPAN>Visit </SPAN><A href="https://discovery-center.cloud.sap/index.html" target="_self" rel="nofollow noopener noreferrer">SAP Discovery Center Missions on BTP</A></P><P> </P>2025-11-21T13:53:48.961000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/is-ai-just-a-power-tool-for-enterprise-software/ba-p/14274672Is AI Just a Power Tool for Enterprise Software?2025-11-21T14:03:48.290000+01:00SamiLechnerhttps://community.sap.com/t5/user/viewprofilepage/user-id/10613<P class="">We all remember that feeling – watching our friends build a little wood house next to the sandbox, marveling at how quickly they could assemble it with all the power tools available. Similarly, we can build a small tool shed in a weekend – a quick project with readily available resources. But try to build a 2-car garage, and suddenly the reality hits: it’s a vastly more complex undertaking. Even with every tool imaginable, you'd spend countless hours watching YouTube videos, improvising solutions, and inevitably missing crucial details – resulting in a structure that doesn’t meet the family council's standards.</P><P class=""><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="playhouse.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/343613iEA73ABC8A4DB8D81/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="playhouse.png" alt="playhouse.png" /></span></P><P class="">That’s precisely how AI currently operates in enterprise software development. It can be an amazing “power tool” – accelerating routine tasks and suggesting code snippets. But it fundamentally <EM>cannot</EM> build a complex, robust software system on its own.</P><P class=""> </P><P class=""><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="garage.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/343611i23E2D65274DDE31C/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="garage.png" alt="garage.png" /></span>Let’s break down why. The garage analogy is a powerful one because it illustrates the difference between rapid assembly and true, lasting construction. AI can certainly suggest a quick solution for a simple function – like generating boilerplate code or completing a basic API endpoint. However, building a 2-car garage requires deep understanding of structural engineering, material science, and local building codes. Similarly, complex enterprise software projects demand architectural judgment, a comprehensive understanding of business requirements, and meticulous attention to detail – qualities that currently reside firmly with human developers.</P><P class="">AI coding assistants speed up routine tasks (boilerplate, suggestions, small functions) but <A class="" href="https://allthingsopen.org/articles/ai-code-assistants-limitations" target="_self" rel="nofollow noopener noreferrer"><STRONG>lack long‑range architectural judgment, project context, and ownership</STRONG></A> required to run an entire project end-to-end. AI is used for bigger, more complex tasks, is introducing architectural anti‑patterns, duplication which result in maintainability and <A class="" href="https://www.infoq.com/news/2025/11/ai-code-technical-debt/" target="_self" rel="nofollow noopener noreferrer">accelerating technical debt.</A></P><P class="">Responsibility of the code and using AI at the right time is still the <A class="" href="https://www.cio.com/article/3596475/ai-coding-agents-come-with-legal-risk.html" target="_self" rel="nofollow noopener noreferrer">coders responsibility</A>. An expert knows "when to use what tool to get the right result.” Treating AI as a simple productivity booster – not an autonomous architect – is crucial.</P><P class="">Ultimately, building complex software requires a deep understanding of the business problem and a commitment to maintainability and scalability – qualities that are currently beyond the capabilities of AI. Just as you need a structural engineer to design a garage (or a house), developers need architectural expertise and rigorous testing to ensure the long-term success of any software project.</P><P class="">Don’t expect AI to build your garage (or House)– or your enterprise software system. Instead, view it as a valuable tool that can significantly enhance the productivity of skilled developers, but not replace them.</P>2025-11-21T14:03:48.290000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/building-pro-code-extensions-for-sap-mobile-start-leveraging-mobile-native/ba-p/14272832Building Pro-Code Extensions for SAP Mobile Start leveraging mobile native functionalities2025-11-27T15:04:08.058000+01:00thomas-brucknerhttps://community.sap.com/t5/user/viewprofilepage/user-id/120924<P>We just concluded this year's SAP TechEd with two very insightful in-person events – SAP TechEd 2025 in Berlin (Nov 4–5) and SAP TechEd on Tour Bangalore (Nov 25–26). As depicted in the <A href="https://community.sap.com/t5/sap-teched-blog-posts/sap-teched-2025-go-mobile/ba-p/14223700" target="_blank">announcement blog post</A> of my colleague <A href="https://community.sap.com/t5/user/viewprofilepage/user-id/165819" target="_blank">Thilo Berndt</A>, the mobile topics were again very well covered in various sessions and activities. As part of which, we were conducting a Hands-on Workshop both in Berlin and Bangalore called "<A href="https://www.sap.com/events/teched/berlin/flow/sap/te25/catalog-inperson/page/catalog/session/1749126071945001BoPB" target="_blank" rel="noopener noreferrer">CA260</A> – Learn how to build your own app and use it in SAP Mobile Start", which we would like to recap in this blog post and highlight the most interesting technical aspects.</P><H2 id="toc-hId-1765516461">Overview</H2><P><SPAN><a href="https://community.sap.com/t5/c-khhcw49343/SAP+Mobile+Start/pd-p/73554900100800003452" class="lia-product-mention" data-product="709-1">SAP Mobile Start</a> is the native entry point to the SAP Business Suite, to all relevant business processes, data, and content. It provides access to native or web-responsive business apps along with other content and critical business information. This includes notifications and consolidated views on tasks, approval workflows, and SAP S/4HANA situations. SAP Mobile Start provides business information from SAP Start, SAP Build Work Zone, standard edition, and SAP Build Work Zone, advanced edition. Non SAP content can be integrated as well. It runs on iOS, iPadOS and Android devices, on watchOS and Wear OS devices, and on Apple Vision </SPAN></P><P>While one significant aspect of SAP Mobile Start is to provide access to SAP’s role-specific standard content, such as business applications and tiles exposed from SAP S/4HANA via SAP Build Work Zone, this year’s SAP TechEd Hands-On Workshop CA260 centered on the ease of building pro-code extensions using SAP Build and specifically SAP Build Code with the <A href="https://cap.cloud.sap/docs/" target="_blank" rel="noopener nofollow noreferrer">SAP Cloud Application Programming Model (CAP)</A>. Participants were able to experience the necessary steps in building and deploying such a pro-code extension, as well as how to specifically utilize mobile native capabilities within that extension, such as Widgets (e.g. on the iOS Home and Lockscreen) and (Push) Notifications.</P><P>The session material and exercises are available on Github within the repository <A href="https://github.com/SAP-samples/teched2025-CA260" target="_blank" rel="noopener nofollow noreferrer">SAP-samples/teched2025-CA260</A>. We do highly recommend checking out the exercises and trying them out on your own development system environment. This blog post will provide a brief overview of the most important steps and technical activities. </P><P><EM>Please note that the session material on Github as well as some screenshots and code snippets in this blog post will contain usages of "###" as a placeholder for the participant number that was assigned in the hands-on workshop. Participants were instructed to replace these occurrences with their own participant number.</EM></P><H2 id="toc-hId-1569002956">Building and Deploying the base version of the extension</H2><P>The exercises started by building and deploying an initial version of the extension that the workshop is using as an example. As the initial version provided to participants, we are using a <A href="https://github.com/SAP-samples/teched2025-CA260" target="_blank" rel="noopener nofollow noreferrer">slightly modified version</A> of the <A href="https://github.com/cap-js/incidents-app" target="_blank" rel="noopener nofollow noreferrer">"Incidents Management" CAP sample application</A>. The provided full-stack application and its dependencies are defined in the <EM><A href="https://help.sap.com/docs/btp/sap-business-technology-platform/multitarget-applications-in-cloud-foundry-environment?locale=en-US&version=LATEST" target="_blank" rel="noopener noreferrer">Multitarget Application</A> descriptor </EM>(<SPAN>mta.yaml) which is being built and packaged into an <EM>mta archive</EM> (.mtar) during the build operation, which eventually gets deployed to the SAP Business Technology Platform (BTP), specifically SAP BTP Cloud Foundry environment. While the workshop is making use of SAP Build Code and its productivity tooling for developing full-stack applications with CAP, building the MTA project and deploying the build artifact to the SAP BTP, you can as well use your IDE of choice such as Visual Studio Code.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Screenshot: Overview of the project structure" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/342722i6849CB3A68BC6173/image-size/large?v=v2&px=999" role="button" title="extension_project_overview.png" alt="Screenshot: Overview of the project structure" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Screenshot: Overview of the project structure</span></span></SPAN></P><P> With the deployment, the CAP application (in terms of the server logic) is running an application container on the Cloud Foundry Runtime. The UI of our full-stack application is realized using SAP Fiori Elements, which is generating the User Interface based on standard floorpans and UI annotations as part of the service definitions using CDS. The Fiori frontend application lives within the HTML5 Repository of the SAP BTP. While this would already be sufficient to expose our extension to SAP Build Work Zone and SAP Mobile Start as an application tile and run the frontend within the shell of SAP Build Work Zone using its managed Approuter, we want to have more control over the visual representation. </P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Frontend deployed to the HTML5 Repository; backend application deployed to Cloud Foundry" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/342739i89B76E31488996CD/image-size/large?v=v2&px=999" role="button" title="deployed_applications.png" alt="Frontend deployed to the HTML5 Repository; backend application deployed to Cloud Foundry" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Frontend deployed to the HTML5 Repository; backend application deployed to Cloud Foundry</span></span></P><P>We can achieve this greater control by leveraging SAP Build Work Zone's content definition format – the Common Data Model (CDM). The definition of which is documented <A href="https://help.sap.com/docs/build-work-zone-standard-edition/sap-build-work-zone-standard-edition/creating-cdm-json-file-for-multi-tenancy-html5-app" target="_blank" rel="noopener noreferrer"><SPAN>here</SPAN></A> and represents a standardized data structure for defining business apps, their visual representation, the required roles, and the logical hierarchical structure in which business apps shall be organized using a concept called "Spaces & Pages". Such CDM structure can be supplied to the HTML5 Repository during deployment of our extension. In the workshop's repository, this definition resides in the <A href="https://github.com/SAP-samples/teched2025-CA260/blob/main/workzone/cdm.json" target="_blank" rel="noopener nofollow noreferrer"><SPAN>/workzone/cdm.json</SPAN></A> file.</P><H2 id="toc-hId-1372489451">Integrating the app into SAP Build Work Zone & SAP Mobile Start</H2><P>For integrating our extension into SAP Build Work Zone, which makes it automatically available to SAP Mobile Start, we leverage a relatively new feature of the SAP Build Work Zone Channel Manager – defining a HTML5 Business Solution. While we could also create a regular Content Provider, using the new Content Channel type "HTML5 Business Solution" further simplifies the process as we are not required to manage any design-time destination. The HTML5 repository is merging all deployed HTML5 applications and their CDM definition from a common "Business Solution", making it available for selection as a joint Content Channel by the "Business Solution" dropdown.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Creation of a HTML5 Business Solution Content Channel in SAP Build Work Zone" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/342743i634E50FB1F827F2F/image-size/large?v=v2&px=999" role="button" title="html5_business_solution.png" alt="Creation of a HTML5 Business Solution Content Channel in SAP Build Work Zone" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Creation of a HTML5 Business Solution Content Channel in SAP Build Work Zone</span></span></P><P>This value used for merging multiple HTML5 application belonging to the same business solution is done via a dedicated property ("service" under "sap.cloud") in the web applications <A href="https://github.com/SAP-samples/teched2025-CA260/blob/5f3af51ea6dbd082d32feea936347d3751aaa6f0/app/incidents/webapp/manifest.json#L151" target="_self" rel="nofollow noopener noreferrer">manifest.json</A>. If you want to read more about HTML5 Content Consumption capabilities of SAP Build Work Zone, we can recommend <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/simplifying-html5-content-consumption-across-subaccounts/ba-p/13758568" target="_self">this excellent blog post</A> from our colleague Rupam who is part of the SAP Build Work Zone team.</P><pre class="lia-code-sample language-json"><code>{
"_version": "1.65.0",
"sap.app": {
"id": "com.sap.ca260.###",
"type": "application",
[...]
},
[...]
"sap.cloud": {
"public": true,
"service": "ca260###"
}
}</code></pre><P><SPAN class=""> </SPAN>After adding the Content Channel's role to our Site and making sure we have the role assigned to our desired users, we can see it exposed in SAP Build Work Zone using the browser as well as in SAP Mobile Start – Nice! As defined in the <A href="https://github.com/SAP-samples/teched2025-CA260/blob/main/workzone/cdm.json" target="_blank" rel="noopener nofollow noreferrer"><SPAN>/workzone/cdm.json</SPAN></A> file, the application tile of our built extension is placed onto a Page with the title "<EM>Apps from Participant CA260-000</EM>", which itself is available under a Space named "<EM>Extensions from CA260</EM>".</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Deployed application visible in SAP Build Work Zone and SAP Mobile Start" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/343000iBC49C8146D73D71F/image-size/large?v=v2&px=999" role="button" title="deployment_result.png" alt="Deployed application visible in SAP Build Work Zone and SAP Mobile Start" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Deployed application visible in SAP Build Work Zone and SAP Mobile Start</span></span></P><H2 id="toc-hId-1175975946">Extending the app to make use of Widgets on your mobile device</H2><P>The steps to extend now our application in order for it to be configurable as a Widget, for example on the iOS Homescreen or the Lockscreen, are actually much easier than you might think. SAP Mobile Start offers multiple types of Widgets. The one we will be using here is the <EM>"Business Info Widget"</EM>, which can be configured to display any KPI that is available to SAP Mobile Start. In technical terms this means that we need to enhance the application tile of our extension to become a <EM>"Dynamic App Launcher"</EM>. In the simplest case, these are tiles showing a number coming from a connected data service. In more complex scenarios, these can also display criticalities, trend and more information around the selected KPI.</P><P>The process to transform our basic tile into a Dynamic App Launcher is fairly simple. Within our web application's <A href="https://github.com/SAP-samples/teched2025-CA260/blob/main/app/incidents/webapp/manifest.json" target="_blank" rel="noopener nofollow noreferrer"><SPAN>manifest.json</SPAN></A> file, we can add the required definition to make it such a dynamic tile and connect it to our OData service for incidents available in our CAP application. For our example, let's point to the OData count of incidents and filter for incidents that are not in status closed using the status_code property. The needed configuration resides within the inbound definition under the node "indicatorDataSource". In order to make this change visible on our environment, the updated version needs to be deployed and the Content Channel needs to be synced.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Transforming the application tile into a DynamicAppLauncher" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/343010i27DEB795C6EA3A1D/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="indicator_data_source.png" alt="Transforming the application tile into a DynamicAppLauncher" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Transforming the application tile into a DynamicAppLauncher</span></span></P><P> As a result, our application now appears a KPI tile on our Site and in SAP Mobile Start and we can monitor the automatically updated value both inside of SAP Mobile Start – for example when accessing the Page or by adding the app into my favorites on the <EM>Start</EM> tab of SAP Mobile Start. This fact allows us to configure the same Dynamic App Launcher tile as a Widget, for instance to our iPhone's Homescreen.</P><P><EM>Pro tip: Why not mirroring your iOS Widget of open incidents to your Mac or configure the same on your Apple Watch as a watch face complication?</EM></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="The Dynamic App Launcher tile appearing in SAP Build Work Zone and SAP Mobile Start" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/343011i9A6A7383FB96B242/image-size/large?v=v2&px=999" role="button" title="dynamic_app_launcher_tile.png" alt="The Dynamic App Launcher tile appearing in SAP Build Work Zone and SAP Mobile Start" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">The Dynamic App Launcher tile appearing in SAP Build Work Zone and SAP Mobile Start</span></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="ex3_03_02-2.gif" style="width: 185px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/343012i11E0DEFB1C8CA766/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="ex3_03_02-2.gif" alt="ex3_03_02-2.gif" /></span></P><P> </P><H2 id="toc-hId-979462441">Implementing our own (push) notifications</H2><P>Let's now go one step further and implement our own notifications from our CAP application. The beauty of the integration via SAP Build Work Zone and SAP's notification framework leveraging the SAP Alert Notification Service on BTP is, that such notifications will automatically appear on our SAP Build Work Zone Site in the browser, in SAP Mobile Start under the notification bell as well as be delivered as a mobile native push notification to the mobile devices on which you use SAP Mobile Start. That's a game changer for informing your users about a time critical situation directly from your pro-code extensions.</P><P>For CAP based extensions, we can make use of the <SPAN><A href="https://github.com/cap-js/notifications" target="_blank" rel="noopener nofollow noreferrer">@cap-js/notifications</A> plugin. The plugin communicates with the necessary APIs using a Destination that needs to be created in the SAP BTP Subaccount in which the application will run. By default it expects the name for the Destination to be <FONT face="terminal,monaco">SAP_Notifications</FONT> if not configured differently. The values for this Destination can be retrieved from the Settings of SAP Build Work Zone (Administrator role required).</SPAN></P><P>For sending actual notification from our CAP service, we need to define our desired <EM>NotificationTypes</EM> first in the <A href="https://github.com/SAP-samples/teched2025-CA260/blob/main/srv/notification-types.json" target="_blank" rel="noopener nofollow noreferrer">/srv/notification-types.json</A>. These defined types represent the blueprint for the actual notifications to be sent. They include the texts for the actual notifications in all the languages that shall be supported with dedicated placeholders which will be filled when the notification is actually triggered in the service logic. Below you can see an example for such a type:</P><pre class="lia-code-sample language-json"><code>{
"NotificationTypeKey": "IncidentCreated",
"NotificationTypeVersion": "1",
"Templates": [
{
"Language": "en",
"TemplatePublic": "New Incident created",
"TemplateSensitive": "New incident created by {{customer}}",
"TemplateGrouped": "Incident Status Update",
"TemplateLanguage": "mustache",
"Subtitle": "{{description}}"
},
{
"Language": "de",
"TemplatePublic": "Neuer Vorfall eingegangen",
"TemplateSensitive": "Neuer Vorfall von {{customer}}",
"TemplateGrouped": "Vorfall Status Änderungen",
"TemplateLanguage": "mustache",
"Subtitle": "{{description}}"
}
]
}</code></pre><P>Sending actual notification is fairly easy and can be done with very few lines of code. We first need to initialize the notifications plugin with <FONT face="terminal,monaco"><SPAN class="">cds</SPAN><SPAN class="">.</SPAN><SPAN class="">connect</SPAN><SPAN class="">.</SPAN><SPAN class="">to</SPAN><SPAN class="">(</SPAN><SPAN class="">'notifications'</SPAN></FONT><SPAN class=""><FONT face="terminal,monaco">)</FONT>, which creates a handle <SPAN>with which we can send notifications later. Sending notifications can be done with the function <FONT face="terminal,monaco">alert.notify</FONT>. Here, we reference the desired NotificationType (defined before), recipients and further properties and data related to this specific notification we intend to send.</SPAN></SPAN></P><P><SPAN class=""><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Coding used to send notification when incidents are created and closed." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/343045i813539843CD8ABE2/image-size/large?v=v2&px=999" role="button" title="ex4_02_01.png" alt="Coding used to send notification when incidents are created and closed." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Coding used to send notification when incidents are created and closed.</span></span></SPAN></SPAN></P><P> <span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="notification.gif" style="width: 185px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/343047i130B5A8EC60DD1FE/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="notification.gif" alt="notification.gif" /></span></P><P> </P><P>As a result, we receive a push notification at the event of incident creation and closure. Already in the push notification displayed by the mobile operating system, we see the defined texts from our NotificationType with the specific values filled for the specific incident object. When tapping on this push notification, SAP Mobile Start shows the full notification in the dedicated area of the mobile app. Using "Open in Browser" brings us to this specific incident in our SAP Fiori Elements application where we could take further action. This is achieved by supplying the <EM>Intent Based Navigation</EM> (IBN) information of our app – consisting of the <EM>Semantic Object and Action</EM> defined in our <A href="https://github.com/SAP-samples/teched2025-CA260/blob/5f3af51ea6dbd082d32feea936347d3751aaa6f0/app/incidents/webapp/manifest.json#L30" target="_blank" rel="noopener nofollow noreferrer"><SPAN>web application's manifest</SPAN></A>. This allows SAP Mobile Start and SAP Build Work Zone to open the right application as a navigation target from the exposed content – in our case, the SAP Fiori Elements application running the HTML5 Repository and exposed to SAP Build Work Zone using the HTML5 Business Solution Content Channel.<SPAN class=""> </SPAN>The deep link to the specific incident object is achieved by supplying a special navigation target parameter that SAP Fiori Elements supports for opening the desired "Inner App Route" – in our example, the Object Page of a specific incident using its ID. Feel free to check out how this was done for this specific example in the <A href="https://github.com/SAP-samples/teched2025-CA260/blob/5f3af51ea6dbd082d32feea936347d3751aaa6f0/srv/services.js#L98C1-L107C7" target="_blank" rel="noopener nofollow noreferrer"><SPAN>repositories' code</SPAN></A>.</P><P><SPAN class=""><SPAN> </SPAN></SPAN></P><P><SPAN class=""><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="The notification details visible in SAP Mobile Start and the deep-link navigation to the SAP Fiori Elements application" style="width: 399px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/343056i738A8CCC9235AA6A/image-size/medium?v=v2&px=400" role="button" title="notification_deep_link.png" alt="The notification details visible in SAP Mobile Start and the deep-link navigation to the SAP Fiori Elements application" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">The notification details visible in SAP Mobile Start and the deep-link navigation to the SAP Fiori Elements application</span></span></SPAN></SPAN></P><P> </P><H2 id="toc-hId-782948936">Outlook</H2><P>We hope we were able to show, how easy it is to create pro-code extensions, deploy them to the SAP BTP, integrate them into SAP Build Work Zone & SAP Mobile Start. The demonstrated examples of mobile native widgets and push notifications hopefully showed the ease of leveraging the mobile native device capabilities. Beyond the content of the CA260 Hands-On Workshop of SAP TechEd 2025, we would like to give you an outlook to what else would be possible with this basis.</P><P>The beauty of using the HTML5 Business Solution Content Channel Exposure in SAP Build Work Zone is that we have the flexibility and feature set of the Common Data Model (CDM) available. We could further extend the <A href="https://github.com/SAP-samples/teched2025-CA260/blob/main/workzone/cdm.json" target="_blank" rel="noopener nofollow noreferrer"><SPAN>/workzone/cdm.json</SPAN></A> file to make use of even richer visualization capabilities – for example by defining a declarative <A href="https://ui5.sap.com/test-resources/sap/ui/integration/demokit/cardExplorer/webapp/index.html" target="_blank" rel="noopener noreferrer">UI Integration Card</A>. Such cards allow to achieve UI richt micro-experiences right on the Page's structure, for example displaying a short list of incidents with the most important information to get a brief overview as a processor. In the browser when consuming the page via SAP Build Work Zone, the card is rendered as a regular SAP UI5 UI Integration Card. In SAP Mobile Start, declarative cards are supported as mobile native UI elements. With a single declarative definition of such a card using the UI Integration Card framework, we can achieve native cross-platform support with a high quality user experience directly within SAP Mobile Start.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Having a UI Integration Card added to the Page in SAP Build Work Zone and SAP Mobile Start" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/343097i28691EA750258654/image-size/large?v=v2&px=999" role="button" title="ui_integration_card.png" alt="Having a UI Integration Card added to the Page in SAP Build Work Zone and SAP Mobile Start" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Having a UI Integration Card added to the Page in SAP Build Work Zone and SAP Mobile Start</span></span></P><P><SPAN>For further information on SAP Mobile Start related features and topics, please check our <A href="https://help.sap.com/docs/mobile-start" target="_blank" rel="noopener noreferrer">SAP Mobile Start documentation</A>. Visit <A href="https://pages.community.sap.com/topics/mobile-experience" target="_blank" rel="noopener noreferrer">SAP Mobile Experience Community Page</A> and click “follow” to get the latest development and innovation of our solutions. We look forward to hearing about your experience with these hands-on exercises; please do share your thoughts and comments below.</SPAN></P>2025-11-27T15:04:08.058000+01:00https://community.sap.com/t5/learner-stories/from-mcqs-to-real-skills-my-experience-with-sap-s-new-certification-format/ba-p/14279475From MCQs to Real Skills: My Experience with SAP’s New Certification Format2025-11-28T10:13:00.521000+01:00KumarVishalhttps://community.sap.com/t5/user/viewprofilepage/user-id/493330<P><SPAN><FONT color="#333399"><STRONG>What Exactly has changed ?</STRONG></FONT></SPAN></P><P><SPAN>SAP is gradually moving selected certifications away from multiple-choice questions to a scenario-based, practical, hands-on evaluation model.</SPAN></P><P><SPAN>Instead of selecting the right choice in a MCQ pattern, you now :</SPAN></P><UL><LI><H6 id="toc-hId--2012915139"><SPAN>Configure or Build something</SPAN></H6></LI><LI><H6 id="toc-hId-2085538652"><SPAN>Work on real scenarios</SPAN></H6></LI><LI><H6 id="toc-hId-1889025147"><SPAN>Receive a defined input and produce an output that is automatically validated against the expected outcome</SPAN></H6></LI><LI><H6 id="toc-hId-1692511642"><SPAN>Submit the output </SPAN></H6></LI><LI><H6 id="toc-hId-1495998137"><SPAN>Get evaluated automatically through AI-driven checks</SPAN></H6></LI></UL><P> </P><P><FONT color="#000080"><STRONG><FONT color="#333399">Why I personally liked the format</FONT> </STRONG></FONT></P><P class="lia-indent-padding-left-60px" style="padding-left : 60px;"><SPAN><span class="lia-unicode-emoji" title=":heavy_check_mark:">✔️</span>It rewards real experience </SPAN></P><P class="lia-indent-padding-left-60px" style="padding-left : 60px;"><SPAN><span class="lia-unicode-emoji" title=":heavy_check_mark:">✔️</span>No more memorizing dumps </SPAN></P><P class="lia-indent-padding-left-60px" style="padding-left : 60px;"><SPAN><span class="lia-unicode-emoji" title=":heavy_check_mark:">✔️</span>Open-book = Realistic </SPAN></P><P class="lia-indent-padding-left-60px" style="padding-left : 60px;"><SPAN><span class="lia-unicode-emoji" title=":heavy_check_mark:">✔️</span>Dumps are meaningless now </SPAN></P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"> </P><P><FONT color="#333399"><STRONG>Who will benefit from this change ?</STRONG></FONT></P><UL><LI><H6 id="toc-hId-1299484632"><SPAN>Experienced professionals </SPAN></H6></LI><LI><H6 id="toc-hId-1102971127"><SPAN>New learners </SPAN></H6></LI><LI><H6 id="toc-hId-906457622"><SPAN>Employers </SPAN></H6></LI><LI><H6 id="toc-hId-709944117"><SPAN>SAP ecosystem </SPAN></H6></LI></UL><P> </P><P><FONT color="#333399"><STRONG>Which certifications supports this New Format ?</STRONG></FONT></P><P><SPAN>SAP has rolled out the practical, scenario-based exam to six certifications:</SPAN></P><P><SPAN><A href="https://learning.sap.com/helpcenter/certification-support/certification-practical-exam" target="_self" rel="noopener noreferrer">Certification Portfolio with Practical Exam</A> </SPAN></P><P> </P><P><FONT color="#333399"><STRONG>Tips If You're Preparing for This New Exam</STRONG></FONT></P><UL class="lia-list-style-type-disc"><LI><H6 id="toc-hId-513430612"><SPAN>Practice hands-on tasks </SPAN></H6></LI><LI><H6 id="toc-hId--1025771440"><SPAN>Build small end-to-end examples </SPAN></H6></LI><LI><H6 id="toc-hId--1222284945"><SPAN>Use SAP Help effectively </SPAN></H6></LI><LI><H6 id="toc-hId--1418798450"><SPAN>Focus on solving problems, not memorizing </SPAN></H6></LI></UL><H5 id="toc-hId--1321908948"> </H5><H4 id="toc-hId--1225019446"><SPAN>Conclusion</SPAN></H4><P><SPAN>This new certification format is a huge step forward. It is fair, practical, and aligned with modern SAP project work. Focus on practice, not memory.</SPAN></P>2025-11-28T10:13:00.521000+01:00https://community.sap.com/t5/human-capital-management-blog-posts-by-sap/bridging-data-quality-gaps-in-sap-successfactors-tih-with-csvvalidationapp/ba-p/14283170Bridging Data Quality Gaps in SAP SuccessFactors TIH with CSVValidationApp and Vibe Coding2025-12-03T16:06:10.964000+01:00DivyaTiwarihttps://community.sap.com/t5/user/viewprofilepage/user-id/17995<DIV>
<H3 id="toc-hId-1895545887"><STRONG>Introduction</STRONG></H3>
<P>Data quality challenges in SAP SuccessFactors Talent Intelligence Hub (TIH) often go unnoticed until they impact user experience. When thousands of attributes are imported without proper validation, issues like HTML tags, broken formatting, and unescaped characters can disrupt Growth Portfolios and compromise analytics/employee experience. This blog introduces <STRONG>CSVValidationApp</STRONG>, a solution designed to bridge this gap using <STRONG>functional expertise and modern development practices like Vibe Coding</STRONG>—and opens the door for community collaboration on similar innovations.</P>
<HR />
<H3 id="toc-hId-1699032382"><STRONG>Why This Matters</STRONG></H3>
<P> <SPAN>SAP Talent Intelligence Hub is a strategic enabler for skills-based workforce planning. It helps organizations create dynamic career paths, leverage AI-driven skill recommendations, and empower employees through Growth Portfolios. These capabilities unlock smarter talent decisions and a more agile workforce.</SPAN></P>
<DIV>
<P>To fully realize these benefits, <STRONG>data integrity during imports is critical</STRONG>. According to <A href="https://help.sap.com/docs/successfactors-platform/using-talent-intelligence-hub/importing-entities?locale=en-US&q=successfactors+attribute+import+talent+intelligence&version=LATEST" target="_self" rel="noopener noreferrer">SAP Help Portal,</A> importing entities like attributes, tags, and behaviors into TIH requires strict adherence to structure and format. Common issues include:</P>
<UL>
<LI>Incorrect headers or missing mandatory fields in CSV files</LI>
<LI>Improper encoding (non-UTF-8) causing character display errors</LI>
<LI>Unescaped quotes or HTML tags in descriptions, which can truncate or break content</LI>
<LI>Large file sizes impacting performance (recommended limit: 25,000 records per file)</LI>
<LI>Incorrect date formats for proficiencyAssignedDate when updating Growth Portfolio attributes</LI>
</UL>
<P>These challenges can lead to incomplete or inaccurate data in the <STRONG>Attributes Library</STRONG> and <STRONG>Growth Portfolio</STRONG>, affecting AI-driven recommendations and user experience. Adding a validation step before import ensures clean, consistent data—reducing manual troubleshooting and enabling HR teams to focus on strategic initiatives.</P>
</DIV>
<H3 id="toc-hId-1502518877"><STRONG>My Perspective and Approach</STRONG></H3>
<P>Having worked extensively across <STRONG>implementations, integrations, and functional solution design</STRONG> in SuccessFactors, I’ve seen how small data issues can create big challenges downstream. This experience shaped my approach: build a tool that doesn’t just validate data but actively improves it before it enters TIH.</P>
<P>I chose <STRONG>Vibe Coding</STRONG> as the development approach because it accelerates delivery through real-time collaboration, instant previews, and iterative design—all within SAP Business Application Studio. This allowed me to focus on business logic and user experience rather than boilerplate coding, ensuring the solution was delivered quickly without compromising quality.</P>
<HR />
<H3 id="toc-hId-1306005372"><STRONG>How CSVValidationApp Fits into the TIH Workflow</STRONG></H3>
<P>CSVValidationApp acts as a <STRONG>data quality gatekeeper</STRONG> in the integration process. In the following example workflow after data is exported from Integration Center, the file passes through CSVValidationApp for cleansing and validation. Once clean, the data is transformed and mapped to TIH-compatible attributes before being imported back into the system.</P>
<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="DivyaTiwari_0-1764771625951.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/348134iF204DFBBBA9998B1/image-size/medium?v=v2&px=400" role="button" title="DivyaTiwari_0-1764771625951.png" alt="DivyaTiwari_0-1764771625951.png" /></span>
<P>This workflow ensures that what enters TIH is not just valid but optimized for rendering and usability. The result? A clean, enriched skills library that supports AI-driven recommendations and future enhancements.</P>
<HR />
<H3 id="toc-hId-1109491867"><STRONG>What Makes CSVValidationApp Powerful</STRONG></H3>
<P>CSVValidationApp performs comprehensive checks tailored for SuccessFactors Integration Center requirements. It detects encoding issues, validates structure, identifies problematic characters, and removes HTML tags and entities. Beyond validation, it offers <STRONG>auto-correction</STRONG>, generating clean content with proper quoting and escaping. A preview feature and detailed statistics give administrators confidence before import.</P>
<P>By automating these steps, CSVValidationApp transforms a tedious, error-prone process into a seamless experience—empowering HR teams to focus on strategic tasks rather than data cleanup.</P>
<HR />
<H3 id="toc-hId-912978362"><STRONG>Looking Ahead: Unlocking the Full Potential of TIH</STRONG></H3>
<P>SAP Talent Intelligence Hub is continuously evolving to help organizations stay ahead in a skills-based economy. Upcoming innovations include <STRONG>AI-driven skill inference</STRONG>, <STRONG>integration with external taxonomies</STRONG>, <STRONG>expanded APIs</STRONG>, and <STRONG>advanced analytics for workforce agility</STRONG>. These capabilities will empower HR teams to make smarter decisions and deliver personalized employee experiences.</P>
<P>Clean, validated data is the foundation for these advancements. By ensuring data integrity from the start, organizations can confidently leverage AI recommendations, predictive insights, and future integrations without disruption.</P>
<P>CSVValidationApp supports this vision by acting as a proactive data quality gatekeeper. Future enhancements will include <STRONG>AI-powered attribute correction suggestions</STRONG>, <STRONG>direct SAP API integration for one-click imports</STRONG>, and <STRONG>support for additional modules like Learning and Recruiting</STRONG>—making the process even more seamless and intelligent.</P>
<HR />
<H3 id="toc-hId-716464857"><STRONG>Getting Started</STRONG></H3>
<P>CSVValidationApp is built as an SAP Fiori application using SAP Business Application Studio. To run it locally, simply clone the ***REMOVED BY MODERATION***, install dependencies, and start the app.<BR /><BR />Here is an example screen shot from the application. The Attribute text file I validate below had many data rows with competency description such as: <BR /><EM>"1000009","de_DE","BUSINESS & TRANSFORMATION..","<p>Sie planen Ihre Vorhaben, definieren herausfordernde Ziele und entscheiden mutig.</p><p>Herausforderungen im &bdquo;VUCA&ldquo;-Umfeld (Volatilit&auml;t &ndash; Unsicherheit &ndash; Komplexit&auml;t &ndash; Ambiguit&auml;t) begegnen Sie aktiv und entwickeln eine klare Vision f&uuml;r Ihren Verantwortungsbereich.</p><p><a href= xyzurl target=_blank>Kriterien und Verhaltensanker</a> anzeigen.</p>","COMPETENCY"</EM><BR /><BR /><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="result.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/348487iD76E0615EBEE0887/image-size/medium?v=v2&px=400" role="button" title="result.png" alt="result.png" /></span></P>
<P> <SPAN>This description gets corrected to:</SPAN></P>
<P><EM>"1000009","de_DE","BUSINESS & TRANSFORMATION..","Sie planen Ihre Vorhaben, definieren herausfordernde Ziele und entscheiden mutig. Bei der Umsetzung agieren Sie lösungsorientiert, bewerten Ergebnisse und Prozesse und nehmen notwendige Anpassungen vor. Herausforderungen im „VUCA\"-Umfeld (Volatilität - Unsicherheit - Komplexität - Ambiguität) begegnen Sie aktiv und entwickeln eine klare Vision für Ihren Verantwortungsbereich. ","COMPETENCY"</EM><BR /><BR /></P>
</DIV>
<DIV class="">
<DIV class="">
<DIV class="">
<DIV class="">
<DIV class="">
<DIV class="">
<DIV class=""><HR />
<H3 id="toc-hId-519951352"><STRONG>Final Thoughts & Community Ask</STRONG></H3>
</DIV>
</DIV>
</DIV>
<DIV class="">
<DIV class="">
<P>Data quality may seem like a technical detail, but in reality, it’s a strategic enabler. By combining functional expertise with modern development practices, CSVValidationApp delivers a solution that not only solves today’s challenges but positions organizations for tomorrow’s opportunities.</P>
<P>I’d love to hear from the SAP Community:</P>
<UL>
<LI>Have you built similar tools using <STRONG>Vibe Coding</STRONG> or other rapid development approaches?</LI>
<LI>What other gaps do you see in <STRONG>data validation for SuccessFactors integrations</STRONG>, and how can we bridge them together?</LI>
</UL>
<P>Share your thoughts, examples, and ideas in the comments. Let’s collaborate to make data quality a strength, not a challenge.</P>
</DIV>
</DIV>
</DIV>
</DIV>
</DIV>
</DIV>2025-12-03T16:06:10.964000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/prompt-driven-development-building-full-stack-sap-cap-apps-from-user/ba-p/14288653Prompt-Driven Development: Building Full-Stack SAP CAP Apps from User Stories2025-12-11T15:10:42.876000+01:00AnuradhaDhinganhttps://community.sap.com/t5/user/viewprofilepage/user-id/141341<H1 id="toc-hId-861652541" id="toc-hId-1637534150"><FONT color="#3366FF"><STRONG><U>Introduction</U></STRONG></FONT></H1><UL><LI><SPAN>What if you could translate a business requirement into a functional, full-stack application with a single prompt?</SPAN></LI><LI><SPAN>How much faster could you deliver value if the foundational code and project scaffolding were generated for you in seconds?</SPAN></LI></UL><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><SPAN>This is the new reality powered by SAP Build Code and its integrated AI copilot, Joule. </SPAN></P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><SPAN>As a turn-key environment on the SAP Business Technology Platform, it unifies the entire development lifecycle, from coding to deployment.</SPAN></P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;">T<SPAN>his post demonstrates how to <STRONG>build a full-stack SAP CAP application directly from a user story</STRONG>, showcasing how </SPAN></P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><SPAN>generative AI is fundamentally reshaping the developer experience.</SPAN></P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"> </P><H1 id="toc-hId-665139036" id="toc-hId-1441020645"><FONT color="#3366FF"><STRONG><U>Business Requirement</U></STRONG></FONT></H1><P><STRONG>Build an SAP CAP application based on the requirements in the user story below:</STRONG></P><P><FONT size="4"><U><STRONG>User Story</STRONG></U></FONT></P><P><FONT size="2" color="#808080"><EM>As a contract administrator, I want to create and manage contracts and ‘parties involved’ information in the system, </EM></FONT></P><P><FONT size="2" color="#808080"><EM>so that I can effectively track and handle legal agreements and ‘parties involved’ interactions.</EM></FONT></P><P><FONT size="2" color="#808080"><EM>Contracts can cover a vast range of agreements, such as sales contracts, service agreements and employment contracts.</EM></FONT></P><P><FONT size="2" color="#808080"><EM>Party involved: A ‘party involved’ is an individual, organization, or entity that purchases goods, products, or services from another party, </EM></FONT></P><P><FONT size="2" color="#808080"><EM>typically a business or seller.</EM></FONT></P><P><FONT size="2" color="#808080"><EM>Common attributes of a contract might include:</EM></FONT></P><OL><LI><FONT size="2" color="#808080"><EM>Contract ID: A unique identifier for the contract.</EM></FONT></LI><LI><FONT size="2" color="#808080"><EM>Party involved Identification Number: A unique identification number for the party </EM><EM>involved.</EM></FONT></LI><LI><FONT size="2" color="#808080"><EM>Contract Type: The type of contract (e.g. sales, service, employment).</EM></FONT></LI><LI><FONT size="2" color="#808080"><EM>Start Date: The date on which the contract becomes valid.</EM></FONT></LI><LI><FONT size="2" color="#808080"><EM>End Date: The date on which the contract expires (if applicable).</EM></FONT></LI><LI><FONT size="2" color="#808080"><EM>Status: The current status of the contract (draft, active, expired, terminated, etc.)</EM></FONT></LI></OL><P><FONT size="2" color="#808080"><EM>A typical ‘party involved’ has the following attributes:</EM></FONT></P><OL><LI><FONT size="2" color="#808080"><EM>Party involved Identification Number</EM></FONT></LI><LI><FONT size="2" color="#808080"><EM>Party involved Name: It refers to the given name of a person or entity, or a label by which they are addressed or identified.</EM></FONT></LI><LI><FONT size="2" color="#808080"><EM>Party involved Address: It refers to a physical location where an individual, business, or entity is situated or can be reached.</EM></FONT></LI><LI><FONT size="2" color="#808080"><EM>Party involved Contact Information</EM></FONT></LI></OL><P><FONT size="2"><STRONG><FONT color="#808080"><EM>Acceptance Criteria</EM></FONT></STRONG></FONT></P><P><FONT size="2"><STRONG><FONT color="#808080"><EM>Scenario 1: List All Contracts</EM></FONT></STRONG></FONT></P><P><FONT size="2"><FONT color="#808080"><EM>Given I am logged into the contract management system, when I launch the SAP Fiori application to maintain contracts, </EM></FONT></FONT></P><P><FONT size="2"><FONT color="#808080"><EM>then I should be able to view the list of all the contracts in a list without pressing the GO button. </EM></FONT></FONT></P><P><FONT size="2"><FONT color="#808080"><EM>The list of all the contracts should have : Contract ID, Party involved Identification Number, Contract Type and Start Date. </EM></FONT></FONT></P><P><FONT size="2"><FONT color="#808080"><EM>The list of filters should include Contract Type, Contract Status and Start Date.</EM></FONT></FONT></P><P><FONT size="2"><STRONG><FONT color="#808080"><EM>Scenario 2: View Contract Details </EM></FONT></STRONG></FONT></P><P><FONT size="2" color="#808080"><EM>Given I am logged into the contract management system, when I select a specific contract from the list of SAP Fiori application, </EM></FONT></P><P><FONT size="2" color="#808080"><EM>then I should be able to view the contract details and parties involved information.</EM></FONT></P><P> </P><H1 id="toc-hId-468625531" id="toc-hId-1244507140"><FONT color="#3366FF"><STRONG><U>Joule's Generative AI-based SAP CAP App Development</U></STRONG></FONT></H1><H2 id="toc-hId-401194745" id="toc-hId-1177076354"><U><STRONG>Prerequisites</STRONG></U></H2><UL><LI><FONT face="arial,helvetica,sans-serif" size="4"><A href="https://developers.sap.com/tutorials/hcp-create-trial-account.html" target="_blank" rel="noopener noreferrer">Get a Free Account on SAP BTP Trial</A></FONT></LI><LI><FONT face="arial,helvetica,sans-serif" size="4"><A href="https://developers.sap.com/tutorials/build-code-setup.html" target="_blank" rel="noopener noreferrer">Setup SAP Build Code</A></FONT></LI></UL><H2 id="toc-hId-204681240" id="toc-hId-980562849"><STRONG>1. Create a New Project using SAP Build Lobby</STRONG></H2><P><EM><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Create a Project" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/351211i87BDA70DDC188CB9/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Screenshot 2025-12-11 at 5.40.40 PM.png" alt="Create a Project" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Create a Project</span></span></EM></P><P> </P><P><EM><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Click the Application Tile" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/351214i9BC9692EB86E74F0/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Screenshot 2025-12-11 at 5.46.37 PM.png" alt="Click the Application Tile" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Click the Application Tile</span></span></EM></P><P><EM><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Full-Stack" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/351215iC7280C15972A881D/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Screenshot 2025-12-11 at 5.49.33 PM.png" alt="Full-Stack" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Full-Stack</span></span></EM></P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Full-Stack Node.JS" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/351216i6BEC1E5D0431D7EA/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Screenshot 2025-12-11 at 5.51.11 PM.png" alt="Full-Stack Node.JS" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Full-Stack Node.JS</span></span></P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Contract Management" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/351218i4C57880D4CCA6CFB/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Screenshot 2025-12-11 at 5.52.32 PM.png" alt="Contract Management" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Contract Management</span></span></P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Contract Management" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/351219i5247708EE1A75E54/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Screenshot 2025-12-11 at 5.54.32 PM.png" alt="Contract Management" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Contract Management</span></span></P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Project Created" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/351220i6C6FF5FDAEC7B56D/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Screenshot 2025-12-11 at 5.56.27 PM.png" alt="Project Created" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Project Created</span></span></P><H2 id="toc-hId-784049344"><STRONG>2. Build a Full-Stack CAP Application via Prompt</STRONG></H2><P>Click the created project to open it in SAP Business Application Studio</P><P>Open Joule From the Activity Bar and select the ’/cap-gen-app` slash command</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Generate a CAP Application" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/351229iD088DFAA1B606C6E/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Screenshot 2025-12-11 at 6.07.06 PM.png" alt="Generate a CAP Application" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Generate a CAP Application</span></span></P><P><SPAN>Prompt the user story description(refer to Business Requirement section above) to Joule and click send.</SPAN></P><P><SPAN>Joule tackles complex tasks by breaking them into steps, each with a suggested prompt.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Diffrerent Steps" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/351234iD1F58B85E80F1954/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Screenshot 2025-12-11 at 6.11.46 PM.png" alt="Diffrerent Steps" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Diffrerent Steps</span></span></SPAN></P><P><SPAN>To simplify the process and provide full context, replace the content of each step with the complete user story prompt. </SPAN></P><P><SPAN>Then, save and run to generate each step's artifacts.</SPAN></P><P><SPAN>Accept the Code.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Accept the Code" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/351238i63CBEA016D695164/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Screenshot 2025-12-11 at 6.22.03 PM.png" alt="Accept the Code" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Accept the Code</span></span></SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Generated Artifacts" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/351239iD7DD8DA6C388231A/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Screenshot 2025-12-11 at 6.24.56 PM.png" alt="Generated Artifacts" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Generated Artifacts</span></span></SPAN></P><H2 id="toc-hId-204681240" id="toc-hId-587535839"><STRONG>3. Add UI to the Application</STRONG></H2><P>Create a new Fiori elements Application.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Fiori Elements Application" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/351240iC52EFDE00152E01D/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Screenshot 2025-12-11 at 6.28.33 PM.png" alt="Fiori Elements Application" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Fiori Elements Application</span></span></P><P> </P><H2 id="toc-hId-204681240" id="toc-hId-391022334"><STRONG>3. Preview the Application</STRONG></H2><P>Click run to preview the Application.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Run the Application" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/351243i7E6728275E11573E/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Screenshot 2025-12-11 at 6.30.29 PM.png" alt="Run the Application" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Run the Application</span></span></P><P><SPAN>The application’s preview is displayed.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Application Preview" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/351245iE0FF0E118A2F4ACE/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Screenshot 2025-12-11 at 6.36.21 PM.png" alt="Application Preview" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Application Preview</span></span></SPAN></P><P><SPAN>Launch the contract management app.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Contract Management" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/351252i364C1B389E3CE0BB/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-12-11 at 6.47.35 PM.png" alt="Contract Management" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Contract Management</span></span></SPAN></P><P><SPAN>Select a contract from the list to view its details.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Select Contract" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/351279iACD86D3B3AF22307/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-12-11 at 6.55.24 PM.png" alt="Select Contract" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Select Contract</span></span></SPAN></P><P> </P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Contract details" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/351281i3FFEE12C76D5E0D5/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-12-11 at 6.55.47 PM.png" alt="Contract details" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Contract details</span></span></SPAN></P><H1 id="toc-hId--2102363971" id="toc-hId-65426110"><FONT color="#3366FF"><STRONG><U>Conclusion</U></STRONG></FONT></H1><P>The journey from user story to a functional, full-stack application—once a multi-day endeavor—is now accomplished in minutes.</P><P>With SAP Build Code and its AI copilot, Joule, this dramatic acceleration signals a fundamental paradigm shift.</P><P>The developer's role is being elevated from the meticulous craft of writing code to the strategic art of guiding its creation.</P><P>Joule operates as the quintessential collaborator, executing the foundational groundwork to liberate developers to focus</P><P>on high-value business logic and innovation.</P><P>SAP Build Code is therefore more than a tool; it's the dawn of an era where the speed of technology finally</P><P>matches the ambition of business.</P><P> </P><H1 id="toc-hId-1967760006" id="toc-hId--131087395"><FONT color="#3366FF"><STRONG><U>Further Information</U></STRONG></FONT></H1><P><FONT face="arial,helvetica,sans-serif" size="4"><A title="SAP Build Code" href="https://pages.community.sap.com/topics/build-code" target="_blank" rel="noopener noreferrer">SAP Build Code</A></FONT></P><P><FONT face="arial,helvetica,sans-serif" size="4">#SAPBuildCode #Joule #SAPBTP</FONT></P><P> </P><P><FONT face="arial,helvetica,sans-serif" size="4">______________________________________________________________________________________________</FONT></P><P> </P><P> </P><P><FONT face="arial,helvetica,sans-serif" size="4"><SPAN>Best Regards,</SPAN><BR /><SPAN>Anuradha Dhingan</SPAN></FONT></P><P><SPAN> </SPAN></P>2025-12-11T15:10:42.876000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/sap-fiori-tools-2601-update-mobile-device-preview-building-blocks-and-ai/ba-p/14292653SAP Fiori tools 2601 update – Mobile Device Preview, Building Blocks, and AI-Driven Productivity2025-12-17T17:29:22.331000+01:00Christoph_Gollmickhttps://community.sap.com/t5/user/viewprofilepage/user-id/14530<P>With the latest SAP Fiori tools update 2601, we continue our focus on improving developer productivity, openness, and real-world usability. This release brings meaningful enhancements across previewing applications, managing system connections, building SAP Fiori elements–based UIs, and accelerating development with AI-powered tooling. At the same time, we’ve continued to refine the fundamentals in security, modelling, and extensibility.</P><P><STRONG><SPAN>Preview SAP Fiori Apps on Real Mobile Devices</SPAN></STRONG></P><P><SPAN>When developing SAP Fiori applications, simulating a mobile experience in a desktop browser often isn’t enough to fully validate real-world behavior. Touch interactions, performance characteristics, and device-specific rendering can differ noticeably on physical phones and tablets.</SPAN></P><P><SPAN>To address this, SAP Fiori tools now supports previewing applications directly on real mobile devices when using <A href="https://www.npmjs.com/package/@sap/ux-ui5-tooling" target="_blank" rel="noopener nofollow noreferrer"><STRONG>@sap/ux-ui5-tooling</STRONG></A><STRONG> version 1.19.1 or higher</STRONG>. By creating a new run configuration and enabling <STRONG>Remote Access</STRONG>, developers can expose the local preview. When the run configuration is started, the terminal provides connection details, including a URL and a QR code, which can be opened directly on a phone or tablet to access the running app.</SPAN></P><P>This makes it significantly easier to validate layouts, navigation, and interactions exactly as end users will experience them without leaving the development environment.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Showcase for previewing a SAP Fiori elements app on iPhone" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/353265i4031B8D916871BF9/image-size/large?v=v2&px=999" role="button" title="mobile_preview_combined.png" alt="Showcase for previewing a SAP Fiori elements app on iPhone" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Showcase for previewing a SAP Fiori elements app on iPhone</span></span></P><P><STRONG>A New Connection Manager for SAP Systems in VS Code</STRONG></P><P><SPAN>Managing connections to remote SAP systems is a foundational task when working with SAP Fiori tools. With this release, we introduce the <A href="https://marketplace.visualstudio.com/items?itemName=SAPOSS.sap-ux-sap-systems-ext" target="_blank" rel="noopener nofollow noreferrer"><STRONG>Connection Manager</STRONG></A><STRONG> for SAP Systems</STRONG> as a dedicated Visual Studio Code extension. This new extension succeeds the previously integrated saved systems panel from the Application Modeler and provides a focused, extensible solution for handling system connections in Visual Studio Code</SPAN><SPAN>.</SPAN></P><P><SPAN>The Connection Manager allows developers to create, store, test, and edit connection information that can be reused by the SAP Fiori generator as well as by preview features in SAP Fiori tools. Storing passwords is optional, and if stored, they are protected by the security policies of your operating system's credential manager.</SPAN></P><P><SPAN>By making this capability standalone and open source, it is now accessible to other extensions such as the <A href="https://marketplace.visualstudio.com/items?itemName=SAPSE.service-catalog" target="_blank" rel="noopener nofollow noreferrer">Service Catalog</A> extension, and open for community contributions.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Connection Manager" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/353266iA25DF67F5931F093/image-size/large?v=v2&px=999" role="button" title="connection_manager.png" alt="Connection Manager" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Connection Manager</span></span></P><P><STRONG>Expanded Support for SAP Fiori Elements Building Blocks</STRONG></P><P><SPAN>SAP Fiori tools continues to enhance the support for the <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">building blocks</A> which shape the framework of SAP Fiori elements for OData V4 and its flexibility you can use. It makes it easier to create and adapt applications using a structured, metadata-driven approach while keeping flexibility in design. In this update, the Page Editor gains additional capabilities that improve developer convenience when working with custom pages and sections.</SPAN></P><P><SPAN>Developers can now add more building block types to their apps with the Page Editor, including rich text editors within custom sections, custom columns for table building blocks, and the page building block itself. Managing custom pages is also more intuitive, as building blocks can now be deleted directly from the editor. To support experimentation and iteration, undo and redo actions are now available when working on custom pages.</SPAN></P><P><SPAN>Together, these enhancements reduce friction when adapting applications and allow developers to work more confidently and efficiently with SAP Fiori elements–based UIs.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Rich Text Editor building block support in Page Editor" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/353267i0B58E28F74D72B2D/image-size/large?v=v2&px=999" role="button" title="rich_text.png" alt="Rich Text Editor building block support in Page Editor" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Rich Text Editor building block support in Page Editor</span></span></P><P><STRONG>Enhancements Across the AI-Toolchain</STRONG></P><P><SPAN>AI capabilities continue to evolve across SAP Fiori tools, with a strong focus on usability and enabling deeper end-to-end changes from within the tooling.</SPAN></P><P><SPAN>The <A href="https://help.sap.com/docs/SAP_FIORI_tools/17d50220bcd848aa854c9c182d65b699/6845fedbb38c4da7a54a2c76081f3abb.html" target="_blank" rel="noopener noreferrer"><STRONG>Project Accelerator</STRONG></A> can now be launched directly from the SAP Fiori generator, streamlining the initial project creation flow. The previously required staging step has been removed, allowing new projects to be created directly in the selected workspace folder. For projects created using the Project Accelerator, the Application Modeler now offers advanced editing capabilities, such as creating new fields and properties end-to-end, updating the data model, exposing the service, and consuming the changes in the UI in one coherent flow.</SPAN></P><P><SPAN>AI support has also been extended to mock data generation. Developers can generate realistic mock data using AI directly in the Application Modeler, and this capability is available for all applications whenever the Project Accelerator is enabled.</SPAN></P><P><SPAN>In parallel, the <A href="https://www.npmjs.com/package/@sap-ux/fiori-mcp-server" target="_blank" rel="noopener nofollow noreferrer"><STRONG>MCP server for SAP Fiori</STRONG></A> continues to expand. The server now exposes <A href="https://www.npmjs.com/package/@sap-ux/create" target="_blank" rel="noopener nofollow noreferrer">@sap-ux/create</A> commands as CLI functionality, enabling reliable execution in MCP-supported workflows. App generation has been extended to support CAP Java projects, and a new “search_docs” tool allows the LLM (Large Language Model) to query SAP Fiori elements documentation, annotations, SAP Fiori tools documentation, and SAP Fiori Development Portal resources to quickly find relevant guidance and code snippets.</SPAN></P><P><STRONG><SPAN>Continuous Improvements and Refinements</SPAN></STRONG></P><P><SPAN>Beyond the headline features, this release includes a range of continuous improvements that strengthen the overall development experience. Newly created CAP applications now use <STRONG>NPM workspaces by default</STRONG>, establishing best practices out of the box and enabling the use of <A href="https://www.npmjs.com/package/@sap/ux-ui5-tooling" target="_blank" rel="noopener nofollow noreferrer">@sap/ux-ui5-tooling</A> middlewares when previewing CAP-based applications.</SPAN></P><P><SPAN>The Application Modeler has been enhanced with additional SAP Fiori elements for OData V4 features, including support for hidden draft mode, improved configuration options for table create dialogs, and create support for custom fields in form sections. These additions give developers more control over application behavior without leaving the modeling environment.</SPAN></P><P><SPAN>Security and user management have also been strengthened. The ABAP Cloud connection type in the Connection Manager has been consolidated around <STRONG>re-entrance ticket authentication</STRONG>, moving away from service key–based authentication. This eliminates long-lived shared credentials and ties system access directly to the signed-in user, improving both security and maintainability.</SPAN></P><P><STRONG><SPAN>Looking Ahead</SPAN></STRONG></P><P><SPAN>We are already working on the next set of enhancements for SAP Fiori tools. Planned improvements include a rework and enhancement of OPA5 test generation, with added support for value help services and mock data generation. Project validation will be extended with new domain-specific ESLint rule sets, visualized directly in the Application Modeler, alongside support for ESLint 9.</SPAN></P><P><SPAN>Support for additional SAP Fiori elements building blocks, such as form and field, is also on the roadmap. On the AI side, we continue to improve the robustness and usefulness of responses from the MCP server, while the Project Accelerator will be extended to support RAP service creation.</SPAN></P><P>As always, we look forward to your feedback and contributions as we continue to evolve SAP Fiori tools together with the community.</P>2025-12-17T17:29:22.331000+01:00https://community.sap.com/t5/technology-blog-posts-by-members/tribute-to-thomas-volmering/ba-p/14296083Tribute to Thomas Volmering2025-12-23T11:06:24.578000+01:00Pierre_Colhttps://community.sap.com/t5/user/viewprofilepage/user-id/63<P><SPAN class=""><SPAN><span class="lia-unicode-emoji" title=":loudspeaker:">📢</span> <STRONG>Today is <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/189303">@thomas_volmering</a>'s last day at SAP</STRONG>. <BR /><BR /><STRONG><A class="" href="https://www.linkedin.com/in/thomas-volmering-3538b7/" target="_blank" rel="noopener nofollow noreferrer">Thomas</A> joined SAP 26 years ago</STRONG>, and I met him when he was head of Product Management for <A href="https://community.sap.com/t5/c-khhcw49343/SAP+Build+Process+Automation/pd-p/73554900100800003832" target="_self">SAP Build Process Automation</A>, before he became Head of Product for <A class="" href="https://www.linkedin.com/company/sapbuild/" target="_self" rel="nofollow noopener noreferrer">SAP Build</A>. Together we worked on many communication projects for <A class="" href="https://community.sap.com/t5/c-khhcw49343/SAP+Build/pd-p/73555000100700001491" target="_self">SAP Build</A>, including technical blog posts that you can read <A href="https://community.sap.com/t5/user/viewprofilepage/user-id/189303" target="_self">here</A>. <span class="lia-unicode-emoji" title=":newspaper:">📰</span><BR /><BR />Let me just say that it has been a great pleasure and also some fun working with him, and I thank <A class="" href="https://www.linkedin.com/in/thomas-volmering-3538b7/" target="_blank" rel="noopener nofollow noreferrer">Thomas</A> a lot for that. <span class="lia-unicode-emoji" title=":folded_hands:">🙏🏻</span><BR /><BR /><STRONG>Please join me in wishing <A class="" href="https://www.linkedin.com/in/thomas-volmering-3538b7/" target="_blank" rel="noopener nofollow noreferrer">Thomas</A> the very best for what's to come!</STRONG> <span class="lia-unicode-emoji" title=":thumbs_up:">👍🏻</span></SPAN></SPAN></P><P><SPAN class=""><SPAN><A href="https://www.linkedin.com/in/thomas-volmering-3538b7/" target="_self" rel="nofollow noopener noreferrer"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Thomas Volmering on LinkedIn and SAP Community.jpg" style="width: 676px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/355115iA31A8D7B8FE3ED2A/image-size/large?v=v2&px=999" role="button" title="Thomas Volmering on LinkedIn and SAP Community.jpg" alt="Thomas Volmering on LinkedIn and SAP Community.jpg" /></span></A></SPAN></SPAN></P><P> </P>2025-12-23T11:06:24.578000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/enhancing-sap-hana-database-development-with-generative-ai-support-for-hdi/ba-p/14294318Enhancing SAP HANA Database Development with Generative AI Support for HDI Artifacts2026-01-05T11:48:26.474000+01:00Sushil01https://community.sap.com/t5/user/viewprofilepage/user-id/160869<DIV><DIV><DIV><STRONG>Introduction</STRONG></DIV><DIV> </DIV></DIV></DIV><DIV><SPAN>Authoring HDI (HANA Deployment Infrastructure) artifacts—such </SPAN><SPAN>as</SPAN><SPAN> tables, views, roles, and synonyms—often starts </SPAN><SPAN>with</SPAN><SPAN> a specification and ends </SPAN><SPAN>with</SPAN><SPAN> carefully structured definitions. This update streamlines the journey by adding a Joule icon directly </SPAN><SPAN>in</SPAN><SPAN> the editor. One click opens Joule </SPAN><SPAN>with</SPAN><SPAN> the /hdi-gen slash command preselected, so you can describe what you need </SPAN><SPAN>in</SPAN><SPAN> natural language and receive a ready-to-use HDI artifact definition.</SPAN></DIV><DIV> </DIV><DIV><DIV><STRONG>What’s new</STRONG></DIV><DIV> </DIV><UL><LI><SPAN>Joule icon </SPAN><SPAN>in</SPAN><SPAN> the editor: Visible when a supported HDI artifact file is active</SPAN></LI><LI><SPAN>One-click, context-aware start: Opens Joule </SPAN><SPAN>with</SPAN><SPAN> /hdi-gen preselected for HDI generation</SPAN></LI><LI>Natural language to HDI: Describe the artifact you want and receive a valid HDI definition</LI><LI>Clear, safe application: Options to append to your file or replace its content</LI></UL><DIV><DIV><STRONG>How it works</STRONG></DIV><BR /><UL><LI><SPAN>Open a supported HDI artifact file (for example, a table, view, role, or synonym).</SPAN></LI><LI> Click the Joule icon <SPAN>in</SPAN><SPAN> the editor title bar.</SPAN></LI><LI>Joule opens <SPAN>with</SPAN><SPAN> /hdi-gen preselected.</SPAN></LI><LI>Describe what you want (for example: “Create a ROW table CUSTOMERS with ID INTEGER primary key and NAME NVARCHAR(<SPAN>100</SPAN><SPAN>)”).</SPAN></LI><LI>Joule returns a definition aligned <SPAN>with</SPAN><SPAN> HDI best practices and your current file context.</SPAN></LI><LI>Apply the result:<UL><LI>Append adds content to the end <SPAN>of</SPAN><SPAN> your file</SPAN></LI><LI>Replace substitutes the entire file content<SPAN><BR /></SPAN></LI></UL></LI></UL><DIV><DIV><SPAN>The experience covers a broad range </SPAN><SPAN>of</SPAN><SPAN> HDI artifacts, including (but not limited to) tables, views, roles, synonyms, sequences, structured privileges, triggers, table data (hdbtabledata/csv), logical schemas, virtual tables, and related configuration files. The icon appears only when a supported file </SPAN><SPAN>type</SPAN><SPAN> is active and is opened in <U><STRONG>Code Editor</STRONG></U>.</SPAN></DIV><DIV> </DIV><DIV><DIV><STRONG>Built-in guardrails</STRONG></DIV><UL><LI><SPAN>Native HDI syntax: No CREATE/DROP statements; output follows HDI file conventions</SPAN></LI><LI>Identifier style: Uppercase identifiers by <SPAN>default</SPAN><SPAN>, unless you specify otherwise</SPAN></LI><LI>Table data: For hdbtabledata/csv, sample rows are generated without header lines</LI></UL><DIV><DIV><STRONG>Why this matters</STRONG></DIV><DIV> </DIV><OL><LI><SPAN>Reduce time from requirement to definition </SPAN><SPAN>using</SPAN><SPAN> natural language</SPAN></LI><LI>Keep control: You decide when and how the result is applied</LI><LI>Maintain clarity: Generated content is visibly sectioned for quick review and versioning</LI><LI>Improve consistency: Definitions follow HDI best practices</LI></OL><DIV><DIV><STRONG>Getting started</STRONG></DIV><UL><LI><SPAN>Open a supported HDI artifact file </SPAN><SPAN>in</SPAN><SPAN> your editor</SPAN></LI><LI>Click the in-editor Joule icon(appears on top-right corner of the editor)</LI><LI>Describe your requirement and apply the result</LI></UL><DIV><DIV><SPAN>This enhancement brings conversational HDI generation directly into your editor. With the Joule icon and /hdi-gen preselected, you can move from intent to artifact faster—without sacrificing clarity, safety, or control.</SPAN></DIV><DIV> </DIV><DIV><STRONG>Supported artifacts</STRONG></DIV><DIV> </DIV><DIV><FONT color="#808080"><EM>csv, hdbapplicationtime, hdbcollection, hdbconstraint, hdbdropcreatetable, hdbeshconfig, hdbfunction, hdbgraphworkspace, hdbgrants, hdbindex, hdblibrary, hdblogicalschema, hdblogicalschemaconfig, hdbmigrationtable, hdbprocedure, hdbprojectionview, hdbprojectionviewconfig, hdbpublicsynonym, hdbresultcache, hdbrole, hdbroleconfig, hdbsequence, hdbstatistics, hdbstructuredprivilege, hdbsynonym, hdbsynonymconfig, hdbsystemversioning, hdbtable, hdbtabledata, hdbtabletype, hdbtrigger, hdbview, hdbvirtualprocedure, hdbvirtualtable, hdbvirtualtableconfig, hdinamespace, properties</EM></FONT></DIV><DIV><STRONG> </STRONG></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV>2026-01-05T11:48:26.474000+01:00https://community.sap.com/t5/crm-and-cx-blog-posts-by-sap/new-course-extending-sap-sales-cloud-and-sap-service-cloud-version-2-using/ba-p/14305872New Course Extending SAP Sales Cloud and SAP Service Cloud Version 2 using SAP Build Code2026-01-12T16:39:44.616000+01:00FernandoRedondohttps://community.sap.com/t5/user/viewprofilepage/user-id/7571<P><SPAN>Happy new year SAP CX Community! Fernando here, checking in and kicking off a new SAP CX Integration and Extensibility blog post.</SPAN></P><P><SPAN>From last year onwards, o</SPAN><SPAN>ur learning production focus is on SAP Sales and Service Cloud Version 2 extensibility and integration topics</SPAN><SPAN>. </SPAN><SPAN>Today, I'm delighted to announce in this blog post the next major learning milestone for those looking to master the extensibility of SAP Sales and Service Cloud version 2 with SAP Build Code.</SPAN></P><P><SPAN>So, please, join me in welcoming our newest addition to the <A href="https://learning.sap.com/" target="_self" rel="noreferrer noopener">SAP's learning platform</A>:<STRONG> <BR /><BR /></STRONG></SPAN><SPAN><STRONG><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Course.png" style="width: 92px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/360541i164F4764E962E873/image-dimensions/92x92/is-moderation-mode/true?v=v2" width="92" height="92" role="button" title="Course.png" alt="Course.png" /></span><BR /></STRONG></SPAN><SPAN><STRONG>New Course </STRONG><STRONG><A href="https://learning.sap.com/courses/extending-sap-sales-cloud-and-sap-service-cloud-version-2-using-sap-build-code" target="_blank" rel="noopener noreferrer">Extending SAP Sales Cloud and SAP Service Cloud Version 2 using SAP Build Code</A></STRONG></SPAN></P><P><SPAN>If you're an extensibility developer looking to enhance SAP Sales and Service Cloud version 2 with mashups and microservices using your custom business logic, you've come to the right place. Here, you'll gain the practical knowledge needed to manage the entire end-to-end extensibility project.</SPAN></P><P><SPAN>We've structured our learning content to ensure that, after finishing this course developers and consultants will have the skills to code, deploy and configure mashups and microservices for SAP Sales and Service Cloud Version 2 using SAP Build Code.</SPAN></P><P><SPAN>Here's a glimpse of what it looks like:</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="C4H07I.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/360542i43C379672D49521B/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="C4H07I.png" alt="C4H07I.png" /></span></SPAN></P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P><STRONG>Au</STRONG><STRONG>dience<BR /></STRONG>The course is meant to be helpful for:</P><UL class="lia-list-style-type-disc"><LI>Developers</LI><LI>Technical Consultants</LI><LI>Architects</LI></UL><P><STRONG>Learning Objectives<BR /></STRONG><SPAN>This course teaches how to build side by side extension apps with SAP Build Code to enhance SAP Sales Cloud and SAP Service Cloud Version 2. You’ll follow a practical development workflow covering app architecture, integration patterns, authentication, data mapping, testing, deployment, and maintenance.</SPAN></P><P><STRONG>Learning Content<BR /></STRONG>The course consists of 3 units and provides more than 2 hours of content:</P><UL><LI><STRONG><SPAN>Exploring the Basics of Extending SAP Sales Cloud and SAP Service Cloud Version 2 with SAP Build Code<BR /></SPAN></STRONG><SPAN>Introduces side-by-side extensibility, the core extensibility features, SAP BTP account types, creating a BTP subaccount with a booster, configuring the Cloud Foundry environment, and setting up the SAP Build Code development environment. </SPAN></LI><LI><STRONG><SPAN>Creating a Mashup Webapp with SAP Build Code for SAP Sales Cloud and SAP Service Cloud Version 2<BR /></SPAN></STRONG><SPAN>Guides through creating, deploying, configuring, and testing a mashup webapp from building a simple webapp and deploying it to SAP BTP Cloud Foundry, developing the mashup webpage, configuring the mashup within Sales and Service Cloud, and validating the integration,</SPAN></LI><LI><STRONG><SPAN>Creating a Microservice with SAP Build Code for SAP Sales Cloud and SAP Service Cloud Version 2</SPAN><BR /></STRONG><SPAN>Teaches how to create and integrate microservices covering developing, configuring, and testing a custom logic microservice and a custom key-metric microservice.</SPAN></LI></UL><P><SPAN>After completing successfully this course you'll be granted with a digital badge like this one which could be shared and linked to your social networks:<BR /><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="C4H07I_Badge.png" style="width: 292px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/360548iBB63A8DAA484091F/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="C4H07I_Badge.png" alt="C4H07I_Badge.png" /></span></SPAN></P><P><SPAN>Try it today! we’re launching an exciting new series of extensibility learning content for SAP Sales and Service Cloud Version2, join us to boost your team’s skills and share feedback to help shape even better lessons.<BR /></SPAN></P><DIV class=""><DIV class=""><DIV class=""><P><STRONG>Additional Resources<BR /></STRONG>You can find a related live session on <SPAN><A href="https://learning.sap.com/live-sessions/extending-sap-sales-cloud-version-2-with-sap-build" target="_self" rel="noreferrer noopener">Extending SAP Sales Cloud version 2 with SAP Build</A></SPAN>. For additional free learning journeys and courses, visit the <A href="https://learning.sap.com/products/customer-experience/integration-and-extensibility" target="_blank" rel="noopener noreferrer">SAP Learning site for Integration and Extesibility</A> to build <SPAN>in-demand</SPAN> SAP skills on a variety of topics, for the SAP CX Solutions portfolio. If you enjoy quick video learning, explore our <A href="https://learning.sap.com/videos?page=1&lsc_product_category=CRM+and+Customer+Experience&lsc_product=SAP+Integration+Suite&lsc_product=SAP+Extension+Suite&lsc_product=SAP+BTP%2C+Kyma+runtime" target="_blank" rel="noopener noreferrer">Integration and Extensibility videos for SAP Customer Experience</A> for the newest updates on integration and extensibility for SAP Customer Experience solutions.</P></DIV></DIV></DIV><DIV class=""> </DIV>2026-01-12T16:39:44.616000+01:00https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-sap/sap-fiori-development-newsletter-january-2026-issue-38/ba-p/14304753SAP Fiori Development newsletter January 2026 (issue #38)2026-01-15T15:50:00.034000+01:00PeterSpielvogelhttps://community.sap.com/t5/user/viewprofilepage/user-id/543<P>Happy New Year. If 2025 was the year of AI, what will 2026 bring? Likely more AI.</P><P>Some predictions:</P><OL><LI>Vibe coding will become more mainstream with MCP servers and LLMs working together to deliver more predictable and consistent results.</LI><LI>We will start to see the emergence of the “post-app” era in enterprise software. I don’t think it will be entirely chat-based, but I do expect some parts to be generated on demand.</LI><LI>The knowledge gap between developers who use AI and those who don’t will continue to grow. Now, the early adopters have a 1-year head start. For those who choose to remain on the sidelines, that will continue to grow. Don’t be that person – you need to start experimenting with AI, even if you don’t include the results in your production code</LI></OL><P>What are your predictions for 2026? Let us know or add to the comments below. If you want to discuss your thoughts with your fellow developers, I encourage you to join our monthly SAP Fiori development roundtable. <A href="https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdocs.google.com%2Fforms%2Fd%2F1ZqIX3zzGBOOIqehmlIRz_HhpQEhqunkLSzN1gnaOwP8%2Fedit&data=05%7C02%7Cpeter.spielvogel%40sap.com%7C1744854ba1f649092b6b08dd30c5a09e%7C42f7676cf455423c82f6dc2d99791af7%7C0%7C0%7C638720347573866887%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=xgQxtmNy3e97xOOJC304tGHhsgIVLId5KJSRNyshxq0%3D&reserved=0" target="_blank" rel="noopener nofollow noreferrer">Register online</A> or email me for an invitation.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP_Fiori_Dev_Newsletter_38.png" style="width: 661px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/361101i139D54B36689BF1D/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="SAP_Fiori_Dev_Newsletter_38.png" alt="SAP_Fiori_Dev_Newsletter_38.png" /></span></P><H2 id="toc-hId-1787739649">Development News</H2><P><STRONG>The complete 6-part SAP Fiori Development Portal blog series<BR /></STRONG>In this 6-part series, Katrin Polloczek and Marcel Waechter explore the SAP Fiori development portal and how to use it. Topics include SAP Fiori elements, building blocks, extension options, custom pages, and how all these pieces fit together. <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">Read part 1 – with links to all the posts</A>.</P><P><STRONG>SAP Fiori tools 2601 update – Mobile Device Preview, Building Blocks, and AI-Driven Productivity<BR /></STRONG>SAP Fiori tools 2601 includes enhancements for previewing applications, managing system connections, building SAP Fiori elements–based UIs, and accelerating development with AI-powered tooling. In parallel, we continue to refine the fundamentals in security, modeling, and extensibility. <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-fiori-tools-2601-update-mobile-device-preview-building-blocks-and-ai/ba-p/14292653" target="_blank">See details</A>.</P><P><STRONG>Joule in SAP Build Code can now create freestyle UI5 apps<BR /></STRONG>Last year, we introduced the SAPUI5 extension for the Joule coding assistant in SAP Build Code Over time, it has evolved to support conversion of UI5 apps to TypeScript and setting up new pages and the respective navigation. The latest improvement lets you create new freestyle UI5 apps according to your requirements, bringing the functionality right to developers using SAP Build Code—no other tools needed. <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="_blank">Discover how it works</A>.</P><P><STRONG>Inside Joule: Lessons from building an AI coding assistant for SAP Build<BR /></STRONG>This is a <EM>"making of"</EM> article about the implementation of the new /ui5-create-app slash command available within Joule in SAP Build Code. This new feature enables a conversation between an application developer and their AI assistant about building a new freestyle UI5 application. <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="_blank">Learn more</A>.</P><P><STRONG>UI5 MCP Server's New TypeScript Migration Feature<BR /></STRONG><SPAN>The new UI5 MCP server will give you a massive head start on converting your existing JavaScript UI5 apps to TypeScript. A multi-day manual conversion becomes an hour of agent work plus several hours of polishing. The time savings add up with each project. </SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/ui5-mcp-server-s-new-typescript-migration-feature-real-world-experience-and/ba-p/14289451" target="_blank">Learn more</A><SPAN>.</SPAN></P><P><STRONG>Harmonizing UI5 URLs: Convenient URLs for SAPUI5/OpenUI5 CDN<BR /></STRONG>When accessing the UI5 Demo Kit and when using UI5 in cloud scenarios, you use URLs like <A href="https://ui5.sap.com/" target="_blank" rel="noopener noreferrer">https://ui5.sap.com/</A>. We are harmonizing these URLs to make them future-proof. <A href="https://community.sap.com/t5/frontend-ui5-sap-fiori-blog-posts/harmonizing-ui5-urls-convenient-urls-for-sapui5-openui5-cdn/ba-p/14280931" target="_blank">See more details</A>.</P><H2 id="toc-hId-1591226144">Events</H2><P><STRONG>SAP Fiori Innovation Day</STRONG> 2025 is a wrap. The final event in Walldorf included an overview of AI capabilities in SAP Cloud ERP, two hands-on exercises, and some great insights from the sponsoring partners. <A href="https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-sap/sap-fiori-innovation-day-in-walldorf-featured-two-hands-on-sessions-plus-ai/ba-p/14289329" target="_blank">Learn the details</A>.</P><P>We are planning more <STRONG>SAP Fiori Innovation Days in 2026</STRONG>. Watch your inbox for announcements about where and when we will be hosting these events.</P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-right" image-alt="Call for papers is open for SAP Sapphire 2026" style="width: 200px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/359936i80BAB6AAFE7338AF/image-size/small/is-moderation-mode/true?v=v2&px=200" role="button" title="sapphire.jpg" alt="Call for papers is open for SAP Sapphire 2026" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Call for papers is open for SAP Sapphire 2026</span></span>Call for Proposals open for 2026 <STRONG>SAP Sapphire & ASUG Annual Conference Orlando.<BR /></STRONG>Share your success story or lead an interactive discussion with your peers. <BR /><A href="https://www.cvent.com/c/abstracts/1bf726e9-95be-452e-8ae4-23e9b65846f7" target="_blank" rel="noopener nofollow noreferrer">Submit your proposal</A>.</P><H2 id="toc-hId-1311650375" id="toc-hId-1394712639"><STRONG>Back issues from the past year</STRONG></H2><P><A class="" href="https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-sap/sap-fiori-development-newsletter-november-2025-issue-37/ba-p/14268465" target="_blank">SAP Fiori development newsletter November 2025 (issue #37)</A></P><P><A href="https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-sap/sap-fiori-development-newsletter-september2025-issue-36/ba-p/14212556" target="_self">SAP Fiori development newsletter September 2025 (issue #36)</A></P><P><A href="https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-sap/sap-fiori-development-newsletter-july-2025-issue-35/ba-p/14139032" target="_self">SAP Fiori development newsletter July 2025 (issue #35)</A></P><P><A href="https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-sap/sap-fiori-development-newsletter-may-2025-issue-34/ba-p/14091410" target="_self">SAP FIori development newsletter May 2025 (Issue #34)</A></P><P><A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-fiori-development-newsletter-march-2025-issue-33/ba-p/14036207" target="_self">SAP Fiori development newsletter March 2025 (Issue #33)</A></P><P><A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-fiori-development-newsletter-january-2025-issue-32/ba-p/13984589" target="_self">SAP Fiori development newsletter January 2025 (issue #32)</A></P>2026-01-15T15:50:00.034000+01:00https://community.sap.com/t5/technology-blog-posts-by-members/sapui5-pagination-in-table-on-button-click-using-s-4-hana-cloud-odata/ba-p/14303575SAPUI5 – Pagination in Table on button click using S/4 Hana cloud oData service2026-01-29T05:36:26.980000+01:00VenkateshMundruhttps://community.sap.com/t5/user/viewprofilepage/user-id/44269<P>Hi, in this blog I’m going to explain the pagination in Table with S/4 Hana cloud oData service with<SPAN> flexibility to control number of visible rows per page</SPAN>. </P><P> </P><P>In this example, I am using S/4 Hana cloud oData service through destination. I have 621 records in Product entity set and by default, I have to display 10 records per click and user can change number of visible rows. So, I have placed four nav buttons for First page, Previous page, Next page and Last page with page count information and drop down for number of visible rows and then some magical code.</P><P> </P><P>Firstly, create new front end web and mobile application with zproducts name.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="create project gif.gif" style="width: 940px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/360493i1B9B014E14FBDE50/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="create project gif.gif" alt="create project gif.gif" /></span></P><P> </P><P>In the canvas, give title as Products and remove bottom text.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VenkateshMundru_0-1768222074831.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/360494i311F697EA988441D/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="VenkateshMundru_0-1768222074831.png" alt="VenkateshMundru_0-1768222074831.png" /></span></P><P> </P><P><STRONG>Add Integration:</STRONG></P><P>Go to Integrations tab and select add integration and then select BTP destinations under sap systems.</P><P>In BTP destinations, select our S/4 Hana cloud service destination i.e., <STRONG>S4HANA_Joule_Product</STRONG> and select <STRONG>A_Product</STRONG> entityset. Now Select install integration and enable data entity. You can browse real data by selecting browse real data. Click on save at top right corner.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Integration.gif" style="width: 800px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/360499i17528D365F6DE4FA/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Integration.gif" alt="Integration.gif" /></span></P><P> </P><P><STRONG>Add Variables:</STRONG></P><P>Now go to Variables tab and go to page variables and select add page variable and choose from scratch.</P><P>Add variable noOfVisibleRows with value type Number with initial value 10.</P><P>Similarly add variables totalNoOfRows with value type Number,</P><P>Variable currentPage with value type Number with initial value 1,</P><P>totalPages with value type Number with initial value 1 and</P><P>variable isRefresh with value type true/false with initial value false and Click on save at top right corner.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Page Variables.gif" style="width: 940px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/360507iEDB6CE9C8D5FA149/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Page Variables.gif" alt="Page Variables.gif" /></span></P><P><STRONG>User Interface</STRONG>:</P><P>In User Interface, we install table with data adaptor from marketplace and assign our entity set to it to fetch the data and we will add new property to make table to load the data at each time when user clicks on nav buttons or change number of visible rows.</P><P>Go to User Interface tab and select marketplace and search for basic table with data adapter and install it. Drag and drop the basic table with data adapter to canvas and select configure and select A_product and add the required columns and in properties tab, at pagination in Object with properties, assign noOfVisibleRows page variable to page size, assign currentPage page variable to Page Number and click on save. Click on save and exit and save at top right corner.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Add Table.gif" style="width: 940px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/360530i62FC50D0820553DE/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Add Table.gif" alt="Add Table.gif" /></span></P><P>Go to open in component template editor at bottom in properties tab and select properties and in properties, add new property Refresh of type true/false. Go to view and select add logic to Basic table with data adapter at bottom right corner. Drag and drop Receive event and select <STRONG>Internal property 'Refresh' changed</STRONG> and connect end of the receive event to start of get record collection. Click on save and exit. You can see Refresh property in properties tab.</P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Refresh to table.gif" style="width: 940px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/360531i08EE78FC927D7216/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Refresh to table.gif" alt="Refresh to table.gif" /></span></P><P> </P><P>Assign Refresh property with isRefresh page variable</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Refresh mapping.gif" style="width: 800px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/360532i0F96117398F43C7A/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Refresh mapping.gif" alt="Refresh mapping.gif" /></span></P><P> </P><P>Now select at page level and open logic canvas. Drag and drop record collection and connect to Page Mounted and assign A_Product to resource and for pagination make Include total count as true by selecting binding type as static values true/false.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Get Record collection.gif" style="width: 940px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/360535i7B7A39606728537D/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Get Record collection.gif" alt="Get Record collection.gif" /></span></P><P> </P><P>Now drag and drop set page variable and select variable name as totalNoOfRows and assign formula outputs["Get record collection"].totalCount for value and connect end of get Record Collection top node to start of Set Page Variable node.</P><P>Similarly, drag and drop another set page variable for totalPages and assign formula CEIL(outputs["Get record collection"].totalCount / pageVars.noOfVisibleRows).</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Set Page Variable at page level.gif" style="width: 940px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/361383i999ECD036943F5C1/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Set Page Variable at page level.gif" alt="Set Page Variable at page level.gif" /></span></P><P><STRONG>Add Nav Buttons:</STRONG></P><P>Now drag and drop container at bottom of table and select layout as horizontal.</P><P>Drag and drop button inside the container and name it as First. For disabled, add formula IF(pageVars.currentPage > 1, false, true) and in logic convas, add two set page variables. One for currentPage and set the value to 1 and another for isRefresh and assign formula NOT(pageVars.isRefresh).</P><P>Similarly add another button inside the container and name it as Previous. For disabled, add formula IF(pageVars.currentPage > 1, false, true) and in logic convas, add two set page variables. One for currentPage and assign formula pageVars.currentPage – 1 and another for isRefresh and assign formula NOT(pageVars.isRefresh).</P><P>Add another button inside the container and name it as Next. For disabled, add formula IF(pageVars.currentPage < pageVars.totalPages, false, true) and in logic convas, add two set page variables. One for currentPage and assign formula pageVars.currentPage + 1 and another for isRefresh and assign formula NOT(pageVars.isRefresh).</P><P>Add another button inside the container and name it as Last. For disabled, add formula IF(pageVars.currentPage < pageVars.totalPages, false, true) and in logic convas, add two set page variables. One for currentPage and assign formula pageVars. totalPages and another for isRefresh and assign formula NOT(pageVars.isRefresh).</P><P>Drag and drop text after Previous button and for content add formula pageVars.currentPage + " / " + pageVars.totalPages.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Nav Buttons.gif" style="width: 940px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/361384i5FC9EF97A651D52D/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Nav Buttons.gif" alt="Nav Buttons.gif" /></span></P><P>Drag and drop Dropdown and give label text as No of Rows and select option list -> List of values and add value and give values 10, 25, 50, 100 and save. Make Placeholder text as empty.</P><P>In Logic pane of dropdown field, drag and drop set page variable and assign variable name to noOfVisibleRows and add formula IF(self.value, NUMBER(self.value), pageVars.noOfVisibleRows ) for value.</P><P>Similarly, drag and drop another page variable and assign currentpageno to it and value as 1.</P><P>Another page variable with totalpages and formula for value is CEIL(pageVars.totalNoOfRows / pageVars.noOfVisibleRows) and save at the top right corner.</P><P>Add another page variable with isRefresh with formula for value NOT(pageVars.isRefresh).</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DropDown.gif" style="width: 940px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/361385iFE8B03C54EDFEAA0/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="DropDown.gif" alt="DropDown.gif" /></span></P><P><STRONG>Preview Application:</STRONG></P><P>Save at top right corner and click on preview and select open web preview. Now, you can see our application with pagination and flexibility to control number of visible rows per page.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Preview.gif" style="width: 940px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/361386i8A9B3F21D632D3CD/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Preview.gif" alt="Preview.gif" /></span></P><P> </P><P> </P><P>By doing this, we can easily add pagination in Table on button click by consuming S/4 Hana cloud oData service with<SPAN> flexibility to control number of visible rows per page</SPAN>. </P><P> </P><P><SPAN>That’s it!!!</SPAN></P><P> </P>2026-01-29T05:36:26.980000+01:00https://community.sap.com/t5/tooling-sap-build-blog-posts/sap-build-code-technical-series-feature-flags-service/ba-p/14318538SAP Build Code – Technical Series – Feature Flags Service2026-02-04T10:33:49.039000+01:00natanielgubbinshttps://community.sap.com/t5/user/viewprofilepage/user-id/116758<P>The landscape of application development on the SAP Business Technology Platform (SAP BTP) has evolved significantly. With <STRONG>SAP Build Code</STRONG>, developers have a unified, AI-powered environment specifically tailored for SAP Cloud Application Programming Model (CAP), SAP Fiori, mobile, and SAPUI5 development.</P><P>However, SAP Build Code is more than just a IDE or a single tool. It is a cohesive bundle of services that streamlines the entire application lifecycle. From coding and testing to deployment and management. For many developers, the challenge isn't just learning how to write code; it is understanding how these various interconnected services fit together to create enterprise-grade solutions.</P><P>I am launching this blog series to demystify the different services around SAP Build Code offering. We will visit each service individually to understand its specific role, how it integrates with the core development environment, and why it matters for your projects.</P><H2 id="toc-hId-1788780355">Chapter 1: Features Flag Service</H2><P>In traditional application development, "deploying code" and "releasing a feature" were often the same event. If you pushed code to production, the feature was live. If something broke, you had to scramble to rollback the deployment or push a hotfix.</P><P>As we move into the world of cloud-native development on SAP BTP, we need to separate these two concepts. This is where the <STRONG>SAP Feature Flag Service</STRONG> becomes essential. It provides the ability to toggle functionality on or off without changing a single line of code or restarting your application.</P><P>In this installment of these SAP Build Code series, we explore how Feature Flags can help in your application's rollout strategy.</P><H3 id="toc-hId-1721349569"><STRONG>What is the SAP Feature Flag Service?</STRONG></H3><P>At its core, the SAP Feature Flag service is a control mechanism that allows you to enable or disable new features at runtime.</P><P>The critical distinction here is <STRONG>runtime</STRONG>. Unlike configuration changes that might require a restart, feature flags happen instantly. This capability allows you to:</P><UL><LI><STRONG>Control Code Delivery:</STRONG> Merge code into the main branch without exposing it to users immediately.</LI><LI><STRONG>Synchronize Rollouts:</STRONG> Coordinate the release of a feature that spans multiple microservices.</LI><LI><STRONG>Fast Rollback:</STRONG> If a bug is discovered in a new feature, you can disable it instantly via the dashboard rather than redeploying a previous version of the application.</LI></UL><P>Why is it critical for cloud native application scenarios? Because there is a specific challenge in cloud development: <STRONG>Synchronization</STRONG>.</P><P>In a monolithic application, you deploy everything at once. In a microservice architecture (common in projects on BTP), a single business process might rely on three different services running in separate containers.</P><UL><LI><EM>Scenario:</EM> Service A is updated with new logic, but Service B isn't ready yet.</LI><LI><EM>Without Flags:</EM> You have to hold back the deployment of Service A.</LI><LI><EM>With Flags:</EM> You deploy Service A with the feature toggled "Off." Once Service B is deployed and agreed that it is ready for end users to be used, you flip the switch, releasing the feature across the entire landscape simultaneously.</LI></UL><P>Knowing <I>what</I> a feature flag does is simple: it is an on/off switch. However, knowing <I>how</I> to use that switch to improve your software delivery lifecycle is where the real value lies.</P><P>Before we dive into the code implementation, it is crucial to understand the different delivery strategies available. These techniques allow you to move from a "Big Bang" deployment model to a more nuanced, risk-averse approach suitable for modern enterprise environments on SAP BTP.</P><P>Here are the four key delivery techniques you can leverage:</P><H4 id="toc-hId-1653918783"><STRONG>1. Latent Code Delivery</STRONG></H4><P>This technique involves deploying fully functional code to production but keeping it hidden from the end-user.</P><P><STRONG>How it works:</STRONG></P><UL><LI>You implement a <STRONG>toggle point</STRONG> in your application code that wraps the new functionality.</LI><LI>This toggle point is associated with an <STRONG>inactive</STRONG> feature flag.</LI><LI>The code resides in the production environment, ready to go, but remains dormant until you decide to switch the flag on at runtime.</LI></UL><P><STRONG>Why use it?</STRONG> The primary benefit here is risk reduction. The development and delivery of new features do not put the stability of the whole product at risk.</P><H4 id="toc-hId-1457405278"><STRONG>2. Synchronized Delivery</STRONG></H4><P>In the world of microservices and distributed services, a single business process often spans multiple distinct services. Releasing a feature that requires updates to three different services simultaneously can be a logistical nightmare.</P><P><STRONG>How it works:</STRONG></P><UL><LI>Different teams (e.g., Development Team 1 and Team 2) work on their respective components independently.</LI><LI>Both teams wrap their new logic in toggle points that check the <STRONG>same</STRONG> feature flag.</LI><LI>Each component is deployed to production as "Latent Code" whenever it is ready.</LI><LI>Once all components are live and verified, you activate the single shared feature flag.</LI></UL><P><STRONG>Why use it?</STRONG> This decouples deployment from release. Team 1 is not blocked by Team 2. Developers can plan their tasks better, and the feature is only "released" when the entire distributed system is ready to support it.</P><H4 id="toc-hId-1260891773"><STRONG>3. Direct Delivery</STRONG></H4><P>Sometimes you don't want to release a feature to everyone, but rather to a specific group of trusted users. This is the foundation of "Beta Testing" or "Internal Access."</P><P><STRONG>How it works:</STRONG></P><UL><LI>You build logic in your application to identify different sets of users.</LI><LI>In the Feature Flag service, you configure a <STRONG>direct shipment strategy</STRONG>.</LI><LI>You use <STRONG>identifier query parameters</STRONG> to map specific users or groups to the enabled feature.</LI></UL><P><STRONG>Why use it?</STRONG> This is ideal for validating functionality in production with a controlled audience. You can grant access to your internal QA team or a friendly set of "Beta" customers to gather feedback before opening the floodgates to the general public.</P><H4 id="toc-hId-1064378268"><STRONG>4. Percentage Delivery</STRONG></H4><P>When you are confident in the feature but unsure about the load it might generate, or if you simply want to perform A/B testing, percentage delivery is the technique of choice.</P><P><STRONG>How it works:</STRONG></P><UL><LI>You release the feature to a specified percentage of your user base (e.g., 5% or 10%).</LI><LI>The service randomly (but consistently) assigns users to the "On" or "Off" group.</LI><LI>You can even manage <STRONG>Variations</STRONG>, where you deliver Implementation A to 10% of users and Implementation B to another 10% to see which performs better.</LI></UL><P><STRONG>Why use it?</STRONG> This is the ultimate risk mitigation tool. If the new feature causes a performance regression, only a small fraction of your users are affected, and you can dial it back instantly. It also provides data-driven insights, allowing you to choose the implementation that receives the most positive feedback.</P><P>---</P><H2 id="toc-hId-609699325">Example:</H2><P>We start with our <STRONG>Shop Service (Service A)</STRONG>. It is currently running in production and doing exactly what it was designed to do: it takes a user ID and calculates a checkout for the user. (Remember that we are here to talk about feature flag service, so for simplicity, the code developed in CAP is a very basic one).</P><P>The service.cds file looks like this:</P><pre class="lia-code-sample language-abap"><code>service ShopService {
// Define the structure of the response
type CheckoutResponse {
userId : String;
finalPrice : Decimal;
message : String;
}
// Function now returns the Object defined above
function checkout(userId: String) returns CheckoutResponse;
}</code></pre><P>The service.js file looks like this:</P><pre class="lia-code-sample language-javascript"><code>const cds = require('@sap/cds');
module.exports = async function () {
this.on('checkout', async (req) => {
const { userId } = req.data;
const randomAmount = Math.floor(Math.random() * 1000) + 1;
return {
userId: userId,
finalPrice: randomAmount,
message: `Checkout successful for user ${userId} with amount ${randomAmount}`
};
});
}</code></pre><P>And when we hit the checkout endpoint, the following is retrieved:</P><pre class="lia-code-sample language-javascript"><code>{
"@odata.context": "$metadata#ShopService.CheckoutResponse",
"userId": "1",
"finalPrice": 538,
"message": "Checkout successful for user 1 with amount 538"
}</code></pre><P>Now, the business has introduced a new requirement: <STRONG>Loyalty Discounts</STRONG>. We want specific users to receive a percentage off their total bill. However, the logic for determining <EM>who</EM> is a VIP and <EM>how much</EM> discount they get is complex. It involves checking history, tier levels, and region.</P><P>To keep our architecture clean, we decided <STRONG>not</STRONG> to build this logic inside the Shop Service. Instead, we are creating a dedicated microservice: <STRONG>The Loyalty Service (Project B)</STRONG>.</P><P>We are now facing a classic distributed system problem:</P><OL><LI><STRONG>Shop Service (A)</STRONG> needs to call <STRONG>Loyalty Service (B)</STRONG> to get the discount.</LI><LI>The Loyalty Service is being developed by a different team (or is simply not ready yet).</LI><LI>We cannot deploy the updated Shop Service until the Loyalty Service is live, or the Shop will crash when it tries to call a non-existent API.</LI></OL><P>This is the perfect use case for <STRONG>Latent Code Delivery</STRONG>.</P><P>We are going to update the Shop Service <EM>right now</EM> to include the orchestration logic. It will <EM>try</EM> to call the Loyalty Service. <STRONG>However</STRONG>, we will wrap that call in an <STRONG>SAP Feature Flag</STRONG>.</P><UL><LI><STRONG>Flag OFF:</STRONG> The Shop Service acts exactly as it does today (Standard Price). It ignores the Loyalty Service completely.</LI><LI><STRONG>Flag ON:</STRONG> The Shop Service calls the Loyalty Service, gets the discount, and calculates the new total.</LI></UL><P>This allows us to deploy the updated Shop Service <STRONG>today</STRONG>, even if the Loyalty Service doesn't exist yet. We are decoupled.</P><P>Now, let’s create a new feature flag:<BR /><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="2026-01-30_09-12-19.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/367359iE08218CD11A52FE5/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="2026-01-30_09-12-19.png" alt="2026-01-30_09-12-19.png" /></span></P><P> </P><P>With the flag created and disabled, now, let’s check the code being developed. In this implementation, we are modifying the existing checkout logic to support a new "Loyalty Discount" feature. However, we are wrapping this new logic in a <STRONG>Toggle Point</STRONG> so that we can control its release without redeploying the application.</P><P>We adapt the cds and js files:</P><pre class="lia-code-sample language-abap"><code>service ShopService {
// Define the structure of the response
type CheckoutResponse {
userId : String;
originalAmount : Decimal;
discountPercentage : Integer;
finalPrice : Decimal;
message : String;
}
// Function now returns the Object defined above
function checkout(userId: String) returns CheckoutResponse;
}</code></pre><pre class="lia-code-sample language-javascript"><code>const cds = require('@sap/cds');
module.exports = async function () {
// 1. Connect to External Services
const featureFlagService = await cds.connect.to('FeatureFlagService');
const loyaltyService = await cds.connect.to('LoyaltyService'); // Connect to Service B
this.on('checkout', async (req) => {
const { userId } = req.data;
// --- STANDARD LOGIC ---
// 1. Calculate the base price (simulated random amount)
let randomAmount = Math.floor(Math.random() * 1000) + 1;
// 2. Default state (Standard Pricing)
let finalPrice = randomAmount;
let discountPercentage = 0;
let message = "Standard price applied.";
// --- THE TOGGLE POINT ---
const flagName = 'loyalty-discount';
let isFeatureEnabled = false;
try {
// Check the Flag status for this user
const response = await featureFlagService.send({
method: 'GET',
path: `/evaluate/${flagName}?identifier=${userId}`
});
if (response && response.variation === 'true') {
isFeatureEnabled = true;
}
} catch (error) {
console.error(`[Feature Flag] Check failed: ${error.message}`);
}
// --- LATENT CODE BLOCK ---
if (isFeatureEnabled) {
console.log(`[Orchestration] Feature ON. Calling Loyalty Service for ${userId}...`);
try {
// >>> REAL CALL TO SERVICE B <<<
// We ask Service B: "What is the discount for this user?"
const loyaltyResponse = await loyaltyService.send({
method: 'GET',
path: `/getDiscount(userId='${userId}')`
});
// If Service B responds, we use ITS data
if (loyaltyResponse && loyaltyResponse.percentage) {
discountPercentage = loyaltyResponse.percentage;
finalPrice = randomAmount - (randomAmount * (discountPercentage / 100));
message = `Loyalty Applied! Service B gave you ${discountPercentage}% off.`;
}
} catch (error) {
// FALLBACK:
// If Service B is down (or not created yet), we log it but don't crash.
// This is crucial for "Synchronized Delivery".
console.error(`[Orchestration] Failed to contact Loyalty Service: ${error.message}`);
message = "Standard price applied (Loyalty Service unavailable).";
}
} else {
console.log(`[Orchestration] Feature OFF. Skipping Loyalty Service call.`);
}
// --- FINAL RESPONSE ---
return {
userId: userId,
originalAmount: randomAmount,
discountPercentage: discountPercentage,
finalPrice: parseFloat(finalPrice.toFixed(2)),
message: message
};
});
}</code></pre><P>At the very beginning, we establish connections to the two external services defined in our package.json.</P><UL><LI>FeatureFlagService: The service instance on SAP BTP Feature Flag Service that holds our flag configuration.</LI><LI>LoyaltyService: The new remote microservice (Project B) that calculates discounts.</LI></UL><P>Before executing any new logic, we ask the Feature Flag service if the loyalty-discount feature is active for the current user.</P><UL><LI>We send a GET request to the /evaluate endpoint, passing the userId as the identifier. This allows for <STRONG>Direct Delivery</STRONG> (e.g., enabling the feature only for specific users).</LI><LI>Notice the try/catch block around the flag check. If the Feature Flag service is down or unreachable, we catch the error and default isFeatureEnabled to false. This ensures the Shop Service <STRONG>never crashes</STRONG> just because the flag service is having a hiccup.</LI></UL><P>This is the core of the "Latent Code" delivery technique. The code inside the if (isFeatureEnabled) block is deployed to production but remains dormant until the flag is switched on.</P><UL><LI>If the flag is <STRONG>ON</STRONG>, we attempt to make a real HTTP call to the <STRONG>Loyalty Service</STRONG>.</LI><LI>We send the userId to Service B and wait for a calculated discount percentage.</LI><LI>If the Loyalty Service is down (or not even deployed yet), the catch block handles the error gracefully. The user simply gets the standard price, and the error is logged. This allows us to deploy Service A <EM>before</EM> Service B is ready.</LI></UL><P>Finally, the service returns the response.</P><UL><LI>If the flag was <STRONG>OFF,</STRONG> the user sees the originalAmount and a standard message.</LI><LI>If the flag was <STRONG>ON</STRONG> (and succeeded), the user sees the finalPrice and a loyalty message.</LI></UL><P>Now, with the flag off, we can see the following answer from our Shop Service.</P><pre class="lia-code-sample language-javascript"><code>{
"@odata.context": "$metadata#ShopService.CheckoutResponse",
"userId": "1",
"originalAmount": 888,
"discountPercentage": 0,
"finalPrice": 888,
"message": "Standard price applied."
}</code></pre><P>If we enable our flag, it is expected that the process will fail, because service B is not developed yet. It is important that you enable the flags at the proper moment.</P><pre class="lia-code-sample language-javascript"><code>{
"@odata.context": "$metadata#ShopService.CheckoutResponse",
"userId": "1",
"originalAmount": 220,
"discountPercentage": 0,
"finalPrice": 220,
"message": "Standard price applied (Loyalty Service unavailable)."
}</code></pre><P>Now, let’s develop Service B. In a separate project, we define the services and the logic.</P><pre class="lia-code-sample language-sql"><code>service LoyaltyService {
type DiscountResponse {
userId : String;
percentage : Integer;
tier : String;
}
// The endpoint Service A will call
function getDiscount(userId: String) returns DiscountResponse;
}</code></pre><pre class="lia-code-sample language-javascript"><code>const cds = require('@sap/cds');
module.exports = async function () {
this.on('getDiscount', async (req) => {
const { userId } = req.data;
// Default State
let percentage = 0;
let tier = 'Bronze';
// Simulation Logic
if (userId) {
const id = userId.toLowerCase();
if (id.startsWith('vip')) {
percentage = 20;
tier = 'Platinum';
} else if (id.startsWith('a')) {
percentage = 10;
tier = 'Gold';
}
}
console.log(`[Loyalty Service] Calculated discount for ${userId}: ${percentage}% (${tier})`);
return {
userId: userId,
percentage: percentage,
tier: tier
};
});
}</code></pre><P>Now, after deploying our application, and knowing that we are confident enough to provide this new functionality to our end users, then we enable the feature flag.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="2026-01-30_11-01-02.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/367367i44A212CD151BB0B2/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="2026-01-30_11-01-02.png" alt="2026-01-30_11-01-02.png" /></span></P><P>After enabling it, and executing our checkout process, we can see that the new functionality is released.</P><pre class="lia-code-sample language-javascript"><code>{
"@odata.context": "$metadata#ShopService.CheckoutResponse",
"userId": "vip",
"originalAmount": 889,
"discountPercentage": 20,
"finalPrice": 711.2,
"message": "Loyalty Applied! Service B gave you 20% off."
}</code></pre><P>Instantly—without restarting the Shop Service—the application behavior changes.</P><OL><LI><STRONG>Shop Service</STRONG> detects the flag is active.</LI><LI>It opens the communication channel to <STRONG>Loyalty Service</STRONG>.</LI><LI><STRONG>Loyalty Service</STRONG> receives the request, identifies the user as a VIP, and returns a 20% discount.</LI><LI><STRONG>Shop Service</STRONG> calculates the final price and returns the "Loyalty Applied" message.</LI></OL><P>What we have just demonstrated is <STRONG>Synchronized Delivery</STRONG>.</P><P>In a real-world SAP BTP landscape, you might have the "Shop Team" and the "Loyalty Team" working on different sprints.</P><OL><LI>The Shop Team deployed their code (with the flag OFF) on Monday.</LI><LI>The Loyalty Team deployed their service on Wednesday.</LI><LI>On Friday, the Product Owner clicked <STRONG>"Enable"</STRONG> in the dashboard.</LI></OL><P>Both services started working together instantly, with zero downtime and zero code rollbacks. This is the power of decoupling deployment from release.</P><H4 id="toc-hId-671351258">Enhancing our rollout experience:</H4><P>We have successfully orchestrated our services, but right now, the feature is either <STRONG>ON</STRONG> for everyone or <STRONG>OFF</STRONG> for everyone.</P><P>In a real-world scenario, you rarely roll out a major new feature to 100% of your users immediately. You want to test it with a trusted group first—perhaps your internal team or a set of "Beta" customers. This is where <STRONG>Direct Delivery</STRONG> comes in.</P><P>We don't need to change a single line of code to achieve this. Our code is already sending the <CODE><SPAN>identifier</SPAN></CODE> (userId) to the service.</P><P>So, let’s open our feature flag in our feature flag instance and let’s define a Direct Delivery Strategy, in which we define that only users vip01, and a01, will be able to experiment this new feature.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="2026-01-30_11-19-10.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/367363iE6329F0995A0BB06/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="2026-01-30_11-19-10.png" alt="2026-01-30_11-19-10.png" /></span></P><P>Now, if we try to apply a discount for vip02, it will not even reach/call service B, because the toggle is OFF for that user. Even if the Service B contemplates all kind of users that start with “vip”.</P><pre class="lia-code-sample language-javascript"><code>{
"@odata.context": "$metadata#ShopService.CheckoutResponse",
"userId": "vip02",
"originalAmount": 498,
"discountPercentage": 0,
"finalPrice": 498,
"message": "Standard price applied."
}</code></pre><pre class="lia-code-sample language-javascript"><code>{
"@odata.context": "$metadata#ShopService.CheckoutResponse",
"userId": "vip01",
"originalAmount": 445,
"discountPercentage": 20,
"finalPrice": 356,
"message": "Loyalty Applied! Service B gave you 20% off."
}</code></pre><P>You can also perform a percentage delivery. In my case, I have defined a 50/50 percentage, so the half of my users will take advantage of my new feature, meanwhile others will not be able to use it.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="2026-01-30_11-30-58.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/367364i74E9662354517FD4/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="2026-01-30_11-30-58.png" alt="2026-01-30_11-30-58.png" /></span></P><P>For example, vip06 is not being able to use this new feature, but vip33, can access to it.</P><pre class="lia-code-sample language-json"><code>{
"@odata.context": "$metadata#ShopService.CheckoutResponse",
"userId": "vip06",
"originalAmount": 725,
"discountPercentage": 0,
"finalPrice": 725,
"message": "Standard price applied."
}</code></pre><pre class="lia-code-sample language-json"><code>{
"@odata.context": "$metadata#ShopService.CheckoutResponse",
"userId": "vip33",
"originalAmount": 635,
"discountPercentage": 20,
"finalPrice": 508,
"message": "Loyalty Applied! Service B gave you 20% off."
}</code></pre><P>---</P><H3 id="toc-hId-345755034">Personal Thoughts:</H3><P>Let me share some personal thoughts from using the SAP Feature Flag Service and while redacting this blog post.</P><P>Regarding the setup and initial steps to get this service up and running. Consider that <STRONG>it is already available under the Build Code plan</STRONG>. This accelerates the process of incorporating it into your projects. The documentation is very accurate, and with the <A href="https://help.sap.com/docs/feature-flags-service/sap-feature-flags-service/quick-start?locale=en-US&version=LATEST" target="_self" rel="noopener noreferrer">quick start guide</A>, you can begin using the service in minutes. The only advice I can give, if you really want to take advantage of this service, is to <STRONG>take the time to understand its capabilities and how to adapt them to your needs</STRONG>. This is key to be fully aware of the benefits. The <A href="https://help.sap.com/docs/feature-flags-service/sap-feature-flags-service/what-is-sap-feature-flags-service?locale=en-US&version=LATEST" target="_self" rel="noopener noreferrer">documentation</A> is well-structured, is fast to read, and clearly explains many of the topics involved in using the service. You will find straightforward explanations about the different release methods, what you can achieve, how to perform the setup and how to maintain the feature flags.</P><P>Regarding the usage. I really think this is a very powerful tool. It helps developers and business experts agree on the release, coordinating efforts so everyone knows exactly when a feature is ready to go live. One of the most important aspects of releasing new features is the confidence of the project members prior to the launch of a new enhancement. In distributed systems, many factors must be considered during deployment. Even with unit tests, integration tests, and manual tests in place, there are always some concerns when releasing enhancements. Having flags that can enable and disable these features reduces those concerns significantly. By configuring the proper feature flags, you can test with end users before the official release. This ensures you get <STRONG>feedback on time</STRONG> and can improve the tool before everyone else sees it, <STRONG>increasing the confidence prior launch</STRONG> (and reducing possible issues in production).</P><P>Another important aspect that all project members should consider is the "next steps" after using these flags. Be careful, having too many blocks inside conditional statements can lead to complicated code (and nesting feature flags can also lead to complicated debugging sessions). Hence, the <STRONG>decommissioning of feature flags is an important step</STRONG> in the enhancement lifecycle. In my opinion, removing the flags in the code becomes a mandatory task if you want to <STRONG>keep your project clean and maintainable</STRONG>. So, do not underestimate the cleanup steps after releasing a new enhancement with this service.</P><P>---</P><H3 id="toc-hId-149241529">Wrap Up:</H3><P>We have journeyed from a simple, standalone "Shop Service" to a sophisticated, distributed system that orchestrates pricing logic with a "Loyalty Service."</P><P>By introducing the <STRONG>SAP Feature Flag Service</STRONG>, we didn't just add a toggle; we fundamentally changed how we deliver software.</P><UL><LI><STRONG>Decoupling:</STRONG> We deployed Service A's orchestration logic <EM>before</EM> Service B was even ready.</LI><LI><STRONG>Safety:</STRONG> We ensured that if Service B fails, Service A degrades gracefully to standard pricing.</LI><LI><STRONG>Targeting:</STRONG> With <STRONG>Direct Delivery and Perncetage Delivery</STRONG>, we rolled out the new feature exclusively to a set of users, testing in production with zero risk to the end users.</LI></UL><P>This is the essence of modern cloud-native development on SAP Build Code. It is not just about writing code; it is about controlling <EM>when</EM> and <EM>how</EM> that code provides value to your users.</P><P>The <STRONG>SAP Feature Flag Service</STRONG> has even more depth, including complex rule sets and other capabilities that can be check in the following <A href="https://help.sap.com/docs/feature-flags-service/sap-feature-flags-service/what-is-sap-feature-flags-service?version=Cloud" target="_self" rel="noopener noreferrer">guide</A>. If you find this topic interesting, let me know in the comments, and we can dedicate a future "Deep Dive" post to check more capabilities.</P><P>I hope you find this post useful.</P><P>Kind regards,</P><P>Nata.</P>2026-02-04T10:33:49.039000+01:00