https://raw.githubusercontent.com/ajmaradiaga/feeds/main/scmt/topics/HTML5-blog-posts.xml SAP Community - HTML5 2024-05-20T11:10:47.925456+00:00 python-feedgen HTML5 blog posts in SAP Community https://community.sap.com/t5/technology-blogs-by-members/consuming-abap-odata-in-sap-bas-business-application-studio/ba-p/13512913 Consuming ABAP Odata in SAP BAS (Business Application Studio) 2021-05-28T09:42:58+02:00 hkpatel https://community.sap.com/t5/user/viewprofilepage/user-id/597546 Hello Readers,<BR /> <BR /> Hope everyone is doing well!<BR /> <BR /> It's been a long that I haven't developed any blog post recently,<BR /> <BR /> Hope you very well know the BAS(<STRONG>Business Application Studio</STRONG>) the new development toolkit provided by SAP.<BR /> <H3 id="toc-hId-1087442726">Introduction:</H3><BR /> SAP provides a new development tool(IDE)&nbsp; called&nbsp; <STRONG>“SAP Business Application Studio”</STRONG> (BAS) in the market and to the customers for developing SAP UI5 Applications in the Cloud Foundry environment.<BR /> <BR /> without wasting more time let us all process the learning part,<BR /> <BR /> If you haven't activated the BAS don't worry SAP provided the necessary Articles for this<BR /> <BR /> <STRONG>1.Setup SAP Business Application&nbsp; Studio in Cloud Foundry environment.</STRONG><BR /> <BR /> Enable &nbsp;SAP Business Application Studio service subscription from Cloud Foundry environment.<BR /> <BR /> <A href="https://developers.sap.com/tutorials/appstudio-onboarding.html" target="_blank" rel="noopener noreferrer">https://developers.sap.com/tutorials/appstudio-onboarding.html</A><BR /> <BR /> Create a Dev Space for SAP Fiori Apps.<BR /> <BR /> <A href="https://developers.sap.com/tutorials/appstudio-devspace-fiori-create.html" target="_blank" rel="noopener noreferrer">https://developers.sap.com/tutorials/appstudio-devspace-fiori-create.html</A><BR /> <BR /> &nbsp;<BR /> <BR /> <STRONG>2. Steps: create a destination in the cloud cockpit.</STRONG><BR /> <BR /> login into your SAP BTP and extend your trial account,<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2021/05/1-43.jpg" /></P><BR /> you will see the above screen then--&gt; <STRONG>Enter to Your Trial Account</STRONG><BR /> <BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2021/05/2-19.jpg" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic;font-family: 'SAPRegular', 'Helvetica Neue', Arial, sans-serif">Global Trial Account</P><BR /> Then you need to enter your trial home of the sap BTP.<BR /> <BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2021/05/3-22.jpg" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic;font-family: 'SAPRegular', 'Helvetica Neue', Arial, sans-serif">Cloud Connectivity</P><BR /> if you came to this screen then you very well know about to add the destinations of your systems.<BR /> <BR /> &nbsp;<BR /> <BR /> <STRONG>3. Create a destination in cloud foundry for consuming any demo oData service.&nbsp;</STRONG><BR /> <BR /> Create a destination in cloud foundry for accessing OData service from&nbsp; ECC.<BR /> <BR /> To create a destination, click on the <STRONG>New destination</STRONG> Button in the cloud foundry<BR /> <BR /> all the details will be the same as you are creating any destinations for the WEB-IDE, like Additional Property and necessary stuff.<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2021/05/4-16.jpg" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic;font-family: 'SAPRegular', 'Helvetica Neue', Arial, sans-serif">Destination Configuration</P><BR /> after adding all the details in the destination make sure you check your connection and it should be established and a green popup will execute.<BR /> <BR /> <STRONG>4.Create SAP UI5 App using SAP Business Application Studio.</STRONG><BR /> <BR /> Open sap business application studio by clicking on<STRONG> SAP Business Application Studio</STRONG>.<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2021/05/5-18.jpg" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic;font-family: 'SAPRegular', 'Helvetica Neue', Arial, sans-serif">SAP BTP Cockpit</P><BR /> after that, you will be redirected to the new screen with your SAP BAS with DEV Spaces.<BR /> <P class="image_caption" style="text-align: center;font-style: italic;font-family: SAPRegular, 'Helvetica Neue', Arial, sans-serif;overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2021/05/6-10.jpg" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic;font-family: 'SAPRegular', 'Helvetica Neue', Arial, sans-serif">SAP BAS Dev Spaces</P><BR /> from this there are multiple things that you are aware of.<BR /> <OL><BR /> <LI>if you are new to this then and you don't have any spaces just create one, for that, you need to click on Create Dev Space button on the Top Right you can see, after that, you have to write your DEV Space name, and some minor details.</LI><BR /> <LI>if you have created your space then click on the<B>▶</B><SPAN style="font-size: 1rem">&nbsp;</SPAN><STRONG>Play</STRONG> Icon as you see on this screen then only your space will start run as you start your car after seating in.</LI><BR /> <LI>after this, your space will come in Starting then to Running Status from red to green color(if you are first time to this it will take time to start).</LI><BR /> <LI>Then you have to click on space on the name you have created, after this you good to go.</LI><BR /> </OL><BR /> &nbsp;<BR /> <P style="text-align: center"><STRONG>SAP BAS welcome screen</STRONG></P><BR /> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2020/07/6-16.png" /><BR /> <BR /> &nbsp;<BR /> <BR /> after that Create your SAP UI5 project by selecting&nbsp; <STRONG>&nbsp;New Project from the template.</STRONG><BR /> <BR /> Select <STRONG>SAP Fiori Application </STRONG>and then click on the Start Button<BR /> <BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2021/05/7-7.jpg" height="265" width="178" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic">App Generator</P><BR /> After that, you will see the below screen, then from the dropdown select <STRONG>SAPUI5 freestyle</STRONG> App Type and select&nbsp; SAP UI5 Application, then click&nbsp; on Next Button.<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2021/05/8-5.jpg" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic">App Template</P><BR /> <P style="overflow: hidden;margin-bottom: 0px">after that, you will be redirected to theData Source and Service Selection&nbsp;screen step.</P><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2021/05/9-5.jpg" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic">Data Source and Service Selection</P><BR /> there are multiple options for us to connect with a sap system from the drop-down we have to select the <STRONG>Connect to an SAP System</STRONG> option from the dropdown, there are many other ways also to connect with an OData service but that we will use in our next blog post,<BR /> <P style="overflow: hidden;margin-bottom: 0px">After that one new option, you will see on your screen named <SPAN class="question-message"><STRONG>System</STRONG> with your ABAP system that you have configured in our earlier steps. in that select your ABAP system.<BR /> </SPAN><I class="v-icon notranslate mdi mdi-help-circle-outline theme--light" aria-hidden="true"></I></P><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2021/05/10-5.jpg" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic">Service Details</P><BR /> from the above screen after selecting your ABAP system you have to fill your SAP ECC Credentials in the following manner and then click on the icon next to the Password field.<BR /> <BR /> after that, there will be the list of oData service which are in your ABAP system in the dropdown, then select your desired service for which data you need to fetch.<BR /> <BR /> after that give your view name and project name all the necessary kinds of stuff,<BR /> <BR /> that you will see on your left there your project gets created and the main folders go to the <STRONG>web app&nbsp;</STRONG>folder that opens the view and your <STRONG>view.xml</STRONG> and take any ui5 control in which you wanted to fetch your data, here I have taken the simple m.table<BR /> <PRE class="language-markup"><CODE> &lt;Table id="getData" items="{/POHeaderSet}" growing="true"&gt;<BR /> &lt;columns&gt;<BR /> &lt;Column &gt;<BR /> &lt;Text text="Number"&gt;&lt;/Text&gt;<BR /> &lt;/Column&gt;<BR /> &lt;Column&gt;<BR /> &lt;Text text="Status"&gt;&lt;/Text&gt;<BR /> &lt;/Column&gt;<BR /> &lt;Column&gt;<BR /> &lt;Text text="PO Num"&gt;&lt;/Text&gt;<BR /> &lt;/Column&gt;<BR /> &lt;/columns&gt;<BR /> &lt;items&gt;<BR /> &lt;ColumnListItem&gt;<BR /> &lt;cells&gt;<BR /> &lt;Text text="{Ebeln}"&gt;&lt;/Text&gt;<BR /> &lt;Text text="{Statu}"&gt;&lt;/Text&gt;<BR /> &lt;Text text="{Bukrs}"&gt;&lt;/Text&gt;<BR /> &lt;/cells&gt;<BR /> &lt;/ColumnListItem&gt;<BR /> <BR /> &lt;/items&gt;<BR /> &lt;/Table&gt;</CODE></PRE><BR /> please note that I have only done code in the XML file you did not want to do any extra code in your controller,<BR /> <BR /> so now that's it run your project for that also in BAS we have to follow certain steps,<BR /> <P style="overflow: hidden;margin-bottom: 0px">Click on the Run Configuration button from the left.<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2021/05/11-4.jpg" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic">Run Configuration</P><BR /> Click on the Plus button to create an application configuration.<BR /> <BR /> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2020/07/16-11.png" /><BR /> <BR /> Select your HTML Application(UI5 App) –<STRONG>(name of&nbsp; the ui5 application)</STRONG><BR /> <BR /> then it will see a drill-down on the right side of the panel,<BR /> <BR /> then follow the below steps to run the application<BR /> <BR /> =&gt;&nbsp; Select&nbsp;<STRONG>Index.html</STRONG>&nbsp;file<BR /> <BR /> <STRONG>&nbsp; &nbsp; =&gt; UI5 library version</STRONG><BR /> <BR /> =&gt; Run&nbsp;&nbsp;<STRONG>html5 module.</STRONG><BR /> <BR /> after that, you will see the below screen,<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2021/05/12-2.jpg" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic">Run Configuration</P><BR /> once you are done with this then the d<STRONG>estination button status turns from grey color to green color.</STRONG><BR /> <BR /> After you view this type of in your left panel then just click on this Play button, after some time your project will be run ASAP.<BR /> <BR /> <STRONG>Note: make sure in your browser pop-up a window is enabled.</STRONG><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2021/05/13-17.png" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic">Open App In New Tab</P><BR /> after that <STRONG>Open Application Preview on New Tab</STRONG>.<BR /> <BR /> Finally, we can see the&nbsp; Application preview. in the browser.<BR /> <BR /> after all this work we see it finally, once you habituate to these steps it won't be feeling lengthy as quickly as you create and bind oData in web-ide.<BR /> <P class="image_caption" style="text-align: center;font-style: italic;font-family: SAPRegular, 'Helvetica Neue', Arial, sans-serif;overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2021/05/14-2.jpg" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic">Final Application</P><BR /> <BR /> <H3 id="toc-hId-890929221">Conclusion</H3><BR /> Take advantage of this new tool for developing SAP UI5 Apps, FIORI Element Apps, CAP, Mobile application development.<BR /> <BR /> so I hope every one of you has learned that how to bind an ABAP OData in the project.<BR /> <BR /> if you face any kind of issues executing these steps kindly comment it down here,<BR /> <BR /> I am always ready to help!!<BR /> <BR /> Thanks for reading, Have fun! with safety!!!<BR /> <BR /> Harshil Patel<BR /> <BR /> SAP UI5/Fiori Consultant<BR /> <BR /> &nbsp;<BR /> <BR /> &nbsp; 2021-05-28T09:42:58+02:00 https://community.sap.com/t5/technology-blogs-by-sap/setup-for-sap-s-4hana-side-by-side-ui-extension-on-sap-btp/ba-p/13513754 Setup for SAP S/4HANA side-by-side UI Extension on SAP BTP 2021-07-02T10:11:26+02:00 wolfgang_scheer https://community.sap.com/t5/user/viewprofilepage/user-id/206819 <H2 id="toc-hId-958388001">Introduction</H2><BR /> One of the most common extension scenarios is the consumption of a backend API by a cloud-based UI. Also, this is one of the simplest extension scenarios which can be used as a starting point to understand the end-to-end landscape setup and for building more complex scenarios in the future.<BR /> <BR /> You can find this scenario as a Mission in <A href="https://discovery-center.cloud.sap/missiondetail/3239/3325" target="_blank" rel="nofollow noopener noreferrer">SAP Discovery Center</A><BR /> <H2 id="toc-hId-761874496"><SPAN lang="EN-US">Business Case</SPAN></H2><BR /> A Sales Executive of a company meets different Business Partners/Clients in various locations and wants to use a simplified, custom UI application which can run on a mobile device or a tablet.<BR /> <BR /> With an side-by-side extension you can realize this without having a direct/VPN access to your digital core and provide your end users with a custom UI application which allows to view the details of business partners from the SAP S/4HANA system in a secured manner. Additionally, this use case explains how quickly a new custom UI application can be developed and run, fully managed by SAP BTP and describes the full end-to-end setup needed for a productive extension application.<BR /> <BR /> This scenario can easily be adapted for other use cases like exposing product data, sales orders, or other APIs<BR /> <H2 id="toc-hId-565360991"><SPAN lang="EN-US">Mission Content</SPAN></H2><BR /> This Mission shows all the necessary steps for the productive end-to-end landscape setup with principal propagation by building a simple UI application as a reference, this includes the following steps:<BR /> <UL><BR /> <LI>Enabling an OData API on SAP S/4HANA</LI><BR /> <LI>Setting up SAP Cloud Connector and S/4HANA for principal propagation</LI><BR /> <LI>Setting up a SAP BTP Subaccount using &nbsp;Booster</LI><BR /> <LI>Developing of a simple Fiori Application with the SAP Business Application Studio</LI><BR /> <LI>Deploying the application to the HTLM5 repository service</LI><BR /> <LI>Integrating he application into the Launchpad service</LI><BR /> <LI>Integrating the SAP Cloud CI/CD service</LI><BR /> </UL><BR /> The content of the Mission is tested on a regular basis and will be kept up to date by integrating the latest services and features<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2021/07/solutiondiagram.png" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic">Solution Diagram</P><BR /> &nbsp;<BR /> <H3 id="toc-hId-497930205">Links:</H3><BR /> <UL><BR /> <LI><A href="https://discovery-center.cloud.sap/missiondetail/3239/3325" target="_blank" rel="nofollow noopener noreferrer"><STRONG>Mission: Setup for SAP S/4HANA side-by-side UI Extensions on SAP BTP</STRONG></A></LI><BR /> <LI><A href="https://blogs.sap.com/2021/06/28/building-end-to-end-extension-scenarios-on-sap-btp/#" target="_blank" rel="noopener noreferrer">Building end-to-end Extensions on SAP BTP (Overview)</A></LI><BR /> </UL><BR /> &nbsp;<BR /> <BR /> &nbsp;<BR /> <BR /> &nbsp;<BR /> <BR /> &nbsp;<BR /> <BR /> &nbsp;<BR /> <BR /> &nbsp;<BR /> <BR /> &nbsp; 2021-07-02T10:11:26+02:00 https://community.sap.com/t5/technology-blogs-by-sap/web-page-with-hyperlink-to-sap-gui-transaction/ba-p/13543875 Web Page with Hyperlink to SAP GUI Transaction 2022-01-10T20:41:32+01:00 joachim_rese https://community.sap.com/t5/user/viewprofilepage/user-id/489707 Companies are currently implementing web based applications as side-by-side extensions to their core SAP Business Suite or SAP S/4HANA system in order to enhance or substitute legacy SAP GUI base processes. In some cases it might be beneficial to embed a link to a SAP GUI transaction into a HTML page, either to gap a functionality that is not yet available within the web application or to provide the end users with an alternative, familiar way to perform a specific action.<BR /> <BR /> The following steps explain two alternative methods to add a hyperlink to your web page, which, when clicked, starts the SAP GUI and runs a transaction with parameters.<BR /> <BR /> &nbsp;<BR /> <H2 id="toc-hId-961159588">Step 1: Find the correct ok-code</H2><BR /> First determine the ok-code that runs the SAP GUI transaction. If a transaction is supposed to be called without parameter, the ok-code is equal to the transaction code. In that case you can skip this step.<BR /> <BR /> The ok-code must comply with the following syntax:<BR /> <PRE><CODE>*&lt;transaction code&gt; &lt;field1&gt;=&lt;value1&gt;;&lt;field2&gt;=&lt;value2&gt;;</CODE></PRE><BR /> where &lt;fieldN&gt; is a dynpro fieldname of a selection screen field that should be filled in advanced with &lt;valueN&gt;.<BR /> <BR /> The asterisk skips the initial screen. If you cannot specify all mandatory fields or you do not want to skip the initial screen or the transaction does not have an initial screen, leave the asterisk out.<BR /> <BR /> If you do not know the dynpro fieldnames of the selection screen fields that are supposed to be filled, proceed as follows:<BR /> <BR /> As an example, all batch jobs should be displayed that start with letter Z and that are owned by user HUGO. The appropriate transaction for that task is SM37.<BR /> <BR /> In order to find the dynpro fieldname that correspond to parameter <EM>Job Name</EM>, click on the input field and press F1. The <EM>Performance Assistant</EM> pops up. Click on icon <EM>Technical Information</EM> (screw wrench). You find the dynpro fieldname under section <EM>Field Description</EM>, e.g. BTCH2170-JOBNAME.<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/01/sm37.png" /></P><BR /> Repeat this procedure to also find the dynpro fieldname for <EM>User Name</EM>.<EM><BR /> </EM><BR /> <BR /> Eventually, you can compile the ok-code as follows:<BR /> <PRE><CODE>/nSM37 BTCH2170-JOBNAME=Z*;BTCH2170-USERNAME=HUGO;</CODE></PRE><BR /> This example will be used throughout this blog post.<BR /> <BR /> &nbsp;<BR /> <BR /> &nbsp;<BR /> <H1 id="toc-hId-635563364">Method 1: Download an SAP shortcut file</H1><BR /> Create a download link to an SAP shortcut file. This methods works on all front end PCs where an SAP GUI is installed without further setup activity. However, a file may be downloaded every time a user clicks the link and the user must explicitly allow execution of the downloaded file.<BR /> <BR /> &nbsp;<BR /> <H2 id="toc-hId-568132578">Step 2.1: Create SAP shortcut file</H2><BR /> In order to create an SAP shortcut file (extension *.sap), logon to the SAP GUI and run the transaction. Then select menu item<BR /> <BR /> <EM>More</EM> → <EM>SAP GUI settings and actions</EM> → <EM>Create Shortcut...</EM><BR /> <BR /> Add parameters to the <EM>Transaction</EM> and specify the <EM>Location</EM> where the file should be stored. Afterwards, click <EM>Finish</EM>.<BR /> <BR /> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/01/create_shortcut.png" /><BR /> <BR /> &nbsp;<BR /> <H2 id="toc-hId-371619073">Step 3.1: Create download link to SAP shortcut file</H2><BR /> Next you must create a download link to a SAP shortcut file. Considering the example above, assuming that the transaction should be run on SAP System PRD in client 100, the file content should look like shown below.<BR /> <PRE class="language-markup"><CODE>[System]<BR /> Name=PRD<BR /> Description=PRD - Production<BR /> Client=100<BR /> [User]<BR /> Name=HUGO<BR /> Language=EN<BR /> [Function]<BR /> Title=Job Overview<BR /> Command=SM37 BTCH2170-JOBNAME=Z*;BTCH2170-USERNAME=HUGO;<BR /> [Configuration]<BR /> WorkDir=C:\Users\Hugo\Documents\SAP\SAP GUI<BR /> [Options]<BR /> Reuse=1</CODE></PRE><BR /> Usually you would implement a HTML GET method on the server that sends the file as response with a HTTP header like:<BR /> <PRE><CODE>Content-Disposition: attachment; filename=SAPShortcut.sap</CODE></PRE><BR /> For a HTML only solution it is not sufficient to store the SAP shortcut file on the server and put a hyperlink on the HTML page that references that file, because the browser will render the file content as text without actually downloading it. To get around this, add the file content as data URL to your hyperlink tag.<BR /> <BR /> If the SAP shortcut file is "PRD Job Overview.sap" and resides in the current directory, you can generate a data URL using the following Windows PowerShell command.<BR /> <PRE class="language-markup"><CODE>&amp;{$b=Get-Content -Encoding Byte -Path ".\PRD Job Overview.sap"; "data:text/plain;base64," + [Convert]::ToBase64String($b)}</CODE></PRE><BR /> Add a hyperlink to your HTML page with the generated data URL as reference as shown in the code snippet below. The user can use the hyperlink to navigate to the SAP GUI job overview screen.<BR /> <PRE class="language-markup"><CODE>&lt;html&gt;<BR /> &lt;head&gt;<BR /> &lt;title&gt;Link to SAP GUI transaction (download SAP shortcut file)&lt;/title&gt;<BR /> &lt;/head&gt;<BR /> &lt;body&gt;<BR /> <BR /> &lt;a href='data:text/plain;base64,W1N5c3RlbV0NCk5hbWU9UFJE ... xVzZT0xDQo=' download='SAPshortcut.sap'&gt;<BR /> Job Overview<BR /> &lt;/a&gt;<BR /> <BR /> &lt;/body&gt;<BR /> &lt;/html&gt;</CODE></PRE><BR /> When the user clicks the link, the behavior depends on the web browser and its settings.<BR /> <BR /> Either the SAP shortcut file <EM>SAPshortcut.sap</EM> is downloaded and afterwards the user must trigger execution of that file.<BR /> <BR /> Or a popup window appears giving the user the option to select an application that should be used to open the file. The user has to select executable <EM>sapshcut.exe</EM>, which (on Windows) most likely resides in folder <EM>C:\Program Files (x86)\SAP\FrontEnd\SAPgui\</EM>.<BR /> <BR /> In both cases the user should mark option "Do this from now on."<BR /> <BR /> A security message appears where the user must allow execution of the displayed ok-code.<BR /> <BR /> If an SAP GUI session for the user and client is already active, the SAP GUI transaction is brought up immediately. Otherwise the user must provide a password first.<BR /> <BR /> &nbsp;<BR /> <H1 id="toc-hId-46022849">Method 2: Configure a Custom URL</H1><BR /> This second method to add a hyperlink that starts a SAP GUI works on Windows front end PCs only and needs some setup work. It implements a custom URL that can be used to navigate to the SAP GUI transaction the same way one can navigate to any web resource.<BR /> <BR /> &nbsp;<BR /> <H2 id="toc-hId--21407937">Step 2.2: Start SAP GUI transaction via SAPshortcut</H2><BR /> Program sapshcut.exe is part of the SAP GUI installation and can be used to run an SAP GUI transaction. You can skip this step. However, is is recommended to run SAPshortcut from Windows PowerShell once to verify that all SAP GUI components have been installed correctly.<BR /> <BR /> Start Windows PowerShell and change directory to the SAP GUI installation directory on your local PC.<BR /> <PRE><CODE>cd "C:\Program Files (x86)\SAP\FrontEnd\SAPgui"</CODE></PRE><BR /> Assuming you want to run the transaction of the example above on system PRD in client 100, execute the following command from Windows PowerShell:<BR /> <PRE class="language-markup"><CODE>sapshcut -SYSTEM=PRD -CLIENT=100 -LANGUAGE=EN -REUSE=1 -TYPE=TRANSACTION -COMMAND="""SM37 BTCH2170-JOBNAME=Z*;BTCH2170-USERNAME=HUGO;"""</CODE></PRE><BR /> Parameter -COMMAND holds the ok-code (without prefix /n) that you want to run.<BR /> <BR /> If the ok-code contains a whitespace, it must be specified as a quoted string. To pass a quoted string as command parameter inside the Windows PowerShell, you must quote that quoted string, where the inner quotes must be prefixed by the escape character, which is also a quote. Thus, you end up with triple quotes.<BR /> <BR /> &nbsp;<BR /> <H2 id="toc-hId--217921442">Step 3.2: Register protocol handler in Windows registry</H2><BR /> Next you must register protocol handler <EM>sapgui</EM> for custom URLs that comply to the following scheme:<BR /> <PRE><CODE>sapgui:&lt;sapshcut.exe arguments separated by &amp;&gt;</CODE></PRE><BR /> For example, with the transaction from the previous step:<BR /> <PRE><CODE>sapgui:-SYSTEM=PRD&amp;-CLIENT=100&amp;-LANGUAGE=EN&amp;-REUSE=1&amp;-COMMAND="""SM37 BTCH2170-JOBNAME=Z*;BTCH2170-USERNAME=HUGO;"""</CODE></PRE><BR /> To register a protocol handler and assign it to a shell command, open the Windows registry editor (regedit) and proceed as follows:<BR /> <UL><BR /> <LI>Add key <EM>HKEY_CLASSES_ROOT\sapgui</EM></LI><BR /> <LI>Add string "URL Protocol" to key <EM>HKEY_CLASSES_ROOT\sapgui</EM></LI><BR /> </UL><BR /> Next you need to add the command as a Windows Registry key as follows:<BR /> <PRE><CODE>HKEY_CLASSES_ROOT\sapgui\shell\open\command = &lt;path&gt;\sapshcut.exe &lt;arguments derived from "#1"&gt;</CODE></PRE><BR /> where #1 is the argument that contains the encoded custom URL including the protocol prefix, for example<BR /> <PRE><CODE>sapgui:-SYSTEM=PRD&amp;-CLIENT=100&amp;-USER=HUGO&amp;-LANGUAGE=EN&amp;-REUSE=1&amp;-COMMAND=%22%22%22SM37%20BTCH2170-JOBNAME=Z*;BTCH2170-USERNAME=HUGO;%22%22%22</CODE></PRE><BR /> You can use Windows PowerShell commands to convert the URL-encoded string to a list of arguments for executable sapshcut.exe.<BR /> <BR /> First decode the URL. Use method <EM>WebUtility.UrlDecode</EM> of .NET assembly <EM>System.Net</EM> to do so.<BR /> <PRE style="padding-left: 40px">Add-Type -AssemblyName System.Net<BR /> $args=[System.Net.WebUtility]::UrlDecode('%1')</PRE><BR /> Afterwards remove prefix <EM>sapgui:</EM> from the URL by calling method replace. You may also want to remove double slashes in order to allow URLs starting with <EM>sapgui://</EM><BR /> <PRE style="padding-left: 40px">$args.replace('sapgui:','').replace('//','')</PRE><BR /> Convert the string into an argument list by splitting at character &amp; and pass it to executable sapshcut.exe<BR /> <PRE style="padding-left: 40px">sapshcut.exe $args.split('&amp;')</PRE><BR /> The command sequence above must be run within a Windows PowerShell instance. Start powershell.exe with options -NonInteractive -NoProfile and -WindowStyle Hidden, see <A href="https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_powershell_exe" target="_blank" rel="nofollow noopener noreferrer">https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_powershell_exe</A>.<BR /> <BR /> Finally you should compile everything into a Windows registry file (extension *.reg) with the content below. All relevant keys are added to the Windows registry when the file gets executed.<BR /> <PRE class="language-markup"><CODE>Windows Registry Editor Version 5.00<BR /> <BR /> [HKEY_CLASSES_ROOT\sapgui]<BR /> @="Launch SAP GUI"<BR /> "URL Protocol"=""<BR /> <BR /> [HKEY_CLASSES_ROOT\sapgui\shell]<BR /> @=""<BR /> <BR /> [HKEY_CLASSES_ROOT\sapgui\shell\open]<BR /> @=""<BR /> <BR /> [HKEY_CLASSES_ROOT\sapgui\shell\open\command]<BR /> @="powershell -NonInteractive -NoProfile -WindowStyle Hidden -Command \"&amp; {Add-Type -AssemblyName System.Net; $args=[System.Net.WebUtility]::UrlDecode('%1').replace('sapgui:','').replace('//',''); &amp;'C:\\Program Files (x86)\\SAP\\FrontEnd\\SAPgui\\sapshcut' $args.split('&amp;')}\""</CODE></PRE><BR /> &nbsp;<BR /> <H2 id="toc-hId--414434947">Step 4.2: Create a HTML page</H2><BR /> Now you are ready to use custom URLs with protocol <EM>sapgui:</EM><BR /> <BR /> By using such a custom URL you can add a hyperlink to your HTML page that can be used to navigate to the filtered job overview screen in SAP GUI, as indicated by the following snippet.<BR /> <PRE class="language-markup"><CODE>&lt;html&gt;<BR /> &lt;head&gt;<BR /> &lt;title&gt;Link to SAPGUI transaction (follow custom URL)&lt;/title&gt;<BR /> &lt;/head&gt;<BR /> &lt;body&gt;<BR /> <BR /> &lt;a href='sapgui:-SYSTEM=PRD&amp;-CLIENT=100&amp;-USER=HUGO&amp;-LANGUAGE=EN&amp;-REUSE=1&amp;-COMMAND="""SM37 BTCH2170-JOBNAME=Z*;BTCH2170-USERNAME=HUGO;"""'&gt;<BR /> Job Overview<BR /> &lt;/a&gt;<BR /> <BR /> &lt;/body&gt;<BR /> &lt;/html&gt;</CODE></PRE><BR /> &nbsp;<BR /> <H1 id="toc-hId--740031171">Conclusion</H1><BR /> Two alternative methods to add a hyperlink to your web page for navigation to a parameterized SAP GUI transaction have been given. Method 1 works on all front end PCs without additional setup. Method 2 might be more convenient for the user, but requires setup work on the front end PC.<BR /> <BR /> The latter method runs on Windows only. However, it should be possible to implement a similar approach on other operating systems that support custom URLs, in particular macOS.<BR /> <BR /> If you need help with the SAP GUI or on another topic, <EM>Ask a Question</EM> on the <A href="https://community.sap.com/search/?ct=qa&amp;mt=345385326078662132058122667685214&amp;qt=all" target="_blank">SAP Community Q&amp;A resource page</A>. 2022-01-10T20:41:32+01:00 https://community.sap.com/t5/technology-blogs-by-sap/build-deploy-and-reuse-html5-applications/ba-p/13523668 Build, Deploy and Reuse html5 applications 2022-02-11T11:05:10+01:00 former_member746703 https://community.sap.com/t5/user/viewprofilepage/user-id/746703 Typically SAP HTML5 applications are built and deployed into html5 repository. <SPAN class="ph pname">HTML5 applications</SPAN> consist of static content that runs on a browser such as HTML, CSS, JavaScript, and other files. These module can be reused in various ways for end users interaction.<BR /> <BR /> The SAP Business Technology Platform cockpit can act in the roles of a <SPAN class="ph emphasis emphasis">service provider</SPAN>&nbsp;and a&nbsp;<SPAN class="ph emphasis emphasis">service consumer</SPAN>. This blog post is to introduce the configurations into provider and consumer accounts that we often deal with in our development life cycle. I have picked two scenarios to show how easy it is to reuse the html5 content.<BR /> <BR /> Prerequisites<BR /> <UL><BR /> <LI>You've created a SAP HTML5 module in SAP Web IDE or using yo generator and deployed it to your SAP Cloud Platform subaccount.</LI><BR /> <LI>You've basic understanding about provider and consumer account</LI><BR /> <LI>Understanding of app host id</LI><BR /> </UL><BR /> You will learn<BR /> <UL><BR /> <LI>How to consume your own developed apps in a SAP Fiori Launchpad</LI><BR /> <LI>How to add the html5 content to your own developed application router at cloud foundry</LI><BR /> </UL><BR /> <H3 id="toc-hId-1088393315"><STRONG>SAP Fiori Launchpad</STRONG></H3><BR /> The launchpad comes with all the capabilities such as adding applications and grouping them, theme managing, roles etc., Let us assume our own developed business service that shares UI is available in provider account.<BR /> <BR /> Note: A business service that provides RESTful service or shares UI is accessed by a consumer. For e.g., As of today we access applications like workflow management is shared by business service. Read more information about integration of <A href="https://help.sap.com/viewer/956efb6db08c450bb303a0d316b72f10/Cloud/en-US/bf7d98cf76df48009d8bc88599b6cd55.html" target="_blank" rel="noopener noreferrer">business service</A><BR /> <H4 id="toc-hId-1020962529"><STRONG>STEP 1: Binding process</STRONG></H4><BR /> Business service (that exposes the UI) needs to expose a set of attributes that enable the managed application router to serve business service UI and/or data. Service Broker of the business service is responsible to put app-host-id inside application's VCAP_SERVICES. The attributes should be defined in the onBind hook in the service broker implementation<BR /> <DIV><BR /> <DIV>When you bind an application to a service, the service puts some attributes to the VCAP_SERVICES of the application. <STRONG>Ensure that service <SPAN style="color: #000080"><EM>html5-apps-repo&nbsp;</EM></SPAN>with <SPAN style="color: #993300">app-host</SPAN> plan of your application is binded with the service broker in provider account</STRONG>.</DIV><BR /> </DIV><BR /> <DIV></DIV><BR /> <DIV>You can verify the html5-apps-repo service name and app-host id for your application from a command after login to subaccount</DIV><BR /> <DIV></DIV><BR /> <DIV><BR /> <PRE class="language-abap"><CODE>cf html5-list</CODE></PRE><BR /> This will list out html5 applications<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/02/html5-applications.png" height="70" width="663" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic">list of all html5 applications</P><BR /> &nbsp;<BR /> <BR /> </DIV><BR /> <H4 id="toc-hId-824449024"><STRONG>STEP 2: Creation of service instance in consumer account</STRONG></H4><BR /> Go to consumer account and create a new instance of your business service<BR /> <BR /> &nbsp;<BR /> <H4 id="toc-hId-627935519"><STRONG>STEP 3: Creation of destination in consumer account</STRONG></H4><BR /> Create a destination and select newly created instance.<BR /> <PRE class="language-abap"><CODE>Go to Destinations -&gt; New Destinations -&gt; Service Instance -&gt; Select your service Instance from dropdown</CODE></PRE><BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/02/create-destination.png" /></P><BR /> &nbsp;<BR /> <BR /> Verify that your app-host id is listed in app-host id's field under additional properties or you can verify from the service key of your service instance from View credentials<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/02/view-credentials.png" /></P><BR /> &nbsp;<BR /> <H4 id="toc-hId-431422014"><STRONG>STEP 4: Subscription to SAP Fiori Launchpad in consumer account</STRONG></H4><BR /> In the side navigation panel of your subaccount, click&nbsp;<STRONG>Subscriptions</STRONG>&nbsp;and enter&nbsp;<STRONG>Launchpad</STRONG> in the search bar. Then on the&nbsp;<STRONG>Launchpad</STRONG>&nbsp;tile, click&nbsp;<STRONG>Go to Application</STRONG>. Check here <A href="https://developers.sap.com/tutorials/cp-launchpad-integrate-sapui5-app.html" target="_blank" rel="noopener noreferrer">how to add your application into Launchpad</A><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/02/Launchpad.png" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic">Fiori Launchpad</P><BR /> &nbsp;<BR /> <H3 id="toc-hId-105825790"><STRONG>Application Router</STRONG></H3><BR /> The application router is used in combination with the XSUAA service to authenticate a user and route the user to the secured application. Read more about this <A href="https://developers.sap.com/tutorials/cp-cf-security-xsuaa-create.html" target="_blank" rel="noopener noreferrer">here</A> .<BR /> <BR /> &nbsp;<BR /> <H4 id="toc-hId-38395004"><STRONG>STEP 1: Add app-host id into your user provided service</STRONG></H4><BR /> <A href="https://docs.cloudfoundry.org/devguide/services/user-provided.html" target="_blank" rel="nofollow noopener noreferrer">User provided service</A> enable developers to use services that are not available in the marketplace with their apps running on Cloud Foundry. Usually credentials to connect to DB or app-host Id is shared in it. In our use case ensure to include app-host id<BR /> <BR /> &nbsp;<BR /> <H4 id="toc-hId--158118501"><STRONG>STEP 2: Create service instance and ensure from view credentials your app-host id is visible.</STRONG></H4><BR /> After creation of user provided service instance in a provider account, Ensure to check from view credentials app-host id along with credentials are added<BR /> <BR /> &nbsp;<BR /> <H4 id="toc-hId--354632006"><STRONG>STEP 3: Bind App router</STRONG></H4><BR /> When you bind the app router it will be having information about your html5 application.<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/02/Screenshot-2022-02-10-at-11.04.13-AM.png" /></P><BR /> &nbsp;<BR /> <H4 id="toc-hId--551145511"><STRONG>STEP 4: Ensure application is being redirected to your html5 application with the app router url</STRONG></H4><BR /> Please capture service value and appId from your manifest.json.<BR /> <PRE class="language-abap"><CODE> "sap.cloud": {<BR /> "public": true,<BR /> "service": "com.sap.spa.processautomation"<BR /> }</CODE></PRE><BR /> URL is composed of your<BR /> <PRE class="language-abap"><CODE>&lt;app-router-url&gt;/&lt;service-without-dots&gt;.&lt;appId-without-dots&gt;</CODE></PRE><BR /> Ensure that you are redirected to your html5 application's index.html with above constructed url.<BR /> <BR /> &nbsp;<BR /> <H3 id="toc-hId--951973104"><STRONG>Summary</STRONG></H3><BR /> We learnt how to consume your own developed apps in a Fiori Launchpad<BR /> <UL><BR /> <LI>Bind&nbsp;<EM>html5-apps-repo&nbsp;</EM>service instance to service broker application present in the space of a provider account</LI><BR /> <LI>Create service instance of business service in consumer account</LI><BR /> <LI>Create destination of above service instance and this is ready to consume in Launchpad</LI><BR /> </UL><BR /> We learnt how to add the html5 content to your own developed application router at cloud foundry<BR /> <UL><BR /> <LI>Add app-host id in user provided service</LI><BR /> <LI>Bind app-router after creation of user provided service instance</LI><BR /> <LI>It is ready to consume while redirecting via app-router</LI><BR /> </UL><BR /> &nbsp;<BR /> <BR /> Thank you all for reading this blog <span class="lia-unicode-emoji" title=":slightly_smiling_face:">🙂</span> , I hope it was informative and if you have any question that I can address in the comment section 2022-02-11T11:05:10+01:00 https://community.sap.com/t5/application-development-blog-posts/web-form-in-plain-html/ba-p/13547656 Web Form in Plain HTML 2022-03-03T16:01:56+01:00 former_member786693 https://community.sap.com/t5/user/viewprofilepage/user-id/786693 Web forms can be pictured as a bridge between a user and a website or application. They are commonly used to collect user data which is technically referred to as client-side and store them in a database or client-side. There are several types of forms offered on the internet but in this blog post, we will focus on creating a web form in plain HTML.<BR /> <BR /> An HTML form is composed of several form controls such as input, checkbox, dropdown, radio buttons, text fields, and buttons. Form controls can be programmed to ensure the specific formats of values entered by the user. Usually, all the form controls are paired with labels to shortly describe their purposes to the user.<BR /> <BR /> <STRONG>For this tutorial you will need:</STRONG><BR /> <UL><BR /> <LI>Your favourite code editor.</LI><BR /> <LI>Your favourite web browser.</LI><BR /> </UL><BR /> <STRONG>Note:</STRONG> No previous knowledge of programming is required.<BR /> <BR /> &nbsp;<BR /> <H4 id="toc-hId-1219442207">1. Create an HTML file</H4><BR /> Open your favourite code editor and create a new file. Name the file and save it using the<STRONG> .html</STRONG> extension.<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/02/Screen-Shot-2022-02-04-at-1.34.12-PM.png" /></P><BR /> <BR /> <H4 id="toc-hId-1022928702">2. HTML Declaration</H4><BR /> All the HTML documents start with a HTML declaration. With the introduction of HTML5 the declaration code all the HTML documents start with:<BR /> <BR /> <SPAN class="tagcolor">&lt;</SPAN>!DOCTYPE<SPAN class="attributecolor"> html</SPAN><SPAN class="tagcolor">&gt;</SPAN><BR /> <BR /> The purpose of the declaration is to let the browser know the type of the document and the version of the HTML.<BR /> <H4 id="toc-hId-826415197">3. Structure the File</H4><BR /> Every HTML file consists of two main parts:<BR /> <UL><BR /> <LI><STRONG>Head</STRONG>: contains information about the document such as the title and any further extensions such as CSS, different script languages or meta tags.</LI><BR /> <LI><STRONG>Body:</STRONG>&nbsp;contains the document's content which is shown in the browser.</LI><BR /> </UL><BR /> &nbsp;<BR /> <PRE class="language-markup"><CODE>&lt;!DOCTYPE html&gt;<BR /> &lt;html&gt;<BR /> &lt;head&gt;<BR /> &lt;title&gt;Register Page&lt;/title&gt; <BR /> <BR /> &lt;/head&gt; <BR /> &lt;body&gt;<BR /> <BR /> &lt;/body&gt;<BR /> &lt;/html&gt;</CODE></PRE><BR /> <STRONG>4. HTML Form</STRONG><BR /> <BR /> All HTML forms begin with the <CODE>&lt;form&gt;</CODE> element. This element identifies the form within the HTML file. It contains two main attributes which configure the way the form behaves.<BR /> <UL><BR /> <LI><STRONG>Action</STRONG>: defines the URL path the form will follow after the data is submitted</LI><BR /> <LI><STRONG>Method</STRONG>: defines the HTTP method (usually <CODE>get</CODE> or <CODE>post</CODE>) that the data will be transported to the client side.</LI><BR /> </UL><BR /> <PRE class="language-markup"><CODE>&lt;form action="/form-page-handling" method="post"&gt;<BR /> &lt;/form&gt;</CODE></PRE><BR /> <STRONG>5. Register Form</STRONG><BR /> <BR /> This tutorial's registration form is a combination of different form controllers:<BR /> <UL><BR /> <LI><CODE>&lt;fieldset&gt;</CODE>: It is used to group all the controls and labels used within this registration form.</LI><BR /> <LI><CODE>&lt;legend&gt;</CODE>: It provides a caption for the fieldset.</LI><BR /> </UL><BR /> The input element offers a variety of types through different type attributes, some of which are used in the registration form.<BR /> <DIV><BR /> <UL><BR /> <LI><CODE>&lt;input type="text"&gt;</CODE>&nbsp;: It creates a basic single line inputs which are visible as the user types away.</LI><BR /> <LI><CODE>&lt;input type="email"&gt;</CODE>&nbsp;: It helps the user to enter or edit an email address.</LI><BR /> </UL><BR /> <DIV><BR /> <UL><BR /> <LI><CODE>&lt;input type="password"&gt;</CODE> : It provides a secured way for user to type in the password.</LI><BR /> </UL><BR /> <DIV><BR /> <UL><BR /> <LI><CODE>&lt;input type="date"&gt;</CODE> : It lets the user pick a date from the datepicker.</LI><BR /> </UL><BR /> </DIV><BR /> <UL><BR /> <LI><SPAN style="font-size: 1rem"><CODE>&lt;input type="checkbox"&gt;</CODE> : It creates a box which can be checked when the user clicks on it</SPAN></LI><BR /> </UL><BR /> <DIV><BR /> <UL><BR /> <LI><CODE>&lt;input type="reset"&gt;</CODE>&nbsp;: It resets all the input fields.</LI><BR /> </UL><BR /> </DIV><BR /> <UL><BR /> <LI><SPAN style="font-size: 1rem"><SPAN style="font-size: 1rem"><CODE>&lt;input type="text&gt;&nbsp;required list="listname"&gt;</CODE>&nbsp;</SPAN></SPAN><SPAN style="font-size: 1rem"><SPAN style="font-size: 1rem">: It is a combination of two attributes which create a dropdown menu with several option. In order for the input element to be complete, a&nbsp;</SPAN></SPAN><CODE>&lt;datalist id="listname"&gt;</CODE><SPAN style="font-size: 1rem"> element is added to populate the dropdown menu with options.&nbsp;</SPAN></LI><BR /> </UL><BR /> <DIV><BR /> <DIV></DIV><BR /> </DIV><BR /> </DIV><BR /> </DIV><BR /> &nbsp;<BR /> <BR /> <STRONG>6. User Validation</STRONG><BR /> <BR /> An important step before sending the data to the server-side is to make sure that all the required fields are filled out in the correct format. The user validation is the first step that catches any misinformation or wrong format in the form. It redirects the user towards the accepted format via the warning messages. The user validation in HTML can be coded through a combination of <CODE>required</CODE>, <SPAN style="color: #222222;font-family: monospace"><SPAN style="font-size: 11.375px;background-color: #e9ebec">max length</SPAN></SPAN>&nbsp;and <SPAN style="color: #222222;font-family: monospace"><SPAN style="font-size: 11.375px;background-color: #e9ebec">pattern attribute</SPAN></SPAN>.<BR /> <BR /> The example below demonstrates the case where the user tries to enter numbers instead of letters in the first name input field. In this case, the user will get a warning message as the first name input controller has the respective attribute,&nbsp;<EM style="font-size: 1rem"><STRONG>required maxlength="32" pattern="[A-Za-z]{1,32}"&nbsp;</STRONG></EM><SPAN style="font-size: 1rem">which does not allow number format or blank field.&nbsp;</SPAN>Once the user fills out all the fields correctly, the user can submit the form through the register button. The data collected from the form will be sent to the server-side through POST or GET methods which involve different programming languages.<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/02/Screen-Shot-2022-02-10-at-2.00.17-PM.png" /></P><BR /> &nbsp;<BR /> <BR /> &nbsp;<BR /> <H4 id="toc-hId-629901692">7. Execute the code</H4><BR /> Double click the HTML file to see how the page is represented in the browser.<BR /> <BR /> &nbsp;<BR /> <BR /> &nbsp;<BR /> <BR /> This article focused on creating a web form on plain HTML without any prior programming experience. The full code of the Registration Page can be found <A href="https://github.com/SAP-samples/fundamental-ngx-sample-apps/blob/main/HTML-form/index.html" target="_blank" rel="nofollow noopener noreferrer">here</A> and the form deployed <A href="https://sap-samples.github.io/fundamental-ngx-sample-apps/simple-form" target="_blank" rel="nofollow noopener noreferrer">here</A>. As we can see from the screenshot above, HTML doesn't give a lot of options when it comes to page visualization. The second tutorial will focus on the visualization of a registration form using the&nbsp;<A href="https://sap.github.io/fundamental-ngx/#/core/home" target="_blank" rel="nofollow noopener noreferrer">Fundamental NGX Library.</A>&nbsp;For more information, follow the<A href="https://community.sap.com/topics/fundamental-library" target="_blank"> Fundamental Library community.</A><BR /> <BR /> &nbsp;<BR /> <BR /> &nbsp; 2022-03-03T16:01:56+01:00 https://community.sap.com/t5/technology-blogs-by-members/ui5-fragments-and-dialogs-typescript/ba-p/13532139 UI5 Fragments and Dialogs - TypeScript 2022-06-15T13:02:03+02:00 WouterLemaire https://community.sap.com/t5/user/viewprofilepage/user-id/9863 Hi all,<BR /> <H1 id="toc-hId-831116710">Introduction</H1><BR /> In the past I shared a blog post on how to combine Dialogs with Fragments in UI5: <A href="https://blogs.sap.com/2017/03/09/ui5-fragments-and-dialogs/" target="_blank" rel="noopener noreferrer">https://blogs.sap.com/2017/03/09/ui5-fragments-and-dialogs/</A> .<BR /> <BR /> &nbsp;<BR /> <BR /> This is an approach which I still use today but in combination with TypeScript. Therefore, I’ve updated the code to TypeScript. Besides that, I also improved some aspects of it to gain more of the TypeScript benefits.<BR /> <BR /> This new version comes with the following parts:<BR /> <UL><BR /> <LI>Dialogcontroller.ts: acts like a BaseController for dialogs</LI><BR /> <LI>openFragment function: a reusable function to open dialogs which should be placed in the BaseController of views</LI><BR /> <LI>Fragment and Controller of the dialog: dedicated fragment with the UI of the dialog and its own controller</LI><BR /> </UL><BR /> <H1 id="toc-hId-634603205">Reusable dialog aspects</H1><BR /> <H2 id="toc-hId-567172419">Add a Dialog controller</H2><BR /> I added a “DialogController” which is similar to and extends from “BaseController” to my UI5 project. This is designed to act as a parent controller to every controller used for any dialog.<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/05/image1-2.png" /></P><BR /> This controller is an abstract class that comes with an abstract function “onBeforeShow”. Every dialog that has a controller should implement this, this is similar as an onRouteMatched function and will be called every time the dialog opens (not only the first time on init, every time!).&nbsp; This function contains the following arguments:<BR /> <UL><BR /> <LI>viewController: this will be an instance of the controller (this.getView()) from where the dialog is being called</LI><BR /> <LI>dialog: contains the instance of the current fragment and its controller (which should be the same as ‘this’)</LI><BR /> <LI>resolve: instead of callback, I’m using a promise to return something when the dialog is being closed back from where it has been instantiated</LI><BR /> <LI>data: it is possible to pass information when instantiating the fragment, for that “data” can be used</LI><BR /> <LI>popoverSource: in case the dialog is being called as a popover it could be helpful to have the source from where it is being called</LI><BR /> </UL><BR /> Next to that, it comes with a function to get a control in a fragment.<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/05/image2.png" /></P><BR /> Full code of controller can be found on GitHub: <A href="https://github.com/lemaiwo/UI5TypeScriptDemoApp/blob/main/src/controller/DialogController.ts" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/UI5TypeScriptDemoApp/blob/main/src/controller/DialogController.ts</A><BR /> <H2 id="toc-hId-370658914">openFragment function to BaseController</H2><BR /> Just like in the first version, I added a function “openFragment” to the “BaseController” so every other controller can easily reuse this function.<BR /> <BR /> The function is quite similar to the JavaScript version with some small changes, like the callback to promise and types of course <span class="lia-unicode-emoji" title=":smiling_face_with_smiling_eyes:">😊</span><BR /> <BR /> It comes with the following arguments:<BR /> <UL><BR /> <LI>name: id or name of the fragment. In case only a name is provided it will try to find the fragment with the dialog using the same path as the view that calls “openFragment”</LI><BR /> <LI>data: unknown object that can be used to pass data to the dialog. It will be forwarded to the “onBeforeShow” function</LI><BR /> <LI>popoverSource: in case the function is being used for a popover we need to know the source to open the popover on the right place</LI><BR /> </UL><BR /> The function will also try to find a controller with the same path as the fragment in the controller folder. If it is not able to find a controller it will use the controller of the current view.<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/05/image3-1.png" /></P><BR /> <BR /> <UL><BR /> <LI>Full code of the BaseController can be found here: <A href="https://github.com/lemaiwo/UI5TypeScriptDemoApp/blob/main/src/controller/BaseController.ts" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/UI5TypeScriptDemoApp/blob/main/src/controller/BaseController.ts</A></LI><BR /> </UL><BR /> <H1 id="toc-hId-45062690">Dialog implementation</H1><BR /> <H2 id="toc-hId--22368096">Create Fragment and controller</H2><BR /> Most of the time I create a dedicated controller for a dialog to keep logic of the dialog out of the controller of the view. This also makes the dialog with it functionalities reusable in other views.<BR /> <BR /> Create the fragment that contains the dialog control and a controller. The controller should be located in the same subfolder structure in the controller folder like the fragment in the view folder:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/05/image4-1.png" /></P><BR /> Added a simple text field and a button to the dialog:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/05/image5-2.png" /></P><BR /> Code of the dialog fragment: <A href="https://github.com/lemaiwo/UI5TypeScriptDemoApp/blob/main/src/view/dialog/About.fragment.xml" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/UI5TypeScriptDemoApp/blob/main/src/view/dialog/About.fragment.xml</A><BR /> <BR /> &nbsp;<BR /> <BR /> The controller for the dialog extends from the DialogController and implements the onBeforeShow function. This is the perfect location to reset previous filled in values to have a clean start when opening again.<BR /> <BR /> It also contains all functions that are related to the dialog, which makes the dialog with its logic reusable.<BR /> <BR /> The onClose will call the resolve function to let the controller of the view now that it’s closed and pass a value back.<BR /> <BR /> This way, specific logic to the view can be implemented in the controller after calling the dialog:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/05/image6-1.png" /></P><BR /> Code of Dialog controller: <A href="https://github.com/lemaiwo/UI5TypeScriptDemoApp/blob/main/src/controller/dialog/About.controller.ts" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/UI5TypeScriptDemoApp/blob/main/src/controller/dialog/About.controller.ts</A><BR /> <H2 id="toc-hId--218881601">Code to open the dialog</H2><BR /> In the controller of the view, you can simply call the function “openFragment” with the required parameters. Wait until it is closed to do something view specifc.<BR /> <BR /> As an example:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/05/image7.png" /></P><BR /> Code of App controller: <A href="https://github.com/lemaiwo/UI5TypeScriptDemoApp/blob/main/src/controller/App.controller.ts" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/UI5TypeScriptDemoApp/blob/main/src/controller/App.controller.ts</A><BR /> <H2 id="toc-hId--415395106">Result:</H2><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/05/image8.png" /></P><BR /> Full example can be found here: <A href="https://github.com/lemaiwo/UI5TypeScriptDemoApp" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/UI5TypeScriptDemoApp</A> 2022-06-15T13:02:03+02:00 https://community.sap.com/t5/technology-blogs-by-members/secure-fiori-app-in-sap-btp-with-xsuaa/ba-p/13527827 Secure Fiori App in SAP BTP with XSUAA 2022-06-27T09:46:11+02:00 former_member797738 https://community.sap.com/t5/user/viewprofilepage/user-id/797738 <STRONG>Requirement</STRONG> is to have Managed App Router based Fiori app in SAP BTP- CF which is calling OData/web service(We have taken example of Northwind for this project) and add additinal authorization layer with the help of XSUAA to <STRONG>achieve in app authorization</STRONG>.<BR /> <BR /> &nbsp;<BR /> <BR /> Here Node JS API and HTML5 modules are added in single MTA sharing instance of XSUAA<BR /> <BR /> and communicating with the help of OAuth2UserTokenExchange type instance level destination.<BR /> <BR /> Note: Destinations are created with help of MTA.yaml dependencies.<BR /> <BR /> You can find complete project at <A href="https://github.com/CodeWith-Satyajit/ManagedFioriAppWithXSUAA" target="_blank" rel="nofollow noopener noreferrer">GitHub</A><BR /> <H3 id="toc-hId-1088514276"></H3><BR /> <H3 id="toc-hId-892000771">Step1:Create Basic MTA<BR /> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/1-81.png" /><BR /> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/2-17.jpg" /></H3><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/3-15.jpg" /></P><BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/4-10.jpg" /></P><BR /> <BR /> <H3 id="toc-hId-695487266">Step2:Add Managed App Router</H3><BR /> Right click on MTA.yaml and select create MTA Module from Template<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/11-2.jpg" /></P><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/22-2.jpg" /></P><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/33-1.jpg" /></P><BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/44-1.jpg" /></P><BR /> <BR /> <H3 id="toc-hId-498973761">Step3:Add Fiori/SAPUI5 Module in MTA</H3><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/111.jpg" /></P><BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/222.jpg" /></P><BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/333.jpg" /></P><BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/444.jpg" /></P><BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/555.jpg" /></P><BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/666.jpg" /></P><BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/777.jpg" /></P><BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/888.jpg" /></P><BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/999.jpg" /></P><BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/101010.jpg" /></P><BR /> &nbsp;<BR /> <H3 id="toc-hId-302460256">Step4:Add Node JS Module to add additinal layer for calling web service/OData.</H3><BR /> Add Node JS module in MTA04 project to call Northwind service and add XSUAA Auth. Refer GitHub Project.<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/11-3.jpg" /></P><BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/2-18.jpg" /></P><BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/4-11.jpg" /></P><BR /> Below code you can refer for Node JS API which is calling Northwind service. Folder structure can be referred from Git project shared above.<BR /> <PRE class="language-javascript"><CODE>const express = require("express");<BR /> const fetch = require("axios");<BR /> const app = express();<BR /> const port = process.env.port || 8080;<BR /> const { JWTStrategy } = require("@sap/xssec");<BR /> const xsenv = require("@sap/xsenv");<BR /> const passport = require("passport");<BR /> <BR /> passport.use(new JWTStrategy(xsenv.getServices({ uaa: { tag: "xsuaa" } }).uaa));<BR /> <BR /> app.use(passport.initialize());<BR /> app.use(passport.authenticate("JWT", { session: false }));<BR /> <BR /> app.get("/", (req, res, next) =&gt; {<BR /> res.send("Node Js Based Service With App Router for SAP BTP CF by Satyajit");<BR /> });<BR /> <BR /> app.get("/PRD/Products", checkScope, async (req, res, next) =&gt; {<BR /> var result;<BR /> result = await fetch.get("https://services.odata.org/v2/northwind/northwind.svc/Products?$format=json")<BR /> res.send(result.data);<BR /> });<BR /> <BR /> <BR /> function checkScope(req, res, next) {<BR /> if (req.authInfo.checkLocalScope("read")) {<BR /> next();<BR /> } else {<BR /> res.status(403).end("Forbidden");<BR /> }<BR /> }<BR /> app.listen(port, console.log(`Listening on port ${port}`));</CODE></PRE><BR /> &nbsp;<BR /> <H3 id="toc-hId-105946751">Step5:Make AJAX call to Node JS service.</H3><BR /> <PRE class="language-javascript"><CODE>sap.ui.define([<BR /> "sap/ui/core/mvc/Controller"<BR /> ],<BR /> /**<BR /> * @param {typeof sap.ui.core.mvc.Controller} Controller<BR /> */<BR /> function (Controller) {<BR /> "use strict";<BR /> <BR /> return Controller.extend("ns.mta04.mta04.controller.View1", {<BR /> onInit: function () {<BR /> let path = this.getOwnerComponent().getManifestObject()._oBaseUri._parts.path;<BR /> var sUrl = path + "PRD/Products";<BR /> //var oView = this.getView();<BR /> var oTextModel = this.getOwnerComponent().getModel("textModel");<BR /> //this.getView().setModel(oTextModel,"textModel");<BR /> <BR /> var oTable = this.getView().byId("idTabel01");<BR /> <BR /> jQuery.ajax({<BR /> url: sUrl,<BR /> method: "GET",<BR /> success: function (oResponse) {<BR /> debugger;<BR /> oTextModel.setData(oResponse.d.results);<BR /> oTable.setModel(oTextModel);<BR /> oTable.bindRows("textModel&gt;/");<BR /> <BR /> },<BR /> error: function () { <BR /> debugger;<BR /> }<BR /> });<BR /> }<BR /> });<BR /> });<BR /> </CODE></PRE><BR /> &nbsp;<BR /> <BR /> View1.view.xml code<BR /> <PRE class="language-markup"><CODE>&lt;mvc:View xmlns:mvc="sap.ui.core.mvc" xmlns:m="sap.m" xmlns="sap.ui.table" controllerName="ns.mta04.mta04.controller.View1" displayBlock="true"&gt;<BR /> &lt;m:Page id="page" title="{i18n&gt;title}"&gt;<BR /> &lt;m:content&gt;<BR /> &lt;Table enableCellFilter="true" selectionMode="None" visibleRowCount="15" id="idTabel01" rows="{textModel&gt;/}"&gt;<BR /> &lt;columns&gt;<BR /> &lt;Column id="c1" width="25%"&gt;<BR /> &lt;m:Label text="Product ID" id="l1"/&gt;<BR /> &lt;template&gt;<BR /> &lt;m:Text text="{textModel&gt;ProductID}" id="t1" /&gt;<BR /> &lt;/template&gt;<BR /> &lt;/Column&gt;<BR /> &lt;Column width="50%" id="c2"&gt;<BR /> &lt;m:Label text="Product Name" id="l2" /&gt;<BR /> &lt;template&gt;<BR /> &lt;m:Text text="{textModel&gt;ProductName}" id="t2" /&gt;<BR /> &lt;/template&gt;<BR /> &lt;/Column&gt;<BR /> &lt;Column width="25%" id="c3"&gt;<BR /> &lt;m:Label text="Unit Price" id="l3" /&gt;<BR /> &lt;template&gt;<BR /> &lt;m:Text text="{textModel&gt;UnitPrice}" id="t3" /&gt;<BR /> &lt;/template&gt;<BR /> &lt;/Column&gt;<BR /> &lt;/columns&gt;<BR /> <BR /> &lt;/Table&gt;<BR /> &lt;/m:content&gt;<BR /> &lt;/m:Page&gt;<BR /> &lt;/mvc:View&gt;</CODE></PRE><BR /> &nbsp;<BR /> <BR /> Adjust MTA.yaml as below.<BR /> <PRE class="language-javascript"><CODE>_schema-version: "3.2"<BR /> ID: MTA04<BR /> version: 0.0.1<BR /> modules:<BR /> - name: API_NodeJS<BR /> type: nodejs<BR /> path: ./API_WITH_XSUAA<BR /> requires:<BR /> - name: uaa_MTA04<BR /> provides:<BR /> - name: srv-api-nodejs<BR /> properties:<BR /> srv-url: ${default-url}<BR /> parameters:<BR /> buildpack: nodejs_buildpack<BR /> build-parameters:<BR /> builder: npm-ci<BR /> - name: MTA04-destination-content<BR /> type: com.sap.application.content<BR /> requires:<BR /> - name: MTA04-destination-service<BR /> parameters:<BR /> content-target: true<BR /> - name: MTA04_html_repo_host<BR /> parameters:<BR /> service-key:<BR /> name: MTA04_html_repo_host-key<BR /> - name: srv-api-nodejs <BR /> - name: uaa_MTA04<BR /> parameters:<BR /> service-key:<BR /> name: uaa_MTA04-key<BR /> parameters:<BR /> content:<BR /> instance:<BR /> destinations:<BR /> - Authentication: OAuth2UserTokenExchange<BR /> Name: api-nodejs-srv<BR /> TokenServiceInstanceName: MTA04-xsuaa-service<BR /> TokenServiceKeyName: uaa_MTA04-key<BR /> URL: ~{srv-api-nodejs/srv-url} <BR /> - Name: MTA04_MTA04_html_repo_host<BR /> ServiceInstanceName: MTA04-html5-app-host-service<BR /> ServiceKeyName: MTA04_html_repo_host-key<BR /> sap.cloud.service: MTA04<BR /> - Authentication: OAuth2UserTokenExchange<BR /> Name: MTA04_uaa_MTA04<BR /> ServiceInstanceName: MTA04-xsuaa-service<BR /> ServiceKeyName: uaa_MTA04-key<BR /> sap.cloud.service: MTA04<BR /> existing_destinations_policy: ignore<BR /> build-parameters:<BR /> no-source: true<BR /> - name: MTA04-app-content<BR /> type: com.sap.application.content<BR /> path: .<BR /> requires:<BR /> - name: MTA04_html_repo_host<BR /> parameters:<BR /> content-target: true<BR /> build-parameters:<BR /> build-result: resources<BR /> requires:<BR /> - artifacts:<BR /> - nsmta04mta04.zip<BR /> name: nsmta04mta04<BR /> target-path: resources/<BR /> - name: nsmta04mta04<BR /> type: html5<BR /> path: mta04<BR /> build-parameters:<BR /> build-result: dist<BR /> builder: custom<BR /> commands:<BR /> - npm install<BR /> - npm run build:cf<BR /> supported-platforms: []<BR /> resources:<BR /> - name: MTA04-destination-service<BR /> type: org.cloudfoundry.managed-service<BR /> parameters:<BR /> config:<BR /> HTML5Runtime_enabled: true<BR /> init_data:<BR /> instance:<BR /> destinations:<BR /> - Authentication: NoAuthentication<BR /> Name: ui5<BR /> ProxyType: Internet<BR /> Type: HTTP<BR /> URL: <A href="https://ui5.sap.com" target="test_blank" rel="noopener noreferrer">https://ui5.sap.com</A><BR /> existing_destinations_policy: update<BR /> version: 1.0.0<BR /> service: destination<BR /> service-name: MTA04-destination-service<BR /> service-plan: lite<BR /> - name: MTA04_html_repo_host<BR /> type: org.cloudfoundry.managed-service<BR /> parameters:<BR /> service: html5-apps-repo<BR /> service-name: MTA04-html5-app-host-service<BR /> service-plan: app-host<BR /> - name: uaa_MTA04<BR /> type: org.cloudfoundry.managed-service<BR /> parameters:<BR /> path: ./xs-security.json<BR /> service: xsuaa<BR /> service-name: MTA04-xsuaa-service<BR /> service-plan: application<BR /> parameters:<BR /> deploy_mode: html5-repo<BR /> </CODE></PRE><BR /> &nbsp;<BR /> <H3 id="toc-hId--90566754">Step6:Deploy app to CF and add add to FLP service.</H3><BR /> <PRE><CODE>Right click on MTA.YAML and click on Build MTA Project.</CODE></PRE><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/111.png" /></P><BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/222-2.png" /></P><BR /> &nbsp;<BR /> <H2 id="toc-hId--416162978">Add Fiori Application to Fiori Launchpad service</H2><BR /> ** If Launchpad service is not available create new subscription.<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/333.png" /></P><BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/444.png" /></P><BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/555.png" /></P><BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/666.png" /></P><BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/5555.jpg" /></P><BR /> &nbsp;<BR /> <BR /> Add App to group and Role. It will be available in FLP service.<BR /> <BR /> Also app can be tested form HTML5 repo<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/fl03.jpg" /></P><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/fl01.jpg" /></P><BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/fl02.jpg" /></P><BR /> &nbsp;<BR /> <H3 id="toc-hId--483593764">Conclusion-</H3><BR /> With this kind of scenario we can implement additinal authorization at BTP level.<BR /> We can use this project to call any S4 API also with the help of destination at subaccount level.<BR /> <BR /> &nbsp;<BR /> <BR /> Please share your feedback.<BR /> <H1 id="toc-hId--938272707">Happy Learning!</H1> 2022-06-27T09:46:11+02:00 https://community.sap.com/t5/technology-blogs-by-members/super-dynamic-scaling-of-sap-its-mobile-application-screens-using-html/ba-p/13532672 Super Dynamic Scaling of SAP ITS Mobile Application Screens using HTML Viewport Meta Tag 2022-07-05T08:51:40+02:00 former_member810063 https://community.sap.com/t5/user/viewprofilepage/user-id/810063 The ITS mobile application is a vital part of SAP when it comes to accessing SAP from remote locations, especially for scanning data from different types of handheld devices (HHD) using one application. Major challenges in developing ITS applications are related to the shape and size of application screens when we execute them from different resolution devices. To overcome this issue, I have proposed a solution that uses an HTML viewport meta-tag to dynamically scale the shape and size of the application screen. This blog explains how to use the Viewport tag to set ITS mobile application screens' shape and size dynamically based on device resolution.<BR /> <BR /> <STRONG>Traditional Approach:</STRONG><BR /> <PRE class="language-markup"><CODE>`&lt;head&gt;&lt;style&gt;.MobileRow {zoom:200%}&lt;/style&gt;`<BR /> </CODE></PRE><BR /> In this approach, we can set the zoom percentage using the above syntax. But the screen will not be scaled automatically based on device resolution.<BR /> <BR /> <STRONG>Source:</STRONG> <A href="https://blogs.sap.com/2019/04/25/super-easy-zooming-of-its-mobile-screens/" target="_blank" rel="noopener noreferrer">https://blogs.sap.com/2019/04/25/super-easy-zooming-of-its-mobile-screens/</A><BR /> <BR /> &nbsp;<BR /> <BR /> <STRONG>New Approach:</STRONG><BR /> <BR /> <STRONG>Syntax:</STRONG><BR /> <PRE class="language-markup"><CODE>&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;</CODE></PRE><BR /> <STRONG>Width:</STRONG> Width can be set between 1 and 10,000. For dynamic scaling, it should be set to content="width=device-width.<BR /> <BR /> <STRONG>Initial scale:</STRONG> This will set the initial zoom of the page. It should be set between 0.1 and 10.<BR /> <BR /> <STRONG>Example:</STRONG><BR /> <PRE class="language-markup"><CODE>`&lt;head&gt;&lt;meta charset="utf-8" name="viewport" content= "width=device-width, initial-scale=1.0"&gt;`</CODE></PRE><BR /> <P style="overflow: hidden;margin-bottom: 0px"><STRONG> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/b1.png" /></STRONG></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic">HTML Service - Example</P><BR /> <STRONG>With and Without Viewport:</STRONG><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/06/b2-2.png" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic">With and Without Viewport</P><BR /> <P class="root-block-node" data-changed="false" data-paragraphid="3">With this proposed approach, ABAP developers do not need to worry about the resolution of ITS application screens.&nbsp;Hence, the approach will reduce development time by automatically setting the application screen shape and size.</P><BR /> <P class="root-block-node" data-changed="false" data-paragraphid="5">Finally, from an end-user point of view, screens will be more user-friendly.</P><BR /> <P class="root-block-node" data-changed="false" data-paragraphid="6">I'm looking forward to hearing more about ITS resolutions. Feel free to comment and discuss.</P><BR /> <P class="root-block-node" data-changed="false" data-paragraphid="8">Best regards, thanks for reading, stay healthy.</P><BR /> <P data-changed="false" data-paragraphid="8"><STRONG>Abhijeet Tikar</STRONG></P><BR /> <STRONG>Refer Below Links for HTML Viewport Meta Tag:</STRONG><BR /> <OL><BR /> <LI><A href="https://www.w3schools.com/css/css_rwd_viewport.asp" target="_blank" rel="nofollow noopener noreferrer"><STRONG></STRONG></A><A href="https://www.w3schools.com/css/css_rwd_viewport.asp" target="test_blank" rel="nofollow noopener noreferrer">https://www.w3schools.com/css/css_rwd_viewport.asp</A></LI><BR /> <LI><A href="https://developer.mozilla.org/en-US/docs/Web/HTML/Viewport_meta_tag" target="_blank" rel="nofollow noopener noreferrer"><STRONG></STRONG></A><A href="https://developer.mozilla.org/en-US/docs/Web/HTML/Viewport_meta_tag" target="test_blank" rel="nofollow noopener noreferrer">https://developer.mozilla.org/en-US/docs/Web/HTML/Viewport_meta_tag</A></LI><BR /> </OL><BR /> &nbsp; 2022-07-05T08:51:40+02:00 https://community.sap.com/t5/technology-blogs-by-members/ui5-library-typescript-generator/ba-p/13532712 UI5 Library TypeScript Generator 2022-10-11T07:49:10+02:00 WouterLemaire https://community.sap.com/t5/user/viewprofilepage/user-id/9863 <H1 id="toc-hId-831122407">Introduction</H1><BR /> When building UI5 apps you will need to develop a custom UI5 control sooner or later. Doing this requires (or at least it is recommended to do so) to bundle those UI5 controls in a library. With TypeScript support for UI5 you do not only develop UI5 apps in TypeScript but most likely also UI5 Controls and libraries. For kickstarting your UI5 library and UI5 control there was no TypeScript generator yet, until now <span class="lia-unicode-emoji" title=":smiling_face_with_smiling_eyes:">😊</span>.<BR /> <BR /> &nbsp;<BR /> <BR /> Based on this TypeScript UI5 Library demo repository of Andreas Kunz and the already existing UI5 Library generator of Geert-Jan Klaps, I was able to create a TypeScript version of the UI5 Library generator.<BR /> <BR /> TypeScript UI5 Libray and Control demo repo from Andreas: <A href="https://github.com/SAP-samples/ui5-typescript-control-library" target="_blank" rel="nofollow noopener noreferrer">https://github.com/SAP-samples/ui5-typescript-control-library</A><BR /> <BR /> UI5 Library generator of Geert-Jan: <A href="https://blogs.sap.com/2021/01/24/kickstart-your-ui5-library-development-with-the-ui5-library-generator/" target="_blank" rel="noopener noreferrer">https://blogs.sap.com/2021/01/24/kickstart-your-ui5-library-development-with-the-ui5-library-generator/</A><BR /> <H1 id="toc-hId-634608902">Installation</H1><BR /> The new TypeScript UI5 Library generator can be used from in the “Easy UI5” Generator, so you first have to install Yeoman:<BR /> <BR /> npm i -g yo<BR /> <BR /> The generator can be started with the following command:<BR /> <BR /> yo easy-ui5 ts-library<BR /> <BR /> Or just by selecting from the Yeoman menu:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image1.png" /></P><BR /> <BR /> <H1 id="toc-hId-438095397">Generate</H1><BR /> In the “Easy UI5”&nbsp; generator you’ll find “ts-library”:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image2.png" /></P><BR /> Answer all questions:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image3.png" /></P><BR /> Once all is completed, it will generate the library and immediately start installing all npm dependencies. In case npm start results in an error, try running npm install again.<BR /> <BR /> In the end, you’ll have the following project generated to kickstart developing UI5 Controls in TypeScript:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image4.png" height="397" width="200" /></P><BR /> All config files are generated following the recommendations of SAP.<BR /> <H1 id="toc-hId-241581892">Run</H1><BR /> Run the command “npm run start” to test the library:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image5.png" /></P><BR /> This will open the test page to see your control:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image6.png" /></P><BR /> With this you should be good to go for building UI5 controls and Libraries with TypeScript!<BR /> <H1 id="toc-hId-45068387">Help</H1><BR /> Feel free to provide feedback or add improvements by using pull requests on the GitHub repo of the UI5 TypeScript Library generator: <A href="https://github.com/ui5-community/generator-ui5-ts-library" target="_blank" rel="nofollow noopener noreferrer">https://github.com/ui5-community/generator-ui5-ts-library</A><BR /> <BR /> &nbsp; 2022-10-11T07:49:10+02:00 https://community.sap.com/t5/technology-blogs-by-members/third-party-libraries-in-a-ui5-typescript-app/ba-p/13550419 Third-party libraries in a UI5 TypeScript app 2022-10-25T07:17:31+02:00 WouterLemaire https://community.sap.com/t5/user/viewprofilepage/user-id/9863 Using third-party libraries might be a bit more complicated in UI5 with TypeScript. The solution to do this is way easier than you would expect. Around a year ago, Peter Muessig already shared the solution for this. Maybe you’ve already seen this blog post of Peter so you know how to use this:<BR /> <BR /> <A href="https://blogs.sap.com/2021/11/15/using-npm-packages-in-ui5-without-shims/" target="_blank" rel="noopener noreferrer">https://blogs.sap.com/2021/11/15/using-npm-packages-in-ui5-without-shims/</A><BR /> <BR /> &nbsp;<BR /> <BR /> It could be that you missed it or just didn’t know it also works for UI5 with TypeScript.<BR /> <BR /> In this blogs, I want to point out that the same approach is valid for UI5 with TypeScript by providing a simple example.<BR /> <BR /> &nbsp;<BR /> <H1 id="toc-hId-832906991">Installation</H1><BR /> Start by generating a new UI5 TypeScript app following the steps in this blog post:<BR /> <BR /> <A href="https://blogs.sap.com/2021/07/01/getting-started-with-typescript-for-ui5-application-development/" target="_blank" rel="noopener noreferrer">https://blogs.sap.com/2021/07/01/getting-started-with-typescript-for-ui5-application-development/</A><BR /> <BR /> &nbsp;<BR /> <BR /> As an example, I will add the third-party library “mobx” to my project by running the following command from in the project folder:<BR /> <PRE class="language-javascript"><CODE>npm i -D mobx</CODE></PRE><BR /> For making this work in UI5 we need the UI5 middleware and builder taks “ui5-tooling-modules”. This one can also be installed with the following command:<BR /> <PRE class="language-javascript"><CODE>npm i -D ui5-tooling-modules</CODE></PRE><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image1-9.png" /></P><BR /> <BR /> <H1 id="toc-hId-636393486">Configuration</H1><BR /> Once both are installed, configure the UI5 tooling to use the middleware and task by adding it to the UI5 dependencies:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image2-4.png" height="152" width="428" /></P><BR /> <A href="https://github.com/lemaiwo/UI5WithThirdPartyLib/blob/560340f6c732d1e473236afea6d7268d065deb1f/package.json#L40" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/UI5WithThirdPartyLib/blob/560340f6c732d1e473236afea6d7268d065deb1f/package.json#L40</A><BR /> <BR /> Next, the “ui5-tooling-modules” task and middleware needs to be configured. Actually, you just have to add it as a task for the builder and as a middleware for the server configuration.<BR /> <BR /> This will make sure that the app can load the third-party library when running and it will be added to the “dist” folder when building:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image3-5.png" height="241" width="481" /></P><BR /> <A href="https://github.com/lemaiwo/UI5WithThirdPartyLib/blob/560340f6c732d1e473236afea6d7268d065deb1f/ui5.yaml#L15" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/UI5WithThirdPartyLib/blob/560340f6c732d1e473236afea6d7268d065deb1f/ui5.yaml#L15</A><BR /> <H1 id="toc-hId-439879981">Consume</H1><BR /> You are ready to use the third-party library like any other control/library of the UI5 framework, check line 5:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image4-6.png" /></P><BR /> <A href="https://github.com/lemaiwo/UI5WithThirdPartyLib/blob/560340f6c732d1e473236afea6d7268d065deb1f/src/controller/Main.controller.ts#L5" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/UI5WithThirdPartyLib/blob/560340f6c732d1e473236afea6d7268d065deb1f/src/controller/Main.controller.ts#L5</A><BR /> <BR /> By importing “mobx” at the top, TypeScript will give me full autocompletion support with syntax checks in case of errors.<BR /> <BR /> I’m simply using “mobx” to observe any changes in the JSONModel:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image5-5.png" /></P><BR /> <A href="https://github.com/lemaiwo/UI5WithThirdPartyLib/blob/560340f6c732d1e473236afea6d7268d065deb1f/src/controller/Main.controller.ts#L17" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/UI5WithThirdPartyLib/blob/560340f6c732d1e473236afea6d7268d065deb1f/src/controller/Main.controller.ts#L17</A><BR /> <BR /> The view will simply show the value of the JSONModel:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image6-5.png" height="258" width="357" /></P><BR /> <A href="https://github.com/lemaiwo/UI5WithThirdPartyLib/blob/main/src/view/Main.view.xml" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/UI5WithThirdPartyLib/blob/main/src/view/Main.view.xml</A><BR /> <BR /> I also added a button that changes the value of the description which automatically updates the value thanks to “mobx”. Feel free to look a bit deeper into the project.<BR /> <H1 id="toc-hId-243366476">Run</H1><BR /> Simply run “npm start” to test the app:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image7-4.png" /></P><BR /> Result:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image8-4.png" /></P><BR /> <BR /> <H1 id="toc-hId-46852971">Build</H1><BR /> Building the app is just as before by running the build script:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image9-2.png" /></P><BR /> The only difference now is that it will also copy the “mobx” library from the node_modules into the “resources” folder of the app:<BR /> <BR /> &nbsp;<BR /> <BR /> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image10-3.png" height="432" width="231" /><BR /> <BR /> The build process will also handle the third-party library differently compared to UI5 controls/libraries to make it resolvable:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image11-3.png" /></P><BR /> <BR /> <H1 id="toc-hId--149660534">Deploy</H1><BR /> All fine until here, you can run and build the app which will work perfect! Although this might fail when running this app from in a Fiori Launchpad on-premise or in BTP. Once deployed, the app will not be able to find the library as it will search in the resources folder. All requests to this folder are forwarded to the UI5 SDK.<BR /> <BR /> As a solution you have to configure the build task as followed: “prependPathMappings”<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image12-2.png" height="182" width="461" /></P><BR /> <A href="https://github.com/lemaiwo/UI5WithThirdPartyLib/blob/560340f6c732d1e473236afea6d7268d065deb1f/ui5.yaml#L18" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/UI5WithThirdPartyLib/blob/560340f6c732d1e473236afea6d7268d065deb1f/ui5.yaml#L18</A><BR /> <BR /> This will add UI5 config in the component.js which maps the third-party library with the path to the library in the project:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image13-3.png" /></P><BR /> <BR /> <H1 id="toc-hId--346174039">End</H1><BR /> With this you should be good to go for consuming third-party libraries in UI5 with TypeScript.<BR /> <BR /> &nbsp;<BR /> <BR /> More information regarding the task and middleware: <A href="https://www.npmjs.com/package/ui5-tooling-modules" target="_blank" rel="nofollow noopener noreferrer">https://www.npmjs.com/package/ui5-tooling-modules</A><BR /> <BR /> &nbsp;<BR /> <BR /> The demo app: <A href="https://github.com/lemaiwo/UI5WithThirdPartyLib" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/UI5WithThirdPartyLib</A> 2022-10-25T07:17:31+02:00 https://community.sap.com/t5/technology-blogs-by-members/ui5-control-generator-npm-version/ba-p/13558355 UI5 Control Generator - npm version 2022-11-08T08:04:32+01:00 WouterLemaire https://community.sap.com/t5/user/viewprofilepage/user-id/9863 <H1 id="toc-hId-833144478">Introduction</H1><BR /> A UI5 Control exists out of two parts, the control logic (including metadata) and the renderer. This last one defines the visualization of the control by writing JavaScript and will generate HTML at runtime. Writing the HTML by using JavaScript function is not straight forward in case of complex UI5 Controls. Although UI5 is going more and more to Web Components, we still need a control as a proxy for each web component. In both cases, it still makes sense to have a control generator as I made before in Web IDE:<BR /> <BR /> Custom control generator: <A href="https://blogs.sap.com/2016/11/27/custom-ui5-control-generator-sap-web-ide-plugin/" target="_blank" rel="noopener noreferrer">https://blogs.sap.com/2016/11/27/custom-ui5-control-generator-sap-web-ide-plugin/</A><BR /> <BR /> Custom control generator version 2: <A href="https://blogs.sap.com/2018/09/04/ui5-control-generator-v2-sap-web-ide-template/" target="_blank" rel="noopener noreferrer">https://blogs.sap.com/2018/09/04/ui5-control-generator-v2-sap-web-ide-template/</A><BR /> <BR /> &nbsp;<BR /> <BR /> Since then, I never made time to migrate this to the new control renderer syntax or make it IDE independent. So, I was more than happy when <SPAN class="mention-scrubbed">robin.vanhethof</SPAN> reached out to me about the control generator. He really triggered me to give it second life and make a third version.<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image1-12.png" /></P><BR /> This time I did not want to have something that depends on any specific IDE. I wanted to follow the strategy of the UI5 tooling to make it IDE independent. As a solution I came up with an NPM package (VSCode plugin would be an option but would not be as open as NPM).<BR /> <BR /> &nbsp;<BR /> <H1 id="toc-hId-636630973">Installation</H1><BR /> Install it as a npm dev dependency into your project:<BR /> <PRE class="language-javascript"><CODE>npm install --save-dev ui5-control-generator</CODE></PRE><BR /> &nbsp;<BR /> <H1 id="toc-hId-440117468">Usage</H1><BR /> Provide any html file in your project and run the following script in your project from in a terminal or create a npm script:<BR /> <PRE class="language-javascript"><CODE>npx ui5-control-generator --ns &lt;project-namespace&gt; --t TS</CODE></PRE><BR /> &nbsp;<BR /> <BR /> Example of a script: <A href="https://github.com/lemaiwo/TSDemoCustomControlGenerator/blob/f57d38663a2760456f87f62916032a6b1a05b750/package.json#L19" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/TSDemoCustomControlGenerator/blob/f57d38663a2760456f87f62916032a6b1a05b750/package.json#L19</A><BR /> <BR /> &nbsp;<BR /> <BR /> The tool requires the namespace of the project and the type of app (JavaScript or TypeScript) to be executed. It also has some optional parameters:<BR /> <UL><BR /> <LI>--ns, --namespace: namespace of the project (including the project name) which will be used for the name and namespace of the control</LI><BR /> <LI>--t, --type: Define the type of syntax, JavaScript or TypeScript.</LI><BR /> <LI>--p, --path: Optional parameter to define a specific folder to search for html files, default will search in all folders</LI><BR /> <LI>--s, --split: Split Control logic and renderer in two files, default will split. Values can be true or false</LI><BR /> <LI>--ow, --overwrite: Overwrite already existing files with the same name, default will not overwrite. Possible values can be true or false.</LI><BR /> <LI>--loglevel: Set the console logging verbosity; options are: "error", "warn", "info", "debug", "trace"; default level is "info"</LI><BR /> </UL><BR /> Provide any html file that contains the html for the control in your project. I do this in the control folder where I would like to have the control, e.g.:<BR /> <BR /> <A href="https://github.com/lemaiwo/TSDemoCustomControlGenerator/blob/main/src/control/BusinessCard.html" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/TSDemoCustomControlGenerator/blob/main/src/control/BusinessCard.html</A><BR /> <BR /> After running the script, you have the control files generated in the same folder as the html file. For TypeScript you will also have to run ‘@ui5/ts-interface-generator’ for generating the types of the control:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image2-7.png" /></P><BR /> <A href="https://github.com/lemaiwo/TSDemoCustomControlGenerator/tree/main/src/control" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/TSDemoCustomControlGenerator/tree/main/src/control</A><BR /> <H1 id="toc-hId-243603963">Result</H1><BR /> The result is not completely finished but already shows the functionality of the generator:<BR /> <H1 id="toc-hId-47090458"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/image3-8.png" /></H1><BR /> &nbsp;<BR /> <H1 id="toc-hId--149423047">Resources</H1><BR /> &nbsp;<BR /> <BR /> Control generator GitHub: <A href="https://github.com/lemaiwo/ui5-control-generator" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/ui5-control-generator</A><BR /> <BR /> Control generator on NPM: <A href="https://www.npmjs.com/package/ui5-control-generator" target="_blank" rel="nofollow noopener noreferrer">https://www.npmjs.com/package/ui5-control-generator</A><BR /> <BR /> Demo app JavaScript: <A href="https://github.com/lemaiwo/TSDemoCustomControlGenerator" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/TSDemoCustomControlGenerator</A><BR /> <BR /> Demo app TypeScript: <A href="https://github.com/lemaiwo/TSDemoCustomControlGenerator" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/TSDemoCustomControlGenerator</A><BR /> <BR /> &nbsp;<BR /> <H1 id="toc-hId--345936552">Contribution</H1><BR /> Feel free to contribute and improve the control generator.<BR /> <BR /> Control generator GitHub: <A href="https://github.com/lemaiwo/ui5-control-generator" target="_blank" rel="nofollow noopener noreferrer">https://github.com/lemaiwo/ui5-control-generator</A><BR /> <BR /> &nbsp; 2022-11-08T08:04:32+01:00 https://community.sap.com/t5/technology-blogs-by-members/deploy-the-ui5-fiori-app-on-sap-abap-repository-with-bas-webide-create/ba-p/13556327 Deploy the UI5 Fiori app on SAP ABAP repository with BAS & WEBIDE, create Fiori app Tile using Launchpad Designer 2023-02-24T18:17:13+01:00 kuldeep2813 https://community.sap.com/t5/user/viewprofilepage/user-id/736775 Hello,<BR /> <BR /> In this blog we will learn How to <A href="https://help.sap.com/docs/SAP_Web_IDE/825270ffffe74d9f988a0f0066ad59f0/1170ef65b7b3490687021c3132387829.html" target="_blank" rel="noopener noreferrer">deploy the Ui5 Fiori app on SAP ABAP repository</A> with BAS &amp; WEBIDE, also learn about fiori app tile creation in launchpad designer.<BR /> <H2 id="toc-hId-962167524">What is SAP UI5</H2><BR /> SAP ui5 is a framework, it consists of Libraries. Used for Creating responsive apps.<BR /> <H3 id="toc-hId-894736738">Fiori Launchpad</H3><BR /> SAP Fiori launchpad is a shell that hosts SAP Fiori apps, and provides the apps with services such as navigation, personalization, embedded support, and application configuration.<BR /> <BR /> Fiori launchpad is responsive because it adapts the layout in the Device Screen.<BR /> <H3 id="toc-hId-698223233">Prerequisites</H3><BR /> <OL><BR /> <LI>User must have access to SAP Logon.</LI><BR /> <LI><SPAN style="font-size: 1rem">User must have access of TCodes: SE80, /ui2/flp, /ui2/flpd_cust, /ui2/FLPD_CONF, /ui2/_FLPCM_CUST, /ui2/FLCM_CONF, /ui2/semobj, PFCG</SPAN></LI><BR /> <LI>You access to SAP BTP Cockpit.</LI><BR /> </OL><BR /> &nbsp;<BR /> <H2 id="toc-hId-372627009">Deploy the Fiori app using Business application Studio (<A href="https://www.sapstore.com/solutions/45318/SAP-Business-Application-Studio---the-evolution-of-SAP-Web-IDE" target="_blank" rel="nofollow noopener noreferrer">BAS</A>)</H2><BR /> SAP Business application studio is a cloud based developer tool to develop UI based applications<BR /> <OL><BR /> <LI><BR /> <H4 id="toc-hId-434278942">Launch the BAS from<A href="https://cockpit.hanatrial.ondemand.com/trial/#/home/trial" target="_blank" rel="nofollow noopener noreferrer"> Cloud cockpit</A></H4><BR /> </LI><BR /> </OL><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/BAS-1.png" height="254" width="538" /></P><BR /> <BR /> <H4 id="toc-hId-237765437">2. Select your desired project –&gt; open the Terminal –&gt; Go to the Project Dir (cd project dir) –&gt;&nbsp; &nbsp;run the command ‘npm run deploy-config’ or ‘npx fiori add deploy-config’.</H4><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture1-109.png" height="253" width="590" /></P><BR /> <BR /> <H4 id="toc-hId-41251932">3. Give the required information</H4><BR /> Choose the Target --&gt; ABAP<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture2-47.png" height="248" width="572" /><BR /> <BR /> Select the Destination (If destination is not created, create a <A href="https://blogs.sap.com/2021/01/28/creating-a-sample-sapui5-application-with-destination-in-cloud-foundry-environment/" target="_blank" rel="noopener noreferrer">destination</A> on SAP BTP Cockpit)<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture3-41.png" height="256" width="572" /><BR /> <BR /> Provide the SAPUI5 ABAP Repository Name and Description.<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture4-36.png" height="321" width="601" /><BR /> <BR /> Provide the Package detail<BR /> <BR /> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture5-21.png" height="283" width="590" /><BR /> <BR /> Provide the Transport Request and execute the command "npm run deploy".<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture6-26.png" height="235" width="607" /></P><BR /> &nbsp; &nbsp; You will get a message "SAP UI5 Application has been uploaded and registered successfully".<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture8-19.png" height="247" width="596" /></P><BR /> <BR /> <H4 id="toc-hId--155261573">&nbsp; &nbsp;4. Go to the given link and check the deployed fiori app<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture9-16.png" height="256" width="602" /></H4><BR /> <H4 id="toc-hId--351775078">&nbsp; &nbsp;5. Now you will get the Fiori app on SAP system.</H4><BR /> <H4 id="toc-hId--548288583"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture10-16.png" height="210" width="591" /></H4><BR /> <H2 id="toc-hId--655713169">Deploy the Fiori app using WEBIDE</H2><BR /> <OL><BR /> <LI><BR /> <H4 id="toc-hId--1439032688">Go to the WEBIDE, right click on your project --&gt; Select Deploy --&gt; Choose your System (Deploy to SAPUi5 ABAP Repository)</H4><BR /> </LI><BR /> </OL><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture12-20.png" height="355" width="487" /></P><BR /> &nbsp;<BR /> <H4 id="toc-hId--1635546193">2. You will be on next page (Deployment Option), Here select your required ABAP or Cloud system --&gt; Next.</H4><BR /> <STRONG>&nbsp; &nbsp; Note: If you are deploying first time, select Deploy a new application. </STRONG><STRONG>Else application is&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;already deployed, select update an existing application </STRONG><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture13-18.png" height="308" width="570" /><BR /> <BR /> &nbsp;<BR /> <H4 id="toc-hId--1832059698">3. Provide application Name, Description, Package, in - Deploy a New Application Screen and select Next.<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture14-15.png" height="317" width="579" /></H4><BR /> <H4 style="overflow: hidden;margin-bottom: 0px" id="toc-hId--2028573203">4.&nbsp; If the selected package is local, Choose Finish. If it requires TR, select TR for your&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; application.<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture15-16.png" height="431" width="502" /></H4><BR /> &nbsp;<BR /> <H4 id="toc-hId-2069880588">&nbsp; &nbsp;A notification message displays once the application is deployed successfully.</H4><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture16-13.png" /></P><BR /> &nbsp;<BR /> <H4 id="toc-hId-1873367083">5.&nbsp; Go to SAP Logon Pad --&gt; Tcode SE80 --&gt; Select BSP Application from Dropdown --&gt; find your deployed application.</H4><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture17-14.png" height="226" width="584" /></P><BR /> &nbsp;<BR /> <H2 id="toc-hId--2031307704">Steps to create a Tile and Target mapping in Fiori launchpad Designer</H2><BR /> <OL><BR /> <LI><BR /> <H4 id="toc-hId-1480340073">Create Semantic Object using TCode - /n/ui2/semobj.</H4><BR /> </LI><BR /> </OL><BR /> <H4 id="toc-hId-1283826568">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Click on Edit Button</H4><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture18-10.png" height="61" width="587" /></P><BR /> <BR /> <H4 id="toc-hId-1255496754">&nbsp; &nbsp; &nbsp; Select New Entries.<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture19-11.png" height="94" width="588" /></H4><BR /> <H4 id="toc-hId-1058983249">&nbsp; &nbsp; &nbsp;Provide the new Semantic Object, Object Name and Description and Click on Save Button.<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture21-9.png" height="127" width="597" /></H4><BR /> <H4 id="toc-hId-862469744">2. Go to SAP LogOn --&gt; Execute the TCode - /ui2/FLPD_CUST (Launchpad Designer).<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture22-7.png" /></H4><BR /> <H4 id="toc-hId-665956239">3. Click on Setting Button --&gt; Select the TR --&gt; choose Ok.<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture23-6.png" height="264" width="583" /></H4><BR /> <H4 id="toc-hId-469442734">4. If catalog information is not available, create a catalog --&gt; Click on Plus Button --&gt; provide the required information --&gt; click on Save.</H4><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture24-6.png" height="354" width="590" /></P><BR /> <BR /> <H4 style="overflow: hidden;margin-bottom: 0px" id="toc-hId-272929229">5. If catalog already exist, select the catalog --&gt; Click on Add tile plus Button.<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture25-10.png" height="346" width="598" /></H4><BR /> <H4 style="overflow: hidden;margin-bottom: 0px" id="toc-hId-76415724">6. Select a Tile template, here I am going to select App launcher - Static. <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture26-6.png" height="181" width="589" /></H4><BR /> <H4 id="toc-hId--120097781">7. Provide the Title, information, Semantic Object, Action and other required Information Click on Save Button.<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture27-6.png" height="262" width="588" /></H4><BR /> <H4 id="toc-hId--316611286">8. Create a Target Mapping à Go to Target Mapping à Click on <STRONG>Create Target Mapping.</STRONG><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture28-6.png" height="288" width="589" /></H4><BR /> <H4 id="toc-hId--513124791">9. Provide the required information Semantic Object, Action, Title, URL, ID and Click on Save&nbsp; Button.</H4><BR /> <P style="text-align: left"><STRONG>&nbsp; &nbsp; &nbsp;Note</STRONG>: How to get URL --&gt; Go to the WEBIDE --&gt; your project --&gt; manifest.json file --&gt; Find the URL info.<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture29-5.png" height="326" width="572" /></P><BR /> &nbsp;How to get ID: Go to the WEBIDE --&gt; your project --&gt; manifest.json file --&gt; find the ID.<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture30-5.png" height="240" width="600" /></P><BR /> <BR /> <H4 style="overflow: hidden;margin-bottom: 0px" id="toc-hId--541454605">&nbsp; <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture31-6.png" height="274" width="607" />10. The Fiori app tile has been created successfully. Go to Fiori launchpadv --&gt; App Finder&nbsp; --&gt; Search your application.</H4><BR /> <STRONG>&nbsp; &nbsp; &nbsp;Note: If Fiori app is not found on Fiori Launchpad à we have to assign the PFCG Role for catalog and contact security team to assign the Role.</STRONG><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/02/Picture32-3.png" height="234" width="602" /></P><BR /> &nbsp;<BR /> <H3 id="toc-hId--444565103">Conclusion</H3><BR /> The Fiori app has been deployed on SAP ABAP repository. The Fiori app tile has been created.<BR /> <BR /> &nbsp;<BR /> <BR /> With this we come to an end of this blog. Hope you find it useful.<BR /> <BR /> Keep learning &amp; Keep Sharing!!<BR /> <BR /> &nbsp;<BR /> <BR /> &nbsp;<BR /> <BR /> &nbsp;<BR /> <BR /> &nbsp;<BR /> <BR /> &nbsp;<BR /> <BR /> &nbsp;<BR /> <BR /> &nbsp;<BR /> <BR /> &nbsp;<BR /> <BR /> &nbsp;<BR /> <BR /> &nbsp; 2023-02-24T18:17:13+01:00 https://community.sap.com/t5/technology-blogs-by-members/how-to-enable-submit-button-in-fiori-app-verify-currency-adjustments-f4670/ba-p/13562097 How to enable SUBMIT Button in Fiori app – Verify Currency Adjustments (F4670) 2023-03-28T11:44:54+02:00 kuldeep2813 https://community.sap.com/t5/user/viewprofilepage/user-id/736775 Hello,<BR /> <BR /> In this blog we will learn How to enable the SUBMIT button in Fiori app - Verify Currency Adjustments (F4670).<BR /> <BR /> <STRONG>Issue: When we click at Create Button, It navigates to the Fiori app - Post Currency Adjustments(F1606). Here SUBMIT Button is disable but end user wants to SUBMIT the Data.</STRONG><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/03/Picture2-46.png" height="265" width="575" /></P><BR /> &nbsp;<BR /> <H3 id="toc-hId-1092051934">Prerequisites: User must have access to all three apps</H3><BR /> <OL><BR /> <LI>Verify Currency Adjustments(F4670)</LI><BR /> <LI>Manage Workflows for Journal Entry Verification - In General Ledger (F2720)</LI><BR /> <LI>Manage Teams and Responsibilities for Journal Entry Verification - In General Ledger (F3932)</LI><BR /> </OL><BR /> &nbsp;<BR /> <H2 id="toc-hId-766455710">Steps to enable the SUBMIT Button</H2><BR /> <OL><BR /> <LI><BR /> <H4 id="toc-hId-828107643">Go to Fiori launchpad and launch the Fiori app – F4670 (Verify Currency Adjustments) and Click at Create Button.</H4><BR /> </LI><BR /> </OL><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/03/Picture3-35.png" height="252" width="575" /></P><BR /> <BR /> <H4 id="toc-hId-631594138">&nbsp; &nbsp; &nbsp; 2. It will navigate to the Fiori app F1606 (Post Currency Adjustments). <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/03/Picture4-25.png" height="264" width="585" /></H4><BR /> <H4 id="toc-hId-435080633">&nbsp; &nbsp; 3. Fill all required details, but as we can see <STRONG>SUBMIT</STRONG> Button is not enabled.<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/03/Picture5-28.png" height="265" width="590" /></H4><BR /> <H4 id="toc-hId-238567128">&nbsp; &nbsp;4. To enable the SUBMIT Button go to the Fiori app – F2720 (Manage Workflows for Journal Entry Verification - In General Ledger)</H4><BR /> Select the workflow Type as <STRONG>Currency Adjustment Verification </STRONG>from Dropdown.<BR /> <BR /> If Currency Adjustment Verification is available so no need to perform any action.<BR /> <BR /> Else there is no data regarding this -&gt; Create the new entry for this.<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/03/Picture6-26.png" height="244" width="578" /><BR /> <BR /> Now we can see the entry of <STRONG>Currency Adjustment Verification.</STRONG><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/03/Picture7-28.png" height="142" width="592" /><BR /> <H4 id="toc-hId-42053623">&nbsp; &nbsp;5. Go to Fiori launchpad (/n/ui2/FLP) --&gt; Fiori app (Manage Teams and Responsibilities for&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Journal Entry Verification - In General Ledger). <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/03/Picture8-24.png" height="220" width="590" /></H4><BR /> Need to check Entry is maintained or not. If entry is not maintained, please create entry and fill&nbsp; &nbsp; &nbsp; &nbsp; required data and Save.<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/03/Picture9-17.png" height="229" width="599" /><BR /> <H4 id="toc-hId--154459882">&nbsp; &nbsp;6. Go to Fiori app --&gt;&nbsp; F4670 (Verify Currency Adjustments) and Click at Create Button. Perform the steps 2 &amp; 3. Now we can see that SUBMIT Button is enable in our application (F1606).<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/03/Picture10-13.png" height="260" width="576" /></H4><BR /> More Information:<BR /> <BR /> <A href="https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/13c9c4a304a4489fa3fd5440fa1cdac0.html?version=1809.001" target="_blank" rel="noopener noreferrer">Verify Currency Adjustments</A><BR /> <H3 id="toc-hId--480056106">Conclusion</H3><BR /> SUBMIT Button is enable in our Fiori application<STRONG> Post Currency Adjustments- (F1606).</STRONG><BR /> <BR /> With this we come to an end of this blog. Hope you find it useful.<BR /> <BR /> Keep learning &amp; Keep Sharing!!<BR /> <BR /> &nbsp; 2023-03-28T11:44:54+02:00 https://community.sap.com/t5/technology-blogs-by-members/fancy-emails-from-sap-integration-suite-ci-and-btp-alert-notification/ba-p/13575496 Fancy Emails from SAP Integration Suite(CI) and BTP Alert Notification Service 2023-09-03T14:50:38+02:00 FarooqAhmed https://community.sap.com/t5/user/viewprofilepage/user-id/146868 <EM>A few years ago one of the client team asked me can PI/PO able to send other than plain/text&nbsp; EMAIL notifications for standard CBMA/MAIL receiver scenarios?. </EM><BR /> <BR /> The answer was YES, PI/PO can able to sent more organized and feel good mails which can present the required data in the tabular form or more colorful or more catchy. Have done it and showed how it was working.<BR /> <BR /> <EM>Recently again the same question was asked by another client does CPI/CI able to send more attractive emails instead of plain and text emails?. </EM><BR /> <BR /> The answer is YES. Its not only Integration Suite(CI) but also the BTP Alert Notification Service can able to sent more fascinating emails. Just embed few lines of HTML tags in the actual MAIL BODY thats it!!! But remember don't use the unnecessary tags in order to "keep the core clean". Also the same email body can be explicitly set using groovy script but i personally do no suggest always relying on scripts when things can be done in standard way why to make the maintenance difficult.<BR /> <BR /> It so happens if some ABAP or FIORI screens are been used by the client-user to get to know the capabilities of SAP. What if the end user is not really connected with the background processing of their enterprise data where SAP is leveraged at its BEST. Might be for one of the usual business case of notifying the User about the technical/functional error alerts or some important ORDERS receivable/processing by the middleware system or some other very critical bank interfaces processing updates. Whatso ever that notification email plays the extra cosmetic advantage of not only representing the calibrated tool efficacy but also the puzzling question what's running behind the screens for the new or non-sap users. In this AI-Gen world nothing goes waste even the word of mouth considered to be a unrealistic publicity.<BR /> <BR /> Let us checkout some of the CI cases where this can be a promising approach of fine tuning the USP of the BTP as a product.<BR /> <BR /> <STRONG>From Integration Suite(CI):</STRONG><BR /> <BR /> <STRONG>Case-1:</STRONG><BR /> <BR /> <EM>How can the emails be send in the tabular format with the required data passed dynamically from the specific interface to global exception interface?</EM><BR /> <BR /> If there is a global exception interface the below can be kept inside the MAIL receiver channel and for some scenarios where direct MAIL should be sent for some ORDER updates then that IFLOW actual MAIL receiver channel should be configured with the same as below<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/MAIL-RECEIVER.jpg" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic;font-family: 'SAPRegular', 'Helvetica Neue', Arial, sans-serif">MAIL RECEIVER</P><BR /> The MAIL BODY should be as below.<BR /> <PRE class="language-markup"><CODE>&lt;!DOCTYPE html&gt;<BR /> &lt;html lang="en"&gt;<BR /> &lt;head&gt;<BR /> &lt;meta charset="UTF-8" /&gt;<BR /> &lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;<BR /> &lt;title&gt;EMAIL&lt;/title&gt;<BR /> &lt;style&gt;<BR /> table, th, td {<BR /> border: 1px solid black;<BR /> }<BR /> &lt;/style&gt;<BR /> &lt;/head&gt;<BR /> &lt;body&gt;<BR /> &lt;p&gt;Hi,&lt;br&gt;&lt;br&gt;<BR /> Please find below details for Interface Message failure.&lt;br&gt;<BR /> &lt;table&gt;<BR /> &lt;tr&gt;<BR /> &lt;td&gt;&lt;span style="font-weight:bold"&gt;BTP-CI Environment&lt;/span&gt;&lt;/td&gt;<BR /> &lt;td&gt;${header.CPIEnvironment}&lt;/td&gt;<BR /> &lt;/tr&gt;<BR /> &lt;tr&gt;<BR /> &lt;td&gt;&lt;span style="font-weight:bold"&gt;Message ID&lt;/span&gt;&lt;/td&gt;<BR /> &lt;td&gt;${header.MessageId}&lt;/td&gt;<BR /> &lt;/tr&gt;<BR /> &lt;tr&gt;<BR /> &lt;td&gt;&lt;span style="font-weight:bold"&gt;SenderSystem&lt;/span&gt;&lt;/td&gt;<BR /> &lt;td&gt;${header.SenderSystem}&lt;/td&gt;<BR /> &lt;/tr&gt;<BR /> &lt;tr&gt;<BR /> &lt;td&gt;&lt;span style="font-weight:bold"&gt;ReceiverSystem&lt;/span&gt;&lt;/td&gt;<BR /> &lt;td&gt;${header.ReceiverSystem}&lt;/td&gt; <BR /> &lt;/tr&gt;<BR /> &lt;tr&gt;<BR /> &lt;td&gt;&lt;span style="font-weight:bold"&gt;Timestamp&lt;/span&gt;&lt;/td&gt;<BR /> &lt;td&gt;${header.Timestamp}&lt;/td&gt;<BR /> &lt;/tr&gt;<BR /> &lt;tr&gt;<BR /> &lt;td&gt;&lt;span style="font-weight:bold"&gt;Error Message&lt;/span&gt;&lt;/td&gt;<BR /> &lt;td&gt;${header.ErrorMessage}&lt;/td&gt; <BR /> &lt;/tr&gt;<BR /> &lt;/table&gt;&lt;br&gt;<BR /> Do Not Reply to this mail. Please contact SAP-Integration Team for further investigation.&lt;br&gt;&lt;br&gt;<BR /> Regards,&lt;br&gt;<BR /> SAP Integration Team.<BR /> &lt;/p&gt;<BR /> &lt;/body&gt;<BR /> &lt;/html&gt;</CODE></PRE><BR /> The BODY MIME Type should be "TEXT/HTML" instead of "TEXT/XML".<BR /> <BR /> After execution the OUTLOOK or GMAIL or any other exchange server will be received the mail as below<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/EMAIL-FORMAT.jpg" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic;font-family: 'SAPRegular', 'Helvetica Neue', Arial, sans-serif">EMAIL FORMAT</P><BR /> <STRONG>Case-2:</STRONG><BR /> <BR /> <EM>How can the emails be send in the tabular format with some colors embedded and main text highlighted&nbsp;in required color?</EM><BR /> <BR /> Modify the table style declaration and required row with span<BR /> <BR /> &lt;table style="background-color:LightGray;"&gt;<BR /> <BR /> &lt;td&gt;&lt;span style="color: red;"&gt;Your Input Data&lt;/span&gt;&lt;/td&gt;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/EMAIL-FORMAT2.jpg" /></P><BR /> <STRONG>Case-3:</STRONG><BR /> <BR /> <EM>How can the emails be differentiated based on the environments?</EM><BR /> <BR /> Well there was the time while using the SAP systems through GUI , consultants used to keep different screen colors for each environment. For example DEV: GREEN, QA: ORANGE and PROD: RED.<BR /> <BR /> Similarly we can make a notifiable difference in the mails received from which environment its sent from. However there will be the subject or some row in the body indicating that environment specific information but if its added with some background color on top of normal text which will be very much helpful. As most of them will set the outlook=&gt;layout=&gt;folder pane=&gt;normal where the mail body will be noticed immediately this can be achieved by using the below.<BR /> <BR /> Modify the body tags as below<BR /> <BR /> &lt;body style="background-color:MediumSeaGreen;"&gt; in DEV CI Interface Mail Channel<BR /> &lt;body style="background-color:Orange;"&gt; in QA CI Interface Mail Channel<BR /> &lt;body style="background-color:Tomato;"&gt; in PROD CI Interface Mail Channel<BR /> <BR /> This can be useful when the mail recipient list is the same for all or any two CI environments.<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/CI-ENVI.jpg" /></P><BR /> <STRONG>From SAP BTP Alert Notification Service:</STRONG><BR /> <BR /> While configuring for the Alert Notification Service any type of alerts can be configured. Among all the available action types " EMAIL " and " EMAIL with Custom SMTP Server " can used for different subscription sources and accordingly the conditions can be configured.<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/EMAIL-TYPES.jpg" /></P><BR /> Once the Action Type "EMAIL" is selected then the below options to be used to configure the email with the HTML embedded body<BR /> <BR /> Use HTML checkbox to be selected.<BR /> <BR /> Payload Template should be inserted with the required custom payload template.<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/Action-EMAIL-1.jpg" /></P><BR /> <STRONG>Conclusion:</STRONG><BR /> <BR /> There are different types of HTML tables, styles, formatting, colors, symbols, emojis etc., which can be used as per the requirement and embed those lines of tags in the EMAIL BODY with dynamic and static values.<BR /> <BR /> SAP always suggests to follow the standard so when this can be done using a simple html tags better to use the same tags using the dynamic properties directly in the EMAIL BODY and not relying on other groovy scripts as the maintenance will be difficult.<BR /> <BR /> Also for S4 HANA or AIF any SAP products where the standard or custom alerts are possible just check for HTML support. If its present then similar configurations can be done over there and make the emails more fancy!!!<BR /> <BR /> <EM>Disclaimer:</EM><BR /> <BR /> This article is only for informational purpose that usage of HTML tags inside the MAIL BODY gives more attractive EMAILS to the recipients.<BR /> <BR /> Few cases are shown as an example but no limitations in any perspective. 2023-09-03T14:50:38+02:00 https://community.sap.com/t5/technology-blogs-by-members/sap-integration-suite-enhanced-monitoring/ba-p/13577830 SAP Integration Suite Enhanced Monitoring 2023-10-19T20:36:25+02:00 MarianVatafu https://community.sap.com/t5/user/viewprofilepage/user-id/864725 <H1 id="toc-hId-834966467">Scenario Overview</H1><BR /> Using the standard monitoring capabilities from <A href="https://help.sap.com/docs/integration-suite" target="_blank" rel="noopener noreferrer">SAP Integration Suite</A> sometimes has its downsides. Each one of us has faced at some point the need to persist or store trace logs or even save the logs of a job that's running outside of business hours.<BR /> <BR /> Together with my colleague and dear friend <SPAN class="mention-scrubbed">codrinz</SPAN>&nbsp;we started to think at way to persist the much needed trace logs that are only available for one hour on the SAP Integration Suite Tenant.<BR /> <BR /> This idea came from a need we had while doing tests on several artifacts, and because they were scheduled somewhere around 4 AM I was not there when they ran and in the morning we had to face plain/short error messages.<BR /> <BR /> Using the standard payload logging as attachments has its limitations, because in the end attachments would pile up in the backend and it will slow down the tenant, so we had to think at a different way of accessing the much-needed logs.<BR /> <BR /> By integrating&nbsp;<A href="https://www.sap.com/products/technology-platform.html" target="_blank" rel="noopener noreferrer">SAP Business Technology Platform</A> products we have managed to create an application that can schedule a trace log for a specific iFlow artifact, scan for any runs in the specified interval and save it into a <A href="https://help.sap.com/docs/hana-cloud" target="_blank" rel="noopener noreferrer">SAP HANA</A> Database. Also, with the help of openAI, we get suggestions on how to fix the captured errors.<BR /> <BR /> All the SAP products are being used on a trial environment, so if you do want to do anything similar to what we did make sure to read the <A href="https://developers.sap.com/tutorial-navigator.html" target="_blank" rel="noopener noreferrer">SAP Tutorials for Developers.</A><BR /> <H2 id="toc-hId-767535681">Architecture Overview</H2><BR /> The following picture gives an overview of the solution architecture :<BR /> <BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/MicrosoftTeams-image-5.png" /></P><BR /> <P class="image_caption" style="text-align: center"><EM>Solution Overview</EM></P><BR /> &nbsp;<BR /> <BR /> The end user can use the html page exposed by the <A href="https://developers.sap.com/mission.cp-starter-extensions-cap.html" target="_blank" rel="noopener noreferrer">SAP CAP</A> application for configuring and inspecting the logs saved.<BR /> <BR /> &nbsp;<BR /> <BR /> <IFRAME width="560" height="315" src="https://www.youtube.com/embed/g5V6VPUDA-8&amp;ab_channel=MarianVatafu" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen=""></IFRAME><BR /> <P style="text-align: center">Video short demo</P><BR /> <BR /> <H2 id="toc-hId-571022176">Technical setup</H2><BR /> <H3 id="toc-hId-503591390">SAP CAP Application Backend</H3><BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/Dev-spaces.png" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic">Trial dev space</P><BR /> <P class="image_caption">The application was created in <A href="https://help.sap.com/docs/bas" target="_blank" rel="noopener noreferrer">SAP Business Application Studios</A> using NodeJS, express and HDB connections to the SAP HANA Database and it consists of creating multiple services and functions which are being called from the html page and SAP Integration Suite.</P><BR /> Below are the entities we exposed in the catalog service, which are being used to communicate with the database.<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/catalog-service-1.png" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic">Catalog services</P><BR /> &nbsp;<BR /> <BR /> The services are binded to the data model created below.<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/data-model.png" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic">Data model</P><BR /> By also creating some dummy CSVs for sample data, we were able to push the application to Cloud Foundry, generate the HDB container/tables and deploy it.<BR /> <H3 id="toc-hId-307077885">SAP CAP Application Frontend</H3><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/Index.png" /></P><BR /> <P class="image_caption" style="text-align: center">Application Home Screen</P><BR /> &nbsp;<BR /> <BR /> The frontend was designed in HTML combined with Javascript. It consists of 3 pages and each one has buttons that trigger several REST calls to the SAP HANA Database or to the SAP Integration Suite endpoint that controls the behavior of several functionalities.<BR /> <BR /> &nbsp;<BR /> <BR /> Below is a sample Javascript code used to populate, filter and update a table .<BR /> <PRE class="language-javascript"><CODE>&lt;input type="text" id="searchInput" placeholder="Search for iFlow name..." onkeyup="filterTable()"&gt;<BR /> &lt;br&gt;&lt;br&gt;<BR /> <BR /> &lt;table id="dataTable"&gt;<BR /> &lt;thead&gt;<BR /> &lt;tr&gt;<BR /> &lt;th onclick="sortTable(0)"&gt;iFlow name&lt;/th&gt;<BR /> &lt;th onclick="sortTable(1)"&gt;StartDate&lt;/th&gt;<BR /> &lt;th onclick="sortTable(2)"&gt;StartTime&lt;/th&gt;<BR /> &lt;th onclick="sortTable(3)"&gt;EndDate&lt;/th&gt;<BR /> &lt;th onclick="sortTable(4)"&gt;EndTime&lt;/th&gt;<BR /> &lt;th&gt;Action&lt;/th&gt; &lt;!-- Add a new column for delete buttons --&gt;<BR /> &lt;/tr&gt;<BR /> &lt;/thead&gt;<BR /> &lt;tbody id="dataBody"&gt;<BR /> &lt;!-- Table content will be added dynamically --&gt;<BR /> &lt;/tbody&gt;<BR /> &lt;/table&gt;<BR /> <BR /> &lt;!-- Sorting options dropdown --&gt;<BR /> &lt;div class="sorting-options" id="sortingOptions"&gt;<BR /> &lt;a href="#" onclick="sortTable(0, 'asc')"&gt;Sort Ascending&lt;/a&gt;<BR /> &lt;a href="#" onclick="sortTable(0, 'desc')"&gt;Sort Descending&lt;/a&gt;<BR /> &lt;a href="#" onclick="sortTable(1, 'asc')"&gt;Sort Ascending&lt;/a&gt;<BR /> &lt;a href="#" onclick="sortTable(1, 'desc')"&gt;Sort Descending&lt;/a&gt;<BR /> &lt;a href="#" onclick="sortTable(2, 'asc')"&gt;Sort Ascending&lt;/a&gt;<BR /> &lt;a href="#" onclick="sortTable(2, 'desc')"&gt;Sort Descending&lt;/a&gt;<BR /> &lt;a href="#" onclick="sortTable(3, 'asc')"&gt;Sort Ascending&lt;/a&gt;<BR /> &lt;a href="#" onclick="sortTable(3, 'desc')"&gt;Sort Descending&lt;/a&gt;<BR /> &lt;a href="#" onclick="sortTable(4, 'asc')"&gt;Sort Ascending&lt;/a&gt;<BR /> &lt;a href="#" onclick="sortTable(4, 'desc')"&gt;Sort Descending&lt;/a&gt;<BR /> &lt;/div&gt;<BR /> <BR /> &lt;script&gt;<BR /> // Function to delete a row when the delete button is clicked<BR /> function deleteRow(row) {<BR /> const iFlowName = row.cells[0].textContent.trim(); // Extract iFlow name from the first column<BR /> <BR /> // Make a GET request with query parameters to delete the corresponding iFlow<BR /> deleteIFlow(iFlowName);<BR /> <BR /> // Remove the row from the table<BR /> row.remove();<BR /> }<BR /> <BR /> // Function to make a GET request to delete an iFlow<BR /> function deleteIFlow(iFlowName) {<BR /> // Define the URL and headers for the GET request<BR /> const apiUrl = 'https://${DispatcherURL}';<BR /> const apiKey = '${apiKey}';<BR /> const step = 'DeleteScheduleTraces';<BR /> <BR /> // Construct the full URL with query parameters<BR /> const url = `${apiUrl}?Step=${step}&amp;Name=${iFlowName}`;<BR /> <BR /> // Fetch data using the GET request<BR /> fetch(url, {<BR /> method: 'GET',<BR /> headers: {<BR /> 'ApiKey': apiKey<BR /> }<BR /> })<BR /> .then(response =&gt; {<BR /> if (!response.ok) {<BR /> throw new Error('Network response was not ok');<BR /> }<BR /> return response.text();<BR /> // alert(response.text())<BR /> })<BR /> .then(data =&gt; {<BR /> // Handle the response as needed (e.g., display a confirmation message)<BR /> const resp2 = data;<BR /> alert(resp2);<BR /> console.log('iFlow deleted:', data);<BR /> <BR /> })<BR /> .catch(error =&gt; {<BR /> const resp3 = 'Error deleting iFlow: ${error}';<BR /> alert(resp3);<BR /> console.error('Error deleting iFlow:', error);<BR /> });<BR /> }<BR /> // Function to filter the table based on the search input<BR /> function filterTable() {<BR /> const searchInput = document.getElementById("searchInput");<BR /> const filterText = searchInput.value.trim().toUpperCase();<BR /> const table = document.getElementById("dataTable");<BR /> const rows = table.getElementsByTagName("tr");<BR /> <BR /> for (let i = 1; i &lt; rows.length; i++) { // Start from index 1 to skip header row<BR /> const cells = rows[i].getElementsByTagName("td");<BR /> let matchFound = false;<BR /> <BR /> // Only search in the first column (iFlow Name)<BR /> const textValue = cells[0].textContent || cells[0].innerText;<BR /> <BR /> // Perform a partial search (check if the text contains the filter text)<BR /> if (textValue.toUpperCase().includes(filterText)) {<BR /> matchFound = true;<BR /> }<BR /> <BR /> if (matchFound) {<BR /> rows[i].style.display = "";<BR /> } else {<BR /> rows[i].style.display = "none";<BR /> }<BR /> }<BR /> }<BR /> <BR /> // Function to make the GET request and populate the table<BR /> function loadTableData() {<BR /> // Define the URL and headers for the GET request<BR /> const apiUrl = '${apiUrl}?Step=ScheduledTraces';<BR /> const apiKey = '${apiKey}';<BR /> <BR /> // Fetch data using the GET request<BR /> fetch(apiUrl, {<BR /> method: 'GET',<BR /> headers: {<BR /> 'ApiKey': apiKey<BR /> }<BR /> })<BR /> .then(response =&gt; {<BR /> if (!response.ok) {<BR /> throw new Error('Network response was not ok');<BR /> }<BR /> return response.text();<BR /> })<BR /> .then(data =&gt; {<BR /> // Parse the XML response<BR /> const parser = new DOMParser();<BR /> const xmlDoc = parser.parseFromString(data, 'text/xml');<BR /> const iFlows = xmlDoc.querySelectorAll('iFlow');<BR /> <BR /> // Populate the table with data<BR /> const tableBody = document.getElementById('dataBody');<BR /> tableBody.innerHTML = ''; // Clear existing rows<BR /> <BR /> iFlows.forEach(iFlow =&gt; {<BR /> const iFlowName = iFlow.querySelector('iFlowName').textContent;<BR /> const startDate = iFlow.querySelector('StartDate').textContent;<BR /> const startTime = iFlow.querySelector('StartTime').textContent;<BR /> const endDate = iFlow.querySelector('EndDate').textContent;<BR /> const endTime = iFlow.querySelector('EndTime').textContent;<BR /> <BR /> // Create a new table row and cells<BR /> const row = document.createElement('tr');<BR /> const iFlowNameCell = document.createElement('td');<BR /> const startDateCell = document.createElement('td');<BR /> const startTimeCell = document.createElement('td');<BR /> const endDateCell = document.createElement('td');<BR /> const endTimeCell = document.createElement('td');<BR /> const deleteCell = document.createElement('td'); // Add a cell for the delete button<BR /> <BR /> // Set cell values<BR /> iFlowNameCell.textContent = iFlowName;<BR /> startDateCell.textContent = startDate;<BR /> startTimeCell.textContent = startTime;<BR /> endDateCell.textContent = endDate;<BR /> endTimeCell.textContent = endTime;<BR /> <BR /> // Create a delete button and set its attributes<BR /> const deleteButton = document.createElement('button');<BR /> deleteButton.textContent = 'Delete';<BR /> deleteButton.classList.add('delete-button'); // Add a class to identify the delete button<BR /> deleteButton.addEventListener('click', () =&gt; {<BR /> // Call the deleteRow function when the delete button is clicked<BR /> deleteRow(row);<BR /> });<BR /> <BR /> // Append cells to the row<BR /> row.appendChild(iFlowNameCell);<BR /> row.appendChild(startDateCell);<BR /> row.appendChild(startTimeCell);<BR /> row.appendChild(endDateCell);<BR /> row.appendChild(endTimeCell);<BR /> deleteCell.appendChild(deleteButton); // Append the delete button to the cell<BR /> row.appendChild(deleteCell); // Append the delete button cell to the row<BR /> <BR /> // Append the row to the table body<BR /> tableBody.appendChild(row);<BR /> });<BR /> <BR /> // After populating the table, call the filter function to show all data<BR /> filterTable();<BR /> })<BR /> .catch(error =&gt; {<BR /> console.error('Error loading table data:', error);<BR /> });<BR /> }<BR /> <BR /> // Call the function to load table data when the page loads<BR /> window.addEventListener('load', loadTableData);<BR /> &lt;/script&gt;<BR /> &lt;button onclick="exportTableToExcel()"&gt;Export to Excel&lt;/button&gt;<BR /> &lt;P&gt;&lt;/P&gt;<BR /> <BR /> &lt;script&gt;<BR /> // Function to export the table data to an Excel file<BR /> function exportTableToExcel() {<BR /> const table = document.getElementById("dataTable");<BR /> const ws = XLSX.utils.table_to_sheet(table);<BR /> <BR /> // Create a new workbook and add the worksheet<BR /> const wb = XLSX.utils.book_new();<BR /> XLSX.utils.book_append_sheet(wb, ws, "Table Data");<BR /> <BR /> // Save the workbook as an Excel file<BR /> XLSX.writeFile(wb, "table_data.xlsx");<BR /> }<BR /> &lt;/script&gt;</CODE></PRE><BR /> &nbsp;<BR /> <BR /> There are several javascript codes involved in coding the buttons and tables. All the REST calls are made using the Express application framework, and the CSS is pretty simple, using public bootstrap and custom made layouts.<BR /> <H3 id="toc-hId-110564380">SAP HANA Database</H3><BR /> We are using a trial <A href="https://help.sap.com/docs/SAP_HANA_PLATFORM/b3ee5778bc2e4a089d3299b82ec762a7/df0b4d0a3927472b85aed51efbb33c94.html" target="_blank" rel="noopener noreferrer">SAP HANA Database</A> instance on Cloud Foundry, and as a prerequisite for this we had to create SAP HANA Schemas &amp; HDI Container + SAP HANA Cloud services.<BR /> <BR /> The database is a simple one, without a <A href="https://www.sap.com/documents/2021/07/3241e6fa-f07d-0010-bca6-c68f7e60039b.html" target="_blank" rel="noopener noreferrer">Data Lake</A>, in which we created a table in order to store the logs.<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/hana-tab.png" /></P><BR /> <P class="image_caption" style="text-align: center">SAP HANA Database</P><BR /> &nbsp;<BR /> <BR /> For testing locally, we used a sample csv in order to generate my hdbcalculationviews and tables.<BR /> <BR /> For deployment to Cloud Foundry we used the MTA Module Template to generate the mtar file, and then with mbt build and cf deploy commands we were able to deploy it to Cloud Foundry.<BR /> <H3 id="toc-hId--85949125">openAI Chat Completions API</H3><BR /> We have used the API to get suggestions on the errors captured by the scheduled trace. The suggestions are purely as a point of reference, since the generative AI uses public knowledge related common issues and errors.<BR /> <PRE class="language-javascript"><CODE>{<BR /> "model": "gpt-3.5-turbo",<BR /> "messages": [<BR /> {<BR /> "role": "user",<BR /> "content": "Write advice for a developer on how to fix this SAP CPI error, maximum ${property.lengthOfResponse} characters: ${in.body}"<BR /> }<BR /> ]<BR /> }</CODE></PRE><BR /> <P class="image_caption" style="text-align: center">Sample request body</P><BR /> <BR /> <H3 id="toc-hId--282462630">SAP API Management and SAP Integration Suite</H3><BR /> In order to access SAP Integration Suite endpoints, we had to run the call through an API created with SAP API Management, because we had to cope with the CORS policies.<BR /> <BR /> &nbsp;<BR /> <BR /> <IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/07/9_APIManagement.png" /><BR /> <P class="image_caption" style="text-align: center">API Created</P><BR /> &nbsp;<BR /> <BR /> All the steps required to do this are listed in&nbsp;<A href="https://developers.sap.com/mission.appgyver-integration-suite.html" target="_blank" rel="noopener noreferrer">this</A>&nbsp;tutorial, and it involves creating an API, a Product and generate an APIKey for it.<BR /> <BR /> All the REST calls coming from the frontend run through SAP API Management and end up in a Dispatcher that routes the message to the specific iFlow based on the query parameter that contain a step name.<BR /> <PRE class="language-javascript"><CODE>const apiUrl = "https://${apiURL}?Step=GetTenantIflowList";<BR /> const apiKey = "${APIKEY}";<BR /> <BR /> fetch(apiUrl, {<BR /> method: "GET",<BR /> headers: {<BR /> "ApiKey": apiKey<BR /> },<BR /> })</CODE></PRE><BR /> <P style="text-align: center"><EM>Sample code for a REST call</EM></P><BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/dispatcher.png" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic">SAP Integration Suite Calls Dispatcher</P><BR /> &nbsp;<BR /> <H3 id="toc-hId--478976135">Email integration</H3><BR /> Besides having the full table available with detailed errors, we have added the functionality of sending an email containing all the neccesary details for solving and identifying the issue to a list of recipients. We thought this application could be used by a functional consultant that has no technical knowledge to solve the SAP Integration Suite issue, and it would be helpful for him to send the details to a developer that has the proper knowledge to fix it, so we used the public Gmail SMTP to send mails. Below is a screenshot with one of the emails sent by the application.<BR /> <BR /> &nbsp;<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/mail.png" /></P><BR /> <P class="image_caption" style="text-align: center;font-style: italic">Email sent by the application</P><BR /> <BR /> <H2 id="toc-hId--804572359"></H2><BR /> <H2 id="toc-hId--653831507">Conclusions</H2><BR /> All these functionalities we have created would help not only the integration developers, but also functional consultants. The tool can be really helpful in UAT phases as well, since you can store indefinitely the step contents and be able to access all the data that is flowing through the integration artifacts.<BR /> <BR /> Of course, it might have some limitations regarding performace, since we used some dummy artifacts that are relatively small in size and do not deal with huge payloads, but in time it might be tweaked in a way that you could control what is being saved, what steps to watch and what headers/properties to log.<BR /> <BR /> I hope you liked the article and feel free to reply with any suggestions here or on in the <A href="https://answers.sap.com/tags/67837800100800006801" target="_blank" rel="noopener noreferrer">SAP Integration Suite</A>&nbsp;Question section.<BR /> <BR /> &nbsp;<BR /> <BR /> Thank you ! 2023-10-19T20:36:25+02:00 https://community.sap.com/t5/technology-blogs-by-members/sap-btp-help-shorty-html5-configuration-issue-quot-failed-to-get-metadata/ba-p/13573770 SAP BTP Help Shorty - HTML5 Configuration issue "Failed to get Metadata - 400" 2023-11-30T14:06:35+01:00 NilsJanßen https://community.sap.com/t5/user/viewprofilepage/user-id/157600 Hello fellow developers,<BR /> <BR /> this will be another quick help blog post. I did not find any information for this error and I hope this might help someone else waste less time than me.<BR /> <BR /> I recently redeployed a SAPUI5 MTA to the space it has been in before. The changes included the alteration of the xsappname in the xs-security.json. In any way, there was some change that altered the UAA properties of the MTA.<BR /> <BR /> After the redoyplement, nothing was working and this shown as a warning:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/11/app_repo_warning-2.png" /></P><BR /> I tried everything in my toolbox: Redeploying with --delete-service flag, manual deletion of the instances and so on and so forth.<BR /> <BR /> Some time later, I rechecked the error message and decided to take a look at the UAA properties in the mta.yaml.<BR /> <BR /> Lo and behold, there was one tiny setting which I think came from the template I used:<BR /> <P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/11/existing_policy.png" height="40" width="1136" /></P><BR /> If the property existing_destination_policy is set to ignore, the deployment will not overwrite the old properties with new values. It has to be set to update in order to set new values.<BR /> <BR /> More Information can be found here: <A href="https://help.sap.com/docs/connectivity/sap-btp-connectivity-cf/create-destinations-using-mta-descriptor" target="test_blank" rel="noopener noreferrer">https://help.sap.com/docs/connectivity/sap-btp-connectivity-cf/create-destinations-using-mta-descriptor</A><BR /> <BR /> So in conclusion: If you ever want to change something, make sure the changes are applied to the target. 2023-11-30T14:06:35+01:00 https://community.sap.com/t5/technology-blogs-by-members/integrate-app-into-work-zone-from-a-different-subaccount/ba-p/13584425 Integrate app into Work Zone from a different subaccount 2024-01-29T10:26:44.538000+01:00 JulianKuipers https://community.sap.com/t5/user/viewprofilepage/user-id/16502 <P>I'm Julian Kuipers, a Full Stack SAP Developer in The Netherlands, currently working with a company called INNOV8iON. We focus on creating new and better ways to use SAP.</P><H2 id="toc-hId-964879464">Introduction</H2><P>Not long ago, I was given a task that looked easy at first but turned out to be quite a puzzle. My job was to integrate a custom Fiori application, which has its own standalone approuter, into SAP Build Work Zone, standard edition. The tricky part was that the Fiori app and the SAP Build Work Zone were in different subaccounts, which made things more complicated.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="JulianKuipers_0-1706515611523.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/54473iD6889CC3BDC751BC/image-size/medium?v=v2&amp;px=400" role="button" title="JulianKuipers_0-1706515611523.png" alt="JulianKuipers_0-1706515611523.png" /></span></P><P>To figure out how to do this, I first looked at the official SAP instructions, which you can find here: <A href="https://help.sap.com/docs/build-work-zone-standard-edition/sap-build-work-zone-standard-edition/manual-integration-of-apps?locale=en-US" target="_blank" rel="noopener noreferrer">SAP Help Portal.</A> These instructions are pretty good, but I found they didn't cover everything I needed to know.</P><P>So, I came up with my own plan to make it work:</P><UL><LI>Turn on something called allowListService in the Fiori app: This is like saying, "It's okay for this app to be used in the SAP Build Work Zone."</LI><LI>Use whitelistService in the standalone approuter: This makes sure the router activates the whitelist-service.</LI><LI>Add specific user-provided variables to the app: This will add Work Zone as trusted URI to embed this app as an iFrame.</LI><LI>Make a trusted connection in the subaccount for the app: This is like making sure the app has a secure line to talk on.</LI></UL><P>I also learned a couple of important tips along the way:</P><UL><LI>SAP says it's best if the app and the Work Zone use the same custom domain. This makes a lot of the setup simpler because you don't have to do extra steps to make them work together.</LI><LI>The way I made it possible for users to log in isn't the fanciest solution, but it works well if you're only using one IDP (Identity Provider).</LI><LI>This project really made me think and helped me learn a lot about how SAP works and how to make different parts of it work together. I wanted to share what I learned so others who might be trying to do the same thing can find it a bit easier.</LI></UL><H2 id="toc-hId-768365959">Solution</H2><P>Following the steps outlined in the SAP Documentation, along with the additional instructions I’ll provide, will ensure a smooth integration process for your custom Fiori application into SAP Build Work Zone. Let's break down these steps for clarity and implementation ease:</P><H3 id="toc-hId-700935173">1. Activate the allowListService in the Custom Fiori App</H3><P>To activate the allowlist service in your application, you'll need to insert a specific script before the sap-ui-bootstrap code in your HTML file. This script configures the allowlist service, enabling the application to determine if it's allowed to run within a given frame. Here's the code snippet you should place:</P><P>&nbsp;</P><pre class="lia-code-sample language-markup"><code>&lt;script&gt; window["sap-ui-config"] = { allowlistService: '/allowlist/service', frameOptions: 'trusted', frameOptionsConfig: { callback: function (bSuccess) { if (bSuccess) { console.log("App is allowed to run!"); } else { console.error("App is not allowed to run!"); } } } }; &lt;/script&gt;</code></pre><P>&nbsp;</P><P style=" text-align: center; "><EM>index.html</EM></P><P>This snippet ensures your application checks if it's permitted to run, based on the allowlist service configuration. For further details, visit the <A href="https://sapui5.hana.ondemand.com/sdk/#/topic/62d9c4d8f5ad49aa914624af9551beb7" target="_blank" rel="noopener nofollow noreferrer">SAPUI5 SDK Documentation</A>.</P><H3 id="toc-hId-504421668">2. Activate the whitelistService in the Standalone Approuter</H3><P>In your standalone approuter configuration, add the following segment to activate the whitelistService, pointing to the allowlist service endpoint:</P><P>&nbsp;</P><pre class="lia-code-sample language-yaml"><code>"whitelistService": { "endpoint": "/allowlist/service" }</code></pre><P>&nbsp;</P><P style=" text-align: center; "><EM>xs-app.json</EM></P><P>This configuration enables your approuter to utilize the whitelist service, ensuring it recognizes and permits communications from your Fiori application. For comprehensive instructions, refer to the <A href="https://help.sap.com/docs/SAP_HANA_PLATFORM/4505d0bdaf4948449b7f7379d24d0f0d/5f77e58ec01b46f6b64ee1e2afe3ead7.html#whitelistservice" target="_blank" rel="noopener noreferrer">SAP Documentation</A>.</P><H3 id="toc-hId-307908163">3. Add User-Provided Variables to the Application</H3><P>To allow the SAP Work Zone to embed your application in an iFrame securely, you must specify certain variables and HTTP headers. This involves declaring a whitelist of origins that are permitted to frame your content without risking click-jacking attacks. Here's how you configure it:</P><P>&nbsp;</P><pre class="lia-code-sample language-yaml"><code>properties: CJ_PROTECT_WHITELIST: '[{"host":"&lt;WORKZONE_RUNTIME_HOST&gt;"}]' httpHeaders: '[{"Content-Security-Policy":"frame-ancestors &lt;WORKZONE_RUNTIME_HOST&gt;"}]'</code></pre><P>&nbsp;</P><P style=" text-align: center; "><EM>mta.yaml</EM></P><P>This configuration ensures that your application can only be framed by the SAP Work Zone, enhancing security and compliance with SAP's guidelines. More details on these settings can be found in the <A href="https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-developer-guide-for-cloud-foundry-multitarget-applications-sap-web-ide-full-stack/application-router-environment-variables#loio0aac697f0cf7444193ed5eb0fc6e5bd0__section_nrz_hgn_mv" target="_blank" rel="noopener noreferrer">SAP Developer Guide</A>.</P><H3 id="toc-hId-111394658">4. Adding Work Zone Host as a Trusted Domain</H3><P>The last piece of our integration puzzle is to ensure that the Work Zone runtime host is recognized as a trusted domain by the XSUAA service of the Fiori app. This step is vital for embedding the app securely within the SAP Build Work Zone environment, ensuring that authorization and authentication flows are handled correctly without compromising security.</P><P>To accomplish this, you'll need to follow the guidelines outlined by SAP for configuring trusted domains specifically for the SAP Authorization and Trust Management service. The detailed steps for this configuration can be found in the SAP documentation: <A href="https://help.sap.com/docs/btp/sap-business-technology-platform/configure-trusted-domains-for-sap-authorization-and-trust-management-service" target="_blank" rel="noopener noreferrer">Configure Trusted Domains for SAP Authorization and Trust Management Service</A>. This resource provides a comprehensive guide on how to add your Work Zone host as a trusted domain, ensuring that your custom Fiori app can be securely embedded and accessed within the SAP Build Work Zone.</P><P>Implementing these steps will facilitate the integration of your custom Fiori application with SAP Build Work Zone, ensuring both functionality and security are maintained.</P><H2 id="toc-hId--214201566">Conclusion</H2><P>As I've journeyed through the process of integrating a custom Fiori application into SAP Build Work Zone, it's clear that while the steps are straightforward once understood, there's a particular aspect of this integration that merits a closer look—the propagation of user login information, especially in contexts where multiple Identity Providers (IDPs) are involved.</P><P>This workaround is okay for now if you're just dealing with one IDP. It's not the slickest solution, but it does the job. However, if you're trying to make things work with several IDPs, that's where it gets trickier. If you're stuck in this spot, I found a blog that might just be your lifesaver. It's all about figuring out SAP Cloud Identity Services and making them work with SAP Build Work Zone when you've got multiple IDPs. Check it out right here: <A href="https://blogs.sap.com/2023/08/02/de-mystifying-sap-cloud-identity-services-integration-with-sap-build-work-zone/" target="_blank" rel="noopener noreferrer">De-mystifying SAP Cloud Identity Services Integration</A>.</P><P>Now for some good news—SAP's got our backs and is working on making this whole process a lot easier. They've hinted at some new improvements that are on the way, which you can sneak a peek at in their roadmap right <A href="https://roadmaps.sap.com/board?PRODUCT=73554900100800003081&amp;range=CURRENT-LAST#;INNO=3F83C264AF571EDE85B57541EEC34FB4" target="_blank" rel="noopener noreferrer">here</A>. I'm all in for seeing how they're going to make our lives simpler in the near future.</P><P>So, as we wrap this up, I just want to say it's been quite the ride figuring out all these SAP integration quirks. The thought of SAP making things smoother down the road is something I'm really looking forward to. In the meantime, we've got our workarounds and the helpful tips we've shared along the way.</P><P>Thanks for sticking with me through this journey. Here's to making things work and looking forward to easier days ahead!</P><P>Kind regards,</P><P>Julian Kuipers</P> 2024-01-29T10:26:44.538000+01:00 https://community.sap.com/t5/technology-blogs-by-members/automating-advanced-event-mesh-broker-creation/ba-p/13595187 Automating Advanced Event Mesh Broker Creation 2024-02-08T09:07:53.387000+01:00 MarianVatafu https://community.sap.com/t5/user/viewprofilepage/user-id/864725 <H1 id="toc-hId-836747362">Introduction</H1><P>&nbsp;</P><P><SPAN>The need to reduce costs associated with operating and maintaining an active message broker led to the creation of a tool that automates the generation and configuration any time the need for asynchronous event-based messages arises.</SPAN></P><P>This article will showcase a method of creating an event broker in <A href="https://help.sap.com/docs/SAP_ADVANCED_EVENT_MESH" target="_self" rel="noopener noreferrer">Advanced Event Mesh</A> by leveraging the REST endpoints provided by&nbsp;<A href="https://help.pubsub.em.services.cloud.sap/Cloud/ght_use_rest_api_services.htm" target="_self" rel="nofollow noopener noreferrer">Solace</A> and&nbsp;<A href="https://docs.solace.com/Admin/SEMP/Using-SEMP.htm" target="_self" rel="nofollow noopener noreferrer">SEMP configuration</A>. The solution will allow the system to request a broker creation, monitor the status, re-generate the queues and topics and extract the endpoints for sending or receiving data. Besides that, a UI has been set up that simplifies the broker configuration and allows users to persist or modify configurations.</P><H2 id="toc-hId-769316576">&nbsp;</H2><H1 id="toc-hId-443720352">Scenario Overview</H1><P>&nbsp;</P><P data-unlink="true">All the necessary steps for broker creation are done in SAP Integration Suite using multiple iFlow artifacts for each process step, <A href="https://help.sap.com/docs/cloud-integration/sap-cloud-integration/decoupling-via-jms-queue?q=JMS%20Queues" target="_self" rel="noopener noreferrer">JMS Queues</A> for handling connection errors, timeouts and message routing, Datastore for saving broker configurations and a main page that acts as a user interface for setting up everything.</P><P data-unlink="true">&nbsp;</P><H1 id="toc-hId-247206847">Architecture Overview</H1><P>&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Architecture.png" style="width: 947px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/60631i7F32250BAC014F9A/image-size/large?v=v2&amp;px=999" role="button" title="Architecture.png" alt="Architecture.png" /></span></P><P style=" text-align: center; ">&nbsp;<EM>Picture 1 - Architecture Overview</EM></P><H1 id="toc-hId-50693342">UI Configuration Page</H1><P>&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="UIPAGE.png" style="width: 958px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/60634iE8C3CB8E7FCF595B/image-size/large?v=v2&amp;px=999" role="button" title="UIPAGE.png" alt="UIPAGE.png" /></span></P><P style=" text-align: center; ">&nbsp;<EM>Picture 2 - UI Configuration Page</EM></P><P>The configuration page is a HTML page exposed as a REST endpoint, containing multiple sections that allow the user to generate new configurations, use existing ones and even check the status of the already-deployed broker creation jobs.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Deployment.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/60638iEDF217918FCCE8E4/image-size/large?v=v2&amp;px=999" role="button" title="Deployment.png" alt="Deployment.png" /></span></P><P style=" text-align: center; ">&nbsp;<EM>Picture 3 - Deployment Page</EM></P><P>On this page, we can see the status of the active or pending brokers on the cluster. I also added the ability to delete the broker on demand.</P><P>&nbsp;</P><P>&nbsp;</P><H1 id="toc-hId--145820163">Technical Setup</H1><P>The process of creating an event broker has been detailed in the&nbsp;<A href="https://help.pubsub.em.services.cloud.sap/Cloud/ght_use_rest_api_services.htm" target="_self" rel="nofollow noopener noreferrer">Managing Services with the<SPAN>&nbsp;</SPAN><SPAN class="">SAP Integration Suite, Advanced Event Mesh</SPAN><SPAN>&nbsp;</SPAN>REST API</A> section and it consists of several REST calls in order to create a broker, get the connection details and check the creation status.</P><P>The most important parameters that allow us to continue with the next steps are :</P><UL><LI>&nbsp;serviceId - the id of the service cluster generated</LI><LI>&nbsp;msgVpnName - the internal id of the broker</LI><LI><DIV><DIV><SPAN>defaultManagementHostname - the hostname that will be used for queue, topic and rest delivery point creation</SPAN></DIV><DIV>&nbsp;</DIV></DIV></LI></UL><P>In order to create an event broker :</P><P>HTTP POST&nbsp;<SPAN><A href="https://api.solace.cloud/api/v0/services" target="_blank" rel="noopener nofollow noreferrer">https://api.solace.cloud/api/v0/services</A></SPAN></P><P>&nbsp;</P><pre class="lia-code-sample language-javascript"><code>{ "name": "Broker Name", "datacenterId": "&lt;Data Center Id&gt;", "serviceClassId":"developer", "serviceTypeId": "developer", "adminState": "start" }</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>The authentication for this endpoint is made via an authorization token generated in the Cluster Manager.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="token.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/60664i9B1907A16E2BD1D3/image-size/large?v=v2&amp;px=999" role="button" title="token.png" alt="token.png" /></span></P><P style=" text-align: center; ">&nbsp;<EM>Picture 4 - API Token Management</EM></P><P>In order to create a queue object :</P><P><SPAN>HTTP POST https://&lt;defaultManagementHostname&gt;/SEMP/v2/config/msgVpns/&lt;msgVpnId&gt;/queues</SPAN></P><P>&nbsp;</P><pre class="lia-code-sample language-java"><code>{ "accessType": "exclusive", "egressEnabled": true, "ingressEnabled": true, "msgVpnName": "&lt;msgVpnId&gt;", "owner": "all", "permission": "consume", "queueName": "&lt;queue-name&gt;" }</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>In order to create a topic subscription object :</P><P><SPAN>HTTP POST https://&lt;defaultManagementHostname&gt;/SEMP/v2/config/msgVpns/&lt;msgVpnId&gt;/queues/&lt;queue-name&gt;/subscriptions</SPAN></P><P>&nbsp;</P><pre class="lia-code-sample language-java"><code>{ "msgVpnName": "&lt;msgVpnId&gt;", "queueName": "&lt;queue-name&gt;", "subscriptionTopic": "&lt;topic/name&gt;" }</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>In order to create a rest delivery point object :</P><P data-unlink="true">HTTP POST https://&lt;defaultManagementHostname&gt;/SEMP/v2/config/msgVpns/&lt;msgVpnId&gt;/restDeliveryPoints&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-java"><code>{ "clientProfileName": "default", "enabled": true, "msgVpnName": "&lt;msgVpnNameId&gt;", "restDeliveryPointName": "&lt;restDeliveryPointId&gt;" }</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>If everything is correctly triggered, we should be able to see in the Cluster Manager our newly created broker, and as well in the broker console the queues and topics.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="cluster.png" style="width: 350px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/60658iA531855FE1B34772/image-dimensions/350x371?v=v2" width="350" height="371" role="button" title="cluster.png" alt="cluster.png" /></span></P><P style=" text-align: center; ">&nbsp;<EM>Picture 5 - Cluster Manager</EM></P><P style=" text-align: center; "><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="msgvpn.png" style="width: 551px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/60659i5524C62770D90BB6/image-dimensions/551x267?v=v2" width="551" height="267" role="button" title="msgvpn.png" alt="msgvpn.png" /></span></P><P style=" text-align: center; ">&nbsp;<EM>Picture 6 - Queues</EM></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="topics.png" style="width: 637px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/60660i6BE492B596763D32/image-dimensions/637x249?v=v2" width="637" height="249" role="button" title="topics.png" alt="topics.png" /></span></P><P style=" text-align: center; ">&nbsp;&nbsp;<EM>Picture 7 - Topics subscribed to a queue</EM></P><H1 id="toc-hId--342333668">&nbsp;</H1><H1 id="toc-hId--538847173">Adapter for inserting/consuming events</H1><P>By using the recently published <A href="https://help.sap.com/docs/integration-suite/sap-integration-suite/advanced-event-mesh-adapter" target="_self" rel="noopener noreferrer">adapter</A> for Advanced Event Mesh integrations, we can insert and consume events from our brokers. Below is a sample iFlow artifact that connects to a specific topic and consumes messages from there.</P><P style=" text-align: center; "><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="sender.png" style="width: 637px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/60666iE01E28DF9AF4A5DC/image-size/large?v=v2&amp;px=999" role="button" title="sender.png" alt="sender.png" /></span></P><P>&nbsp;</P><P style=" text-align: center; "><EM>Picture 8 - iFlow artifact for topic message consumption</EM></P><H1 id="toc-hId--735360678">Conclusions</H1><P>&nbsp;</P><P>Using the SAP Help documentation was the key behind the success, because the product is rather new on the market and we did not really heard of other use cases yet. By following the steps we were able to easily connect two Business Technology Platform products and we were able to leverage event-based integration far more powerful than the traditional <A href="https://help.sap.com/docs/event-mesh?locale=en-US&amp;state=PRODUCTION&amp;version=Cloud" target="_self" rel="noopener noreferrer">SAP Event Mesh</A>.</P><P>For any questions or suggestions, feel free to post here or in the special<SPAN>&nbsp;</SPAN><A href="https://community.sap.com/t5/c-khhcw49343/SAP+Internet+of+Things/pd-p/73554900100800002247" target="_self">Q&amp;A Section</A>.</P><P>Thank you!</P> 2024-02-08T09:07:53.387000+01:00 https://community.sap.com/t5/technology-blogs-by-members/csrf-token-validation-error/ba-p/13636621 CSRF Token Validation Error 2024-03-15T07:00:20.587000+01:00 NilsJanßen https://community.sap.com/t5/user/viewprofilepage/user-id/157600 <P>Hello fellow developers,</P><P>recently we ran into an issue which we gave us a very hard time.</P><H3 id="toc-hId-1118035229">Scenario</H3><P>A UI5 application runs in the #SAP Workzone Standard Edition# and uses the SAP Managed Approuter to connect to the workflow runtime servie as well as a backend SAP Gateway destination with principal propagation.<BR />Everything worked fine in regards to the workflow requests as well as the GET requests to the Gateway system. What did not work were any requests that required a valid CSRF Token, like POST or UPDATE.&nbsp;<BR />The app did sent requests with a valid CSRF token to the backend, but the system refused to accept it.&nbsp;</P><P>The app worked like this: When it is opened with a certain URL, the app loads some information from the workflow runtime and needs a CSRF token for this. The xs-app.json looked like this:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Fjaoos_1-1710322042391.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/79814i56737B5040265589/image-size/medium?v=v2&amp;px=400" role="button" title="Fjaoos_1-1710322042391.png" alt="Fjaoos_1-1710322042391.png" /></span></P><P>You can see the route for the workflow runtime as well as the SAP Gateway System and its destination. It was set up just like you would expect to find this on any tutorial.</P><H3 id="toc-hId-921521724">Solution</H3><P>We had to set the csrfProtection to false for the SAP Gateway destination.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Fjaoos_2-1710322196769.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/79816i3445A42F6C7EE89A/image-size/medium?v=v2&amp;px=400" role="button" title="Fjaoos_2-1710322196769.png" alt="Fjaoos_2-1710322196769.png" /></span></P><P>With this settings the csrf token for the ODataModel was then issued by the SAP Gateway.</P> 2024-03-15T07:00:20.587000+01:00 https://community.sap.com/t5/technology-blogs-by-sap/consuming-sap-with-sap-build-apps-web-app-in-sap-build-work-zone-standard/ba-p/13685621 Consuming SAP with SAP Build Apps - Web App in SAP Build Work Zone, standard edition 2024-05-02T03:19:46.516000+02:00 LudoNoens https://community.sap.com/t5/user/viewprofilepage/user-id/15040 <P>This blog post is the fourth in a series of posts that cover the connectivity options available for SAP Build Apps to interface with SAP systems. The series will cover connecting SAP Build Apps with the following:</P><OL><LI>CAP-based services</LI><LI>S/4HANA systems</LI><LI>ABAP systems</LI></OL><P>The format of this post is similar to a tutorial. However, I'll provide more comprehensive details, tips and the opportunity for you to provide feedback. Based on the feedback we will be able to adjust and enhance this post and future parts of the series, and might even be able to improve the products involved as well.&nbsp;<BR /><BR /></P><H1 id="toc-hId-864457605">Introduction </H1><P>Before we get into the details of setting up connections between SAP Build Apps and SAP Systems, I intend to introduce a couple of SAP technology components in each post that are relevant for the use cases covered in the series.&nbsp;<BR /><BR /></P><H2 id="toc-hId-797026819">SAP Build Work Zone</H2><P>SAP Build Work Zone is a digital workplace experience that enables users to build and customise business sites that provide centralised access to business application information from any device.</P><P>Key capabilities are:</P><UL><LI>Quickly create corporate websites providing secure and central access for apps, tasks, notifications, information and communication.</LI><LI>Easily connect with SAP and third-party enterprise applications.</LI><LI>Provide a personalised and role-based user experience.</LI><LI>Provide an extensible framework for development, customisation and branding.</LI></UL><P>The service is currently available in 2 editions:</P><OL><LI>Standard edition - this is basically the same as what we previously called the SAP Launchpad service. This is the edition we will use in this blog post. It has a strong focus on integration of business applications.</LI><LI>Advanced edition - this is what we previously referred to as the SAP Work Zone service. It includes additional capabilities on top of what is available in the standard edition. The information in this blog post can be applied in this edition as well. You typically subscribe to only one edition. The advanced edition adds capabilities around workspaces, knowledge management and user engagement.</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="LudoNoens_2-1714381872196.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103095i21AEB1EAB4759B98/image-size/large?v=v2&amp;px=999" role="button" title="LudoNoens_2-1714381872196.png" alt="LudoNoens_2-1714381872196.png" /></span></P><H2 id="toc-hId-600513314">MTAR</H2><P>A multitarget application (MTA) is comprised of multiple parts (also referred to as "modules"), created with different technologies and deployed to different targets, but with a single, common lifecycle.</P><P>A multitarget application archive (MTAR) is an archive that contains a deployment descriptor, configuration files, and module and resource binaries. The archive follows the JAR file specification. A JAR file is essentially a zip file that contains an optional META-INF directory.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="LudoNoens_0-1714474595732.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103853i0DE6AB7E0317A327/image-size/large?v=v2&amp;px=999" role="button" title="LudoNoens_0-1714474595732.png" alt="LudoNoens_0-1714474595732.png" /></span></P><P>An example relevant for the use cases in this blog series is an MTAR created in SAP Build Code that contains the Destination, a node.js based CAP service, and a HANA database deployment application for setting up the persistency layer. All are deployed during a single deployment action, for a specific version of the archive.</P><P>&nbsp;</P><H1 id="toc-hId-274917090">Use case D : Consume the CAP service with a web app provided in SAP Build Work Zone</H1><P>For this use case, we will make use of the previously created basic CAP service in <FONT color="#FF00FF"><STRONG>SAP Build Code</STRONG></FONT>. In the previous blog post, we have created dedicated mobile apps for the iOS and Android platforms to consume this service with SAP Build Apps. We will now use the exact same UI application to build and deploy a web application to SAP Business Technology Platform. After that, we will configure SAP Build Work Zone&nbsp;to provide access to the application.<BR /><BR /></P><H2 id="toc-hId-207486304">Solution diagram</H2><P>Like in the <A title="Consuming SAP with SAP Build Apps - Mobile apps for iOS and Android" href="https://community.sap.com/t5/technology-blogs-by-sap/consuming-sap-with-sap-build-apps-mobile-apps-for-ios-and-android/ba-p/13667638" target="_blank">previous blog post</A>, we will start with a quick look into what needs to change in our solution overview to accommodate for web apps. Building upon the solution diagram created earlier, we now add <STRONG>SAP Build Work Zone, standard edition</STRONG>. The design time environment of SAP Build Apps will deploy the web application to the HTML5 Application Repository service. The application is made available to end users through <STRONG>SAP Build Work Zone</STRONG>, which is configured separately.&nbsp;End users can access the web app from any device. The web app authenticates with the Identity Authentication service (IAS) and accesses data via a <STRONG>Destination</STRONG>. Only users who have the correct Roles assigned will be able to access the data provided in the CAP-based data service.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="LudoNoens_1-1714476179455.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103874iEF07E53A324296B8/image-size/large?v=v2&amp;px=999" role="button" title="LudoNoens_1-1714476179455.png" alt="LudoNoens_1-1714476179455.png" /></span></P><H2 id="toc-hId-10972799">Building the web app in SAP Build Apps</H2><P>As the application we have developed so far is actually a cross-platform app, we don't need to change anything in the app itself. We simply need to build it for a different runtime. And for this, we will again make use of the cloud build service we have utilised in the previous blog post.</P><P>Starting in SAP Build Apps, navigate to the Launch tab and select Open build service.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Pasted Graphic.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103580i19176D7F9385B107/image-size/large?v=v2&amp;px=999" role="button" title="Pasted Graphic.png" alt="Pasted Graphic.png" /></span></P><P>Next, select CONFIGURE for the Web App.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Web App.png" style="width: 200px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103584iE2F9C931B67C7FBA/image-size/small?v=v2&amp;px=200" role="button" title="Web App.png" alt="Web App.png" /></span></P><P>For the Bundle Settings, select MTAR and click NEXT.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Pasted Graphic 3.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103634i5FBF73F69CF1D2DA/image-size/large?v=v2&amp;px=999" role="button" title="Pasted Graphic 3.png" alt="Pasted Graphic 3.png" /></span></P><P>In the Image Assets tab, upload a 32 x 32 pixel icon image (PNG file) for the Favicon and click NEXT.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Pasted Graphic 4.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103638i59CBC4BBC5F887C4/image-size/large?v=v2&amp;px=999" role="button" title="Pasted Graphic 4.png" alt="Pasted Graphic 4.png" /></span></P><P>On the Plugins tab, you can add React Native plugins for your app. For our app you can see a few plugins have been selected by default, based on the functionality we have already added in the app. We can use the default selection in this case and click NEXT.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Pasted Graphic 5.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103641iD7E728FB352D167C/image-size/large?v=v2&amp;px=999" role="button" title="Pasted Graphic 5.png" alt="Pasted Graphic 5.png" /></span></P><P>Now that we have completed configuring the web app build settings, select BUILD.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt=" BUILD.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103642iA535FA5A8D22815A/image-size/medium?v=v2&amp;px=400" role="button" title=" BUILD.png" alt=" BUILD.png" /></span></P><P>Select MTAR and the Client runtime version. Provide a version number for your application. Select BUILD.</P><P>Once the build is done, you will be able to download the MTAR file, or simply deploy the MTAR.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Web App.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103643i739B71256A25955C/image-size/medium?v=v2&amp;px=400" role="button" title="Web App.png" alt="Web App.png" /></span></P><P>Select DEPLOY MTA.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Pasted Graphic 1.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103644i22158E77B633DB6C/image-size/large?v=v2&amp;px=999" role="button" title="Pasted Graphic 1.png" alt="Pasted Graphic 1.png" /></span></P><P>Select the Cloud Foundry API endpoint of your target subaccount. In our case, we will use the same subaccount as the one we have set up in the first blog post of this series. </P><P>Log in to Cloud Foundry and to get authorization to perform deployment to SAP Business Technology Platform.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Pasted Graphic 2.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103645i16C4AC1C9E878506/image-size/large?v=v2&amp;px=999" role="button" title="Pasted Graphic 2.png" alt="Pasted Graphic 2.png" /></span></P><P>Once you've selected your target Cloud Foundry organisation and space, select DEPLOY MTA TO &lt;your space name&gt;&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="LudoNoens_0-1714460808947.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103649i08132689A0B2A200/image-size/large?v=v2&amp;px=999" role="button" title="LudoNoens_0-1714460808947.png" alt="LudoNoens_0-1714460808947.png" /></span></P><P>The deployment process will start and your web application will be deployed to the HTML5 Application Repository Service. You can track the progress in the logs.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="LudoNoens_1-1714461015698.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103651i0BF76CF8E94D05FC/image-size/large?v=v2&amp;px=999" role="button" title="LudoNoens_1-1714461015698.png" alt="LudoNoens_1-1714461015698.png" /></span></P><P>Once the deployment finishes, the URL to your application will be shown.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="LudoNoens_2-1714461129985.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103654iB4BE9F8A77AF317C/image-size/large?v=v2&amp;px=999" role="button" title="LudoNoens_2-1714461129985.png" alt="LudoNoens_2-1714461129985.png" /></span></P><P>When you try to open the URL, you are quite likely greeted with the message "Internal Server Error". Looking into details in your browser's developer tools, you can find a response code 500. This indicates something has not been set up correctly (yet). Not to worry ... we'll fix this in the following steps.</P><P>If your subaccount was correctly configured, then you should actually see the web app.</P><P>&nbsp;</P><H2 id="toc-hId--185540706">Provide access to the web app in SAP Build Work Zone</H2><P>We are now going configure SAP Build Work Zone. There are multiple ways to access this. In the context of SAP Build, we can start from the SAP Build landing page. On the landing page, select the Create button.</P><P>What would you like to do ? Well, we'd like to Build a Business Site !</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="LudoNoens_3-1714461673821.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103658i4E87518B850778E3/image-size/large?v=v2&amp;px=999" role="button" title="LudoNoens_3-1714461673821.png" alt="LudoNoens_3-1714461673821.png" /></span></P><P>Select Configure Site in Admin Console.</P><P>Note that in the screenshot below the tile "Manage Workspages and Workspaces" is marked as 'Not Subscribed'. This is because I am using the standard edition of SAP Build Work Zone, which was subscribed through the "Get started with SAP Build Apps" booster. If you have a subscription to the Advanced Edition, then this tile can be selected as well.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Which site would you like to configure.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103659iAA9CFECDBBED8631/image-size/large?v=v2&amp;px=999" role="button" title="Which site would you like to configure.png" alt="Which site would you like to configure.png" /></span></P><P>Alternatively, if you are not using SAP Build, you can configure SAP Build Work Zone by opening the link in your subaccount's cockpit.</P><P>As prerequisite, please check whether your user has the Role <STRONG>Launchpad_Admin</STRONG> assigned.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Description.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103670i65BEDB5F9A45006A/image-size/large?v=v2&amp;px=999" role="button" title="Description.png" alt="Description.png" /></span></P><P>Once configured (and you might need to log out &amp; log in to activate that Role), navigate to the subscriptions and open the link to SAP Build Work Zone, standard edition.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Subscriptions (7).png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103671i05C5DBDB69CA3C88/image-size/medium?v=v2&amp;px=400" role="button" title="Subscriptions (7).png" alt="Subscriptions (7).png" /></span></P><H3 id="toc-hId--252971492">SAP Build Work Zone configuration</H3><P>Now, let's set up a business site that includes our app. Select Create Site.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Pasted Graphic 10.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103672i02B982B111FA52B4/image-size/large?v=v2&amp;px=999" role="button" title="Pasted Graphic 10.png" alt="Pasted Graphic 10.png" /></span></P><P>Provide a name for the Site and click Create.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Create Site.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103673i5070E08D3640CBFE/image-size/medium?v=v2&amp;px=400" role="button" title="Create Site.png" alt="Create Site.png" /></span></P><P>Navigate to the Content Manager tab and select the Content Explorer button.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Pasted Graphic 12.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103675iF7564FBAF7401889/image-size/large?v=v2&amp;px=999" role="button" title="Pasted Graphic 12.png" alt="Pasted Graphic 12.png" /></span></P><P>The Content Explorer will open.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Pasted Graphic 13.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103676iC005422078CB092D/image-size/large?v=v2&amp;px=999" role="button" title="Pasted Graphic 13.png" alt="Pasted Graphic 13.png" /></span></P><P>Click on HTML5 Apps to see which apps have been deployed to the HTML5 Application Repository. You will see the app we've created in SAP Builds Apps. Besides that, you will also notice the Launchpad for the products service we've deployed from SAP Build Code.&nbsp;Select the app created and deployed with SAP Build Apps and click the Add button.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Pasted Graphic 15.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103679iCCEC71C2888AEEAA/image-size/large?v=v2&amp;px=999" role="button" title="Pasted Graphic 15.png" alt="Pasted Graphic 15.png" /></span></P><P>Going back to the Content Manager, select the Create button and create a new group. Give the group a name and assign the previously added app to the group.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Pasted Graphic 16.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103680i78BBD36001D1AC2C/image-size/large?v=v2&amp;px=999" role="button" title="Pasted Graphic 16.png" alt="Pasted Graphic 16.png" /></span></P><P>Go back to the Content Manager and select the Everyone Role. Enable the previously selected app to be accessible for everyone. Note that this will give users access to the web app itself. Access to the data service is still limited to those having the Role we have configured in the second blog post of this series.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Pasted Graphic 17.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103681i95C72FA87AD0FCBD/image-size/large?v=v2&amp;px=999" role="button" title="Pasted Graphic 17.png" alt="Pasted Graphic 17.png" /></span></P><H3 id="toc-hId--449484997">&nbsp;</H3><H3 id="toc-hId--645998502">Resolving the "Internal Server Error"</H3><P>And now for the previously mentioned 500 response code, resulting in "Internal Server Error". This happens when the authentication mechanism for SAP Build Work Zone and SAP Cloud Portal service uses XSUAA, while your subaccount is actually configured to use a custom IdP (IAS). To switch to Identity Authentication, navigate to the Settings, select the Identity Authentication tab and click Enable (please read the notes before doing this, and confirm that you've completed the required trust configuration).&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Pasted Graphic 18.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103682iE407128ADE91B264/image-size/large?v=v2&amp;px=999" role="button" title="Pasted Graphic 18.png" alt="Pasted Graphic 18.png" /></span></P><P> </P><H2 id="toc-hId--624340369">Accessing the web app in SAP Build Work Zone</H2><P>The link to the site can be found on the Site Directory.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="LudoNoens_4-1714466297804.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103703iB33EBA4DF4A656A8/image-size/large?v=v2&amp;px=999" role="button" title="LudoNoens_4-1714466297804.png" alt="LudoNoens_4-1714466297804.png" /></span></P><P>Depending on how you've configured your site in SAP Build Work Zone, it might look a bit different. But you should have the tile of your app visible on your site.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="LudoNoens_5-1714466445212.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103705i4A01EE2CA9E47334/image-size/medium?v=v2&amp;px=400" role="button" title="LudoNoens_5-1714466445212.png" alt="LudoNoens_5-1714466445212.png" /></span></P><P>Clicking on the tile will open our web app. Notice the SAP BTP authentication happening before opening the app. Also note that you can open the URL on any device; on mobile as well as desktop devices.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="2024-04-30_16-59-11 (4).gif" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103730iD744402C3B843F55/image-size/large?v=v2&amp;px=999" role="button" title="2024-04-30_16-59-11 (4).gif" alt="2024-04-30_16-59-11 (4).gif" /></span></P><P>In case you are wondering where the icon ended up: check your web browser's tab.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="LudoNoens_3-1714476614589.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103878iA53B5CCEE81B1F5D/image-size/medium?v=v2&amp;px=400" role="button" title="LudoNoens_3-1714476614589.png" alt="LudoNoens_3-1714476614589.png" /></span><BR />Alternatively, you can also open the URL provided in SAP Build Apps, or find a link to your app in your subaccount, under the tab HTML5 Applications.&nbsp;<BR /><BR /></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="LudoNoens_0-1714557961791.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/104351i4B9F402C0A4143CA/image-size/large?v=v2&amp;px=999" role="button" title="LudoNoens_0-1714557961791.png" alt="LudoNoens_0-1714557961791.png" /></span></P><H2 id="toc-hId--820853874">Summary – use case D</H2><P>In this use case we have built and deployed our cross-platform app as a web app to SAP BTP. Building and deploying the app in the cloud is easy, as you don't need to install any tools on your local development machine.</P><P>SAP Build Apps deploys the application to the HTML5 Application Repository service. Using the web app, end users authenticate with IAS. Only users who have the correct Role assigned will be able to access the data provided in the CAP-based data service, which we can access through the BTP Destination.</P><P>Access to the app requires configuration of the Identity Authentication in the subaccount.</P><P>We have set up a simple business site in SAP Build Work Zone, to provide end-users easy access to the app.</P><P>And again, all the above was done without writing a single line of code.<BR /><BR /></P><H1 id="toc-hId--723964372">What's next</H1><P>In the next blog post, we will continue on the connectivity topic and connect to an S/4HANA system.</P> 2024-05-02T03:19:46.516000+02:00