https://raw.githubusercontent.com/ajmaradiaga/feeds/main/scmt/topics/SAPUI5-blog-posts.xml SAP Community - SAPUI5 2024-05-10T05:02:04.235334+00:00 python-feedgen SAPUI5 blog posts in SAP Community https://community.sap.com/t5/technology-blogs-by-members/instruction-of-implement-test-deploy-flow-for-sapui5-plus-cap-integrated/ba-p/13636306 Instruction of implement-test-deploy flow for SAPUI5 plus CAP integrated with another services 2024-03-16T02:40:33.612000+01:00 KazuhikoTakata https://community.sap.com/t5/user/viewprofilepage/user-id/38010 <H1 id="toc-hId-859866851">Introduction</H1><P>In my previous blog:&nbsp;<A class="" href="https://community.sap.com/t5/technology-blogs-by-members/extend-upload-set-to-fiori-elements-and-utilize-document-management-service/ba-p/13613911" target="_blank">Extend Upload Set to Fiori Elements and utilize Document Management Service</A>,&nbsp;<SPAN>I introduced a sample program for SAP BTP that manages both text and file information. Previous blog is explaining about completed artifacts, and I think someone (including myself) would like to know how to build this artifacts. It is more difficult to describe dynamic workflow in document, but I would like to focus on important findings that are not yet documented from my perspective.</SPAN></P><P><SPAN>This document is useful for you when you are new to implement / test / deploy Fiori Elements (including SAPUI5 extension) and&nbsp;CAP OData services integrated with another services like SAP Document Management service (SDM).</SPAN></P><P>&nbsp;</P><H1 id="toc-hId-663353346">Prerequisites</H1><P>You already tried to implement and deploy application with "Full-Stack Application Using Productivity Tools" dev space in Business Application Studio (BAS). For example, follow<SPAN>&nbsp;</SPAN><A href="https://developers.sap.com/group.appstudio-low-code-app.html" target="_blank" rel="noopener noreferrer">Develop Full-Stack App Using the High Productivity Tools of SAP Business Application Studio</A><SPAN>&nbsp;</SPAN>and<SPAN>&nbsp;</SPAN><A href="https://developers.sap.com/tutorials/build-apps-cap-service.html" target="_blank" rel="noopener noreferrer">Create a CAP Service with BAS Productivity Tools</A><SPAN>&nbsp;</SPAN>tutorials.</P><P>From now I use "Full-Stack Cloud Application" dev space in BAS to align with your environment. Usually, I am using local <A href="https://developers.sap.com/tutorials/btp-app-prepare-dev-environment-cap.html" target="_self" rel="noopener noreferrer">VSCode</A> environment, that is just my preference to prevent annoying disconnection in BAS. So, you can choose your preferred one.</P><P>&nbsp;</P><H1 id="toc-hId-466839841">Implement CAP OData service</H1><P>First step is CAP OData service from scratch. I think it is convenient to use command to generate template code by running<SPAN>&nbsp;`</SPAN>cds init`<SPAN>&nbsp;</SPAN>in prompt.</P><P>I can start writing<SPAN>&nbsp;</SPAN><A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/blob/main/db/schema.cds" target="_blank" rel="noopener nofollow noreferrer">db/schema.cds</A><SPAN>&nbsp;</SPAN>file for database entity<SPAN>&nbsp;`</SPAN>TemplateRequests`<SPAN>&nbsp;</SPAN>and file entity<SPAN>&nbsp;`</SPAN>Attachments`. I need to add SDM specific annotation to<SPAN>&nbsp;`</SPAN>Attachments`<SPAN>&nbsp;</SPAN>entity and properties (refer to<SPAN>&nbsp;</SPAN><A href="https://github.com/vneecious/sap-cap-sdm-plugin/tree/master?tab=readme-ov-file#3-entity-creation" target="_blank" rel="noopener nofollow noreferrer">sap-cap-sdm-plugin</A>). Then I write<SPAN>&nbsp;</SPAN><A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/blob/main/srv/user-service.cds" target="_blank" rel="noopener nofollow noreferrer">srv/user-service.cds</A><SPAN>&nbsp;</SPAN>to expose above entities as service.</P><P>I feel it is not difficult to manually write these CDS files, compared with Fiori Elements application. If you feel difficulty, instead you can open Storyboard from command pallet then generate CDS files via GUI data modeler.</P><P>After two files are written, I need to create<SPAN>&nbsp;</SPAN><A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/blob/main/.cdsrc.json" target="_blank" rel="noopener nofollow noreferrer">.cdsrc.json</A><SPAN>&nbsp;</SPAN>file to connect to SDM service (refer to<SPAN>&nbsp;</SPAN><A href="https://github.com/vneecious/sap-cap-sdm-plugin/tree/master?tab=readme-ov-file#2-configuration" target="_blank" rel="noopener nofollow noreferrer">sap-cap-sdm-plugin</A><SPAN>&nbsp;</SPAN>too). This file is similar meaning with<SPAN>&nbsp;`</SPAN>cds`<SPAN>&nbsp;</SPAN>part of<SPAN>&nbsp;</SPAN><A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/blob/main/package.json" target="_blank" rel="noopener nofollow noreferrer">package.json</A>&nbsp;as reference mentioned.</P><P>Let's test what I created.</P><P>First, I need `npm i sap-cap-sdm-plugin` command to add this plugin and install all required packages.</P><P>Run `cds watch` command and go to <A href="http://localhost:4004" target="_blank" rel="noopener nofollow noreferrer">http://localhost:4004</A>&nbsp;(or equivalent URL in case of BAS). You can see Service Endpoint `/odata/v4/user` and two entities I created. After mocked authentication (alice/123 is enough), `TemplateRequests` is working well (just see zero record), but `Attachments` failed with error `[cds] - Error: Could not find service binding of type 'destination'.`.</P><P>This error mentioned that we need destination to access to SDM. It is happened when we need to access to another cloud services. Next step is to setup to connect to SDM.</P><P>&nbsp;</P><H1 id="toc-hId-270326336">Deploy CAP OData service temporarily&nbsp;</H1><P>As mentioned in previous section, we need destination to test my CAP OData service. Destination service, with help of XSUAA (Authorization and Trust Management) service,&nbsp;will be deployed to Cloud Foundry environment. These services are required for both local (hybrid) testing and production, so I will create deployment file `mta.yaml` for production purpose, and utilize associated destination service for testing.</P><P>Run `cds add hana,xsuaa,destination,mta` to generate `mta.yaml` file for XSUAA / destination services (and HANA database for production).</P><P>Follow `Setup sample application` section of <A href="https://community.sap.com/t5/technology-blogs-by-members/extend-upload-set-to-fiori-elements-and-utilize-document-management-service/ba-p/13613911" target="_self">my previous blog</A>, except for cloning sample code to deploy your current application with services. In my environment, I need to delete `<SPAN>-${org}-${space}` from `xsappname` in `mta.yaml` to process deployment.</SPAN></P><P><SPAN>After deployment has done, I do not use application (OData service) in Cloud Foundry, but use XSUAA / destination for next step.</SPAN></P><P>&nbsp;</P><H1 id="toc-hId-73812831"><SPAN>Hybrid test CAP OData service</SPAN></H1><P>Now I am ready to test in local environment. Local test using Cloud Foundry service is called <A href="https://cap.cloud.sap/docs/advanced/hybrid-testing" target="_self" rel="nofollow noopener noreferrer">hybrid testing</A>. I use `cds bind` command to bind to <A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/blob/main/mta.yaml#L98" target="_self" rel="nofollow noopener noreferrer">XSUAA</A> and <A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/blob/main/mta.yaml#L109" target="_self" rel="nofollow noopener noreferrer">destination</A> service instances (if you want to persist testing data to HANA Cloud, you will bind to HDI container service too).</P><P>After binding to service instances, you can find `.cdsrc-private.json` file, that is generated by above command. That file is only used for hybrid testing, and when we keep binding part of this file, it is fine to change the rest for my convenience. I changed authentication from XSUAA auth&nbsp;to mocked auth and in-memory (SQLite) db .</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-json"><code>From: "requires": { "[hybrid]": { "auth": { "kind": "xsuaa-auth", To: "requires": { "[hybrid]": { "db":{ "kind": "sql" }, "auth": { "kind": "mocked", "users": {"alice": {"roles":[]}},</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>Now I start `cds watch --profile hybrid` command to use binding services above. Open <A href="http://localhost:4004" target="_blank" rel="noopener nofollow noreferrer">http://localhost:4004</A>&nbsp;again and this time I can process `Attachments` entity successfully as below.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="GET result of Attachments entity" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/79676iB1D3DB7BE15A2543/image-size/medium?v=v2&amp;px=400" role="button" title="KazuhikoTakata_0-1710303559849.png" alt="GET result of Attachments entity" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">GET result of Attachments entity</span></span></P><P>It is fine to test GET request of OData in this way, but I would like to test POST/PATCH/DELETE requests too. To do this, I will use <A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/blob/main/test/test.http" target="_self" rel="nofollow noopener noreferrer">test/test.http</A>&nbsp;file that is utilizing&nbsp;<A href="https://marketplace.visualstudio.com/items?itemName=humao.rest-client" target="_self" rel="nofollow noopener noreferrer">REST Client</A> as below screen. REST Client is more convenient way to test OData service, for example I can collect multiple requests to file and pass one response value (generated ID e.g.) to variable and extract it at next request.</P><P>When OData service is fully tested, I will move to Fiori Elements. Please keep in mind that hybrid testing is effective for testing Fiori Elements (and other SAPUI5 app) too.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Test OData service using REST Client" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/79677iC5A669DE42F0F50D/image-size/large?v=v2&amp;px=999" role="button" title="KazuhikoTakata_0-1710304470687.png" alt="Test OData service using REST Client" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Test OData service using REST Client</span></span></P><P>&nbsp;</P><H1 id="toc-hId--122700674">Generate Fiori Elements</H1><P>Next step is&nbsp;to implement Fiori Elements application. You may be surprised at many files inside <A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/tree/main/app" target="_self" rel="nofollow noopener noreferrer">app</A> directory in my repository. No worry <span class="lia-unicode-emoji" title=":relieved_face:">😌</span>, most of files are generated by Application Generator in <A href="https://pages.community.sap.com/topics/fiori-tools" target="_self" rel="noopener noreferrer">SAP Fiori tools</A>&nbsp;and no need to change manually.</P><P>I can open <A href="https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette" target="_self" rel="nofollow noopener noreferrer">Command Pallete</A> to type `Fiori: Open Application Generator` in it. Then you can choose configurations below.</P><OL><LI>Template Selection<UL><LI>Template: List Report Page</LI></UL></LI><LI>Data Source and Service Selection<UL><LI>Data Source: Use a Local CAP Project</LI><LI>Your CAP project: automatically selected one</LI><LI>OData service: automatically selected one</LI></UL></LI><LI>Entity Selection<UL><LI>Main entity: automatically selected one</LI><LI>Navigation entity: None</LI><LI>Others: default value</LI></UL></LI><LI>Project attributes<UL><LI>Module Name: set your app name (not changed later)</LI><LI>Application Title: default value is fine (can be changed later)</LI><LI>Application namespace: blank is fine</LI><LI>Description:&nbsp;default value is fine (can be changed later)</LI><LI>Minimum SAPUI5 version: default value is fine</LI><LI>Add deployment configuration to MTA project: Yes</LI><LI>Add FLP configuration: No for the moment (setup later)</LI><LI>Configure advanced option: Yes</LI><LI>UI5 theme: default value is fine</LI><LI><SPAN>Add code assist libraries to your project: No is fine</SPAN></LI><LI><SPAN>Skip generation of associated annotations.cds file: No is fine</SPAN></LI><LI>Enable <SPAN>TypeScript: Yes (required)</SPAN></LI></UL></LI><LI><SPAN>Deployment Configuration</SPAN><UL><LI><SPAN><SPAN class="">Please choose the target</SPAN>: Cloud Foundry</SPAN></LI><LI><SPAN>Destination name: set any destination (change from None) is fine (change later).</SPAN></LI></UL></LI></OL><P>&nbsp;</P><H1 id="toc-hId--319214179">Configure Fiori Elements</H1><P><SPAN>After app files are generated, you can start Page Map to modify default Fiori Elements (if you cannot open Page Map, you will reload browser and try again). Changing configuration in this GUI tool is affected to generated files, like <A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/blob/main/app/template-requests/annotations.cds" target="_self" rel="nofollow noopener noreferrer">annotations.cds</A>&nbsp;and <A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/blob/main/app/template-requests/webapp/manifest.json" target="_self" rel="nofollow noopener noreferrer">manifest.json</A>.</SPAN></P><P><SPAN>In most of cases it is enough to use Page Map for configuring Fiori Elements, but there are some cases to manually append annotations (for example `</SPAN><SPAN>UI.UpdateHidden` annotation is disappearing Edit button). B</SPAN><SPAN>elow references are helpful.</SPAN></P><UL><LI><A href="https://cap.cloud.sap/docs/advanced/odata#annotations" target="_blank" rel="nofollow noopener noreferrer">OData Annotations</A><SPAN>&nbsp;</SPAN>is the basis of annotation.</LI><LI><A href="https://github.com/SAP-samples/fiori-elements-feature-showcase" target="_blank" rel="noopener nofollow noreferrer">SAP Fiori elements for OData V4 Feature Showcase</A><SPAN>&nbsp;</SPAN>is good code samples.</LI><LI><A href="https://ui5.sap.com//#/search/annotation" target="_blank" rel="noopener noreferrer">Search Results for "annotation" in UI5 Demo Kit</A><SPAN>&nbsp;</SPAN>is annotation relevant articles from SAPUI5 perspective.</LI></UL><P>When some configuration changed, I can check what is happened using local (hybrid) testing. Run `cds watch --profile hybrid` command and go to <A href="http://localhost:4004" target="_blank" rel="noopener nofollow noreferrer">http://localhost:4004</A>, now I can see UI5 applications at&nbsp;Web Applications part (first one is for production purpose, and the rest of three are for automation testing that I do not mention today).</P><P>Thanks to mocked authentication I setup before, I can access to UI5 application with binding to destination service. (If you are interested, please revert back to `xsuaa-auth` in `.cdsrc-private.json` and check if what is happened, you are not possible to authenticate from here.)</P><P>In this app, I setup Flexible Column Layout in Page Map to&nbsp;resolve UploadSet issue.&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Flexible Column Layout in Page Map" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/81081i9217C9D72B366BDD/image-size/large?v=v2&amp;px=999" role="button" title="KazuhikoTakata_0-1710465326349.png" alt="Flexible Column Layout in Page Map" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Flexible Column Layout in Page Map</span></span></P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><H1 id="toc-hId--515727684">Extend Custom Section to Fiori Elements Object Page</H1><P>Next step is extending custom section for handling SDM files. From Page Map, I will go to Object Page and click `+` button in Sections, then select Custom Section. In the popup, I will select to create New Fragment and Generate Event Handler (Controller). Those are ones I will modify later for my requirement.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Extend custom section in Object Page" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/80277iAE5C300AD9B2DEDB/image-size/large?v=v2&amp;px=999" role="button" title="KazuhikoTakata_0-1710373064369.png" alt="Extend custom section in Object Page" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Extend custom section in Object Page</span></span></P><P>After click Add button, you can find `Attachments.fragment.xml` and `Attachments.ts` files in <A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/tree/main/app/template-requests/webapp/ext/fragment" target="_self" rel="nofollow noopener noreferrer">ext/fragment</A> directory.&nbsp;Run `cds watch --profile hybrid` command and go to <A href="http://localhost:4004" target="_blank" rel="noopener nofollow noreferrer">http://localhost:4004</A>&nbsp;and UI5 app, now I can see Attachments section and one button at the last section. It is derived from default XML fragment and controller.</P><P>&nbsp;</P><H1 id="toc-hId--712241189">Implement XML fragment&nbsp;</H1><P>I will start my implementation from <A href="https://sapui5.hana.ondemand.com/#/entity/sap.m.upload.UploadSet/sample/sap.m.sample.UploadSet/code" target="_self" rel="nofollow noopener noreferrer">Sample code</A>&nbsp;of UploadSet. First, I will copy `Page.view.xml` to paste to my `Attachments.fragment.xml`. Sample code is for View and not fit to my Fragment, so you should copy `&lt;upload:UploadSet&gt; part only. Also to recognize `upload` namespace, you will copy `xmlns:upload="sap.m.upload"` in the FragmentDefinition tag.</P><P>Run `cds watch --profile hybrid` command and go to <A href="http://localhost:4004" target="_blank" rel="noopener nofollow noreferrer">http://localhost:4004</A>&nbsp;and UI5 app, and I can see UploadSet component (not working yet, will modify).</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Copy sample UploadSet to XML fragment" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/80296i3A679682C6A83782/image-size/medium?v=v2&amp;px=400" role="button" title="KazuhikoTakata_1-1710376188896.png" alt="Copy sample UploadSet to XML fragment" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Copy sample UploadSet to XML fragment</span></span></P><P>&nbsp;</P><P>&nbsp;</P><P>Next, let's remove buttons to simplify implementation. I will remove `<SPAN>&lt;upload:toolbar&gt;` part and check again. Hmm <span class="lia-unicode-emoji" title=":thinking_face:">🤔</span>, no change happened to browser <span class="lia-unicode-emoji" title=":downcast_face_with_sweat:">😓</span>. At that time, you will go to&nbsp;</SPAN>development tools in the browser (Microsoft Edge in my case), go to Application, then clear site data. Then reload BAS to authenticate again and try again, now updated XML view is applied and removed buttons <span class="lia-unicode-emoji" title=":grinning_face:">😀</span>.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Clear site data in developer tools" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/80313i877ABEEB11257182/image-size/medium?v=v2&amp;px=400" role="button" title="KazuhikoTakata_0-1710377343214.png" alt="Clear site data in developer tools" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Clear site data in developer tools</span></span></P><P>From now, I will read <A href="https://sapui5.hana.ondemand.com/#/api/sap.m.upload.UploadSet" target="_self" rel="nofollow noopener noreferrer">UploadSet</A>&nbsp;and <A href="https://sapui5.hana.ondemand.com/#/api/sap.m.upload.UploadSetItem" target="_self" rel="nofollow noopener noreferrer">UploadSetItem</A>&nbsp;API reference to understand each property and events. Then finally completed <A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/blob/main/app/template-requests/webapp/ext/fragment/Attachments.fragment.xml" target="_self" rel="nofollow noopener noreferrer">Attachments.fragment.xml</A>&nbsp;coding.</P><P>&nbsp;</P><H1 id="toc-hId--908754694">Implement controller TypeScript file</H1><P>Even XML fragment is possible to some part of requirements (e.g. list up files in directory), I know I need to modify standard logic to align with CAP OData service, so I will start modifying `Attachments.ts` TypeScript file.</P><P>First, <A href="https://www.typescriptlang.org/" target="_self" rel="nofollow noopener noreferrer">TypeScript</A> is easier for me compared with JavaScript in two perspective, first TypeScript syntax is similar to my previously learned language, second TypeScript is checking syntax error at coding (before testing). I recommend to select TypeScript when selecting which language is used when generating Fiori Elements.</P><P>Going back to&nbsp;<A href="https://sapui5.hana.ondemand.com/#/entity/sap.m.upload.UploadSet/sample/sap.m.sample.UploadSet/code" target="_self" rel="nofollow noopener noreferrer">Sample code</A>&nbsp;of UploadSet to find `Page.controller.js` file. This is JavaScript code, and I am not familiar with this syntax (first few lines especially). Now we have convenient tool, Generative AI to convert to TypeScript. I used Bing Copilot to do this task (convert below Javascript code to TypeScript &lt;&lt;sample code&gt;&gt;).</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Converting sample JavaScript to TypeScript" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/80314iF885A01BCCE4A160/image-size/large?v=v2&amp;px=999" role="button" title="KazuhikoTakata_0-1710378811687.png" alt="Converting sample JavaScript to TypeScript" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Converting sample JavaScript to TypeScript</span></span></P><P>Converted code is better for me to understand code structure. We need to import some UI5 classes at first, and implement action against each event. Actually I do not use sample code for my case, but it is useful for reference.</P><P>Event name described in XML fragment is linked with function name in TypeScript. To find controller logic correctly, I need to write `core:require="{ handler: 'kaztakata/templaterequests/ext/fragment/Attachments'}"` in XML fragment. That handler path is written in the generated dummy button at the beginning, so move this part to <A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/blob/main/app/template-requests/webapp/ext/fragment/Attachments.fragment.xml#L2" target="_self" rel="nofollow noopener noreferrer">UploadSet tag</A>.</P><P>After that,&nbsp;I will read <A href="https://sapui5.hana.ondemand.com/#/api/sap.m.upload.UploadSet" target="_self" rel="nofollow noopener noreferrer">UploadSet</A>&nbsp;and <A href="https://sapui5.hana.ondemand.com/#/api/sap.m.upload.UploadSetItem" target="_self" rel="nofollow noopener noreferrer">UploadSetItem</A>&nbsp;API reference again and iterate writing code and testing it. Below list is my workflow.</P><UL><LI>Write controller logic line by line and start hybrid testing. In the browser development tools, go to <A href="https://learn.microsoft.com/en-us/microsoft-edge/devtools-guide-chromium/javascript/#step-2-get-familiar-with-the-sources-tool-ui" target="_self" rel="nofollow noopener noreferrer">Source</A>, then you can find your controller `ts` files. Click the left side of each line to set debug point. Then you can stop program in local environment.</LI><LI>Check OData service result. In the browser development tools, go to <A href="https://learn.microsoft.com/en-us/microsoft-edge/devtools-guide-chromium/network/#inspect-the-details-of-the-resource" target="_self" rel="nofollow noopener noreferrer">Network</A>, then you can find OData service requests. Normally you can see header tab to confirm path, but in case of $batch request you will click payload tab to confirm path. You can see response in preview tab in both successful and error case.</LI><LI>Check unknown error or just blank screen etc. In the browser development tools, go to <A href="https://learn.microsoft.com/en-us/microsoft-edge/devtools-guide-chromium/console/#error-reports-and-the-console" target="_self" rel="nofollow noopener noreferrer">Console</A>, then you can find (red color) errors. You can initially check error code, for example 401 error is relevant to user authentication/authorization, 404 error is relevant to incorrect URL path configuration.</LI></UL><P>Finally completed <A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/blob/main/app/template-requests/webapp/ext/fragment/Attachments.ts" target="_self" rel="nofollow noopener noreferrer">Attachments.ts</A>&nbsp;coding.</P><P>&nbsp;</P><H1 id="toc-hId--335528116">Deploy Fiori Elements</H1><P>Deploying Fiori Elements (and SAPUI5) needs some preparation.</P><P>I will add <A href="https://www.npmjs.com/package/@sap/approuter" target="_self" rel="nofollow noopener noreferrer">Approuter</A>&nbsp;configuration from now. Approuter is mandatory parts for publishing SAPUI5 apps to Cloud Foundry. There are two types, one is stand alone type that is deployed by myself, the other is managed type that is used from Work Zone, standard edition etc (see&nbsp;<A class="" href="https://community.sap.com/t5/technology-blogs-by-sap/sap-tech-bytes-faq-managed-approuter-vs-standalone-approuter/ba-p/13496019" target="_blank">SAP Tech Bytes: FAQ Managed Approuter vs. Standalone Approuter</A>&nbsp;for detail). I will simply use managed Approuter in Work Zone, standard edition.</P><P>Read&nbsp;<A href="https://help.sap.com/docs/build-work-zone-standard-edition/sap-build-work-zone-standard-edition/set-up-your-development-environment" target="_self" rel="noopener noreferrer">Set Up Your Development Environment</A>&nbsp;then update below points (<SPAN>Check following documents&nbsp;in detail of each topic).&nbsp;</SPAN>I will provide&nbsp;my files (link) for your reference.</P><OL><LI><A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/blob/main/app/template-requests/webapp/manifest.json#L187-L190" target="_self" rel="nofollow noopener noreferrer">manifest.json</A>: add `sap.cloud` part to your file (value is matched with destination content in item 4).</LI><LI><SPAN><A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/blob/main/xs-security.json#L4-L12" target="_self" rel="nofollow noopener noreferrer">xs-security.json</A>: add&nbsp;`Token_Exchange` role to role-templates.</SPAN></LI><LI><SPAN><A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/blob/main/mta.yaml#L113" target="_self" rel="nofollow noopener noreferrer">mta.yaml</A>: change&nbsp;`HTML5Runtime_enabled` value to `true` in destination service config.</SPAN></LI><LI><A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/blob/main/mta.yaml#L28-L64" target="_self" rel="nofollow noopener noreferrer">mta.yaml</A>: add module of destination content (if you follow my instruction, just replace `sap-sample-fiori-elements-uploadset` to your project).</LI><LI><A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/blob/main/app/template-requests/xs-app.json#L8" target="_self" rel="nofollow noopener noreferrer">xs-app.json</A>: modify your destination name pointing to CAP OData service determined in <A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/blob/main/mta.yaml#L6" target="_self" rel="nofollow noopener noreferrer">mta.yaml</A>.</LI><LI><A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/blob/main/app/template-requests/webapp/manifest.json#L28-L40" target="_self" rel="nofollow noopener noreferrer">manifest.json</A>: add `crossNavigation` part manually, or open Application Info&nbsp;<SPAN>from command pallet, then click `Add Fiori Launchpad Config`. Then enter configuration like below.</SPAN></LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Add Fiori Launchpad (Work Zone) Config" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/81159iDF6F1AFBBFC21DB9/image-size/large?v=v2&amp;px=999" role="button" title="KazuhikoTakata_0-1710478776696.png" alt="Add Fiori Launchpad (Work Zone) Config" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Add Fiori Launchpad (Work Zone) Config</span></span></P><P>After setup has done, run `mbt build` and `cf deploy your_mta_file` to deploy your app and surrounding services.</P><P>&nbsp;</P><H1 id="toc-hId--532041621">Test Fiori Elements in Cloud Foundry environment</H1><P>Everything is deployed to Cloud Foundry environment. I can go to HTML5 applications menu in SAP BTP Cockpit to find my Fiori Elements. Click app and I will authenticate by Approuter, then go to Fiori Elements successfully. I can test creating entry and uploading/downloading document, same as local (hybrid) testing.</P><P>Conglaturation&nbsp;<span class="lia-unicode-emoji" title=":japanese_congratulations_button:">㊗️</span>. That is all of my instruction.</P><P>I will skip setting of Work Zone, but you can check <A href="https://help.sap.com/docs/build-work-zone-standard-edition/sap-build-work-zone-standard-edition/integrating-business-content?q=role" target="_self" rel="noopener noreferrer">Integrating Business Content</A>&nbsp;for detail.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="HTML5 Application in Cloud Foundry environment" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/81647iE97C8975B0BAECC9/image-size/medium?v=v2&amp;px=400" role="button" title="KazuhikoTakata_0-1710546610648.png" alt="HTML5 Application in Cloud Foundry environment" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">HTML5 Application in Cloud Foundry environment</span></span></P><P>&nbsp;</P><H1 id="toc-hId--728555126">Conclusion</H1><P>I am creating this blog for my follower to catch up development skill quickly, and to summarize my acquired knowledge for myself. So if you have any question and feedback, please response to this blog or raise <A href="https://github.com/kaztakata/sap-sample-fiori-elements-uploadset/issues/new" target="_self" rel="nofollow noopener noreferrer">issue</A> to GitHub repository, that is helpful for me.</P><P>I am happy if you will implement your application with this workflow <span class="lia-unicode-emoji" title=":smiling_face_with_smiling_eyes:">😊</span>.</P> 2024-03-16T02:40:33.612000+01:00 https://community.sap.com/t5/technology-blogs-by-sap/interplay-between-vite-and-sap-approuter/ba-p/13641826 Interplay between Vite and SAP Approuter 2024-03-20T19:31:02.413000+01:00 julianschambeck https://community.sap.com/t5/user/viewprofilepage/user-id/823722 <P>Hi there folks,</P><P>not too long ago we wanted to utilize the <A href="https://sap.github.io/ui5-webcomponents-react/?path=/docs/getting-started--docs" target="_self" rel="nofollow noopener noreferrer">UI5 Web Components in React</A>&nbsp;. In their documentation they recommend to use <A href="https://vitejs.dev" target="_self" rel="nofollow noopener noreferrer">Vite</A>—a relatively new frontend-tooling framework—to create an initial app as a starting point based on one of its templates.</P><P>At the same time, we commonly use the <A href="https://www.npmjs.com/package/@sap/approuter" target="_self" rel="nofollow noopener noreferrer">SAP Approuter</A>&nbsp;during development to require authorization, authentication—also locally. So, we wanted to use both in combination. After some research and exploring the possible configuration options of Vite, we came up with a setup that has been working quite well for us so far. Therefore, I want to share it here.</P><P>First, I will link to the respective git&nbsp;<A href="https://github.com/SAP-samples/interplay-vite-approuter" target="_self" rel="nofollow noopener noreferrer">repository</A> which showcases this setup, in case you want to jump there immediately.</P><P>Now, Vite is a tooling which is used for frontend development. It focuses on speed and developer happiness and for that it leverages the fact that the latest stable versions of browsers support Native ES Modules out of the box. Think of them as normal JavaScript Modules for simplicity. This eliminates the need for a large part of bundling. Interestingly, during development, Vite does not seem to create a dist folder or any bundled files at all—unlike many other tooling.</P><P>As for the Approuter, it is what's called a reverse-proxy server. It acts as the central entry point to the app, meaning it is the first thing the client's browser makes contact with. Here it forwards any incoming requests coming from the browser, the client, to the respective service in the backend. Later on, it returns the responses<BR />of those services back to the browser of the client.</P><P>More importantly for our scenario, it ensures you as a developer also need to authenticate and be authorized to access the app—even when developing locally. This is useful if you need to access some data in the backend which requires authorization anyway.</P><P>The other main benefit is that the structure of the app and the authentication flow locally is basically the same as for the deployed version of the app later on. Just imagine a scenario in which you want to have a standalone Approuter and later on deploy your app to Business Technology Platform (BTP) on the Cloud-Foundry environment. Lastly, you can still benefit from the speed and Hot Module Replacement (HMR) of Vite's development server (dev server).</P><P>To be fair, the Approuter of course does not handle authentication/authorization completely alone, but rather makes use of the&nbsp;<A href="https://learning.sap.com/learning-journey/discover-sap-business-technology-platform/illustrating-sap-authorization-and-trust-management-service-xsuaa-_b9fde282-4cff-4dca-b146-7c8f8dde9955" target="_self" rel="noopener noreferrer">XSUAA</A>&nbsp;service (extended services for UAA, where the latter stands for User Account and Authentication) for that. I won't go into the details of the XSUAA, but you should by now have a basic idea as to why we wanted to use the Approuter during local development as well.</P><P>Let's get now to the details of the setup. The following is going to be the folder structure. The ui/ folder containing the UI was generated with the help of the frontend-tooling Vite and its react-ts template for React and Typescript. The router/ folder is intended for everything related to the Approuter.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Folder structure" style="width: 324px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83853iC96E12A82EBA7266/image-size/large?v=v2&amp;px=999" role="button" title="folder-structure.png" alt="Folder structure" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Folder structure</span></span></P><H2 id="toc-hId-989729003">Approuter Configuration</H2><P>The configuration for the Approuter used locally is stored separately in the router/dev folder. Firstly, define a dummy destination for local use in router/dev/default-env.json that points to the locally running Vite dev server. In the same way, you can define one for any backend web server, e.g., a server for the Cloud Application Programming Model (<A href="https://cap.cloud.sap/docs/" target="_self" rel="nofollow noopener noreferrer">CAP</A>), that requires authentication to access it.</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-json"><code>{ "destinations": [ { "name": "api", "url": "http://localhost:4004", "forwardAuthToken": true }, { "name": "vite-dev-server", "url": "http://localhost:5173" } ] }</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>Next, tell the Approuter to forward any incoming requests to one of the two destinations. This is done in the router/dev/xs-app.json.</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-json"><code>{ "welcomeFile": "/index.html", "routes": [ { "source": "^/api(.*)$", "target": "$1", "destination": "api", "csrfProtection": false }, { "source": "^/(.*)$", "target": "/$1", "destination": "vite-dev-server", "authenticationType": "none" } ] }</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>This configuration is only used locally. When it comes time to deploy the app later on to BTP on Cloud Foundry you can ignore it. To do that, add the line ignore: [./dev] to the build-parameters section of your module definition inside the respective mta.yaml descriptor file (say you deploy your app to BTP later on).</P><H2 id="toc-hId-793215498">Vite Configuration</H2><P>As for Vite you only need to change the port of Vite's web socket used for Hot Module Replacement (HMR) (i.e., to <EM>5174</EM> in our case). This way the web socket runs on its own separate port. You do this inside the ui/vite.config.ts.</P><P>For production, you can create a build as usual with the build command. Here you configure Vite to store the build output in router/dist/. This way, the Approuter can point to the created build in a productive scenario (see router/xs-app.json for that).</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-javascript"><code>export default defineConfig({ plugins: [react()], server: { hmr: { port: 5174, }, }, build: { outDir: "../router/dist", emptyOutDir: true, }, });</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><H2 id="toc-hId-596701993">Requirements</H2><P>For this setup Node version 18 was used, but any newer Node LTS version should work as well.</P><H2 id="toc-hId-400188488">Installation and Startup</H2><P>If you do not already have TypeScript support installed, install ts-node and typescript globally with:</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-bash"><code>npm install --global typescript ts-node</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>Next, install all packages which are required locally by running the following—while being in the root project folder:</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-bash"><code>npm run setup</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>Then you can start both the Vite dev server and the Approuter by running in the same folder:</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-bash"><code>npm run start</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>You should now be able to open up the application at&nbsp;<A href="http://localhost:5000" target="_self" rel="nofollow noopener noreferrer">http://localhost:5000</A>&nbsp;and see the UI there.<BR /><BR /></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Initial page of the app" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83854i7CE1D8AB8454CCBB/image-size/large?v=v2&amp;px=999" role="button" title="open-app.png" alt="Initial page of the app" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Initial page of the app</span></span></P><P>And that's it. To conclude, you now should have a working setup for local development to develop your UI with the UI5 Webcomponents in React. At the same time, you already account for authentication/authorization to limit access from your UI to any data in the backend. Lastly, one can easily extend the setup with a separate service, e.g., one that uses CAP and provides endpoints to access the data.</P><P>Cheers,<BR />Julian</P> 2024-03-20T19:31:02.413000+01:00 https://community.sap.com/t5/technology-blogs-by-sap/unlocking-efficiency-and-simplicity-a-look-into-the-new-features-of-sap/ba-p/13645297 Unlocking Efficiency and Simplicity: A Look into the New Features of SAP Fiori Elements for OData V4 2024-03-21T10:22:53.408000+01:00 sebastian_werner3 https://community.sap.com/t5/user/viewprofilepage/user-id/577845 <P>In the ever-evolving landscape of enterprise software, staying ahead of the curve is not just an advantage, it's a necessity. As we look at SAP Fiori elements, exciting developments <SPAN>&nbsp;</SPAN>help you to strive, particularly with the features from SAPUI5 Version 1.121 and SAP Fiori elements for OData V4. This latest iteration promises to enhance the capabilities of Fiori elements <SPAN>even further, offering a host of new functionalities and improvements.</SPAN></P><P>Here's a look into some of the latest features for SAP Fiori elements for OData V4:</P><P><STRONG>Recently Entered Values</STRONG>: Have you ever wished for a quicker way to access recently entered values in a field? Well, your wish is granted! We've introduced a handy feature that allows you to view the history of the most recently entered values right within the filter bar.</P><P>By simply moving your cursor back to the field, you can enable this time-saving function. While it's automatically activated for controls where it is relevant, like multi-input fields, it might not be enabled for others such as drop-down lists.</P><P>With this enhancement, navigating through your data becomes even more efficient, putting valuable information at the top. For more information, see <A href="https://sapui5.hana.ondemand.com/#/topic/37dbf1f30127420d9c585bc1ad80086b" target="_blank" rel="noopener nofollow noreferrer">History of Recently Entered Values</A><SPAN>.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Bildschirmfoto 2024-03-19 um 10.47.56.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/84247iEBAFC66165D8FE78/image-size/large?v=v2&amp;px=999" role="button" title="Bildschirmfoto 2024-03-19 um 10.47.56.png" alt="Bildschirmfoto 2024-03-19 um 10.47.56.png" /></span></P><P><STRONG>Open Object Page in Edit Mode</STRONG>: One of the standout features in this update is the introduction of the 'openInEditMode' manifest setting. This addition empowers developers by allowing them to open an object page directly in edit mode. Gone are the days of navigating through multiple screens to make a simple edit; now, users can seamlessly transition to edit mode with just a click. For more information, <A href="https://sapui5.hana.ondemand.com/#/topic/8665847a17a14e1abdcebe3e235c8c68" target="_blank" rel="noopener nofollow noreferrer"><SPAN>see Navigating to an Object Page in Edit Mode</SPAN></A><SPAN>.</SPAN></P><P><STRONG>Merged Section and Subsection Title</STRONG><STRONG>:</STRONG> The section or subsection title is now merged with the table or chart title if the section or subsection only has one table or chart control. That way, redundant information is omitted. For more information, see&nbsp;<A href="https://sapui5.hana.ondemand.com/#/topic/facfea09018d4376acaceddb7e3f03b6" target="_blank" rel="noopener nofollow noreferrer"><SPAN>Defining and Adapting Sections</SPAN></A><SPAN>.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Bildschirmfoto 2024-03-21 um 10.14.37.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/84253i614724881E914A6C/image-size/large?v=v2&amp;px=999" role="button" title="Bildschirmfoto 2024-03-21 um 10.14.37.png" alt="Bildschirmfoto 2024-03-21 um 10.14.37.png" /></span></P><P><SPAN>For all changes, see the </SPAN><A href="https://help.sap.com/whats-new/67f60363b57f4ac0b23efd17fa192d60?Category=SAP%20Fiori%20Elements&amp;locale=en-US&amp;Version=1.121" target="_self" rel="noopener noreferrer"><SPAN>What’s New in SAPUI5 1.121</SPAN></A><SPAN> section ‘SAP Fiori elements for OData V4</SPAN><SPAN>’</SPAN></P> 2024-03-21T10:22:53.408000+01:00 https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-fiori-development-newsletter-march-2024-issue-27/ba-p/13646140 SAP Fiori development newsletter March 2024 (issue #27) 2024-03-21T21:44:49.447000+01:00 PeterSpielvogel https://community.sap.com/t5/user/viewprofilepage/user-id/543 <P>The 2024 leap year gives us an extra day to get things done. I hope you will use some of that time to learn what our development teams have been rolling out to make it easier to create SAP Fiori apps, using the same tools and technologies that SAP uses to build apps for SAP S/4HANA. Make sure to check out the two new SAPUI5 adaptation tutorials, listed in the Developer Training section below.<BR /><BR />If you want to meet with fellow developers and the SAP engineers who build our professional development tools, I encourage you to join our monthly <STRONG>SAP Fiori elements and SAP Fiori tools roundtable group</STRONG>.</P><P>Our next meeting is April 10, 2024.<BR /><BR />Learn about the group at&nbsp;<A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=A67870895B2B9BC9D77D1B9AB614BF41955EBE98&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vYmxvZ3Muc2FwLmNvbS8yMDIxLzA3LzMxL3BlZXItdG8tcGVlci1sZWFybmluZy1hdC10aGUtc2FwLWZpb3JpLWVsZW1lbnRzLWFuZC1zYXAtZmlvcmktdG9vbHMtcm91bmR0YWJsZS8%2Fc2FwLW91dGJvdW5kLWlkPTYxQ0QxMjQwOUM1MjE5MTJFNEQ0MzNGNDY5RjY0ODRGQzE2OEIzNUEmc21jX2NhbXBhaWduX2lkPTAwMDAwMzk5OTEmc291cmNlPWVtYWlsLXNtYw&amp;_K13_=558&amp;_K14_=5e3241044c6bb04014087e4a7dae6a19c18a229f114e0a8b2f3b59d43a334343" target="_blank" rel="noopener nofollow noreferrer">https://blogs.sap.com/2021/07/31/peer-to-peer-learning-at-the-sap-fiori-elements-and-sap-fiori-tools-roundtable/</A><BR />You can also&nbsp;email me if you would like an invitation.</P><P>Was this forwarded to you? <A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=36DD87CF4363E704D7AB90D1113275E1D8361F50&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vd3d3LnNhcC5jb20vY21wL25sL3NhcC1maW9yaS1kZXZlbG9wbWVudC1uZXdzbGV0dGVyL2luZGV4Lmh0bWw%2Fc2FwLW91dGJvdW5kLWlkPTYxQ0QxMjQwOUM1MjE5MTJFNEQ0MzNGNDY5RjY0ODRGQzE2OEIzNUEmc21jX2NhbXBhaWduX2lkPTAwMDAwMzk5OTEmc291cmNlPWVtYWlsLXNtYw&amp;_K13_=558&amp;_K14_=ee33bb3cf9d084c97c92ed4c387b9cd510678e34db39e05b4e6d9fbb884f20fe" target="_blank" rel="noopener nofollow noreferrer">Subscribe to the SAP Fiori development newsletter.</A></P><P>Your editorial team,&nbsp;<BR />Peter, Oliver, and Raz</P><P><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="SAP_Fiori_Dev_Newsletter_27.png" style="width: 640px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/84688i881F2027D53BA448/image-size/large?v=v2&amp;px=999" role="button" title="SAP_Fiori_Dev_Newsletter_27.png" alt="SAP_Fiori_Dev_Newsletter_27.png" /></span></P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><H1 id="toc-hId-860788568">Development News</H1><P><STRONG>Extending SAP Fiori elements the right way using standard processes</STRONG></P><P>There are many ways to extend SAP apps, including using the flexible programming model in SAP Fiori elements for OData v4. This post shows several examples of bad coding practices, explains why they are wrong, and gives you the right way to implement these features instead.<BR /><A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=D1D4FF22AD6129E40E8F4EC32C0DD4993E0B501B&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vY29tbXVuaXR5LnNhcC5jb20vdDUvdGVjaG5vbG9neS1ibG9ncy1ieS1zYXAvZXh0ZW5kaW5nLXNhcC1maW9yaS1lbGVtZW50cy10aGUtcmlnaHQtd2F5LXVzaW5nLXN0YW5kYXJkLXByb2Nlc3Nlcy9iYS1wLzEzNTg4NTAyP3NhcC1vdXRib3VuZC1pZD02MUNEMTI0MDlDNTIxOTEyRTRENDMzRjQ2OUY2NDg0RkMxNjhCMzVBJnNtY19jYW1wYWlnbl9pZD0wMDAwMDM5OTkxJnNvdXJjZT1lbWFpbC1zbWM&amp;_K13_=558&amp;_K14_=5fcd255167c0895b26785e29fc99d491c429215b8e52a94582b372cf3cd5ce4b" target="_blank" rel="noopener nofollow noreferrer">https://community.sap.com/t5/technology-blogs-by-sap/extending-sap-fiori-elements-the-right-way-using-standard-processes/ba-p/13588502</A></P><P><STRONG>Building resilient applications using SAP Cloud Application Programming Model (CAP)</STRONG></P><P>In this post, you will learn what a resilient app is, why this is important to your end users, and how to build one using SAP’s Cloud Application Programming Model.<BR /><A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=3AC399E88F9618CABC8D4B2BE10C2BE211FC47BB&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vY29tbXVuaXR5LnNhcC5jb20vdDUvdGVjaG5vbG9neS1ibG9ncy1ieS1zYXAvYnVpbGRpbmctcmVzaWxpZW50LWFwcGxpY2F0aW9ucy11c2luZy1zYXAtY2xvdWQtYXBwbGljYXRpb24tcHJvZ3JhbW1pbmcvYmEtcC8xMzYyODY0Nz9zYXAtb3V0Ym91bmQtaWQ9NjFDRDEyNDA5QzUyMTkxMkU0RDQzM0Y0NjlGNjQ4NEZDMTY4QjM1QSZzbWNfY2FtcGFpZ25faWQ9MDAwMDAzOTk5MSZzb3VyY2U9ZW1haWwtc21j&amp;_K13_=558&amp;_K14_=7c1d0d767d000afd916e3fb79a5a42ce0f272344d8953fe05a4bcc14e9d603b7" target="_blank" rel="noopener nofollow noreferrer">https://community.sap.com/t5/technology-blogs-by-sap/building-resilient-applications-using-sap-cloud-application-programming/ba-p/13628647</A></P><P><STRONG>Creating tree tables with OData V4 on SAP BTP ABAP environment</STRONG></P><P>If you want to implement hierarchies in the SAP BTP ABAP environment, here is an end-to-end guide on how to create tree tables.<BR /><A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=C73A1614E00A688CFA788B206F56B9C41CEBF685&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vY29tbXVuaXR5LnNhcC5jb20vdDUvZW50ZXJwcmlzZS1yZXNvdXJjZS1wbGFubmluZy1ibG9ncy1ieS1tZW1iZXJzL2NyZWF0aW5nLXRyZWUtdGFibGVzLXdpdGgtb2RhdGEtdjQtb24tc2FwLWJ0cC1hYmFwLWVudmlyb25tZW50L2JhLXAvMTM2MDUxNjA%2Fc2FwLW91dGJvdW5kLWlkPTYxQ0QxMjQwOUM1MjE5MTJFNEQ0MzNGNDY5RjY0ODRGQzE2OEIzNUEmc21jX2NhbXBhaWduX2lkPTAwMDAwMzk5OTEmc291cmNlPWVtYWlsLXNtYw&amp;_K13_=558&amp;_K14_=532214705e9bfc243716d8d4c53f9ecc97337c9c43db649b78552aefe0e6b441" target="_blank" rel="noopener nofollow noreferrer">https://community.sap.com/t5/enterprise-resource-planning-blogs-by-members/creating-tree-tables-with-odata-v4-on-sap-btp-abap-environment/ba-p/13605160</A>&nbsp;</P><P><STRONG>Introducing UI5 linter</STRONG></P><P>A linter is a static code analysis tool used to find programming bugs, stylistic errors, and suspicious constructs. The UI5 linter identifies problematic code that does not follow UI5 best practices.<BR /><A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=F440EDD332B65B7C97B340A0DEF53BB57D9C4131&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vY29tbXVuaXR5LnNhcC5jb20vdDUvdGVjaG5vbG9neS1ibG9ncy1ieS1zYXAvaW50cm9kdWNpbmctdWk1LWxpbnRlci9iYS1wLzEzNjMzODk4P3NhcC1vdXRib3VuZC1pZD02MUNEMTI0MDlDNTIxOTEyRTRENDMzRjQ2OUY2NDg0RkMxNjhCMzVBJnNtY19jYW1wYWlnbl9pZD0wMDAwMDM5OTkxJnNvdXJjZT1lbWFpbC1zbWM&amp;_K13_=558&amp;_K14_=9623d8250e69dc907c88e0e062946bcd3f2d3679c8cf2106a657e905481dda47" target="_blank" rel="noopener nofollow noreferrer">https://community.sap.com/t5/technology-blogs-by-sap/introducing-ui5-linter/ba-p/13633898</A></P><P><STRONG>UI5 walkthrough tutorial with TypeScript</STRONG></P><P>In this new tutorial, the UI5 team introduces all development paradigms of UI5 and demonstrates the benefits of TypeScript with UI5.<BR /><A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=454E99B0081367751A1713EBCD77A44F9E8B5691&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vdWk1LnNhcC5jb20vP3NhcC1vdXRib3VuZC1pZD02MUNEMTI0MDlDNTIxOTEyRTRENDMzRjQ2OUY2NDg0RkMxNjhCMzVBJnNtY19jYW1wYWlnbl9pZD0wMDAwMDM5OTkxJnNvdXJjZT1lbWFpbC1zbWMjL3RvcGljL2RhZDE5MDVhMDdmODQ5Y2U5YzUwOTcyMTMxN2QzOGQ4JTIw&amp;_K13_=558&amp;_K14_=01f48f07a4139dfc534e681ae3e9e86b1b6463587ab50b35cec2a096c91c8de0" target="_blank" rel="noopener nofollow noreferrer">https://ui5.sap.com/#/topic/dad1905a07f849ce9c509721317d38d8</A>&nbsp;</P><P><STRONG>Extend an upload set to SAP Fiori elements and utilize document management service</STRONG></P><P>If you are new to BTP, this post explores several utilities to help you come up to speed with programming and integration tasks.<BR /><A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=6A9D663995F1B21D89BDB5CB629F49981B9363BD&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vY29tbXVuaXR5LnNhcC5jb20vdDUvdGVjaG5vbG9neS1ibG9ncy1ieS1tZW1iZXJzL2V4dGVuZC11cGxvYWQtc2V0LXRvLWZpb3JpLWVsZW1lbnRzLWFuZC11dGlsaXplLWRvY3VtZW50LW1hbmFnZW1lbnQtc2VydmljZS9iYS1wLzEzNjEzOTExP3NhcC1vdXRib3VuZC1pZD02MUNEMTI0MDlDNTIxOTEyRTRENDMzRjQ2OUY2NDg0RkMxNjhCMzVBJnNtY19jYW1wYWlnbl9pZD0wMDAwMDM5OTkxJnNvdXJjZT1lbWFpbC1zbWM&amp;_K13_=558&amp;_K14_=bfe6b20ab7744049f4239172a8b963105bfc0d79d1f715c5cbe444c020adf223" target="_blank" rel="noopener nofollow noreferrer">https://community.sap.com/t5/technology-blogs-by-members/extend-upload-set-to-fiori-elements-and-utilize-document-management-service/ba-p/13613911</A></P><P><STRONG>Exposing an OData Service from SAP S/4HANA Cloud Public Edition to SAP BTP</STRONG></P><P>This blog post explains how to expose a CDS view as an API using developer extensibility in SAP S/4HANA Cloud Public Edition to be consumed in the SAP Business Technology Platform.<BR /><A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=A1684BC58B252931E95E660984204A8A8B76EBF4&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vY29tbXVuaXR5LnNhcC5jb20vdDUvdGVjaG5vbG9neS1ibG9ncy1ieS1zYXAvZXhwb3NpbmctYW4tb2RhdGEtc2VydmljZS1mcm9tLXNhcC1zLTRoYW5hLWNsb3VkLXB1YmxpYy1lZGl0aW9uLXRvLXRoZS1zYXAvYmEtcC8xMzYyODI0OD9zYXAtb3V0Ym91bmQtaWQ9NjFDRDEyNDA5QzUyMTkxMkU0RDQzM0Y0NjlGNjQ4NEZDMTY4QjM1QSZzbWNfY2FtcGFpZ25faWQ9MDAwMDAzOTk5MSZzb3VyY2U9ZW1haWwtc21j&amp;_K13_=558&amp;_K14_=9b62d5bb8f8abf84aa544cb47c7c1a3910e1a3ce35b7d8e8b614d50c51e6e590" target="_blank" rel="noopener nofollow noreferrer">https://community.sap.com/t5/technology-blogs-by-sap/exposing-an-odata-service-from-sap-s-4hana-cloud-public-edition-to-the-sap/ba-p/13628248</A></P><P><STRONG>Product updates for SAP Business Application Studio - February 2024 edition</STRONG></P><P>SAP Business Application Studio continues to evolve. This post shows some of the recent upgrades. In the next issue, there will be much more to share, as some big new functionality will be coming through Joule in SAP Build Code.<BR /><A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=1C236633642897B1F17CD9E089D9104F6208D0ED&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vY29tbXVuaXR5LnNhcC5jb20vdDUvdGVjaG5vbG9neS1ibG9ncy1ieS1zYXAvcHJvZHVjdC11cGRhdGVzLWZvci1zYXAtYnVzaW5lc3MtYXBwbGljYXRpb24tc3R1ZGlvLWZlYnJ1YXJ5LTIwMjQtZWRpdGlvbi9iYS1wLzEzNjIzNDc4P3NhcC1vdXRib3VuZC1pZD02MUNEMTI0MDlDNTIxOTEyRTRENDMzRjQ2OUY2NDg0RkMxNjhCMzVBJnNtY19jYW1wYWlnbl9pZD0wMDAwMDM5OTkxJnNvdXJjZT1lbWFpbC1zbWM&amp;_K13_=558&amp;_K14_=f461981fc15b13cbabcc2547cf719d33579ecacec378dffa2c80882206a4bd97" target="_blank" rel="noopener nofollow noreferrer">https://community.sap.com/t5/technology-blogs-by-sap/product-updates-for-sap-business-application-studio-february-2024-edition/ba-p/13623478</A></P><P><STRONG>Our latest roadmaps are available&nbsp;</STRONG></P><P><A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=AACEE9F66E98DE98E35663CD28FEF16A1ACE71FA&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vcm9hZG1hcHMuc2FwLmNvbS9ib2FyZD9QUk9EVUNUPTczNTU0OTAwMTAwODAwMDAxMzYxJnNhcC1vdXRib3VuZC1pZD02MUNEMTI0MDlDNTIxOTEyRTRENDMzRjQ2OUY2NDg0RkMxNjhCMzVBJnNtY19jYW1wYWlnbl9pZD0wMDAwMDM5OTkxJnNvdXJjZT1lbWFpbC1zbWM&amp;_K13_=558&amp;_K14_=c752525985baecf6c66c057c453e78fa46a14e9e3dbae1024bff0393902739da" target="_blank" rel="noopener nofollow noreferrer">SAPUI5 roadmap</A><BR /><A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=3AC1EB01FC5A9A97DA3AD1A4860F25CFE88EA7F2&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vcm9hZG1hcHMuc2FwLmNvbS9ib2FyZD9yYW5nZT1DVVJSRU5ULUxBU1QmcT1zYXAlMjBmaW9yaSUyMGVsZW1lbnRzJnNhcC1vdXRib3VuZC1pZD02MUNEMTI0MDlDNTIxOTEyRTRENDMzRjQ2OUY2NDg0RkMxNjhCMzVBJnNtY19jYW1wYWlnbl9pZD0wMDAwMDM5OTkxJnNvdXJjZT1lbWFpbC1zbWMjUTMlMjAyMDIz&amp;_K13_=558&amp;_K14_=48ce384f3f87373ab64aa7caf759b95c43cf5a0769b1e5ffde98128935f4b6fc" target="_blank" rel="noopener nofollow noreferrer">SAP Fiori elements roadmap</A> <A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=B62B33A0455C2C37FBDFF17412E0179D7B92E4BB&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vcm9hZG1hcHMuc2FwLmNvbS9ib2FyZD9QUk9EVUNUPTY3ODM3ODAwMTAwODAwMDA3MDc3JnJhbmdlPUNVUlJFTlQtTEFTVCZzYXAtb3V0Ym91bmQtaWQ9NjFDRDEyNDA5QzUyMTkxMkU0RDQzM0Y0NjlGNjQ4NEZDMTY4QjM1QSZzbWNfY2FtcGFpZ25faWQ9MDAwMDAzOTk5MSZzb3VyY2U9ZW1haWwtc21jI1EzJTIwMjAyMw&amp;_K13_=558&amp;_K14_=852c4b5ab13d3f7d18f3db8c82eba1deca910a49a84e0863d5bcb576e2d6b6a2" target="_blank" rel="noopener nofollow noreferrer"><BR />SAP Business Application Studio roadmap</A><BR /><A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=EAA108790071D1AD966F905411B6A888AB5E61D3&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vcm9hZG1hcHMuc2FwLmNvbS9ib2FyZD9yYW5nZT1DVVJSRU5ULUxBU1QmcT1zYXAlMjBmaW9yaSUyMHRvb2xzJnNhcC1vdXRib3VuZC1pZD02MUNEMTI0MDlDNTIxOTEyRTRENDMzRjQ2OUY2NDg0RkMxNjhCMzVBJnNtY19jYW1wYWlnbl9pZD0wMDAwMDM5OTkxJnNvdXJjZT1lbWFpbC1zbWMjUTMlMjAyMDIz&amp;_K13_=558&amp;_K14_=b0086322dce37972a7e5ce0fca7d7e391c15cb6564a935684bb033ee5c200bbb" target="_blank" rel="noopener nofollow noreferrer">SAP Fiori tools roadmap</A></P><H1 id="toc-hId-664275063">New Tutorials</H1><P><STRONG>Learn how Key User Adaptation for SAPUI5 works with a hands-on approach using demo apps</STRONG></P><P>Learn how Key User Adaptation for SAPUI5 works with a hands-on approach using demo apps.<BR /><A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=BEE1ABAEF873FFB6DFF4A6550772EB1B52DB2CD8&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vY29tbXVuaXR5LnNhcC5jb20vdDUvdGVjaG5vbG9neS1ibG9ncy1ieS1zYXAvbmV3LXR1dG9yaWFsLW1pc3Npb24ta2V5LXVzZXItYWRhcHRhdGlvbi1mb3Itc2FwdWk1LWFwcGxpY2F0aW9ucy9iYS1wLzEzNjM5Njk0P3NhcC1vdXRib3VuZC1pZD02MUNEMTI0MDlDNTIxOTEyRTRENDMzRjQ2OUY2NDg0RkMxNjhCMzVBJnNtY19jYW1wYWlnbl9pZD0wMDAwMDM5OTkxJnNvdXJjZT1lbWFpbC1zbWM&amp;_K13_=558&amp;_K14_=cf1dcf71194d480105561509fb7213ea7196346330eeaf2c0f7a477c70798c77" target="_blank" rel="noopener nofollow noreferrer">https://community.sap.com/t5/technology-blogs-by-sap/new-tutorial-mission-key-user-adaptation-for-sapui5-applications/ba-p/13639694</A></P><P><STRONG>Tutorial: SAPUI5 Adaptation Projects for SAP S/4HANA Cloud</STRONG></P><P>SAPUI5 Adaptation Projects in SAP Business Application Studio are not new. But what is new is the support for SAP S/HANA Cloud. This enables developers to enhance SAPUI5 applications in SAP S/4HANA Cloud with comprehensive features that were previously exclusive to on-premise customers. See this blog post linking to an extensive, end-to-end tutorial:<BR /><A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=D65C9FF12BB752E8271E7B2ACA8D73BA6E014FBF&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vY29tbXVuaXR5LnNhcC5jb20vdDUvZW50ZXJwcmlzZS1yZXNvdXJjZS1wbGFubmluZy1ibG9ncy1ieS1zYXAvZXh0ZW5kaW5nLXNhcC1zLTRoYW5hLWNsb3VkLXB1YmxpYy1lZGl0aW9uLXVzaW5nLXNhcHVpNS1hZGFwdGF0aW9uLXByb2plY3RzL2JhLXAvMTM2MDc4MTM%2Fc2FwLW91dGJvdW5kLWlkPTYxQ0QxMjQwOUM1MjE5MTJFNEQ0MzNGNDY5RjY0ODRGQzE2OEIzNUEmc21jX2NhbXBhaWduX2lkPTAwMDAwMzk5OTEmc291cmNlPWVtYWlsLXNtYw&amp;_K13_=558&amp;_K14_=150293c52d1bcadbbc1bc65327e2085ef9a268457395ad294b783a70c9909f18" target="_blank" rel="noopener nofollow noreferrer">https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/extending-sap-s-4hana-cloud-public-edition-using-sapui5-adaptation-projects/ba-p/13607813</A></P><H1 id="toc-hId-467761558">Developer Events</H1><P><STRONG>SAP Fiori Innovation Day in Dublin summary</STRONG></P><P>Our first-ever SAP Fiori Innovation Day was a great success. Read Ian's summary to see what you missed. If the topic excites you, we will be having one in Chicago in June and Paris in October. Stay tuned for more info.&nbsp;<BR /><A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=0CF1FA832BD9D6A7CC2EDA517403EB58F1BAE225&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vY29tbXVuaXR5LnNhcC5jb20vdDUvdGVjaG5vbG9neS1ibG9ncy1ieS1zYXAvc2FwLWZpb3JpLWlubm92YXRpb24tZGF5LWluLWR1Ymxpbi1kZW1vcy1pbXBsZW1lbnRhdGlvbi10aXBzLWFuZC1sb3RzLW9mLWFpL2JhLXAvMTM2MTg5NTE%2Fc2FwLW91dGJvdW5kLWlkPTYxQ0QxMjQwOUM1MjE5MTJFNEQ0MzNGNDY5RjY0ODRGQzE2OEIzNUEmc21jX2NhbXBhaWduX2lkPTAwMDAwMzk5OTEmc291cmNlPWVtYWlsLXNtYw&amp;_K13_=558&amp;_K14_=62c4635688bdf25ae9fe504c6b0ca777fee68fa388e05438be15ba6dbd7bb585" target="_blank" rel="noopener nofollow noreferrer">https://community.sap.com/t5/technology-blogs-by-sap/sap-fiori-innovation-day-in-dublin-demos-implementation-tips-and-lots-of-ai/ba-p/13618951</A></P><P><STRONG>SAP Fiori elements and Lufthansa @ DSAG Technology Day 2024 summary</STRONG></P><P>At the DSAG Technologietage 2024 event (German SAP user group), Sebastian Werner gave a talk alongside Lufthansa on how they use SAP Fiori elements &amp; tools.<BR /><A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=A847C4C6EEDF61E504D072D4162131B3601468E0&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vY29tbXVuaXR5LnNhcC5jb20vdDUvdGVjaG5vbG9neS1ibG9ncy1ieS1zYXAvc2FwLWZpb3JpLWVsZW1lbnRzLWFuZC1sdWZ0aGFuc2EtZHNhZy10ZWNobm9sb2dpZXRhZ2UtMjAyNC9iYS1wLzEzNjI5NDM0P3NhcC1vdXRib3VuZC1pZD02MUNEMTI0MDlDNTIxOTEyRTRENDMzRjQ2OUY2NDg0RkMxNjhCMzVBJnNtY19jYW1wYWlnbl9pZD0wMDAwMDM5OTkxJnNvdXJjZT1lbWFpbC1zbWM&amp;_K13_=558&amp;_K14_=06e2a3812fe955299e45b00cc91c55ea2a1370efba23f9689e0fd14ad5aa9e59" target="_blank" rel="noopener nofollow noreferrer">https://community.sap.com/t5/technology-blogs-by-sap/sap-fiori-elements-and-lufthansa-dsag-technologietage-2024/ba-p/13629434</A></P><P><STRONG>Mark your calendar for UI5con and reCAP</STRONG></P><P>The community conferences around UI5 and CAP are coming back in 2024, see the announcements on UI5con and reCAP.<BR /><BR /><A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=5070F4F62C75966165031D1760AB17E1DF322D00&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vb3BlbnVpNS5vcmcvdWk1Y29uL2dlcm1hbnkyMDI0Lz9zYXAtb3V0Ym91bmQtaWQ9NjFDRDEyNDA5QzUyMTkxMkU0RDQzM0Y0NjlGNjQ4NEZDMTY4QjM1QSZzbWNfY2FtcGFpZ25faWQ9MDAwMDAzOTk5MSZzb3VyY2U9ZW1haWwtc21j&amp;_K13_=558&amp;_K14_=f1be1271f441455a200c3302ce097d94afec29c067f66923f27c2227b8c7471c" target="_blank" rel="noopener nofollow noreferrer">https://openui5.org/ui5con/germany2024/</A><BR /><A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=FAB36A4ADA3C4F548FE543B798162E39E38A5EE2&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vcmVjYXAtY29uZi5kZXYvP3NhcC1vdXRib3VuZC1pZD02MUNEMTI0MDlDNTIxOTEyRTRENDMzRjQ2OUY2NDg0RkMxNjhCMzVBJnNtY19jYW1wYWlnbl9pZD0wMDAwMDM5OTkxJnNvdXJjZT1lbWFpbC1zbWM&amp;_K13_=558&amp;_K14_=6412ffa343bfc1bd4e0d61f92067866d39f1dcf9104a71716389c87598005f92" target="_blank" rel="noopener nofollow noreferrer">https://recap-conf.dev/</A><BR /><A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=B741E2F15357CBA3E34E19697F3E4B18E54CADA2&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vYWJhcGNvbmYub3JnLz9zYXAtb3V0Ym91bmQtaWQ9NjFDRDEyNDA5QzUyMTkxMkU0RDQzM0Y0NjlGNjQ4NEZDMTY4QjM1QSZzbWNfY2FtcGFpZ25faWQ9MDAwMDAzOTk5MSZzb3VyY2U9ZW1haWwtc21j&amp;_K13_=558&amp;_K14_=3725ad94436cad57cb22cff3fba6ea062cf5705b3717f8db5a4ee0cdb307e5fa" target="_blank" rel="noopener nofollow noreferrer">https://abapconf.org/</A><BR /><BR />These three events together form CodeConnect 2024, which starts the week of June 3.<BR /><A href="https://smc-link.s4hana.ondemand.com/eu/data-buffer/sap/public/cuan/link/100/61CD12409C521912E4D433F469F6484FC168B35A?_V_=2&amp;_K11_=97B20EC85C92CA7EBC34C4985F7BF9ED891D9A61&amp;_L54AD1F204_=c2NlbmFyaW89TUxDUEcmdGVuYW50PW15MzAwNzIzLnM0aGFuYS5vbmRlbWFuZC5jb20mdGFyZ2V0PWh0dHBzOi8vY29kZS1jb25uZWN0LmRldi8%2Fc2FwLW91dGJvdW5kLWlkPTYxQ0QxMjQwOUM1MjE5MTJFNEQ0MzNGNDY5RjY0ODRGQzE2OEIzNUEmc21jX2NhbXBhaWduX2lkPTAwMDAwMzk5OTEmc291cmNlPWVtYWlsLXNtYw&amp;_K13_=558&amp;_K14_=5275969e04d6f8b8d5479099e62c489c1dd27a5d0a4b5b68a8be97d8b14832cd" target="_blank" rel="noopener nofollow noreferrer">https://code-connect.dev/</A>&nbsp;</P><H2 id="toc-hId-400330772">More Resources</H2><P><STRONG>Visit our community pages</STRONG><STRONG><BR /></STRONG><A href="https://community.sap.com/topics/ui5" target="_blank">SAPUI5</A><BR /><A href="https://community.sap.com/topics/fiori-elements" target="_blank">SAP Fiori elements</A><BR /><A href="https://community.sap.com/topics/business-application-studio" target="_blank">SAP Business Application Studio</A><BR /><A href="https://community.sap.com/topics/fiori-tools" target="_blank">SAP Fiori tools</A><BR /><BR /><STRONG>Ask a question in the community</STRONG><BR /><A href="https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fopenui5.org%2Fcommunity%2F&amp;data=05%7C01%7Ci829879%40global.corp.sap%7Caf16621464ff4bc247f508daf8d5d17c%7C42f7676cf455423c82f6dc2d99791af7%7C0%7C0%7C638095894507016480%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&amp;sdata=q63wD0GpDTg5nUY9Rl%2FJyfJMvkvmhQQNHLJiXtfTWPY%3D&amp;reserved=0" target="_blank" rel="noopener nofollow noreferrer">SAPUI5</A><BR /><A href="https://answers.sap.com/questions/ask.html?primaryTagId=ed5c1ef6-932f-4c19-b2ba-1be375109ff5" target="_blank" rel="noopener noreferrer">ask.sapfiorielements.com</A><BR /><A href="https://answers.sap.com/questions/ask.html?primaryTagId=67837800100800007077" target="_blank" rel="noopener noreferrer">SAP Business Application Studio</A><BR /><A href="https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fask.sapfioritools.com%2F&amp;data=05%7C01%7Ci829879%40global.corp.sap%7Caf16621464ff4bc247f508daf8d5d17c%7C42f7676cf455423c82f6dc2d99791af7%7C0%7C0%7C638095894507016480%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&amp;sdata=vuCxAjDJwjyQW0jLzq9BoJxzQ%2FlFQt%2F2NYHPvyBGMh4%3D&amp;reserved=0" target="_blank" rel="noopener nofollow noreferrer">ask.sapfioritools.com</A></P><H2 id="toc-hId-203817267">Back issues from the past year</H2><P><A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-fiori-development-newsletter-january-2024-issue-26/ba-p/13582916" target="_self">SAP Fiori development newsletter #26 (January 2023)</A></P><P><A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-fiori-development-newsletter-november-2023-issue-25/ba-p/13573104" target="_self">SAP Fiori development newsletter #25 (November 2023)</A></P><P><A href="https://blogs.sap.com/2023/09/12/sap-fiori-development-newsletter-september-2023-issue-24/" target="_blank" rel="noopener noreferrer">SAP Fiori development newsletter #24 (September 2023)</A><BR /><BR /><A href="https://blogs.sap.com/2023/07/18/sap-fiori-development-newsletter-july-2023-issue-23/" target="_blank" rel="noopener noreferrer">SAP Fiori development newsletter #23 (July 2023)</A><BR /><BR /><A href="https://blogs.sap.com/2023/05/03/sap-fiori-development-newsletter-may-2023-issue-22/" target="_blank" rel="noopener noreferrer">SAP Fiori development newsletter #22 (May 2023)</A><BR /><BR /></P> 2024-03-21T21:44:49.447000+01:00 https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/start-extending-sap-s-4hana-cloud-public-edition-with-sapui5-adaptation/ba-p/13646907 Start extending SAP S/4HANA Cloud Public Edition with SAPUI5 adaptation projects 2024-03-22T18:40:55.511000+01:00 elisabeth_riemann https://community.sap.com/t5/user/viewprofilepage/user-id/250535 <P>See the simple and effective changes you'll learn how to make to your application variant:</P><P><STRONG><A href="https://sapvideo.cfapps.eu10-004.hana.ondemand.com/?entry_id=1_5r7r5h0n" target="_blank" rel="noopener nofollow noreferrer">https://sapvideo.cfapps.eu10-004.hana.ondemand.com/?entry_id=1_5r7r5h0n</A></STRONG></P><P>Start extending with SAPUI5 adaptation projects:</P><OL><LI><A href="https://developers.sap.com/tutorials/sapui5-adaptation-change-variant.html" target="_blank" rel="noopener noreferrer">Tutorial 1: Work with SAPUI5 adaptation projects to generate and make simple changes to an applicati...</A></LI><LI><SPAN><A href="https://developers.sap.com/tutorials/sapui5-adaptation-extend-variant.html" target="_blank" rel="noopener noreferrer">Tutorial 2: Work with SAPUI5 adaptation projects to extend the source code of an application variant...</A></SPAN></LI><LI><SPAN><A href="https://developers.sap.com/tutorials/sapui5-adaptation-application-publish.html" target="_blank" rel="noopener noreferrer">Tutorial 3: Make Your Application Variant (created in an SAPUI5 adaptation project) available to bus...</A></SPAN></LI></OL><P><SPAN>For more information, see&nbsp;</SPAN><SPAN><A href="https://help.sap.com/docs/bas/developing-sap-fiori-app-in-sap-business-application-studio/extending-sap-fiori-application-for-s-4hana-cloud" target="_blank" rel="noopener noreferrer">Extending an SAP Fiori Application for SAP S/4HANA Cloud Public Edition</A></SPAN><SPAN>&nbsp;&nbsp;</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>See my earlier post for more details:&nbsp;<A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/learn-how-to-work-with-sapui5-adaptation-projects-to-extend-sap-s-4hana/ba-p/13607922" target="_blank">https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/learn-how-to-work-with-sapui5-adaptation-projects-to-extend-sap-s-4hana/ba-p/13607922</A></SPAN></P> 2024-03-22T18:40:55.511000+01:00 https://community.sap.com/t5/technology-blogs-by-sap/product-updates-for-sap-business-application-studio-march-2024-edition/ba-p/13648823 Product Updates for SAP Business Application Studio - March 2024 Edition 2024-03-26T08:39:28.924000+01:00 FranziMickIT https://community.sap.com/t5/user/viewprofilepage/user-id/163138 <P><SPAN>Dear community,</SPAN></P><P><SPAN>Welcome to our detailed exploration of some recent enhancements within the SAP Business Application Studio. This post will guide you through key updates, including our streamlined Storyboard, a newly designed 'Welcome' page, the introduction of SAPUI5 adaptation projects, a comprehensive SAPUI5 Walkthrough Tutorial with TypeScript, and the new feature – release of the powerful UI5 linter. Each feature mentioned contributes to overall user productivity, designed to improve your working experience with us.</SPAN></P><P>&nbsp;</P><H1 id="toc-hId-860854818"><SPAN>Enhancing Productivity with our Updated Storyboard</SPAN></H1><P><SPAN>SAP Business Application Studio now provides a streamlined storyboard. The improved interface allows you to readily view which service actions and functions your application includes. This overview aids in the comprehension and management of your tools, ensuring you are using your resources to their full potential.</SPAN></P><P><SPAN>We've also added the option to trigger the creation of unbound actions and functions directly. This eliminates the need for extra steps and consolidates key tasks in one location, reducing the time required for task navigation and management.</SPAN></P><P><SPAN>The described enhancements improve the experience in two major ways: by having a more complete, clearer visualization of your app's functions and by simplifying the creation and editing process. </SPAN></P><P><SPAN>Have a look at some sample of our updated storyboard below:</SPAN></P><DIV class=""><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Updated Storyboard of SAP Business Application Studio" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/86106i8BE37DF5ED510DBF/image-size/large?v=v2&amp;px=999" role="button" title="Storyboard_updated.gif" alt="Updated Storyboard of SAP Business Application Studio" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Updated Storyboard of SAP Business Application Studio</span></span><P>&nbsp;</P></DIV><H1 id="toc-hId-664341313"><SPAN>New Welcome Page for SAP HANA Applications</SPAN></H1><P><SPAN>Our new 'Welcome' page, designed with your needs in mind, serves as an efficient gateway to interact with SAP HANA-related features within SAP Business Application Studio. This hub offers enriched documentation, insightful blogs, and direct access to various integral aspects that can facilitate and speed up your SAP HANA development journey.</SPAN></P><DIV class=""><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="SAP HANA Welcome Page in SAP Business Application Studio" style="width: 804px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/86115iD11E7F6904117CAC/image-size/large?v=v2&amp;px=999" role="button" title="SAP HANA Welcome Page.jpg" alt="SAP HANA Welcome Page in SAP Business Application Studio" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP HANA Welcome Page in SAP Business Application Studio</span></span><P><SPAN>As soon as you start your SAP Business Application Studio instance for SAP HANA Native Applications, you will find this new page. Some of the hyperlinks point to guides within SAP Business Application Studio, others to outside of it, including blogs on community.sap.com and material on help.sap.com.</SPAN></P></DIV><P><SPAN>The information is segmented into five structured sections. The 'Start' segment provides straightforward access to SAP HANA project creation, while the 'Development' section enlists tools to accelerate initiating a project or service.</SPAN></P><P><SPAN>The 'Blog posts' segment serves as a crucial knowledge base, offering valuable insights into SAP HANA development, including vital components like calculation view modeling and best practices. For those aspiring to refine their skills, the 'Get Started with SAP HANA' section presents comprehensive learning materials related to SAP HANA development, facilitating continuous skill improvement.</SPAN></P><P><SPAN>Lastly, the 'Help' section plays the role of an informative guide, providing exhaustive documentation pertaining to SAP HANA development topics. In essence, our 'Welcome' page aims to be a comprehensive, easy-to-navigate resource, dedicated to refining your SAP HANA developmental experience, right from the outset.</SPAN></P><P>&nbsp;</P><H1 id="toc-hId-467827808"><SPAN>SAPUI5 Adaptation Projects for SAP S/4HANA Cloud Public Edition</SPAN></H1><P><SPAN>SAP Business Application Studio now enables a significant feature for enhancing SAP S/4HANA Cloud Public Edition - the ability to employ SAPUI5 adaptation projects. These projects enable the creation of application variants tailored to fulfill the specific business requirements of diverse business roles, organizational units, and countries. They offer the ability to design efficient processes by concealing unnecessary fields, representing data in chart formats, or alternation between responsive and grid tables for enhanced data comprehension.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Creation of an SAPUI5 Adaptation Project" style="width: 384px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/86119i01D85E8480FE8668/image-size/medium?v=v2&amp;px=400" role="button" title="Adaptation Projects.jpeg" alt="Creation of an SAPUI5 Adaptation Project" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Creation of an SAPUI5 Adaptation Project</span></span></P><P><SPAN>The primary advantage of an adaptation project lies in allowing you to leverage the original SAP Fiori application, its OData service, and application logic, to exclusively govern modifications specific to the application variant. Upon deployment, the source application and the derived application variant co-exist under distinct titles, accessible to corresponding business users via uniquely named application tiles in ‘My Home’, the new SAP S/4HANA Cloud Public Edition’s starting point.</SPAN></P><P><SPAN><A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/extending-sap-s-4hana-cloud-public-edition-using-sapui5-adaptation-projects/ba-p/13607813" target="_self">See this blog post from Elisabeth Riemann linking to an extensive, end-2-end tutorial</A>.</SPAN></P><P><SPAN>Did you know that adaptation projects are a part of ‘SAPUI5 flexibility’? <A href="https://help.sap.com/docs/UI5_FLEXIBILITY/430e2c1a4ff241bc8162df4bf51e0730/e36d19b3d24f47199a9a82d3faa508c3.html?language=en-US&amp;locale=en-US" target="_self" rel="noopener noreferrer">Everything you want to know about this toolset is described in our Help Portal</A>.</SPAN></P><P>&nbsp;</P><H1 id="toc-hId-271314303"><SPAN>SAPUI5 Walkthrough Tutorial with TypeScript</SPAN></H1><P>Our UI5 team has created this&nbsp;tutorial to introduce&nbsp;<A href="https://ui5.sap.com/#/topic/dad1905a07f849ce9c509721317d38d8" target="_self" rel="noopener noreferrer">all development paradigms of SAPUI5 and also demonstrate the benefits of TypeScript with SAPUI5</A>.</P><P><SPAN>This tutorial provides extensive guidance on key SAPUI5 development principles and data binding concepts through creating an application from scratch. After this, the tutorial guides you through enhancing the app with advanced features like navigation, control extension, responsiveness, and exploring built-in support tools.</SPAN></P><P>&nbsp;</P><H1 id="toc-hId-74800798"><SPAN>Introducing UI5 linter</SPAN></H1><P>We have introduced UI5 linter, a static code analysis tool that enhances code quality, readability, security, and efficiency. Its initial features focus on validating compliance with the Best Practices for UI5 Developers, reporting areas of concern like deprecated APIs, synchronous loading mechanisms, and global variables usage. The UI5 linter can be easily installed and used via .npm package manager and is instrumental in preparing your project for future versions of UI5.</P><P>Use the UI5 linter to identify problematic code that does not follow UI5 best practices.</P><P><A href="https://community.sap.com/t5/technology-blogs-by-sap/introducing-ui5-linter/ba-p/13633898" target="_self">Learn more about UI5 linter in a blog post from Oliver Graeff</A>.</P><P><SPAN>.</SPAN></P><P><SPAN>That brings us to the end of this update. We hope you found this insight into our recent enhancements beneficial. As we continue to enhance SAP Business Application Studio, we encourage you to explore and leverage these new features to increase your productivity. Thank you for your ongoing commitment to our products, and we ensure that we remain dedicated to improving your user experience. Stay connected for our next round of updates!</SPAN></P><P><SPAN>Happy coding!</SPAN></P> 2024-03-26T08:39:28.924000+01:00 https://community.sap.com/t5/technology-blogs-by-sap/announcing-general-availability-of-sap-build-code-speed-up-development-with/ba-p/13646073 Announcing General Availability of SAP Build Code: Speed up development with generative AI 2024-03-27T03:00:00.041000+01:00 bhagat_nainani https://community.sap.com/t5/user/viewprofilepage/user-id/730384 <P>SAP is dedicated to increasing developer productivity enabling rapid extension of SAP S/4HANA and other enterprise applications. To support this mission, we announced SAP Build Code at TechEd 2023 and today, I’m excited to announce that it is generally available to all developers. Get started with <A title="the Test Drive tutorial" href="https://developers.sap.com/mission.sap-build-code-test-drive.html" target="_blank" rel="noopener noreferrer">the Test Drive tutorial</A>!</P> <H2 id="toc-hId-989870422">What is SAP Build Code?</H2> <P>SAP Build Code provides <STRONG>AI-based code generation</STRONG> with Joule copilot, optimized for Java and JavaScript application development. It is a comprehensive, turn-key solution for coding, testing, integrations, and application lifecycle management. You can leverage Joule to efficiently generate application logic, data models, and test scripts. As an end-to-end integrated solution, SAP Build Code enhances the entire development process, from design time to runtime, significantly boosting your productivity.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Build Code and Joule.gif" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/86171i6084988F0A5FB17A/image-size/large?v=v2&amp;px=999" role="button" title="Build Code and Joule.gif" alt="Build Code and Joule.gif" /></span></P> <P style=" text-align: center; "><FONT size="2"><EM>Picture 1: Joule-powered code generation and visual representation of the code in SAP Build Code&nbsp;</EM></FONT></P> <P>SAP Build Code is <STRONG>tailored for SAP development</STRONG>, allowing you to utilize your favorite SAP programming models and frameworks and enabling you to connect seamlessly to S/4HANA and other applications with prebuilt integrations. It provides you with a guided development experience following best practices from SAP. The Service Center in SAP Build Code provides direct access to discovery and consumption of SAP APIs Including OData and Business Events from SAP and third-party systems. As an integral part of SAP Business Technology Platform (BTP), SAP Build inherits all the robust security and integration capabilities of BTP. This not only enhances security but also simplifies the development of extensions and applications for SAP S/4HANA and other enterprise applications following SAPs clean core strategy.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Build Code Service Center.gif" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/86175i16DA6E0B17F3533F/image-size/large?v=v2&amp;px=999" role="button" title="Build Code Service Center.gif" alt="Build Code Service Center.gif" /></span></P> <P style=" text-align: center; "><FONT size="2"><EM>&nbsp;Picture 2: Direct access to SAP applications and data in SAP Build Code through the Service Center</EM></FONT>&nbsp;</P> <P>But there's more – SAP Build Code&nbsp;encourages <STRONG>fusion development</STRONG>, an approach that uses a mix of traditional coding and low-code development. This is thanks to its support for app composability and the reuse of project components across SAP Build low-code solutions and ABAP environments. SAP Build Code makes your development process faster, more collaborative, and more integrated with the SAP ecosystem, perfect for those looking to streamline their development projects.</P> <H2 id="toc-hId-793356917">What developers are saying about SAP Build Code</H2> <P>Since announcing the solution, we’ve had 450 developers use SAP Build Code in our preview program. Here are a couple of my favorite quotes from the developers who have used SAP Build Code to build full-stack SAP Fiori applications so far:</P> <P>"<EM>SAP Build Code is yet another great offering within the SAP BTP ecosystem. I'm impressed by its maturity and developer-friendly features that quickly get you up and running. Gone are the days of wrestling with your application logic and data models. With a thoughtful prompt, Joule can get your application logic and data models created and fully functioning in just a few clicks.</EM>"<BR />– Mark Smith, Senior Full-Stack Developer, Mindset Consulting</P> <P>“<EM>SAP Build Code will enable rapid development and has all the features we require to build a full stack solution powered with generative AI, including pre-configured runtime and design time capabilities, enabling shorter lead time to market.</EM>”<BR />– Nilesh Mhatre, CIO Americas, IMEA and Global Technology Center, Henkel</P> <H2 id="toc-hId-596843412">Try it yourself – take SAP Build Code for a Test Drive!</H2> <P>You can&nbsp;<STRONG>experience SAP Build Code with</STRONG> <A title="the Test Drive tutorial" href="https://developers.sap.com/mission.sap-build-code-test-drive.html" target="_blank" rel="noopener noreferrer">the Test Drive tutorial</A>. This unique opportunity allows you to explore the full capabilities of SAP Build Code, including Joule-powered AI-based code generation, in the SAP BTP Trial, guided by the expertise of SAP Developer Advocates and the vibrant SAP Community.</P> <P>By participating, you will not only gain hands-on experience with SAP Build Code but also have the chance to earn an SAP Community badge, recognizing your efforts and learning. This is an excellent way to enhance your skills, connect with fellow developers, and get a head start with SAP Build Code.</P> <H2 id="toc-hId-400329907">Don’t miss out – our free AI offer for early adopters</H2> <P>We are offering a limited quantity of Joule generative AI within the trial version of SAP Build Code. This allows you to experience the power of AI-assisted code development for free. Furthermore, if you move to the SAP Build Code, standard plan, there is a significant increase in <STRONG>the amount of free AI quantity</STRONG> you will receive from now until September 1, 2024.</P> <P><span class="lia-unicode-emoji" title=":right_arrow:">➡️</span>&nbsp; Just another reason to get started early, <STRONG>so take the <A title="Test Drive" href="https://developers.sap.com/mission.sap-build-code-test-drive.html" target="_self" rel="noopener noreferrer">Test Drive</A></STRONG> and have fun!</P> 2024-03-27T03:00:00.041000+01:00 https://community.sap.com/t5/technology-blogs-by-sap/sap-build-code-is-now-on-sap-btp-trial/ba-p/13642626 SAP Build Code is now on SAP BTP Trial 2024-03-27T03:10:00.027000+01:00 Anna-Maria https://community.sap.com/t5/user/viewprofilepage/user-id/8352 <H1 id="toc-hId-860674153">Try SAP Build Code and Elevate Your Development Experience</H1><P>We are excited to announce that <A href="https://community.sap.com/t5/technology-blogs-by-sap/announcing-general-availability-of-sap-build-code-speed-up-development-with/ba-p/13646073" target="_self">SAP Build Code is now generally available</A> and with that also available on the <A href="https://account.hanatrial.ondemand.com/trial/#/home/trial" target="_self" rel="nofollow noopener noreferrer">SAP Business Technology Platform (BTP) Trial</A>. This offers you the opportunity to try out our AI-powered development experience with Joule, designed to meet the needs of today's SAP developers while paving the way for the future of coding.</P><P>SAP Build Code introduces an end-to-end integrated solution from design time to runtime where SAP technologies and AI converge, offering a unique experience that enhances productivity and innovation.</P><H2 id="toc-hId-793243367">SAP Build Code on SAP BTP Trial</H2><UL><LI><STRONG>Extended Test Duration:</STRONG> With a generous 90-day test duration, you have ample time to explore, experiment, and evaluate the full spectrum of features and capabilities offered by SAP Build Code.</LI><LI><STRONG>Simplified Onboarding Experience:</STRONG> Getting started with SAP Build Code is easier than ever. We've streamlined the onboarding process with a new Trial Booster to ensure that you can dive into your projects without unnecessary delays.</LI><LI><STRONG>No Financial Information required:</STRONG> In line with our commitment to accessibility and ease of use, the SAP BTP Trial for SAP Build Code does not require any payment method or financial information to get started.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Picture 1: Screenshot of SAP BTP Trial Cockpit and SAP Build Code Booster" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/84607i983941F4DFDD56B8/image-size/large?v=v2&amp;px=999" role="button" title="image (3).png" alt="Picture 1: Screenshot of SAP BTP Trial Cockpit and SAP Build Code Booster" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Picture 1: Screenshot of SAP BTP Trial Cockpit and SAP Build Code Booster</span></span></P><P>The trial version of SAP Build Code is an invitation to try out this innovative development experience firsthand. No strings attached. Whether you're building applications, integrating services, or creating extensions, SAP Build Code, powered by Joule co-pilot, is designed to elevate the way you work.<BR /><BR />While the trial offers a glimpse into the potential of SAP Build Code, <STRONG>it's important to note that there are limitations to the use of AI tokens.</STRONG> To enjoy the full experience of SAP Build Code, we encourage you to become SAP Build Code customers<SPAN>. For early adopters that move to the SAP Build Code standard plan, there is a significant increase in the amount of free AI quota you will receive from now until September 1, 2024.&nbsp;</SPAN>You can easily export your project from SAP BTP Trial and import it in the productive landscape when you make the switch.<BR /><BR />For more information and to get started and activate SAP Build Code in SAP BTP Trial, check out our short tutorial on <FONT color="#000000"><A href="https://developers.sap.com/tutorials/build-code-setup.html" target="_self" rel="noopener noreferrer">how to set up SAP&nbsp;Build Code on SAP BTP Trial</A>.</FONT><BR /><BR />Start your journey with SAP Build Code on SAP BTP Trial today and take it for a <FONT color="#FF0000"><A href="https://developers.sap.com/mission.sap-build-code-test-drive.html" target="_self" rel="noopener noreferrer"><FONT color="#000000"><STRONG><FONT face="arial black,avant garde" color="#3366FF">Test Drive</FONT></STRONG>!</FONT></A>&nbsp;<span class="lia-unicode-emoji" title=":racing_car:">🏎</span><BR /><BR /><FONT color="#000000">__________________</FONT></FONT></P><P><FONT size="2" color="#000000">Note: If you were already using SAP Business Application Studio, you can continue to access your previous projects by clicking on the SAP Business Application Studio link on the homepage or in Instances and Subscriptions. Previously created projects will not show up in the SAP Build Code Lobby.</FONT></P><P><FONT size="2" color="#000000">Edit: SAP Build Code for the SAP BTP Free Plan will be added at a later point.</FONT></P><P><FONT size="2" color="#000000"><A href="https://community.sap.com/topics/build-code" target="_blank"><span class="lia-unicode-emoji" title=":nerd_face:">🤓</span>Follow SAP Build Code in the SAP Community</A><BR /></FONT><FONT size="2" color="#000000"><A href="https://www.sap.com/assetdetail/2023/10/563306b2-947e-0010-bca6-c68f7e60039b.html" target="_blank" rel="noopener noreferrer"><span class="lia-unicode-emoji" title=":videocassette:">📼</span>&nbsp;Watch the demo video</A></FONT></P> 2024-03-27T03:10:00.027000+01:00 https://community.sap.com/t5/technology-blogs-by-sap/sap-fiori-tools-2403-introduces-gen-ai-capability-and-more/ba-p/13650594 SAP Fiori tools 2403 introduces Gen AI capability and more 2024-03-27T18:43:58.112000+01:00 tashley https://community.sap.com/t5/user/viewprofilepage/user-id/316392 <P>In the ever-evolving landscape of app development, agility and efficiency are critical. SAP Fiori tools continues to be at the forefront of empowering developers with tools that streamline the creation of SAP Fiori applications. The latest enhancements in SAP Fiori tools introduce many exciting features aimed at revolutionizing the development process and fostering greater collaboration across teams. I am most excited <SPAN>that we have added new</SPAN> generative<SPAN> AI capabilit</SPAN>ies<SPAN> to create SAP Fiori element apps </SPAN>directly <SPAN>from a business requirement </SPAN>. This release also includes:</P><UL><LI>Semantic buttons in the page editor</LI><LI>Improvements to the annotation LSP code completion</LI><LI>More open source</LI><LI>More AI on the horizon</LI></UL><P><STRONG>Redefining development with Gen AI</STRONG></P><P>A groundbreaking addition to SAP Fiori tools is the introduction of Gen AI, marking a significant leap forward in intelligent development of SAP Fiori apps. For the first time, developers can leverage AI to generate CAP projects and SAP Fiori element apps directly from business requirement documents. This innovative feature stems from our collaboration with an SAP partner who highlighted the challenges faced in translating client needs into functional applications swiftly. With Gen AI, the gap between designers, business analysts, and developers is bridged, leading to accelerated development cycles and enhanced collaboration.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Launch Joule for SAP Fiori tools with command &quot;Fiori tools AI: Show Fiori tools Joule&quot;" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87045i3EF8E42122663764/image-size/large?v=v2&amp;px=999" role="button" title="fiori-tools-ai-blog.gif" alt="Launch Joule for SAP Fiori tools with command &quot;Fiori tools AI: Show Fiori tools Joule&quot;" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Launch Joule for SAP Fiori tools with command "Fiori tools AI: Show Fiori tools Joule"</span></span></P><P>I am also excited to announce that in addition to using Gen AI to create SAP Fiori elements, you will also find <A href="https://community.sap.com/t5/technology-blogs-by-sap/joule-for-freestyle-sapui5-development-in-sap-build-code/ba-p/13650005" target="_self">Joule for freestyle SAPUI5</A> in this release to help you <A href="https://community.sap.com/t5/technology-blogs-by-sap/now-ai-helps-you-developing-sapui5-applications/ba-p/13649767" target="_self">write freestyle SAPUI5 code</A>. These capabilities are delivered as part of the Guided Development extension in SAP Fiori tools. The initial release is available in SAP Business Application Studio as part of <A href="https://community.sap.com/t5/technology-blogs-by-sap/announcing-general-availability-of-sap-build-code-speed-up-development-with/ba-p/13646073" target="_self">SAP Build Code</A>. You can expect the capability to be introduced to other dev spaces such as SAP Fiori dev space in and Visual Studio Code in coming months. In order to use the AI functionality, you will need an SAP Build Code license. Refer to our <A href="https://help.sap.com/docs/SAP_FIORI_tools/17d50220bcd848aa854c9c182d65b699/f09752ebcf63473e9194ea29ca232e56.html" target="_self" rel="noopener noreferrer">help portal documentation</A> for more information on how to get started.&nbsp;</P><P>While this is surely exciting,&nbsp;<SPAN>note that Joule, like any other Gen AI tool, may not always return the result you are expecting. It may takes some tries and experimentation to fine tune your prompts.&nbsp;</SPAN></P><P><STRONG>Elevating user experience with simplification</STRONG></P><P>In our commitment to simplifying development processes, SAP Fiori tools introduces several enhancements to make the development experience better. Developers can now define semantic buttons in the Page Editor, making the task easier. Furthermore, we added improvements to the annotation LSP code completion for both XML and CDS to present only relevant terms and reduce clutter. Additionally, direct links to documentation from the property panel within the Page Editor streamline access to relevant information, empowering developers with comprehensive insights.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Finding the term made easier in annotation code completion" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87417iFBE0E033915BE47A/image-size/large?v=v2&amp;px=999" role="button" title="Blog_LSP.png" alt="Finding the term made easier in annotation code completion" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Finding the term made easier in annotation code completion</span></span></P><P><STRONG>Accelerate development with integrated development experience and better tooling</STRONG></P><P>Continuing our tradition of innovation, SAP Fiori tools now supports SAPUI5 libraries without a manifest file, offering greater flexibility to developers. This enhancement underscores our dedication to providing a seamless development experience, regardless of project configurations.</P><P>Integrating the development experience, SAP Fiori tools is working closely with ABAP Development Tools (ADT) team to enable seamless navigation from the ABAP Development Tools (ADT) to SAP Fiori tools in both SAP Business Application Studio and Visual Studio Code. Our first step is enabling developers to go from ADT to SAP Fiori tools Application Generator when service development is ready to create the UI. Stay tuned for more on this in the coming months.&nbsp;</P><P><STRONG>Open-source journey continues: embracing collaboration</STRONG></P><P>Embracing the premise of collaboration, SAP Fiori tools further solidifies its commitment to open-source initiatives. All middleware modules are now open source, fostering a vibrant ecosystem of community contributions. Additionally, the internationalization (i18n) support module has been open-sourced, promoting transparency and inclusivity. As we progress, our objective for the coming months remains clear: to open source all dependent modules, with the goal of creating an open-source SAP Fiori generator that will be used to standardize UX experience and project structure for all SAP Fiori relevant projects.</P><P><STRONG>Coming soon: a glimpse into future innovations</STRONG></P><P>Looking ahead, SAP Fiori tools is planning to introduce even more AI capabilities designed to streamline development further. Expect AI-guided development to provide tailored assistance through a combination of documentation and guides. Additionally, a manifest editor is on the horizon, simplifying project configuration and minimizing errors.</P><P>In conclusion, the latest enhancements in SAP Fiori tools signify a significant advancement in empowering developers to realize their SAP Fiori app development goals. With Gen AI, Simplification, Continuous Enhancements, Integrated Development Experience, and our ongoing Open-Source Journey, SAP Fiori tools remains at the forefront of innovation, poised to redefine Fiori app development. Stay tuned as we continue to unlock new possibilities and pave the way for a future of unparalleled efficiency in app development.</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P> 2024-03-27T18:43:58.112000+01:00 https://community.sap.com/t5/technology-blogs-by-sap/now-ai-helps-you-developing-sapui5-applications/ba-p/13649767 Now AI Helps You Developing SAPUI5 Applications 2024-03-27T18:52:57.706000+01:00 AndreasKunz https://community.sap.com/t5/user/viewprofilepage/user-id/189706 <P>As announced in <A href="https://community.sap.com/t5/technology-blogs-by-sap/joule-for-freestyle-sapui5-development-in-sap-build-code/ba-p/13650005" target="_blank">this blog post</A> by Oliver Graeff, the UI5 team is delighted to release its first foray into the world of Generative AI, a contribution to Joule in SAP Business Application Studio which helps with freestyle SAPUI5 development.</P><P>In this blog post, we explore how this SAP Build Code feature works and how you can benefit most from it. At the end, let’s not forget getting a glimpse of related AI features and prototypes.</P><H2 id="toc-hId-989966495">Get Help from Joule</H2><P>As a user of SAP Build Code, you get Joule as assistant in SAP Business Application Studio, accessible via this “Joule jewel” as I like to call it:&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="joule-jewel.png" style="width: 200px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/86574i60B7C70E25FBF2FD/image-size/small?v=v2&amp;px=200" role="button" title="joule-jewel.png" alt="joule-jewel.png" /></span></P><P>One important thing to note is that in the initial release, Joule is only available in dev spaces of type “<EM>Full-Stack Application Using Productivity Tools</EM>”. If you e.g. create a dev space of type “SAP Fiori”, you will not see it. The availability in more dev space types</P><P>The panel content is context sensitive. This means that for a random file in a random project, it may just tell you that it is not available, but when you open e.g. a UI5 view or controller or most other file types inside a UI5 application project, then it will greet you with all its violet-purple AI glory and ask for your requests:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="The Joule Panel" style="width: 352px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/86577iC6DE0FD457163996/image-size/large?v=v2&amp;px=999" role="button" title="joule.jpg" alt="The Joule Panel" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">The Joule Panel</span></span></P><P>Simply enter your request in the chat window – adding, editing, replacing code… anything goes! – &nbsp;and Joule will respond with code and explanations.</P><P>Each code block in the response has a header with a “” and an “Accept” button. “Accept” transfers the code to the respective file, replacing its content. An answer can provide content for different files. If the file to which a code block belongs is currently not open or active, it will automatically be opened when you click “Accept”.</P><P>In case this “Accept” button is missing or you want to edit the suggested code first, you can use the ”Copy” button to get the code into the clipboard and paste it manually. This is also useful in the (rare) cases when only a code snippet is provided instead of the entire file, or parts of the previously existing code are omitted.</P><H2 id="toc-hId-793452990">Think BIG for Biggest Benefit</H2><P>Actually, those suggested samples in the Joule panel are just simple ones. We really recommend trying bigger steps! Don’t waste time (and AI tokens) by requesting a simple button.&nbsp;Try increments like:</P><UL><LI>Adding a new View with some content and setting up routing</LI><LI>Creating a new model with sample data and adding a table displaying certain properties as columns</LI><LI>Making all (hardcoded) texts within a view translatable and providing translations</LI></UL><P>Things like these seem like the sweet spot where Joule speeds up application development most. Taking bigger steps is also a good approach when the AI response times appear a little long. Performance varies, and Joule has no influence on this – most of the time is spent waiting for the response.</P><P>You know Generative AI has limits. Requests like the above typically work well, but of course the response can contain issues or be not exactly what you had in mind. Tweaking the result will usually still get you to your goal much faster than typing everything by hand. You can also use the pencil button to edit a request and try again.</P><P>Joule is a conversational chat assistant that keeps context. This means it “knows” what you have requested before and you can refer to this knowledge in further requests. Still, we recommend pressing the “Reset Conversation” button at the top once you request something different:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="clear.png" style="width: 200px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/86579i60B2C790107325A4/image-size/small?v=v2&amp;px=200" role="button" title="clear.png" alt="clear.png" /></span></P><P>This frees the conversation from previous ballast, keeps the AI focused and not least makes responses faster.</P><H2 id="toc-hId-596939485">Keep in Mind How to Get Joule</H2><P>As mentioned, the Joule assistant for freestyle UI5 development is active when it seems like you are working on UI5 resources. The actual logic behind that is longer than would fit this blog post, but when Joule’s suddenly not there and you need it, simply open a UI5 view or controller, or work below a directory with ui5.yaml file in it and you should see it again. This behavior, by the way, could change soon, as Joule is still growing up into its role of an always-available assistant with multiple capabilities.</P><H2 id="toc-hId-400425980">How Does it Work?</H2><P>There’s a lot of stuff going on behind the scenes.</P><P>For example, there is AI-powered logic to select the files which are likely needed to be modified – or maybe just known – to fulfill your request. Of course, it would be too much to send <EM>all</EM> the code of your entire project along with every AI request.</P><P>Above you read that Joule keeps context and remembers the previous conversation. Yes, it has to, in order to reasonably converse with you. Otherwise, it would not be able to make sense of a request that is logically connected to what you did before. Still, it does not need to remember every single bit and byte for that! Hence, we condense the history to reduce the context size consumed by that.</P><P>Possibly there is some similarity to other AI tools you have seen recently, and this market is definitely a very agile and vivid one, but what differentiates this tool is its knowledge of UI5 and increasingly the knowledge how to support typical steps best which you are likely to do in any freestyle UI5 project.</P><P>Much of it is still evolving and being enhanced as you read this.</P><H2 id="toc-hId-203912475">More Joule Goodness: Create an Application from Business Requirements</H2><P>A related Joule feature provided by the Fiori tools team allows you to create an entire SAP Fiori elements list report application, including the respective CAP project, directly from your business requirements. <A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-fiori-tools-2403-introduces-gen-ai-capability-and-more/ba-p/13650594" target="_self">Look here</A>&nbsp;for more details.</P><P>This gets you started with a pretty complete app – and with our Joule feature for freestyle UI5 development, you can continue from there, e.g. when using custom pages. So both of these Joule features nicely complement each other.</P><H2 id="toc-hId-7398970">Even More AI</H2><P>It’s only the beginning. We have been experimenting for quite some time with how Generative AI could benefit not only UI5 application developers, but also end-users.</P><P>One such prototype, internally dubbed “ChatUI5”, aims to help end-users to interact with UI5 applications in natural language. It will be presented in the upcoming “UI5ers live” webcast on April 11th. Others look at how setting complex filters in applications could be simplified or how the UI5 documentation could be made more helpful.</P><P>To make it very clear: that’s all prototypes and we can’t tell whether any of them will ever see the light of being productized. But we’re looking further into the topic for sure.</P> 2024-03-27T18:52:57.706000+01:00 https://community.sap.com/t5/technology-blogs-by-sap/joule-for-freestyle-sapui5-development-in-sap-build-code/ba-p/13650005 Joule for freestyle SAPUI5 development in SAP Build Code 2024-03-27T18:53:12.396000+01:00 OliverGraeff https://community.sap.com/t5/user/viewprofilepage/user-id/4124 <P><A href="https://www.sap.com/products/artificial-intelligence/ai-assistant.html" target="_self" rel="noopener noreferrer">Joule</A> is SAP's AI co-pilot that truly understands your business. Joule also helps you writing freestyle SAPUI5 code in SAP Build Code. Ask Joule by typing code-related requests, in natural language, into Joule's chat window. For example, you could ask Joule to insert a control to a view, add an event handler to a controller, introduce a full new view with routing and much more. You don't need to have the respective file open in the editor, you just need to make sure that your request is sufficiently clear. Requested changes may span across several files. For example, you could ask Joule to define a new model in the manifest.json and use the model in a control in the view.</P><P>Each file for which Joule suggests changes, will appear in a code block within Joule's chat window. On top of each code block you'll see options to</P><UL><LI>'Copy', to copy the code to your clipboard for further usage, and</LI><LI>'Accept', to open the respective file and add the code directly at the correct place.</LI></UL><P style=" text-align: center; "><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Screenshot 2024-03-26 at 15.51.58.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/86798iC85613C4F29335E3/image-size/large?v=v2&amp;px=999" role="button" title="Screenshot 2024-03-26 at 15.51.58.png" alt="Screenshot 2024-03-26 at 15.51.58.png" /></span><SPAN>Joule in SAP Business Application Studio</SPAN></P><P>Joule, your SAPUI5 assistant can handle both, any freestyle SAPUI5 application as well as custom pages following the SAP Fiori flexible programming model.</P><P>Joule is not only useful for writing code, it also helps you to understand the existing code or to find issues with it. You may ask questions about entire files, or you can select a block of code and then ask a question specifically about the selected code snippet.&nbsp;Beyond this, the implementation is not restricted to specific scenarios. Go ahead, explore, and try to find the limits…</P><P>Just note that Joule, like any other GenAI tool, may not always deliver 100% correct results. It is always a good practice to closely review the generated code. Still, Joule, your SAPUI5 assistant, will make you a more efficient SAPUI5 developer.<BR /><BR /></P><H1 id="toc-hId-861532263">How to use Joule for freestyle SAPUI5</H1><OL><LI>Launch SAP Business Application Studio in SAP Build Code.</LI><LI>Open a project containing freestyle SAPUI5 code and open a *.view.xml or *.controller.js / *.controller.ts file.</LI><LI>Launch Joule from the activity bar on the left and start asking Joule.</LI></OL><P>A first guide is available via the 'Guide Center' in the activity bar on the left: Open the guide 'Generative AI-Powered Development' -&gt; SAP Fiori UI -&gt; SAP Fiori Elements Custom Page and Freestyle SAPUI5. Read more details:</P><UL><LI><A href="https://community.sap.com/t5/technology-blogs-by-sap/now-ai-helps-you-developing-sapui5-applications/ba-p/13649767" target="_self">Now AI Helps You Developing SAPUI5 Applications</A>&nbsp;by&nbsp;<a href="https://community.sap.com/t5/user/viewprofilepage/user-id/189706">@AndreasKunz</a></LI><LI><A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-fiori-tools-2403-introduces-gen-ai-capability-and-more/ba-p/13650594" target="_self">SAP Fiori tools 2403 Introduces Gen AI Capability and more</A>&nbsp;by&nbsp;<a href="https://community.sap.com/t5/user/viewprofilepage/user-id/316392">@tashley</a>&nbsp;</LI></UL> 2024-03-27T18:53:12.396000+01:00 https://community.sap.com/t5/technology-blogs-by-members/embrace-the-future-transform-and-standardize-operations-with-chatbot/ba-p/13662643 Embrace the Future: Transform and Standardize Operations with Chatbot 2024-04-08T17:14:07.028000+02:00 TrusPatel https://community.sap.com/t5/user/viewprofilepage/user-id/137142 <P class="">In below blog series, It is all about Benefits and usecases of custom Chatbot that I have built.</P><P style=" padding-left : 30px; ">Blog 1 : <A title="This blog" href="https://community.sap.com/t5/technology-blogs-by-members/embrace-the-future-transform-and-standardize-operations-with-chatbot/ba-p/13662643#M166808" target="_self">Why Chatbots in SAP ? ( This blog )</A><BR />Blog 2 :&nbsp;<A title="How Chatbot can help Vendors?" href="https://community.sap.com/t5/technology-blogs-by-members/empowering-vendors-the-transformative-impact-of-sap-chatbot/ba-p/13663154" target="_blank">How Chatbot can help Vendors?</A>&nbsp;<BR />Blog 3 : <A title="How Chatbot can help Customers?" href="https://community.sap.com/t5/technology-blogs-by-members/elevating-customer-engagement-harnessing-the-power-of-sap-chatbots-for-a/ba-p/13663214" target="_self">How Chatbot can help Customers?</A></P><H2 id="toc-hId-991603973">Introduction&nbsp;</H2><P>Maintaining a competitive edge in today’s fast-paced business landscape is paramount to achieving success. One technology that has experienced remarkable growth in recent times is chatbots. With their capacity to enhance efficiency and automate a range of tasks, chatbots have emerged as indispensable assets for businesses operating in diverse sectors. In this blog series, we will investigate the immense potential of chatbots and their ability to revolutionize operational processes within your organization. In this first blog of my chatbots series, we will delve into the transformative capabilities of chatbots and their pivotal role in standardizing operations. &nbsp;</P><H2 id="toc-hId-795090468">The evolution of chatbots&nbsp;</H2><P>The journey of chatbots began with the need that arose with growing global businesses and its need to connect partners. Since then, it has been truly noteworthy, revolutionizing the way businesses engage with customers, streamlining processes, and boosting operational efficiency. Starting from rudimentary rule-based bots, chatbots have evolved into intelligent conversational agents, delivering seamless and personalized user experiences.&nbsp;</P><P data-unlink="true">Within the<SPAN>&nbsp;</SPAN>SAP ecosystem, chatbot has been widely embraced and integrated, empowering organizations to harness its potential for their operations. Various industries, including Pharmaceuticals, Automobiles, Energy, Logistics, Telecommunications, Banking, and Insurance, are increasingly adopting chatbots to handle the high volume of repetitive customer inquiries they receive. The advantages of utilizing chatbots for enhancing customer experience are immense. These include round-the-clock availability, rapid response times, tailored interactions, self-service capabilities, scalability, and continuous improvement.&nbsp;</P><H2 id="toc-hId-598576963">Streamlining operations with chatbots&nbsp;</H2><P>Chatbots play a crucial role in automating repetitive tasks within an organization, effectively identifying and streamlining processes that can be automated by the relevant teams. Furthermore, chatbots have the ability to gather valuable data through user conversations, providing insights on pending tasks and enabling informed decision-making. &nbsp;</P><P>Natural Language Processing (NLP) enables seamless user interactions by mapping numerous queries to user intentions.&nbsp;</P><P>It is a platform that simplifies scenario development and conversation flow customization. It requires minimal effort, as data flows through the same frontend and OData channel, while the execution of actions differs based on the scenario.&nbsp;</P><H2 id="toc-hId-402063458">Standardizing processes through chatbots&nbsp;</H2><P>Pre-defined flows in chatbots significantly reduce errors and enforce standard operating procedures (SOPs) consistently. In case a chatbot cannot answer a query, it can either log a ticket or redirect the user to experts.&nbsp;</P><P>This Chatbot offering provides a unique way of answering user queries, providing suggestions, and allowing users to take actions based on SAP roles/authorizations. Actions refer to executing bots within the Auto-Bot framework, where developers can develop bots with permitted activities for users.&nbsp;</P><P>For example, a vendor can track the status of quotations or invoice booking, while an employee can check their leave balance or download pay slips in PDF format.</P><H2 id="toc-hId-205549953">Enhancing customer service and support&nbsp;</H2><P>Chatbots are the preferred choice for Q&amp;A queries, as they provide quick and diverse responses. This capability can be leveraged to offer personalized features to users.&nbsp;</P><P>Unlike humans, chatbots are available 24/7, provide fast responses, and eliminate the need to reserve repetitive tasks and train.</P><P>This chatbot is capable of handling both Q&amp;A queries from a knowledge base and queries that require actions to be performed from the Bot ( OO Class method or FM )&nbsp;</P><H2 id="toc-hId-9036448">Empowering customers and partners with self-service</H2><P>Chatbots eliminate the need for customers and partners to access information from multiple portals and shared folders. They can simply ask the chatbot for information such as invoices and quotations.</P><P>For instance, in an organization, chatbots enable employees to file complaints or log tickets for travel reimbursement by having a conversation and providing precise and concise language for efficient communication.&nbsp;</P><H2 id="toc-hId--187477057">Overcoming challenges and ensuring success</H2><P>This platform leverages a unified UI, connectivity channel, and backend framework for Auto-Bots. This approach provides flexibility and context to identify scenarios and execute relevant Auto-Bots using NLP, fuzzy logic, and native coding. High scalability comes with the flexibility of provision to add as many scenarios as possible.&nbsp;</P><P>Unlike the standard offering from SAP known as Conversation AI, a unique approach combines a fixed UI and connectivity channel with flexible backend development, resulting in less developmental effort and a robust execution pattern.&nbsp;</P><P>We also aim to develop a resilient architecture that intelligently identifies common user problems and maps them to existing solutions.&nbsp;</P><H2 id="toc-hId--383990562">Looking ahead: The future of chatbots</H2><P>The future of chatbots includes innovations such as omnichannel conversations and AI/ML-driven human-like experiences, including behaviour analysis and generative suggestions.&nbsp;</P><H3 id="toc-hId--451421348">Conclusion</H3><P>Chatbot has the potential to transform and standardize operations in your organization. By streamlining processes, enhancing customer service, and empowering employees, chatbots can drive efficiency, productivity, and customer satisfaction. Embrace the future and unlock the full potential of chatbots in your organization’s operations.&nbsp;</P><P>Stay tuned for the next blog in this series, where we will dive deeper into the technical aspects of building and deploying chatbots in the SAP field.&nbsp;</P><P>Note : This blog was earlier posted on&nbsp;<A title="here" href="https://www.cygnet-digital.com/blog/embrace-the-future-transform-and-standardize-operations-with-chatbot/" target="_self" rel="nofollow noopener noreferrer">here</A>&nbsp;</P> 2024-04-08T17:14:07.028000+02:00 https://community.sap.com/t5/technology-blogs-by-members/empowering-vendors-the-transformative-impact-of-sap-chatbot/ba-p/13663154 Empowering Vendors: The Transformative Impact of SAP Chatbot 2024-04-09T08:07:03.073000+02:00 TrusPatel https://community.sap.com/t5/user/viewprofilepage/user-id/137142 <P class="">In below blog series, It is all about Benefits and usecases of custom Chatbot that I have built.</P><P style=" padding-left : 30px; ">Blog 1 : <A title="Why Chatbots in SAP?" href="https://community.sap.com/t5/technology-blogs-by-members/embrace-the-future-transform-and-standardize-operations-with-chatbot/ba-p/13662643#M166808" target="_self">Why Chatbots in SAP?</A><BR />Blog 2 :&nbsp;<A title="How Chatbot can help Vendors?" href="https://community.sap.com/t5/technology-blogs-by-members/empowering-vendors-the-transformative-impact-of-sap-chatbot/ba-p/13663154" target="_blank">How Chatbot can help Vendors? ( This Blog )</A>&nbsp;<BR />Blog 3 : <A title="How Chatbot can help Customers?" href="https://community.sap.com/t5/technology-blogs-by-members/elevating-customer-engagement-harnessing-the-power-of-sap-chatbots-for-a/ba-p/13663214" target="_self">How Chatbot can help Customers?</A></P><H2 id="toc-hId-991628991">Problem Statement</H2><P>Why reserve an expensive workforce for repetitive and non-technical vendor queries? Why not automate using a custom-built chatbot? Vendors often ask the following questions as part of their frequently asked questions.&nbsp;&nbsp;&nbsp;&nbsp;</P><UL><LI>How do I register as a vendor?&nbsp;</LI><LI>What is all the info required to register as a vendor?&nbsp;&nbsp;&nbsp;</LI><LI>What are the criteria and duration needed to qualify?&nbsp;</LI><LI>Where can I see all the open purchase requisitions/Orders?&nbsp;</LI><LI>Where can I submit the product offer price (product catalogue and offer price)?&nbsp;</LI><LI>How do I submit a quotation?&nbsp;</LI><LI>How do I know vendor shortlisting and its criteria?&nbsp;</LI><LI>What is your notification procedure for releasing the orders, or how do you issue the order?&nbsp;</LI><LI>What is the status of my goods delivered?&nbsp;</LI><LI>What is the quality status of the goods delivered, along with rejection reasons, if any?&nbsp;&nbsp;&nbsp;</LI><LI>What is the invoice status and bank transaction status if paid?&nbsp;</LI><LI>How do I change my account number?&nbsp;</LI><LI>How do I change my PAN number?</LI></UL><H2 id="toc-hId-795115486">Enhancing collaboration, process efficiency and productivity</H2><H3 id="toc-hId-727684700">Introduction&nbsp;</H3><P>In today’s fast-paced business environment, seamless collaboration and efficient processes are essential for vendors to thrive. SAP custom Chatbot, an innovative solution powered by Natural Language Processing (NLP), offers a unique opportunity for vendors to enhance their interaction with SAP ERP systems and streamline their operations. This blog will explore real-world scenarios where vendors can benefit from a chatbot, revolutionizing their engagement with SAP and improving their overall experience.&nbsp;&nbsp;</P><P>The main concern of all organizations is security regarding digitalization and modernization. We ensure both authorization and authentication of vendors using OTP verification and SAP Standard Roles to enforce granular control over business-critical data.&nbsp;&nbsp;&nbsp;</P><P>Check out the below scenarios where vendors can be benefitted from a chatbot.&nbsp;&nbsp;&nbsp;</P><H3 id="toc-hId-531171195">Scenario 1: Simplified purchase order and purchase requisition-related inquiry&nbsp;</H3><P>Vendors often need real-time updates on the status of their purchase orders. With chatbot, vendors can converse with the bot to inquire about the quality of their demands. By providing the necessary information, such as the purchase order number or vendor code, the chatbot retrieves the latest updates from the SAP system and promptly responds with accurate information. This scenario eliminates the need for vendors to navigate complex systems/apps or wait for manual updates, resulting in improved transparency and proactive order management.&nbsp;</P><H3 id="toc-hId-334657690">Scenario 2: Efficient invoice submission and tracking&nbsp;</H3><P>Submitting and tracking invoices can be a time-consuming process for vendors. Chatbot streamlines this workflow by providing a user-friendly interface for invoice submission. Vendors can interact with the chatbot and upload their invoices, from which the chatbot extracts relevant details such as invoice number, amount, due date and others using IDP/OCR. The chatbot validates the information, performs necessary checks, and seamlessly integrates with the SAP system for invoice processing. Vendors can also inquire about the status of their invoices, enabling real-time tracking and proactive follow-ups.</P><H3 id="toc-hId-138144185">Scenario 3: Vendor master data management&nbsp;</H3><P>Maintaining accurate and up-to-date vendor master data is crucial for smooth business operations. Fiori-based Chatbot offers vendors a convenient way to manage their master data. Vendors can interact with the chatbot to update their contact information, banking details, or tax identification numbers. The chatbot validates the changes, ensures data integrity, and synchronizes the updated information with the SAP system. This scenario empowers vendors to take control of their master data, reducing administrative efforts and ensuring accurate information in the system. UI Adaptive cards in the chatbot allow vendors to register themselves.&nbsp;</P><H3 id="toc-hId--58369320">Scenario 4: Timely payment status and remittance advice&nbsp;</H3><P>Cash flow management is vital for vendors, and timely payment information is essential for financial planning. A Chatbot lets vendors inquire about payment statuses and receive remittance advice electronically. Vendors can interact with the chatbot, provide invoice details or payment references, and instantly access information on payment status, payment dates, and remittance details. This real-time visibility enhances financial transparency, enables proactive cash flow management, and improves vendor-customer relationships.&nbsp;</P><H3 id="toc-hId--254882825">Conclusion&nbsp;</H3><P>SAP Chatbot offers vendors a transformative platform to enhance collaboration, streamline processes, and improve efficiency in their interactions with SAP systems. By leveraging the capabilities of a chatbot, vendors can benefit from simplified purchase order status inquiries, efficient invoice submission and tracking, streamlined vendor master data management, and timely payment status updates. This technology-driven Solution empowers vendors to optimize operations, reduce manual efforts, and strengthen their partnership with SAP.<SPAN>&nbsp;</SPAN></P><P>50% – 70% of employee and vendor satisfaction could be observed, and employees are better utilized for strategic and more meaningful initiatives in procurement functions.&nbsp;&nbsp;&nbsp;</P><P>Note : This blog was earlier posted <A title="here" href="https://www.cygnet-digital.com/blog/empowering-vendors-the-transformative-impact-of-sap-chatbot/" target="_self" rel="nofollow noopener noreferrer">here</A></P><DIV class=""><DIV class=""><DIV class="">&nbsp;</DIV></DIV></DIV> 2024-04-09T08:07:03.073000+02:00 https://community.sap.com/t5/technology-blogs-by-members/embracing-typescript-in-sapui5-development/ba-p/13675744 Embracing TypeScript in SAPUI5 Development 2024-04-22T11:05:53.164000+02:00 SimonMDM https://community.sap.com/t5/user/viewprofilepage/user-id/1441755 <P style=" text-align: center; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SimonMDM_0-1713517469569.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98682iF004C9A377DF935C/image-size/medium?v=v2&amp;px=400" role="button" title="SimonMDM_0-1713517469569.png" alt="SimonMDM_0-1713517469569.png" /></span></P><P>&nbsp;</P><P><SPAN>Throughout 11 years of SAP development, I've seen the evolution of SAP's vision for its ERP, particularly with the introduction of FIORI, marking a significant shift towards user-experience-centered innovation. Developers have also been considered with tools like UI5, BAS, and more recently SAP BUILD Code. Now, I will focus on the introduction of TypeScript (TS) into SAPUI5, sharing my experience and observations while developing Fiori applications in TS for a specific project.</SPAN></P><H2 id="toc-hId-992617829"><SPAN>Understanding TypeScript: A Brief Introduction</SPAN></H2><P><SPAN>TypeScript (TS), developed by Microsoft, extends JavaScript (JS) by incorporating features like static typing, interfaces, and classes: commonly found in object-oriented programming. The compilation of TypeScript into JavaScript before execution enables the detection of programming errors during development, fostering code quality and robustness.</SPAN></P><P><I><SPAN>If you'd like to delve deeper:<BR /></SPAN></I><A href="https://www.typescriptlang.org/" target="_blank" rel="noopener nofollow noreferrer"><SPAN>TypeScript: JavaScript With Syntax For Types. (typescriptlang.org)</SPAN></A></P><H2 id="toc-hId-796104324"><SPAN>SAP &amp; TypeScript: A Not-So-New Collaboration</SPAN></H2><P><SPAN>SAP's journey with TypeScript began in 2021 as part of a "beta experimental" phase, paving the way for developers to explore this new avenue in application development. In 2023, during UI5con, SAP officially announced TypeScript support for UI5 starting from version 1.116.0.</SPAN></P><P><I><SPAN>For further details:<BR /></SPAN></I><A href="https://community.sap.com/t5/technology-blogs-by-sap/typescript-for-ui5-yay-it-s-official-and-a-round-up-of-recent-changes/ba-p/13570051" target="_blank"><SPAN>TypeScript for UI5: “Yay, it’s official!” – and a ... - SAP Community</SPAN></A></P><H2 id="toc-hId-599590819"><SPAN>Feedback and Experience Sharing</SPAN></H2><P><SPAN>Today, rather than a tutorial on TypeScript development (perhaps in another blog <span class="lia-unicode-emoji" title=":slightly_smiling_face:">🙂</span>), I aim to share my personal experience and insights, motivating those who are curious yet hesitant to take the plunge.</SPAN></P><H2 id="toc-hId-403077314"><SPAN>Advantages of TypeScript Integration</SPAN></H2><H3 id="toc-hId-335646528"><STRONG>Static Typing:</STRONG></H3><P><SPAN>The first error you'll encounter when starting with TypeScript is compilation errors due to missing typings! However, this very aspect underscores one of TypeScript's greatest strengths…</SPAN></P><P>&nbsp;</P><P style=" text-align: center; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SimonMDM_1-1713517469331.png" style="width: 292px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98680i10E7B974211A3D9C/image-dimensions/292x127?v=v2" width="292" height="127" role="button" title="SimonMDM_1-1713517469331.png" alt="SimonMDM_1-1713517469331.png" /></span><BR /><I><SPAN>example of static typing for a structure</SPAN></I></P><P>&nbsp;</P><P><SPAN>By explicitly specifying data types, TypeScript detects typing errors during compilation, fostering code reliability and reducing the risk of runtime errors. At the beginning of your project, you might see a lot of errors flagged in red, but it will quickly become a natural part of the development process.</SPAN></P><P>&nbsp;</P><P style=" text-align: center; "><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="SimonMDM_2-1713517469327.png" style="width: 543px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98681iAC52D08884032AC0/image-dimensions/543x118?v=v2" width="543" height="118" role="button" title="SimonMDM_2-1713517469327.png" alt="SimonMDM_2-1713517469327.png" /></span><I><SPAN>example of TS error for missing types</SPAN></I></P><P>&nbsp;</P><P><SPAN>It prevents errors that might otherwise require tedious debugging later on. And a big plus, it makes understanding the code easier, especially when dealing with a developer who isn't generous with comments <span class="lia-unicode-emoji" title=":grinning_face_with_sweat:">😅</span>. This investment proves to be profitable in the long term for application maintenance, as it helps reduce errors introduced during future modifications.</SPAN></P><P>&nbsp;</P><P><SPAN>To find the correct type when using a method, I refer to the </SPAN><A href="https://ui5.sap.com/#/api/" target="_blank" rel="noopener noreferrer"><SPAN>API Reference - Demo Kit - SAPUI5 SDK</SPAN></A><SPAN> website. Alternatively, we can use </SPAN><STRONG>BAS</STRONG><SPAN>; if we hover the mouse over the method, a pop-up appears and provides the types that can be used.</SPAN></P><P style=" text-align: center; "><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="SimonMDM_3-1713517469422.png" style="width: 550px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98684i21472E0461349866/image-dimensions/550x120?v=v2" width="550" height="120" role="button" title="SimonMDM_3-1713517469422.png" alt="SimonMDM_3-1713517469422.png" /></span><I><SPAN>example of documentation included in BAS</SPAN></I></P><H3 id="toc-hId-139133023"><STRONG>Interfaces and Inheritance:</STRONG></H3><P><SPAN>Drawing from object-oriented principles, TypeScript empowers developers with the creation of classes, interfaces, and inheritances. Interfaces offer great convenience as they allow us to precisely define the structure of objects, specifying the necessary properties along with their associated data types. They are truly a "must-have" as they ensure code consistency, making it easier to maintain and evolve. Moreover, the ability to reuse these interfaces throughout the application contributes to a modular and efficient design.</SPAN></P><P>&nbsp;</P><P style=" text-align: center; "><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="SimonMDM_4-1713517469397.png" style="width: 485px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98683i1602C4400F73954A/image-dimensions/485x50?v=v2" width="485" height="50" role="button" title="SimonMDM_4-1713517469397.png" alt="SimonMDM_4-1713517469397.png" /></span><I><SPAN>example of interface definition</SPAN></I></P><H3 id="toc-hId--57380482"><STRONG>ES6 Features:</STRONG></H3><P><SPAN>Another aspect I particularly appreciated was the ES6 features. Although not specific to TypeScript, it was my experience with this language that led me to these features. They allow for writing more elegant and clear code, while ensuring application logic with fewer lines, greatly simplifying maintenance.</SPAN></P><H2 id="toc-hId--382976706"><SPAN>Challenges Faced and Overcome</SPAN></H2><H3 id="toc-hId--450407492"><STRONG>Library Integration:</STRONG></H3><P><SPAN>Despite its advantages, integrating TypeScript with SAP libraries sometimes presented challenges. For example, I needed to use the "sap/ushell/Container" libraries into a project extension: my project refused to compile because TypeScript didn't know "sap/ushell/Container".</SPAN></P><P><I><SPAN>Issue raised on GitHub </SPAN></I><SPAN>:</SPAN><SPAN><BR /></SPAN><A href="https://github.com/SAP/ui5-typescript/issues/347" target="_blank" rel="noopener nofollow noreferrer"><SPAN>`sap.ushell.Container` removed in 1.100? · Issue #347 · SAP/ui5-typescript · GitHub</SPAN></A></P><P><SPAN>So developers may encounter issues such as missing typings or compatibility issues, requiring workarounds until resolved by SAP through updates.</SPAN></P><H3 id="toc-hId--646920997"><STRONG>Learning Curve:</STRONG></H3><P><SPAN>Transitioning from JavaScript to TypeScript may involve a learning curve for developers unfamiliar with static typing and TypeScript-specific syntax. While the initial investment in learning TypeScript pays off in the long run, it may temporarily impact development velocity.</SPAN></P><H2 id="toc-hId--625262864"><SPAN>Conclusion</SPAN></H2><P><SPAN>While at first I complained about having to give up my good old JavaScript for TypeScript (like a good Frenchman <span class="lia-unicode-emoji" title=":grinning_face_with_sweat:">😅</span>), I finally got the taste for TypeScript and wouldn't go back for anything in the world. From enhanced development comfort to improved code maintenance and readability, TypeScript has become an indispensable tool in my SAPUI5 arsenal.</SPAN><SPAN><BR /></SPAN><SPAN>With trust in SAP's commitment to resolving library-related issues, my journey with TypeScript continues to evolve, promising a future of enriched development experiences!</SPAN></P><P>&nbsp;</P><P style=" text-align: center; "><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="SimonMDM_5-1713517469554.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98685i209D257F6E86C232/image-size/medium?v=v2&amp;px=400" role="button" title="SimonMDM_5-1713517469554.png" alt="SimonMDM_5-1713517469554.png" /></span><EM>credit:&nbsp;<A href="https://twitter.com/ChickyThoughts" target="_blank" rel="nofollow noopener noreferrer">Chicken Thoughts (@ChickyThoughts) / X (twitter.com)</A></EM></P><P>&nbsp;</P><P>&nbsp;</P> 2024-04-22T11:05:53.164000+02:00 https://community.sap.com/t5/technology-blogs-by-sap/improving-time-management-in-sap-s-4hana-cloud-a-genai-solution/ba-p/13673836 Improving Time Management in SAP S/4HANA Cloud: A GenAI Solution 2024-04-22T11:08:14.435000+02:00 rui_jin https://community.sap.com/t5/user/viewprofilepage/user-id/862773 <P><FONT size="4"><STRONG><SPAN>Preface/Introduction - Solving Timesheet Management Problem for Beyond Technologies and AlixPartners</SPAN></STRONG><SPAN>&nbsp;</SPAN></FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="rui_jin_0-1713543728769.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98939iA97433B37F4D8639/image-size/large?v=v2&amp;px=999" role="button" title="rui_jin_0-1713543728769.png" alt="rui_jin_0-1713543728769.png" /></span></P><P><SPAN>Collaborating closely with two distinguished firms, Beyond Technologies and AlixPartners, to streamline their time management practices has presented a considerable endeavor. Both firms are recognized for their contribution to the services industry, wherein they are often required to engage with SAP S/4HANA Cloud for project time management. Despite the advanced features this system offers, they found themselves struggling with the management of their timesheet tasks.</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>We developed a GenAI-powered SAP BTP application for real-time tracking of project tasks, seamlessly integrating with SAP S/4HANA Cloud, public edition, for automated timesheet entries and billing. This system allows users to immediately log tasks upon completion, which are then processed in natural language and drafted into their timesheet via SAP S/4HANA Cloud APIs and the GenAI Hub on SAP BTP. Our application operates independently alongside any SAP S/4HANA timesheet app, ensuring compatibility with custom apps as well as existing and future standard versions. Users can easily submit their time records for approval within their company's timesheet application.&nbsp;</SPAN></P><P>&nbsp;</P><P><FONT size="4"><STRONG><SPAN>Business Scenario/Challenge – Addressing Timesheet Record Management in SAP S/4HANA Cloud</SPAN></STRONG></FONT></P><P><SPAN>The critical problem both companies faced was associated with their timesheet record task in the SAP S/4HANA Cloud system. Delayed and after-the-fact time entries resulting from manual user operation led to inaccurate entries. It was time-consuming and negatively impacted work efficiency, delaying billing and payment processes as well. It was crucial to resolve this challenge as it directly linked with their business' operational efficiency, and therefore, profitability.</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>&nbsp;</SPAN><SPAN>&nbsp;</SPAN></P><P><FONT size="4"><STRONG><SPAN>Co-Innovation/Solution – Creating an GenAI powered application with SAP</SPAN></STRONG><SPAN>&nbsp;<STRONG>AI Core</STRONG></SPAN></FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="TimeSheetArchitecture-4.drawio.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/100720i981F0D85D8BA74AF/image-size/large?v=v2&amp;px=999" role="button" title="TimeSheetArchitecture-4.drawio.png" alt="TimeSheetArchitecture-4.drawio.png" /></span></P><P><SPAN>Generative AI significantly enables our solution by empowering users to log their project time effortlessly in their own words, without strict syntax. It intelligently interprets natural language inputs, crafting accurate payloads for S/4HANA system API calls. This flexibility ensures users can continue their varied task tracking practices across multiple languages, maintaining efficiency without the need for predefined structures. Generative AI thus enables an easy way to track consultant’s own time and adding it to the S/4HANA system already. It preserves the intuitiveness and accessibility of our task tracking, transforming user experience and data entry reliability.</SPAN></P><P><SPAN>Understanding the customers' need for efficient time management and with the power of Generative AI, we set out to create an application powered by the robust capabilities of SAP Cloud Application Programming Model (CAP) and SAP UI5. This application integrates seamlessly with the SAP Generative AI Hub in SAP AI Core via Destination Service and embeds with CAP LLM plugin(A free and open-source tool created by our team. Click on below drop-down for more information). Meanwhile all conversation data is managed by SAP HANA Cloud.</SPAN><SPAN>&nbsp;</SPAN></P><div class="lia-spoiler-container"><a class="lia-spoiler-link" href="#" rel="nofollow noopener noreferrer">Spoiler</a><noscript> (Highlight to read)</noscript><div class="lia-spoiler-border"><div class="lia-spoiler-content"><P><I>Introducing the CAP LLM Plugin:</I>&nbsp;</P><P><I><SPAN>An indispensable solution empowering developers with the essential tools to effortlessly craft robust AI-driven CAP applications. Seamlessly integrating the LLM capabilities of SAP Generative AI Hub with the vector engine and anonymization features of SAP HANA Cloud, this plugin revolutionizes the development journey.</SPAN></I><SPAN>&nbsp;</SPAN></P><P><EM>The CAP LLM Plugin is a powerful tool that empowers developers to craft customized Generative AI-based CAP applications seamlessly. It ensures that sensitive data remains confidential by utilizing SAP HANA Cloud Data Anonymization, thereby safeguarding privacy while leveraging the capabilities of LLM. With this plugin, developers can confidently create innovative applications without compromising data security or integrity.<BR /></EM><BR /><A href="https://github.com/SAP-samples/cap-llm-plugin-samples/blob/main/README.md" target="_blank" rel="noopener nofollow noreferrer"><I><SPAN>https://github.com/SAP-samples/cap-llm-plugin-samples/blob/main/README.md</SPAN></I></A><SPAN>&nbsp;</SPAN></P><P><A href="https://community.sap.com/t5/technology-blogs-by-sap/cap-llm-plugin-empowering-developers-for-rapid-gen-ai-cap-app-development/ba-p/13667606" target="_blank"><I><SPAN>https://community.sap.com/t5/technology-blogs-by-sap/cap-llm-plugin-empowering-developers-for-rapid-gen-ai-cap-app-development/ba-p/13667606</SPAN></I></A><SPAN>&nbsp;</SPAN></P></div><noscript><div class="lia-spoiler-noscript-container"><div class="lia-spoiler-noscript-content">Introducing the CAP LLM Plugin:&nbsp;An indispensable solution empowering developers with the essential tools to effortlessly craft robust AI-driven CAP applications. Seamlessly integrating the LLM capabilities of SAP Generative AI Hub with the vector engine and anonymization features of SAP HANA Cloud, this plugin revolutionizes the development journey.&nbsp;The CAP LLM Plugin is a powerful tool that empowers developers to craft customized Generative AI-based CAP applications seamlessly. It ensures that sensitive data remains confidential by utilizing SAP HANA Cloud Data Anonymization, thereby safeguarding privacy while leveraging the capabilities of LLM. With this plugin, developers can confidently create innovative applications without compromising data security or integrity.https://github.com/SAP-samples/cap-llm-plugin-samples/blob/main/README.md&nbsp;https://community.sap.com/t5/technology-blogs-by-sap/cap-llm-plugin-empowering-developers-for-rapid-gen-ai-cap-app-development/ba-p/13667606&nbsp;</div></div></noscript></div></div><P><SPAN>As soon as a user logs in, the application collects all the projects to which the user is staffed. Then the user can simply&nbsp;<SPAN class=""><SPAN class=""><SPAN class="">report his or her</SPAN></SPAN></SPAN><SPAN class=""><SPAN class=""><SPAN class="">&nbsp;</SPAN></SPAN></SPAN><SPAN class=""><SPAN class="">time </SPAN></SPAN><SPAN class=""><SPAN class=""><SPAN class="">on those projects</SPAN></SPAN></SPAN>&nbsp;via natural language. The application will process&nbsp;<SPAN class=""><SPAN class=""><SPAN class="">the user’s </SPAN></SPAN></SPAN><SPAN class=""><SPAN class=""><SPAN class="">input</SPAN></SPAN></SPAN>, returning a valid JSON payload. This payload is then used to post a time record in the SAP S/4HANA Cloud system effectively bypassing the manual input.</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>Main features of the application:</SPAN></P><UL><LI>Embedded analytics that display the completeness of the recorded hours for the day and week</LI><LI>User can view the history of time recording conversations, including their status. If any time recordings are incomplete, you can complete them in the chat or in the S/4HANA timesheet.</LI><LI>You will see a main window where you can provide all the necessary information for time-recording by typing or using natural language. The required information includes the project, the work package (in case of multiple assignments within one project), the date of service, and the hours worked.&nbsp;</LI></UL><P><SPAN>An example interaction between user and application.</SPAN><SPAN>&nbsp;</SPAN></P><OL><LI><SPAN>User clicks on the project name button for one of the projects the user is staffed on.</SPAN><SPAN>&nbsp;</SPAN></LI><LI><SPAN>User inputs their intention for booking time for the project with natural language.</SPAN><SPAN>&nbsp;</SPAN></LI><LI><SPAN>Interact with application to ensure all necessary information is provided.</SPAN><SPAN>&nbsp;</SPAN></LI><LI><SPAN>The application creates the time record on SAP S/4HANA Cloud via API.</SPAN><SPAN>&nbsp;</SPAN></LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="rui_jin_3-1713384913056.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/97811i16145A5C16D3CBBC/image-size/large?v=v2&amp;px=999" role="button" title="rui_jin_3-1713384913056.png" alt="rui_jin_3-1713384913056.png" /></span></P><P><FONT size="4"><STRONG><SPAN>Conclusion/Summary - Efficient Time Management Achieved Through Co-Innovation</SPAN></STRONG><SPAN>&nbsp;</SPAN></FONT></P><P><SPAN><SPAN class=""><SPAN class=""><SPAN class="">By</SPAN></SPAN></SPAN> <SPAN class=""><SPAN class=""><SPAN class="">creat</SPAN></SPAN></SPAN><SPAN class=""><SPAN class=""><SPAN class="">ing</SPAN></SPAN></SPAN> <SPAN class=""><SPAN class=""><SPAN class="">a natural language </SPAN></SPAN></SPAN><SPAN class=""><SPAN class=""><SPAN class="">interface </SPAN></SPAN></SPAN><SPAN class=""><SPAN class=""><SPAN class="">application </SPAN></SPAN></SPAN><SPAN class=""><SPAN class=""><SPAN class="">to </SPAN></SPAN></SPAN><SPAN class=""><SPAN class=""><SPAN class="">do</SPAN></SPAN></SPAN>&nbsp;time management in SAP S/4HANA Cloud system, we have enabled Beyond Technologies and AlixPartners to manage their timesheet tasks more efficiently. The application delivers accurate time records through a simplified and quick process, significantly reducing the time spent on manual data entry.</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>I welcome more inquiries on this solution and the benefits it can bring to your business operations. Feel free to reach out to&nbsp;</SPAN><SPAN><A href="mailto:paa@SAP.com" target="_blank" rel="noopener nofollow noreferrer">paa@SAP.com</A><A href="mailto:paa@SAP.com" target="_blank" rel="noopener nofollow noreferrer">&nbsp;</A></SPAN><SPAN>for further information or&nbsp;any questions.&nbsp;</SPAN><SPAN>&nbsp;</SPAN></P><P>&nbsp;</P><P><SPAN>&nbsp;</SPAN></P> 2024-04-22T11:08:14.435000+02:00 https://community.sap.com/t5/technology-blogs-by-members/show-loading-indicator-while-the-ui5-app-loads/ba-p/13681413 Show Loading indicator while the Ui5 App loads! 2024-04-26T13:51:45.152000+02:00 sajid-khan https://community.sap.com/t5/user/viewprofilepage/user-id/889615 <P>Hi everyone,</P><P>I'd like to discuss an approach I had been able to use to improve user experience during initial App Load in our complex <U>standalone</U> UI5 application.</P><P>The initial load time of our complex Ui5 Application was longer than ideal due to the need to fetch numerous components and libraries during startup. This resulted in a long wait for users before anything rendered on the screen.</P><P>Furthermore, the browser's loading indicator stops while these resources are fetched in the background. This proved to be misleading for users, as users reported that the blank screen that followed looked like a failed application launch. (screenshot below)</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="sajid5ts_3-1713986571033.png" style="width: 650px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/101314i420717E12E4B2BDD/image-dimensions/650x465?v=v2" width="650" height="465" role="button" title="sajid5ts_3-1713986571033.png" alt="sajid5ts_3-1713986571033.png" /></span></P><P>To address this, I've implemented an initial loading indicator within the app. This indicator appears as soon as the index.html file loads, providing immediate visual confirmation that the app is starting up in the background.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="sajid5ts_4-1713986904815.png" style="width: 685px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/101318i3A72610CFEFB0161/image-dimensions/685x461?v=v2" width="685" height="461" role="button" title="sajid5ts_4-1713986904815.png" alt="sajid5ts_4-1713986904815.png" /></span></P><P>I'd like to share the code behind this simple approach, which I believe could be a helpful workaround for anyone facing a similar issue with long initial load times in their standalone UI5 application. The code utilizes CSS and requires only a few lines to implement. Here's a step-by-step guide:</P><P><FONT size="4"><STRONG>Step 1</STRONG></FONT><BR />Add a class named "<EM>loading</EM>" to the body tag of the <EM>index.html</EM> file.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="sajid5ts_7-1713987348348.png" style="width: 750px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/101324i3176F07BE4BB1809/image-dimensions/750x377?v=v2" width="750" height="377" role="button" title="sajid5ts_7-1713987348348.png" alt="sajid5ts_7-1713987348348.png" /></span></P><P>&nbsp;</P><P><FONT size="4"><STRONG>Step 2</STRONG></FONT><BR />Include the following CSS code within a <EM>&lt;style&gt;</EM> tag placed inside the <EM>&lt;head&gt;</EM> section of&nbsp;<EM>index.html</EM> file.</P><P>&nbsp;</P><pre class="lia-code-sample language-css"><code>body.loading::before { content: "Loading..."; display: flex; position: fixed; width: 100%; height: 100%; top:0; left:0; align-items: center; justify-content: center; background: white; color:darkslategray; } /* Following CSS is for dark theme. * Replace theme name (sap_horizon_dark, sap_horizon_hcb) * with your application's dark theme name repectivly */ .sapUiTheme-sap_horizon_dark body.loading::before, .sapUiTheme-sap_horizon_hcb body.loading::before { background: darkslategray; color: white; }</code></pre><P>&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="sajid5ts_0-1713989656867.png" style="width: 749px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/101336i04A52732FACE3702/image-dimensions/749x529?v=v2" width="749" height="529" role="button" title="sajid5ts_0-1713989656867.png" alt="sajid5ts_0-1713989656867.png" /></span></P><P><STRONG>Important Note:</STRONG><BR />While UI5 offers the option to include custom CSS files through <EM>manifest.json</EM>, a more effective approach for this specific scenario is to directly embed the CSS code within a <EM>&lt;style&gt;</EM> tag placed inside the <EM>&lt;head&gt;</EM> section of <EM>index.html</EM> file. This ensures that the CSS styles are applied as soon as the <EM>index.html</EM> file is loaded. If we were to use a separate CSS file managed by manifest.json, there's a possibility that the styles might not be loaded until UI5 components are fully ready, which would defeat the purpose of providing immediate visual feedback during the initial application load.</P><P><FONT size="4"><STRONG>Step 3</STRONG></FONT><BR />Adding above CSS as well as "<EM>loading</EM>" class to the body will result in "Loading..." text to appear in the middle of the blank page. The final step is to make sure that this "Loading..." text is hidden as soon as loading of Ui5 app is finished.</P><P>To achieve this, add the following JavaScript code to the <EM>onBeforeRendering</EM> method of the root view controller.</P><P>&nbsp;</P><pre class="lia-code-sample language-javascript"><code>document.body.classList.remove('loading');</code></pre><P>&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="sajid5ts_9-1713987902521.png" style="width: 769px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/101327i9A30D6859128AB5E/image-dimensions/769x320?v=v2" width="769" height="320" role="button" title="sajid5ts_9-1713987902521.png" alt="sajid5ts_9-1713987902521.png" /></span></P><P>The above code removes the "loading" class from the body element, which in turn hides the "Loading..." text appearing in the middle of the blank page.&nbsp;As an alternative, you can add above JavaScript code to the <EM>onBeforeRendering </EM>method of <EM>UIComponent </EM>as well.</P><P>And that's it! Following these 3 simple steps should result in a "Loading..." text to appear during initial loading stage of the app.</P><P>I hope this guide was informative! Feel free to leave any comments or suggestions for improvement.</P><P>Thank you <span class="lia-unicode-emoji" title=":slightly_smiling_face:">🙂</span></P><P>Sajid Khan</P><P>&nbsp;</P><P>&nbsp;</P> 2024-04-26T13:51:45.152000+02:00 https://community.sap.com/t5/technology-blogs-by-members/integrating-smart-contracts-with-sapui5/ba-p/13681350 Integrating Smart contracts with SAPUI5 2024-04-26T14:09:00.227000+02:00 bhushan_khade https://community.sap.com/t5/user/viewprofilepage/user-id/155532 <P><STRONG>Introduction :&nbsp;</STRONG></P><P><SPAN class="">Integrating smart contracts with SAPUI5 represents an exciting intersection between blockchain technology and business development. SAPUI5 is a powerful framework for web development that uses SAP's Fiori architecture; Smart contracts, on the other hand, are self-signed contracts in which the agreement between the buyer and the seller is written directly into the rules. </SPAN></P><P><SPAN class="">In this article, we explore how we can combine these technologies to create new and secure applications.</SPAN></P><P>To Integrate Ethereum smart contract with SAPUI5 first you need to deploy the smart contract on the blockchain network. After the deployment you will get the ABI (Application Binary Interface) and Address of the smart contract, next step is to consume it into our SAPUI5 application.</P><P><SPAN>Now lets start the journey of Integrating the smart contract with SAPUI5 in which you will able to access the functions from the smart contract and will be able to send and receive the ETH.</SPAN></P><P><SPAN>In order to access the smart contract first you have to add the 'web3.js' Library in to index.html file to provide access to Ethereum functionality.</SPAN></P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-markup"><code>&lt;script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/web3/1.2.7-rc.0/web3.min.js"&gt;&lt;/script&gt;</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>Before Accessing smart contract make sure you have installed the Metamask wallet, after that add below function into your controller file to fetch the ethereum account details from the Metamask.</P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-javascript"><code>onAccessMetaMask: async function () { let account; if (window.ethereum !== "undefined") { try { const accounts = await ethereum.request({ method: "eth_requestAccounts" }); account = accounts[0]; } catch (error) { console.error("Error accessing MetaMask:", error); } } else { console.error("MetaMask is not available."); } },</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>Once you have successfully got the account details next step is to access the smart contract, for that you will need the ABI and Address of the deployed Smart contract. then add the below function into the controller.</P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-javascript"><code>accessToContract: async function () { try { const ABI = ; // Your contract ABI const Address = '0xC09C83cEE7ed3206557b5D5d2b4F8bD69E29Ed12'; // Your contract address // Initialize Web3 const web3 = new Web3(window.ethereum); // Initialize the contract window.contract = new web3.eth.Contract(ABI, Address); // Display a message this.getView().byId("text2").setText("Connected to smart contract"); } catch (error) { console.error("Error initializing contract:", error); } },</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;After completing&nbsp; above steps you will be able to see the data into our SAPUI5 Application. Once it is done you can call any required function from smart contract.</P><P><STRONG>Output :</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2024-04-24 at 11.47.15 PM.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/101309i9BADB38946B87B06/image-size/large?v=v2&amp;px=999" role="button" title="Screenshot 2024-04-24 at 11.47.15 PM.png" alt="Screenshot 2024-04-24 at 11.47.15 PM.png" /></span></P><P><STRONG>Conclusion :</STRONG></P><P><SPAN>I hope this Blog contains the process and configuration needed for Integrating Smart contracts with SAP UI5 using Business Application Studio which will help to customize different application.</SPAN><BR /><BR /><SPAN>Thanks and Regards,</SPAN></P><P><SPAN>Bhushan Khade</SPAN></P> 2024-04-26T14:09:00.227000+02:00 https://community.sap.com/t5/technology-blogs-by-members/error-handling-with-ui5-upload-set-before-sapui5-1-98/ba-p/13687820 Error handling with UI5 Upload Set before SAPUI5 1.98 2024-05-02T07:30:00.024000+02:00 WouterLemaire https://community.sap.com/t5/user/viewprofilepage/user-id/9863 <H1 id="toc-hId-864519108"><SPAN>Problem</SPAN></H1><P><SPAN>Uploading files can fail and this needs to be handled. When using the UploadSet or UploadCollection, this can be done in the event UploadeComplete:</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="WouterLemaire_0-1714509967310.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/104143iE675C82CEFF485F2/image-size/medium?v=v2&amp;px=400" role="button" title="WouterLemaire_0-1714509967310.png" alt="WouterLemaire_0-1714509967310.png" /></span></P><P>&nbsp;</P><P><SPAN>Unfortunately, this is only available from version 1.98 for the UploadSet and in the meanwhile UploadCollection is being deprecated from version 1.88. You could still consider using UploadCollection as long as you are below 1.88. When you upgrade to a newer version this requires you to change your app to use the UploadSet instead of the UploadCollection. Preferably, you use UploadSet anyway despite the version you’re on. Of course, you want to handle errors when uploading files, even in a version below 1.98. Exactly the problem described here:&nbsp;</SPAN><SPAN><A href="https://community.sap.com/t5/technology-q-a/error-handling-sap-ui5-control-uploadset/qaq-p/12498541" target="_blank">https://community.sap.com/t5/technology-q-a/error-handling-sap-ui5-control-uploadset/qaq-p/12498541</A></SPAN></P><P><SPAN>Although the answer on this question (in the url above) is the best way to move forward. Nevertheless, you could have good reasons upgrading to a higher UI5 version is not immediately possible. Therefore, I found a workaround to use the UploadSet and catch the errors even in versions below 1.98.</SPAN></P><H1 id="toc-hId-668005603">Solution</H1><P>Start by adding the UploadSet to your view as you would do normally and configure it to your needs. Here you have an example on how I did it for the OData service ZWL_UPLOAD and entity AttachmentSet with property ID as key for uploading PDF files:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="WouterLemaire_1-1714509967313.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/104144iC199C8ED17A2B100/image-size/medium?v=v2&amp;px=400" role="button" title="WouterLemaire_1-1714509967313.png" alt="WouterLemaire_1-1714509967313.png" /></span></P><P>Source code in case you want to copy/paste it:</P><pre class="lia-code-sample language-markup"><code>&lt;upload:UploadSet id="UploadSet" instantUpload="true" fileTypes="pdf" mediaTypes="application/pdf" items="{path: 'AttachmentSet', templateShareable: false}" uploadCompleted="onUploadCompleted" uploadUrl="/sap/opu/odata/sap/ZWL_UPLOAD/AttachmentSet"&gt; &lt;upload:items&gt; &lt;upload:UploadSetItem fileName="{FileName}" mediaType="{MimeType}" url="/sap/opu/odata/sap/ZWL_UPLOAD/AttachmentSet(id='{ID}')/$value"&gt; &lt;/upload:UploadSetItem&gt; &lt;/upload:items&gt; &lt;/upload:UploadSet&gt;</code></pre><P>Now, to know if the upload was successful or not, we use the onUploadCompleted event handler. Here we can get the result by getting the active uploader from the UploadSet control. In here, you’ll find all the requests sent for every item. Based on the item id of the file that has been completed, we find back the request. Inside the request we have the response headers including error messages:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="WouterLemaire_2-1714509967317.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/104145i98C448B0A5041F8A/image-size/large?v=v2&amp;px=999" role="button" title="WouterLemaire_2-1714509967317.png" alt="WouterLemaire_2-1714509967317.png" /></span></P><P>Source code in case you want to copy/paste it:</P><pre class="lia-code-sample language-javascript"><code>public onUploadCompleted(event: Event): void { const uploader = (this.byId("UploadSet") as UploadSet); // <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/4277">@TS</a>-ignore const activeUploader = uploader._getActiveUploader(); const sapMessage = activeUploader._mRequestHandlers[event.getParameter("item").getId()].xhr.getResponseHeader("Sap-Message"); if (sapMessage) { const xmlModel = new XMLModel(undefined); xmlModel.setXML(sapMessage); xmlModel.getProperty("/message") &amp;&amp; MessageBox.error(xmlModel.getProperty("/message")); } }</code></pre><P>I know, I’m using private functions which is not recommended… But what’s the alternative? Using something deprecated? Anyway, as soon as you are on the right version, change this using the response parameter in the event.</P><P>Hope it helps!</P><P>Kr, Wouter</P> 2024-05-02T07:30:00.024000+02:00 https://community.sap.com/t5/technology-blogs-by-members/approuter-path-mapping-custom-domain/ba-p/13687831 AppRouter path mapping – Custom Domain 2024-05-06T06:00:00.016000+02:00 WouterLemaire https://community.sap.com/t5/user/viewprofilepage/user-id/9863 <H2 id="toc-hId-993601859"><SPAN>Problem</SPAN></H2><P><SPAN>As a follow up on my experience with custom domains, I started applying more custom domains to my applications running on BTP. Feel free to read more about the setup of a custom domain here: <A href="https://community.sap.com/t5/technology-blogs-by-members/custom-domains-for-btp-cloudfoundry-applications/ba-p/13647389" target="_blank">https://community.sap.com/t5/technology-blogs-by-members/custom-domains-for-btp-cloudfoundry-applications/ba-p/13647389</A></SPAN></P><P><SPAN>One of these applications is a CAP application with a UI5 app on top of it and an approuter to access it, the app is published on my GitHub account here: <A href="https://github.com/lemaiwo/ReCAPBTPServiceOverview/tree/main" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/ReCAPBTPServiceOverview/tree/main</A> </SPAN></P><P><SPAN>After applying my custom domain to this particular application the approuter added a path behind the url. When I navigated to: <A href="https://btp-services.lemaire.tech/" target="_blank" rel="nofollow noopener noreferrer">https://btp-services.lemaire.tech/</A> (where “lemaire.tech” is the custom domain with “btp-services” as hostname), </SPAN></P><P><SPAN>It forwarded me to: <A href="https://btp-services.lemaire.tech/recapcapadvancedprogrammingmodelbtpservices/index.html" target="_blank" rel="nofollow noopener noreferrer">https://btp-services.lemaire.tech/recapcapadvancedprogrammingmodelbtpservices/index.html</A></SPAN></P><P><SPAN>&nbsp;</SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="WouterLemaire_0-1714510606258.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/104148iE0196099310D5F47/image-size/large?v=v2&amp;px=999" role="button" title="WouterLemaire_0-1714510606258.png" alt="WouterLemaire_0-1714510606258.png" /></span></P><P><SPAN>Most of the configuration behind this, was provided by the generators in BAS. In the xs-app.json of the UI5 app the following config was provided:</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="WouterLemaire_1-1714510606263.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/104149i7A8ED209501372CD/image-size/medium?v=v2&amp;px=400" role="button" title="WouterLemaire_1-1714510606263.png" alt="WouterLemaire_1-1714510606263.png" /></span></P><P><SPAN><A href="https://github.com/lemaiwo/ReCAPBTPServiceOverview/blob/main/app/recap.capadvancedprogrammingmodel.btpservices/xs-app.json" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/ReCAPBTPServiceOverview/blob/main/app/recap.capadvancedprogrammingmodel.btpservices/xs-app.json</A></SPAN></P><P><SPAN>In the approuter there were no mappings but it did had a welcomeFile:</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="WouterLemaire_2-1714510606265.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/104147iCF0293C75662812B/image-size/medium?v=v2&amp;px=400" role="button" title="WouterLemaire_2-1714510606265.png" alt="WouterLemaire_2-1714510606265.png" /></span></P><P><SPAN><A href="https://github.com/lemaiwo/ReCAPBTPServiceOverview/blob/main/approuter/xs-app.json" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/ReCAPBTPServiceOverview/blob/main/approuter/xs-app.json</A></SPAN></P><P><SPAN>&nbsp;</SPAN><SPAN>Because of this config, the approuter automatically adds the path of the welcomeFile to the url:</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="WouterLemaire_3-1714510606274.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/104152i5E3964CEF171C36D/image-size/medium?v=v2&amp;px=400" role="button" title="WouterLemaire_3-1714510606274.png" alt="WouterLemaire_3-1714510606274.png" /></span></P><P><SPAN>This path is based on the name of the application and it is needed for the approuter to forward the user to the right application. In this specific example, I only have one html5 app so that’s why it’s put in the welcomeFile. How this path is generated and accessible by the approuter is very well explaned in this blog post:</SPAN></P><P><SPAN><A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-application-router/ba-p/13393550" target="_blank">https://community.sap.com/t5/technology-blogs-by-sap/sap-application-router/ba-p/13393550</A> </SPAN></P><P><SPAN>Especially the part for html5 app integration is important:</SPAN></P><TABLE><TBODY><TR><TD width="601"><H1 id="toc-hId-668005635">Integration with HTML5 App Repo service:</H1><P><BR />The application router supports seamless integration with the HTML5 Application Repository service. When the application router interacts with HTML5 Application Repository to serve HTML5 Applications, all static content and routes (xs-app.json) are retrieved from HTML5 Application Repository. In case application router needs to route to non HTML5 Applications, it is possible to model that in the xs-app.json of the application router.<BR /><BR />To integrate HTML5 Application Repository to an application router based it is required to create an instance of html5-apps-repo service of plan app-runtime and bind it to the application. xs-app.json routes that are used to retrieve static content from HTML5 Application Repository may be modeled in the following format:<BR /><BR /></P><P>&nbsp;<SPAN>{</SPAN> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN>"source"</SPAN><SPAN>:</SPAN> <SPAN>"^(/.*)"</SPAN><SPAN>,</SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN>"target"</SPAN><SPAN>:</SPAN> <SPAN>"$1"</SPAN><SPAN>,</SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN>"service"</SPAN><SPAN>:</SPAN> <SPAN>"html5-apps-repo-rt"</SPAN><SPAN>,</SPAN> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN>"authenticationType"</SPAN><SPAN>:</SPAN> <SPAN>"xsuaa"</SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<SPAN>}</SPAN></P><P><BR />A valid request to application router that uses HTML5 Application Repository must have the following format:<BR /><BR /><SPAN><EM>https://&lt;tenantId&gt;.&lt;appRouterHost&gt;.&lt;domain&gt;/&lt;bsPrefix&gt;.&lt;appName-appVersion&gt;/&lt;resourcePath&gt;</EM></SPAN><EM>;</EM><BR /><BR />bsPrefix (business service prefix) - Optional</P><UL><LI>It should be used in case the application is provided by a business service bound to this approuter</LI></UL><P><BR />appName (application name) - Mandatory<BR /><BR /></P><UL><LI>Used to uniquely identify the application in HTML5 Application Repository persistence</LI><LI>Must not contain dots or special characters</LI></UL><P>appVersion (application version) - Optional<BR /><BR /></P><UL><LI>Used to uniquely identify a specific application version in HTML5 Application Repository persistence</LI><LI>If no version provided, default application version will be used</LI></UL><P>resourcePath (path to file)<BR /><BR /></P><UL><LI>The path to the file as it was stored in HTML5 Application Repository persistence</LI></UL><P>For more details please refer to the following Blog:<BR /><BR /><SPAN><A href="https://blogs.sap.com/2018/12/11/programming-applications-in-sap-cloud-platform/?preview_id=751509" target="_blank" rel="noopener noreferrer">Programming applications in Sap Cloud Platform</A></SPAN></P></TD></TR></TBODY></TABLE><P><SPAN>&nbsp;</SPAN><SPAN>More details in this one: <A href="https://community.sap.com/t5/technology-blogs-by-sap/fiori-application-programming-model-for-cloud-foundry-and-abap-cloud/ba-p/13388142" target="_blank">https://community.sap.com/t5/technology-blogs-by-sap/fiori-application-programming-model-for-cloud-foundry-and-abap-cloud/ba-p/13388142</A></SPAN></P><H2 id="toc-hId-600574849"><SPAN>Solution</SPAN></H2><P><SPAN>As a solution to have a clean url to the application, I applied the following changes to the xs-app.json of the <STRONG>approuter</STRONG>:</SPAN></P><UL><LI><SPAN>1) Changed the welcomeFile to “/index.html”</SPAN></LI><LI><SPAN>2) Add a route for the OData service. As I added a route for the app (see next point) which will forward all requests on the root path to the html5 app repo, I also need to add a route before the one of the app specially for the OData. Otherwise all OData requests will be forwarded to the html5 app repository and not the destination.</SPAN></LI><LI><SPAN>3) Add a route for the root path directly to the path of the html5 app repository</SPAN></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="WouterLemaire_4-1714510606281.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/104151iF055C79DA28898B1/image-size/medium?v=v2&amp;px=400" role="button" title="WouterLemaire_4-1714510606281.png" alt="WouterLemaire_4-1714510606281.png" /></span></P><P><SPAN><A href="https://github.com/lemaiwo/ReCAPBTPServiceOverview/blob/main/approuter/xs-app.json" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/ReCAPBTPServiceOverview/blob/main/approuter/xs-app.json</A></SPAN></P><P><SPAN>&nbsp;</SPAN><SPAN>Make sure the html5 app repository runtime and destination service are bound to the approuter:</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="WouterLemaire_5-1714510606282.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/104150i52B350495D57C3B4/image-size/medium?v=v2&amp;px=400" role="button" title="WouterLemaire_5-1714510606282.png" alt="WouterLemaire_5-1714510606282.png" /></span></P><P><SPAN>In case it is not done yet, add the route in the mta.yaml config:</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="WouterLemaire_6-1714510606283.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/104153i23B77B6E4739F5D5/image-size/medium?v=v2&amp;px=400" role="button" title="WouterLemaire_6-1714510606283.png" alt="WouterLemaire_6-1714510606283.png" /></span></P><H2 id="toc-hId-404061344"><SPAN>Result</SPAN></H2><P><SPAN>A clean url with a forward that changes the path: <A href="https://btp-services.lemaire.tech/index.html" target="_blank" rel="nofollow noopener noreferrer">https://btp-services.lemaire.tech/index.html</A> </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="WouterLemaire_7-1714510606287.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/104154i0329C2C63A0D64FF/image-size/medium?v=v2&amp;px=400" role="button" title="WouterLemaire_7-1714510606287.png" alt="WouterLemaire_7-1714510606287.png" /></span></P><P><SPAN>Full repo: <A href="https://github.com/lemaiwo/ReCAPBTPServiceOverview/tree/main" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/ReCAPBTPServiceOverview/tree/main</A> </SPAN></P><P><SPAN>Sidenote: some of the screenshots may still contain a different domain. I recently changed the domain from Wouter.lemaire.tech to Lemaire.tech.</SPAN></P><P><SPAN>&nbsp;</SPAN><SPAN>Kr, Wouter</SPAN></P><P>&nbsp;</P> 2024-05-06T06:00:00.016000+02:00 https://community.sap.com/t5/technology-blogs-by-sap/enhancing-the-sapui5-openui5-demo-kit-together-a-look-into-our-feedback/ba-p/13690636 Enhancing the SAPUI5/OpenUI5 Demo Kit Together: A Look into Our Feedback Loop 2024-05-08T08:12:05.723000+02:00 OliverMueller https://community.sap.com/t5/user/viewprofilepage/user-id/125583 <P>Greetings, developers!</P><P>At SAPUI5/OpenUI5, exchanging ideas within the developer community has always been a big thing. We're all about building a community-driven, developer-friendly ecosystem. We're committed to fostering a collaborative environment where your feedback shapes the evolution of our framework. Your insights, suggestions, and criticisms are immensely valuable, driving us toward continuous improvement. Let's take a closer look at how we capture and act upon your feedback across various channels.</P><H2 id="toc-hId-994314926">Survey Insights: Your Voice Matters</H2><P>Our permanent UI5 Demo Kit survey serves as a crucial avenue for gathering your thoughts. This is where you get to tell us how we're doing, what's working like a charm (yes, we want to hear that, too!), and where we might be missing the mark. The main target of this survey is the Demo Kit, including the documentation, APIs, controls, etc. We've got questions about user satisfaction, but more importantly, we've got an open field where you can spill your thoughts freely.&nbsp;Every quarter, we run a more extensive survey for a couple of weeks with more questions to get more insights. <FONT color="#FF0000"><STRONG>By way: This long survey is currently running for Q2 until May 21, so feel free to use this opportunity</STRONG></FONT><FONT color="#000000"> (see the helpful links section below)<STRONG>.</STRONG></FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="survey.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/105469i9164AD8851F5EAF3/image-size/large?v=v2&amp;px=999" role="button" title="survey.png" alt="survey.png" /></span></P><P>These comments are anonymous, but they don’t just disappear into the digital abyss. On the contrary: Your submissions are meticulously catalogued within our internal GitHub repository where our development teams assess and prioritize them. Some issues are like low-hanging fruit – easy fixes we can implement immediately. Others need a bit more consideration before we can decide whether they find their way into our backlog.</P><H2 id="toc-hId-797801421"><STRONG>Documentation Dialogue: Collaborating for Clarity</STRONG></H2><P>Ever spotted an error or envisioned an enhancement in our documentation on the UI5 Demo Kit? Our <EM>Edit on GitHub</EM> button in the lets you to initiate changes directly. What sets this process apart is that it’s not a one-way street but also an opportunity to discuss your ideas with you. We welcome your input and value the opportunity to discuss proposed changes to our developer documentation. We've already had some significant contributions from the community in this realm, and we extend our gratitude to those who've contributed to refining our documentation.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="codoc.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/105470iE3504CCD5EEFD576/image-size/large?v=v2&amp;px=999" role="button" title="codoc.png" alt="codoc.png" /></span></P><H2 id="toc-hId-601287916">Engaging with Our Community</H2><P>But our feedback loop doesn't stop there. We're not just sitting back waiting for feedback to land in our laps. We actively engage with you through various community touchpoints. Whether it's at events like UI5con, in our open <EM>UI5ers live</EM> webcast, at customer workshops, or on online platforms such as X, StackOverflow, and Slack: Actively seeking out your opinions and ideas makes us better. See our link list at the bottom of this post.</P><P>Many projects and ideas that started out as community ideas for SAPUI5/OpenUI5 projects. Just one example: The <A href="https://github.com/ui5-community/babel-plugin-transform-modules-ui5" target="_blank" rel="noopener nofollow noreferrer">transform-modules-ui5</A> Babel plugin was developed by an individual developer in the community a couple of years ago. It has since become an integral part of our TypeScript toolchain. That’s the spirit! So it’s really important to us to engage with you wherever you come up with your ideas.</P><P>And as you know: OpenUI5 is open source, so you can actively improve the core framework itself!</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="openui5.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/105472i8B860603721CEA58/image-size/large?v=v2&amp;px=999" role="button" title="openui5.png" alt="openui5.png" /></span></P><H2 id="toc-hId-404774411">A Big Thank You!</H2><P>Before we wrap up, we just want to extend a massive thank you to each and every one of you. Whether you've dropped a line in our survey, submitted a PR on GitHub, or had a chat with us at an event, your contribution matters more than you know.</P><P>Your feedback isn't just welcomed; it's actively sought after. We encourage you to continue sharing your thoughts and ideas. Open the UI5 Demo Kit today and enter the feedback you always wanted to send us! Or use any other channels we mentioned here. Whether you want us to fix an annoying typo, tell us what we're doing right, or let us know about an idea that you have: Together, we'll continue making SAPUI5/OpenUI5 better.</P><P>Until next time, happy coding!</P><P>------------------------------</P><H4 id="toc-hId-466426344">Some Helpful Links:</H4><UL><LI><SPAN><A href="https://ui5.sap.com/" target="_blank" rel="noopener noreferrer">SAPUI5 Demo Kit</A></SPAN> / <SPAN><A href="https://sdk.openui5.org/" target="_blank" rel="noopener nofollow noreferrer">OpenUI5 Demo Kit</A></SPAN>:<UL><LI>Feedback Survey at the top-right corner (if you have feedback on a certain page, go to that page first before you start the survey; then you can indicate that your feedback refers to the page you’re currently on)</LI><LI><EM>Edit on GitHub</EM> link on every page under <EM>Documentation</EM><BR /><BR /></LI></UL></LI><LI><SPAN><A href="https://github.com/SAP/openui5/blob/master/CONTRIBUTING.md" target="_blank" rel="noopener nofollow noreferrer">Contributing to OpenUI5</A></SPAN>: You want to contribute to OpenUI5? Please do this here!</LI><LI><SPAN><A href="https://stackoverflow.com/questions/tagged/sapui5" target="_blank" rel="noopener nofollow noreferrer">StackOverflow</A></SPAN>: Ask questions and receive answers from the community</LI><LI><SPAN><A href="https://openui5.slack.com" target="_blank" rel="noopener nofollow noreferrer">OpenUI5 on Slack</A></SPAN>: Another community-based communication channel</LI><LI><A href="https://openui5.org/ui5con/" target="_blank" rel="noopener nofollow noreferrer">UI5con</A>: Our main community event</LI><LI><A href="https://openui5.org/events/" target="_blank" rel="noopener nofollow noreferrer">UI5ers live</A>: Our interactive webcast where anyone can showcase their UI5-related work</LI><LI>Follow us on:<UL><LI><SPAN><A href="https://www.linkedin.com/company/openui5/" target="_blank" rel="noopener nofollow noreferrer">LinkedIn</A></SPAN></LI><LI><SPAN><A href="https://twitter.com/openui5" target="_blank" rel="noopener nofollow noreferrer">X</A></SPAN></LI><LI><SPAN><A href="https://www.youtube.com/user/openui5videos" target="_blank" rel="noopener nofollow noreferrer">YouTube</A></SPAN></LI></UL></LI></UL> 2024-05-08T08:12:05.723000+02:00