https://raw.githubusercontent.com/ajmaradiaga/feeds/main/scmt/topics/SAP-BTP-ABAP-environment-blog-posts.xmlSAP Community - SAP BTP, ABAP environment2025-05-13T05:00:21.663883+00:00python-feedgenSAP BTP, ABAP environment blog posts in SAP Communityhttps://community.sap.com/t5/application-development-and-automation-blog-posts/free-sap-btp-free-abap-system-instance/ba-p/14050943Free SAP BTP - Free ABAP System instance2025-04-01T10:50:57.011000+02:00Rodrigo-Santiagohttps://community.sap.com/t5/user/viewprofilepage/user-id/1711398<P>This article will show how you can create a Free ABAP environment.</P><P>After all, run the SFlight loading ABAP program to load data into the Hana database tables.</P><P>To accomplish all these and you can follow without fear, it will have a lot of print screens, so, long article.</P><P>At your Global account level, select the Boosters section.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RodrigoSantiago_0-1742443993430.png" style="width: 647px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/240247i29813D72C6A73584/image-dimensions/647x363?v=v2" width="647" height="363" role="button" title="RodrigoSantiago_0-1742443993430.png" alt="RodrigoSantiago_0-1742443993430.png" /></span></P><P>In the filter, search for ABAP:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RodrigoSantiago_1-1742444418624.png" style="width: 787px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/240248i265D269E71C2BECD/image-dimensions/787x500?v=v2" width="787" height="500" role="button" title="RodrigoSantiago_1-1742444418624.png" alt="RodrigoSantiago_1-1742444418624.png" /></span></P><P>Calm down!! 🧘, I know you want to click on "Prepare an Account for ABAP Development (Free-tier)" but, there is a requirement for SAP BTP ABAP Environment, <FONT face="impact,chicago">"Landscape Portal". </FONT></P><P>We need to create it first, selecting the "Landscape Portal for SAP BTP ABAP Environment (Free-Tier)".</P><P>We will hit 2 or 3 walls, sending us back a few steps, but I will help with screens shots! </P><P>Click on the tile, it will open a section showing the description, components, resources, bla bla bla... Press the start</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RodrigoSantiago_2-1742445534951.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/240250i7E2085D7444825AB/image-size/medium?v=v2&px=400" role="button" title="RodrigoSantiago_2-1742445534951.png" alt="RodrigoSantiago_2-1742445534951.png" /></span> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RodrigoSantiago_3-1742445864423.png" style="width: 775px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/240251i1EB7ED8286FA7828/image-dimensions/775x217?v=v2" width="775" height="217" role="button" title="RodrigoSantiago_3-1742445864423.png" alt="RodrigoSantiago_3-1742445864423.png" /></span></P><P>In the coming screen, the booster will check settings a permission, it should show up like below:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RodrigoSantiago_4-1742446081937.png" style="width: 950px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/240252i4AAACDAF9944A4DD/image-dimensions/950x273?v=v2" width="950" height="273" role="button" title="RodrigoSantiago_4-1742446081937.png" alt="RodrigoSantiago_4-1742446081937.png" /></span></P><P>If it is not like mine (all green and done), follow the instructions on how to fix the authorizations and entitlements and come back here.</P><P>Clicking NEXT should show a screen like this one. </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RodrigoSantiago_4-1742447803703.png" style="width: 785px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/240259i1CA3C0075319BF02/image-dimensions/785x459?v=v2" width="785" height="459" role="button" title="RodrigoSantiago_4-1742447803703.png" alt="RodrigoSantiago_4-1742447803703.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RodrigoSantiago_5-1742447872094.png" style="width: 780px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/240260i3C115E553F54276A/image-dimensions/780x503?v=v2" width="780" height="503" role="button" title="RodrigoSantiago_5-1742447872094.png" alt="RodrigoSantiago_5-1742447872094.png" /></span></P><P>NOTE: If you want to create it manually without using the Booster, notice this trick.... the landscape portal not shows up in the list of entitlements!! in order to show up in the list, you need to edit the entitlements and add it.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RodrigoSantiago_0-1743176056411.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/244274iE30FABCAB6EE5E96/image-size/large?v=v2&px=999" role="button" title="RodrigoSantiago_0-1743176056411.png" alt="RodrigoSantiago_0-1743176056411.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RodrigoSantiago_1-1743176250536.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/244276i507EC9FCE1F086D9/image-size/large?v=v2&px=999" role="button" title="RodrigoSantiago_1-1743176250536.png" alt="RodrigoSantiago_1-1743176250536.png" /></span></P><P>After the deployment finishes, now it is time to create ABAP instance. Go to Global account and select boosters, then filter by ABAP. Click on tile "Prepare an Account for ABAP Development (Free-Tier)"</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RodrigoSantiago_1-1743177299451.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/244282iD5AD5BDFD9305668/image-size/large?v=v2&px=999" role="button" title="RodrigoSantiago_1-1743177299451.png" alt="RodrigoSantiago_1-1743177299451.png" /></span></P><P>After you read all info (Overview, Components,Additional), click on start. If there are some Authorization or Entitlements missing, fix them first. ( the entitlement error can be fixed adding it like shown up in the manual creation of Landscape portal)</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RodrigoSantiago_2-1743177483663.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/244283iF1A56CCAD43A5F89/image-size/large?v=v2&px=999" role="button" title="RodrigoSantiago_2-1743177483663.png" alt="RodrigoSantiago_2-1743177483663.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RodrigoSantiago_3-1743178105663.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/244284i25E138B4EF872982/image-size/large?v=v2&px=999" role="button" title="RodrigoSantiago_3-1743178105663.png" alt="RodrigoSantiago_3-1743178105663.png" /></span></P><P>In the next screen, we already created the Subaccount, so, don't need to create new one.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RodrigoSantiago_4-1743178353587.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/244285iAF0AA47C7B005256/image-size/large?v=v2&px=999" role="button" title="RodrigoSantiago_4-1743178353587.png" alt="RodrigoSantiago_4-1743178353587.png" /></span></P><P>select proper Subaccount and space. Next screen is auto explanatory.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RodrigoSantiago_5-1743178598446.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/244286i68D5A5113DC1B53E/image-size/large?v=v2&px=999" role="button" title="RodrigoSantiago_5-1743178598446.png" alt="RodrigoSantiago_5-1743178598446.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RodrigoSantiago_6-1743178766675.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/244287iFC3A520FC26037A4/image-size/large?v=v2&px=999" role="button" title="RodrigoSantiago_6-1743178766675.png" alt="RodrigoSantiago_6-1743178766675.png" /></span></P><P>Choose the ABAP system id and review your choices.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RodrigoSantiago_7-1743178833961.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/244288i8C7262A50AD57735/image-size/large?v=v2&px=999" role="button" title="RodrigoSantiago_7-1743178833961.png" alt="RodrigoSantiago_7-1743178833961.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RodrigoSantiago_8-1743178926587.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/244289i8030AD344A35A533/image-size/large?v=v2&px=999" role="button" title="RodrigoSantiago_8-1743178926587.png" alt="RodrigoSantiago_8-1743178926587.png" /></span></P><P>The creation will take a few hours, it's normal / common. Stay calm 🧘 and after it finishes, you will receive an email like this one.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RodrigoSantiago_10-1743179497003.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/244294i99F3C1FB3F84EB13/image-size/large?v=v2&px=999" role="button" title="RodrigoSantiago_10-1743179497003.png" alt="RodrigoSantiago_10-1743179497003.png" /></span></P><P>Congratulations!! <span class="lia-unicode-emoji" title=":confetti_ball:">🎊</span> Now you have your personal ABAP Cloud Environment (the best of it, it's FREEEEEEEEE)</P><TABLE border="1" width="100%"><TBODY><TR><TD width="50%"><A href="https://community.sap.com/t5/application-development-and-automation-blog-posts/free-sap-btp-create-new-subaccount/ba-p/14036063" target="_self">Previous</A></TD><TD width="50%"> </TD></TR></TBODY></TABLE><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P>2025-04-01T10:50:57.011000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/rap-augmentation/ba-p/14062042RAP: Augmentation2025-04-03T15:48:59.320000+02:00Arunagirish1https://community.sap.com/t5/user/viewprofilepage/user-id/889803<P><STRONG>Augmentation:</STRONG></P><UL><LI>used to enhance the modify request, before it reaches transactional buffer.</LI><LI>augmentation is available for projection bdefs only.</LI><LI>the augment methods are called before the create, update method.</LI></UL><P><STRONG>Note:</STRONG></P><UL><LI>it is not possible to set a field in augment which was already set for the original instance. For example, values set in the original request cannot be changed. Only fields which are unset in the original request can be added.</LI><LI>it is not possible to set fields in augment that are defined as read only .</LI></UL><P><STRONG>The following operations can be augmented:</STRONG></P><UL><LI>create</LI><LI>update</LI><LI>create by association</LI></UL><P><STRONG>ABAP EML - MODIFY AUGMENTING ENTITY:</STRONG></P><P>In the augmentation method, it's not recommended to use read, modify eml, as the data has not been moved into the transactional buffer yet. so we need to use a special variant of modify entity, entities, which is only possible in the context of projections bo.</P><UL><LI>for the eml statements, no response parameters can be specified, i.e., the additions failed, mapped, or reported cannot be used.</LI><LI>an abap eml modify statement using the addition augmenting must not overwrite fields of the original request. if done, a dump will be thrown.</LI></UL><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="arunagirish_6-1743432349812.png" style="width: 262px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/244986i83DCD6BA7B1BE889/image-dimensions/262x104?v=v2" width="262" height="104" role="button" title="arunagirish_6-1743432349812.png" alt="arunagirish_6-1743432349812.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image (5).jpg" style="width: 355px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/244987i5C88221EA4FE2C2A/image-dimensions/355x102?v=v2" width="355" height="102" role="button" title="image (5).jpg" alt="image (5).jpg" /></span></P><P><STRONG>Flow of augmentation method in interactive phase:</STRONG></P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="arunagirish_7-1743432447511.png" style="width: 603px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/245003iBB8A574265AEE1A9/image-dimensions/603x786?v=v2" width="603" height="786" role="button" title="arunagirish_7-1743432447511.png" alt="arunagirish_7-1743432447511.png" /></span></P><P><STRONG>Difference between augmentation and determination:</STRONG></P><P>Both Augmentation and determination are similar concept, as both are used to modify the request based on some standard trigger condition. But here are some differences.</P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="arunagirish_0-1743430755323.png" style="width: 523px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/244924i6526062B71670039/image-dimensions/523x141?v=v2" width="523" height="141" role="button" title="arunagirish_0-1743430755323.png" alt="arunagirish_0-1743430755323.png" /></span></P><P><STRONG>Steps to develop precheck:</STRONG></P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"> 1. Add precheck in standard operation in bdef projection.</P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="arunagirish_2-1743427835364.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/244868iF739A241DDE9D59E/image-size/medium?v=v2&px=400" role="button" title="arunagirish_2-1743427835364.png" alt="arunagirish_2-1743427835364.png" /></span></P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;">2. Implement the logic for precheck in abap behavior pool.</P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="arunagirish_3-1743427879345.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/244869iC1E76B7C2241FDAD/image-size/medium?v=v2&px=400" role="button" title="arunagirish_3-1743427879345.png" alt="arunagirish_3-1743427879345.png" /></span></P><P><STRONG>Use case:</STRONG></P><P><STRONG>Requirement: </STRONG>If the user doesn’t provides value for field “name”, Then it should be assigned with an default value “test”, in modify request.</P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><STRONG> </STRONG><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="arunagirish_4-1743427929521.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/244870i746586BB4AEF58F0/image-size/medium?v=v2&px=400" role="button" title="arunagirish_4-1743427929521.png" alt="arunagirish_4-1743427929521.png" /></span></P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="arunagirish_5-1743427948367.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/244871iAE3B6468D3B0E2A4/image-size/medium?v=v2&px=400" role="button" title="arunagirish_5-1743427948367.png" alt="arunagirish_5-1743427948367.png" /></span></P><P>To achieve this, we have added a augmentation in the update operation. Before executing the update method, the entry will beassigned with default value in augmentation method. In the Augmentation method, If the name is empty, we fill default value name using modify augmentation eml.</P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;">Code for augmentation in abap behavior pool:</P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><STRONG> </STRONG><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="arunagirish_6-1743428000226.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/244872i453E2CBC5580610B/image-size/medium?v=v2&px=400" role="button" title="arunagirish_6-1743428000226.png" alt="arunagirish_6-1743428000226.png" /></span></P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;">Entities importing parameter:</P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="arunagirish_4-1743432310770.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/244983i158571F69E8C84B7/image-size/medium?v=v2&px=400" role="button" title="arunagirish_4-1743432310770.png" alt="arunagirish_4-1743432310770.png" /></span></P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;">Reference table for augmenting:</P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="arunagirish_5-1743432332495.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/244984i0A35240A94922276/image-size/medium?v=v2&px=400" role="button" title="arunagirish_5-1743432332495.png" alt="arunagirish_5-1743432332495.png" /></span></P><P> </P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"> </P>2025-04-03T15:48:59.320000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/connecting-multiple-databases-and-odata-services-to-sap-btp-using-bas/ba-p/14063092Connecting Multiple Databases and OData Services to SAP BTP using BAS2025-04-03T15:51:13.956000+02:00Akshay_Anilhttps://community.sap.com/t5/user/viewprofilepage/user-id/1385603<H2 id="toc-hId-1707356927"><FONT color="#003366"><SPAN>Introduction</SPAN></FONT></H2><P class="lia-align-justify" style="text-align : justify;"><FONT color="#003366"><SPAN>In this post, I will explain how to connect multiple databases and OData services to SAP BTP using BAS . This guide covers configuring UI5 applications to consume multiple OData services from both </SPAN><SPAN><STRONG>SAP S/4HANA (on-premise)</STRONG></SPAN><SPAN> and </SPAN><SPAN><STRONG>SAP BTP ABAP environment</STRONG></SPAN><SPAN>, ensuring seamless data integration.<BR /><BR /></SPAN></FONT></P><H2 id="toc-hId-1510843422"><FONT color="#003366"><SPAN>Summary</SPAN></FONT></H2><P class="lia-align-justify" style="text-align : justify;"><FONT color="#000000"><SPAN>I aim to integrate three different OData services from different database sources :</SPAN></FONT></P><P class="lia-align-justify" style="text-align : justify;"><FONT color="#000000"><SPAN><STRONG>On-Premise S/4HANA OData V2 Services</STRONG></SPAN></FONT></P><UL><LI><FONT color="#003366"><STRONG>ZPR_EMP_DETAILS_SRV </STRONG><SPAN>: <FONT color="#000000">Fetches employee details.</FONT></SPAN></FONT><FONT color="#003366"><SPAN><FONT color="#000000"><BR /></FONT></SPAN></FONT></LI><LI><FONT color="#003366"><STRONG>ZFI_TEST_ODATA_SRV </STRONG><SPAN>: <FONT color="#000000">Fetches financial data.</FONT></SPAN></FONT></LI></UL><P><FONT color="#000000"><STRONG>SAP BTP ABAP Environment OData V4 Service</STRONG></FONT></P><UL><LI><FONT color="#003366"><STRONG>ZUI_TAB_TRAVDAT_O4_AKS_001</STRONG><SPAN>: <FONT color="#000000">Fetches travel-related data using the RAP Model.</FONT></SPAN></FONT></LI></UL><P> </P><H2 id="toc-hId-1314329917"><FONT color="#003366"><SPAN>Steps to Connect Multiple OData Services</SPAN></FONT></H2><H3 id="toc-hId-1246899131"><SPAN>Step 1: Add Data Sources in UI5 Application</SPAN></H3><OL class="lia-align-justify" style="text-align : justify;"><LI><P><FONT color="#000000"><SPAN>Create a </SPAN><SPAN><STRONG>UI5 application</STRONG></SPAN><SPAN> in </SPAN><SPAN><STRONG>VS Code</STRONG></SPAN><SPAN>.</SPAN></FONT></P></LI><LI><P><FONT color="#000000"><SPAN>While creating the application, provide the service URL to configure an </SPAN><SPAN><STRONG>OData service automatically</STRONG></SPAN><SPAN>.</SPAN></FONT></P></LI><LI><P><FONT color="#000000"><SPAN>Navigate to </SPAN><SPAN>webapp/manifest.json</SPAN><SPAN>.</SPAN></FONT></P></LI><LI><P><FONT color="#000000"><SPAN>Modify the </SPAN><SPAN>dataSources</SPAN></FONT><SPAN><FONT color="#000000"> section to include multiple OData services as follows:</FONT><BR /></SPAN></P></LI></OL><pre class="lia-code-sample language-json"><code>"dataSources": {
"mainService": {
"uri": "/sap/opu/odata/sap/ZPR_EMP_DETAILS_SRV/",
"type": "OData",
"settings": {
"odataVersion": "2.0"
}
},
"subService": {
"uri": "/sap/opu/odata/sap/ZFI_TEST_ODATA_SRV/",
"type": "OData",
"settings": {
"odataVersion": "2.0"
}
},
"rapService": {
"uri": "/sap/opu/odata4/sap/zui_tab_travdat_o4_aks_001/",
"type": "OData",
"settings": {
"odataVersion": "4.0"
}
}
}</code></pre><H3 id="toc-hId-1050385626"><FONT color="#000000"><SPAN>Step 2: Configure Models in </SPAN><SPAN>manifest.json</SPAN></FONT></H3><P class="lia-align-justify" style="text-align : justify;"><FONT color="#000000"><SPAN>Each model corresponds to an OData service:</SPAN></FONT></P><pre class="lia-code-sample language-json"><code>"models": {
"": {
"dataSource": "mainService",
"preload": true,
"settings": {}
},
"subModel": {
"dataSource": "subService",
"preload": true,
"settings": {}
},
"rapModel": {
"dataSource": "rapService",
"preload": true,
"settings": {
"operationMode": "Server",
"autoExpandSelect": true,
"earlyRequests": true
}
}
}</code></pre><H3 id="toc-hId-853872121"><FONT color="#000000"><SPAN>Step 3: Configure </SPAN><SPAN>ui5.yaml</SPAN><SPAN> for Backend Connections</SPAN></FONT></H3><P class="lia-align-justify" style="text-align : justify;"><FONT color="#000000"><SPAN>In </SPAN><SPAN>ui5.yaml</SPAN><SPAN>, configure the destinations for OData services:</SPAN></FONT></P><pre class="lia-code-sample language-yaml"><code>server:
customMiddleware:
- name: ui5-middleware-simpleproxy
afterMiddleware: compression
configuration:
ui5:
path:
- /resources
- /test-resources
url: https://ui5.sap.com
backend:
# On-premise SAP System Destination 1 - Replace with your URL
- scp: true
path: /sap/opu/odata/sap/ZPR_EMP_DETAILS_SRV/
url: https://your-onpremise-system-hostname:port/
destination: SAHANA_CONN
client: 'your client ID'
authenticationType: BasicAuthentication
# On-premise SAP System Destination 2 - Replace with your URL
- scp: true
path: /sap/opu/odata/sap/ZFI_TEST_ODATA_SRV
url: https://your-onpremise-system-hostname:port/
destination: SAHANA_CONN
client: 'your client ID'
authenticationType: BasicAuthentication
# SAP BTP ABAP Environment Destination - Replace with your instance URL
- scp: true
path: /sap/opu/odata/sap/zui_tab_travdat_o4_aks_001/
url: https://your-abap-instance-guid.abap.region.hana.ondemand.com
destination: abap-cloud-default_abap-trial-9a87acc7trial-dev
client: 'your client ID'
authenticationType: OAuth2UserTokenExchange</code></pre><P class="lia-align-justify" style="text-align : justify;">Note :</P><P class="lia-align-justify" style="text-align : justify;"><FONT color="#000000"><STRONG>Destination :</STRONG></FONT></P><P class="lia-align-justify" style="text-align : justify;"><FONT color="#000000"><SPAN><STRONG>S4HANA_CONN</STRONG> is used for two <STRONG>OData V2</STRONG> services hosted in the on-premise <STRONG>S/4HANA</STRONG> system as shown in below screenshot.</SPAN></FONT></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2025-01-26 181350.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/245306iBB0DEADB0F95BEE4/image-size/medium?v=v2&px=400" role="button" title="Screenshot 2025-01-26 181350.png" alt="Screenshot 2025-01-26 181350.png" /></span></SPAN></P><P><STRONG>abap-cloud-default_abap-trial-9a87ace7trial-dev</STRONG><SPAN> is for the </SPAN><STRONG>RAP-based OData V4</STRONG><SPAN> service hosted on SAP BTP as shown in below screenshot.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2025-01-26 181306.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/245307iFD597DFA9D8D40F6/image-size/medium?v=v2&px=400" role="button" title="Screenshot 2025-01-26 181306.png" alt="Screenshot 2025-01-26 181306.png" /></span></SPAN></P><P> </P><P><FONT color="#000000"><STRONG>Authentication Types</STRONG><SPAN>:</SPAN></FONT></P><UL><LI><FONT color="#000000"><SPAN>On-premise S/4HANA services use </SPAN><STRONG>BasicAuthentication</STRONG><SPAN>, which is simpler but less secure for cloud-based scenarios.</SPAN></FONT></LI><LI><FONT color="#000000">The SAP BTP service uses <STRONG>OAuth2UserTokenExchange</STRONG><SPAN>, enabling secure token-based communication.</SPAN></FONT></LI></UL><P><FONT color="#000000"><STRONG>All the Connected OData will be Listed in Service Manager </STRONG>as shown in below screenshot.</FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2025-01-26 191910.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/245294i7655AA2705E5892B/image-size/medium?v=v2&px=400" role="button" title="Screenshot 2025-01-26 191910.png" alt="Screenshot 2025-01-26 191910.png" /></span></P><P><FONT color="#800000"><STRONG>Important Note on OData Connection Methods:</STRONG></FONT></P><P><FONT color="#000000">Avoid connecting directly to OData services via the Service Manager, as it can lead to data inconsistency issues (e.g., all requests may unintentionally retrieve only the last edited destination). Instead,<SPAN> </SPAN><STRONG>I prefer using the Destination Service</STRONG><SPAN> </SPAN>(as shown in the configuration above) for:</FONT></P><UL><LI><FONT color="#000000"><STRONG>Stable & secure connections</STRONG></FONT></LI><LI><FONT color="#000000"><STRONG>Proper authentication handling</STRONG><SPAN> </SPAN>(Basic/OAuth2)</FONT></LI><LI><FONT color="#000000"><STRONG>Consistent data retrieval</STRONG><SPAN> </SPAN>(prevents mixing/overwriting datasets).</FONT><BR /><BR /></LI></UL><H2 id="toc-hId-528275897"><FONT color="#003366"><SPAN>Conclusion</SPAN></FONT></H2><P><SPAN>By following these steps, you can successfully integrate multiple OData services in a </SPAN><STRONG><SPAN>SAP BTP-based Fiori application</SPAN></STRONG><SPAN>. This setup allows seamless data flow between </SPAN><STRONG><SPAN>on-premise S/4HANA</SPAN></STRONG><SPAN> and </SPAN><STRONG><SPAN>cloud-based SAP BTP ABAP environment</SPAN></STRONG><SPAN>, ensuring a modern, scalable architecture.</SPAN></P><P><SPAN>I hope this helps! Let me know your thoughts or if you have any questions.<BR /></SPAN><SPAN><STRONG>Thanks,</STRONG></SPAN></P><P><FONT size="4" color="#003366"><SPAN><STRONG>Akshay Anil</STRONG> <BR /></SPAN></FONT><FONT color="#000000"><SPAN>Technical Consultant, SAP ABAP | BTP | Fiori | Ui5</SPAN></FONT></P><P><SPAN><a href="https://community.sap.com/t5/c-khhcw49343/SAP+Business+Application+Studio/pd-p/67837800100800007077" class="lia-product-mention" data-product="13-1">SAP Business Application Studio</a> <a href="https://community.sap.com/t5/c-khhcw49343/OData/pd-p/551580658536717501828021060147962" class="lia-product-mention" data-product="323-1">OData</a> <BR /><BR /></SPAN></P>2025-04-03T15:51:13.956000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/update-modify-any-table-data-dynamically/ba-p/14065946Update/Modify any Table data dynamically2025-04-04T05:23:22.969000+02:00Srilatha1https://community.sap.com/t5/user/viewprofilepage/user-id/1931171<P>To update any table dynamically in an SAP ABAP program, the general approach involves working with dynamic internal tables. This can be useful when you don't know the table's structure at compile-time, and you need to determine the table structure at runtime.</P><P>In this scenario, I'll provide a more detailed breakdown, including how you can dynamically:</P><OL><LI> <STRONG> Define a dynamic table at runtime.</STRONG></LI><LI> <STRONG>Insert data into it.</STRONG></LI><LI> <STRONG>Update rows based on a condition.</STRONG></LI><LI> <STRONG> Handle different types of data and tables.</STRONG></LI></OL><P>This example will be more general and applicable to any table in SAP.</P><P><STRONG>Detailed Steps for Dynamic Table Updates</STRONG></P><P><STRONG>1. Create a Dynamic Table</STRONG></P><P>In ABAP, you use CREATE DATA to create a dynamic internal table. You also need to dynamically assign a structure for the table using the REF TO DATA concept.</P><P><STRONG>2. Field Symbol for Dynamic Data</STRONG></P><P>A <STRONG>field symbol</STRONG> is used to refer to the data in a dynamic table. This allows you to access and modify the contents of the table.</P><P>3. <STRONG>Inserting Data into the Dynamic Table</STRONG></P><P>You can append data into the dynamic table by dynamically creating entries.</P><P>4. <STRONG>Updating Data in the Dynamic Table</STRONG></P><P>To update data, you 'will loop through the table and check conditions to identify which rows need modification. You will then use the MODIFY statement to update the content.</P><P><STRONG>Example Code: Dynamic Table Creation, Insertion, and Update</STRONG></P><P><STRONG>Handling Other SAP Tables Dynamically</STRONG></P><P>The above code works with the SFFLIGHT table. However, you can adopt this to any table in SAP by adjusting the structure and fields of the dynamic table.</P><P>To generalize for any SAP table, you'd need to know the structure of the table you're dealing with. You can retrieve the table's structure dynamically using function modules or predefined structures for commonly used SAP tables.</P><P><STRONG>Example: Dynamically Handling Different Tables</STRONG></P><P>If you want to dynamically choose which SAP table to work with, here’s a more flexible approach: &---------------------------------------------------------------------*</P><P>*& Report ZUT_UPLOAD_EXCEL_TO_DB_TABLE</P><P>*&---------------------------------------------------------------------*</P><P>*&</P><P>*&---------------------------------------------------------------------*</P><P>REPORT zut_upload_excel_to_db_table.</P><P>*&---------------------------------------------------------------------*</P><P>*&---------------------------------------------------------------------*</P><P>*& Global Data Definitions</P><P>*&---------------------------------------------------------------------*</P><P>DATA gt_data TYPE REF TO data.</P><P>DATA gs_data TYPE REF TO data.</P><P> </P><P>FIELD-SYMBOLS: <ft_data> TYPE STANDARD TABLE,</P><P> <fs_data> TYPE any.</P><P> </P><P>"Table Structure</P><P>DATA: gt_dd03p TYPE TABLE OF dd03p.</P><P>FIELD-SYMBOLS: <fs_dd03p> TYPE dd03p.</P><P> </P><P>"Error Report</P><P>DATA: gs_error_report TYPE bapiret2,</P><P> gt_error_report TYPE TABLE OF bapiret2.</P><P> </P><P>*&---------------------------------------------------------------------*</P><P>*& Selection Screen Definition</P><P>*&---------------------------------------------------------------------*</P><P>SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE TEXT-b01.</P><P> PARAMETERS: p_table TYPE dd02l-tabname OBLIGATORY.</P><P> SELECTION-SCREEN SKIP.</P><P> PARAMETERS: p_file LIKE rlgrap-filename OBLIGATORY MEMORY ID zmdmfile.</P><P> SELECTION-SCREEN SKIP.</P><P> SELECTION-SCREEN BEGIN OF LINE.</P><P> SELECTION-SCREEN COMMENT 1(30) TEXT-rfr.</P><P> PARAMETERS: p_refr RADIOBUTTON GROUP r01.</P><P> SELECTION-SCREEN END OF LINE.</P><P> SELECTION-SCREEN BEGIN OF LINE.</P><P> SELECTION-SCREEN COMMENT 1(30) TEXT-ups.</P><P> PARAMETERS: p_upsrt RADIOBUTTON GROUP r01.</P><P> SELECTION-SCREEN END OF LINE.</P><P>SELECTION-SCREEN END OF BLOCK b01.</P><P> </P><P>*&---------------------------------------------------------------------*</P><P>*& PAI/PBO Processing</P><P>*&---------------------------------------------------------------------*</P><P>AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.</P><P> </P><P> "F4 for File name</P><P> PERFORM f4_file_name USING 'P_FILE' CHANGING p_file.</P><P> </P><P>AT SELECTION-SCREEN ON p_table.</P><P> </P><P> "Validate the Table/Input</P><P> PERFORM validate_table .</P><P> </P><P>*&---------------------------------------------------------------------*</P><P>*& Start-of-Selection Event</P><P>*&---------------------------------------------------------------------*</P><P>START-OF-SELECTION.</P><P> </P><P> "Initialization</P><P> PERFORM initialization.</P><P> </P><P> "Get Excel data in internal table</P><P> PERFORM convert_excel.</P><P> </P><P> "Upload data to database table</P><P> PERFORM upload_table.</P><P> </P><P>*&---------------------------------------------------------------------*</P><P>*& End-of-Selection Event</P><P>*&---------------------------------------------------------------------*</P><P>END-OF-SELECTION.</P><P> </P><P> "Display ALV Report</P><P> PERFORM display_report.</P><P> </P><P>*&---------------------------------------------------------------------*</P><P>*& Form f4_file_name</P><P>*&---------------------------------------------------------------------*</P><P>*& text</P><P>*&---------------------------------------------------------------------*</P><P>*& --> p1 text</P><P>*& <-- p2 text</P><P>*&---------------------------------------------------------------------*</P><P>FORM f4_file_name USING p_field TYPE any</P><P> CHANGING p_file TYPE any.</P><P> </P><P> "F4 on File Name</P><P> CALL FUNCTION 'KD_GET_FILENAME_ON_F4'</P><P> EXPORTING</P><P> program_name = syst-repid</P><P> dynpro_number = syst-dynnr</P><P> field_name = p_field</P><P> static = ' '</P><P> mask = '*.XLSX'</P><P> fileoperation = 'R'</P><P> path = 'C:\TEMP\'</P><P> CHANGING</P><P> file_name = p_file</P><P> EXCEPTIONS</P><P> mask_too_long = 1</P><P> OTHERS = 2.</P><P> IF sy-subrc <> 0.</P><P> MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno</P><P> WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.</P><P> ENDIF.</P><P> </P><P>ENDFORM.</P><P>*&---------------------------------------------------------------------*</P><P>*& Form validate_table</P><P>*&---------------------------------------------------------------------*</P><P>*& text</P><P>*&---------------------------------------------------------------------*</P><P>*& --> p1 text</P><P>*& <-- p2 text</P><P>*&---------------------------------------------------------------------*</P><P>FORM validate_table .</P><P> </P><P> "Local Variables</P><P> DATA: ls_dd02l TYPE dd02l,</P><P> ls_tvarvc type tvarvc. " C2-8270 C2-8270</P><P> CONSTANTS : lc_mhk_table(15) type c VALUE 'Z_MHK_TABLE' ." added-C2-8270</P><P> </P><P> "Upload only Tables in customer namespace</P><P> IF p_table+0(1) NE 'Z' AND p_table+0(1) NE 'Y'.</P><P> MESSAGE 'Only Y or Z tables can be uploaded' TYPE 'E'.</P><P> RETURN.</P><P> ENDIF.</P><P> </P><P>*— Only transparent tables can be uploaded</P><P> SELECT SINGLE *</P><P> FROM dd02l</P><P> INTO ls_dd02l</P><P> WHERE tabname = p_table.</P><P> IF sy-subrc EQ 0.</P><P> IF ls_dd02l-tabclass NE 'TRANSP'.</P><P> MESSAGE 'Only transparent TABLES can be uploaded' TYPE 'E'.</P><P> ENDIF.</P><P> ELSE.</P><P> MESSAGE 'Invalid Table Name' TYPE 'E'.</P><P> RETURN.</P><P> ENDIF.</P><P>*BOC - C2-8270</P><P> SELECT SINGLE *</P><P> INTO ls_tvarvc</P><P> FROM tvarvc</P><P> WHERE name = lc_mhk_table</P><P> and low = P_table.</P><P> </P><P> if sy-subrc NE 0.</P><P> MESSAGE 'Only TVARVC entry Table can be uploaded TYPE ' TYPE 'E'.</P><P> ENDIF.</P><P>*EOC - C2-8270</P><P>ENDFORM.</P><P>*&---------------------------------------------------------------------*</P><P>*& Form convert_excel</P><P>*&---------------------------------------------------------------------*</P><P>*& text</P><P>*&---------------------------------------------------------------------*</P><P>*& --> p1 text</P><P>*& <-- p2 text</P><P>*&---------------------------------------------------------------------*</P><P>FORM convert_excel .</P><P> </P><P> "Local Variables</P><P> DATA lt_raw_data TYPE truxs_t_text_data.</P><P> </P><P> "Excel Functions</P><P> CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'</P><P> EXPORTING</P><P>* I_FIELD_SEPERATOR =</P><P> i_line_header = 'X'</P><P> i_tab_raw_data = lt_raw_data</P><P> i_filename = p_file</P><P> TABLES</P><P> i_tab_converted_data = <ft_data></P><P> EXCEPTIONS</P><P> conversion_failed = 1</P><P> OTHERS = 2.</P><P> IF sy-subrc <> 0.</P><P> MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno</P><P> WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.</P><P> ENDIF.</P><P> </P><P>ENDFORM.</P><P>*&---------------------------------------------------------------------*</P><P>*& Form upload_table</P><P>*&---------------------------------------------------------------------*</P><P>*& text</P><P>*&---------------------------------------------------------------------*</P><P>*& --> p1 text</P><P>*& <-- p2 text</P><P>*&---------------------------------------------------------------------*</P><P>FORM upload_table.</P><P> </P><P> "Local Variables</P><P> FIELD-SYMBOLS: <fs_value> TYPE any.</P><P> </P><P> DATA: lv_fieldname TYPE dfies-lfieldname,</P><P> lt_value_list TYPE TABLE OF soli,</P><P> ls_message TYPE syst,</P><P> lv_value_internal TYPE c,</P><P> lt_failure_tab TYPE TABLE OF ddfkeyrc,</P><P> ls_failure_tab TYPE ddfkeyrc,</P><P> lt_additional_fields TYPE dcfielddats,</P><P> ls_additional_fields TYPE LINE OF dcfielddats.</P><P> DATA: lv_row_number TYPE i,</P><P> lv_col_number TYPE i.</P><P> </P><P> "Get Table Info</P><P> CALL FUNCTION 'DDIF_TABL_GET'</P><P> EXPORTING</P><P> name = p_table</P><P> state = 'A'</P><P> langu = sy-langu</P><P> TABLES</P><P> dd03p_tab = gt_dd03p</P><P> EXCEPTIONS</P><P> illegal_input = 1</P><P> OTHERS = 2.</P><P> IF sy-subrc <> 0.</P><P> ENDIF.</P><P> </P><P> SORT gt_dd03p BY position.</P><P> </P><P> "Validate each Row</P><P> REFRESH: gt_error_report[].</P><P> </P><P> LOOP AT <ft_data> ASSIGNING <fs_data>.</P><P> </P><P> "Row Number</P><P> lv_row_number = sy-tabix.</P><P> </P><P> "Validate Each Field</P><P> LOOP AT gt_dd03p ASSIGNING <fs_dd03p>.</P><P> </P><P> "Column Number</P><P> lv_col_number = sy-tabix.</P><P> </P><P> lv_fieldname = <fs_dd03p>-fieldname.</P><P> </P><P> "Get the Value</P><P> ASSIGN COMPONENT <fs_dd03p>-fieldname OF STRUCTURE <fs_data></P><P> TO <fs_value>.</P><P> IF sy-subrc NE 0.</P><P> CONTINUE.</P><P> ENDIF.</P><P> </P><P> "Validate the Field/Value</P><P> REFRESH: lt_failure_tab[].</P><P> </P><P> </P><P> "Collect the errors</P><P> LOOP AT lt_failure_tab INTO ls_failure_tab.</P><P> CLEAR gs_error_report.</P><P> gs_error_report-type = 'E'.</P><P> gs_error_report-id = ls_failure_tab-arbgb.</P><P> gs_error_report-number = ls_failure_tab-msgnr.</P><P> MESSAGE ID ls_failure_tab-arbgb TYPE 'I' NUMBER ls_failure_tab-msgnr</P><P> WITH ls_failure_tab-msgv1 ls_failure_tab-msgv2</P><P> ls_failure_tab-msgv3 ls_failure_tab-msgv4</P><P> INTO gs_error_report-message.</P><P> gs_error_report-message_v1 = ls_failure_tab-msgv1.</P><P> gs_error_report-message_v2 = ls_failure_tab-msgv2.</P><P> gs_error_report-message_v3 = ls_failure_tab-msgv3.</P><P> gs_error_report-message_v4 = ls_failure_tab-msgv3.</P><P> gs_error_report-parameter = ls_failure_tab-keyvalue.</P><P> gs_error_report-row = lv_row_number.</P><P> gs_error_report-field = ls_failure_tab-fieldname.</P><P> gs_error_report-system = lv_col_number.</P><P> APPEND gs_error_report TO gt_error_report.</P><P> ENDLOOP.</P><P> </P><P> ENDLOOP.</P><P> </P><P> ENDLOOP.</P><P> </P><P> "Check if there are any errors</P><P> IF gt_error_report[] IS NOT INITIAL.</P><P> RETURN.</P><P> ENDIF.</P><P> </P><P> "Local Task for Update</P><P> SET UPDATE TASK LOCAL.</P><P> </P><P> "Modify</P><P> IF p_refr EQ 'X'.</P><P> DELETE FROM (p_table).</P><P> ENDIF.</P><P> </P><P> MODIFY (p_table) FROM TABLE <ft_data>.</P><P> IF sy-subrc EQ 0.</P><P> COMMIT WORK AND WAIT.</P><P> ELSE.</P><P> ROLLBACK WORK.</P><P> ENDIF.</P><P> </P><P>ENDFORM.</P><P>*&---------------------------------------------------------------------*</P><P>*& Form display_report</P><P>*&---------------------------------------------------------------------*</P><P>*& text</P><P>*&---------------------------------------------------------------------*</P><P>*& --> p1 text</P><P>*& <-- p2 text</P><P>*&---------------------------------------------------------------------*</P><P>FORM display_report.</P><P> </P><P> "Local Variables</P><P> TYPE-POOLS: slis.</P><P> DATA: lv_alv_callback_program TYPE sy-repid,</P><P> ls_alv_layout TYPE slis_layout_alv.</P><P> </P><P> lv_alv_callback_program = sy-repid.</P><P> </P><P> ls_alv_layout-zebra = 'X'.</P><P> ls_alv_layout-colwidth_optimize = 'X'.</P><P> </P><P> "Display Report</P><P> IF gt_error_report[] IS INITIAL.</P><P> CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'</P><P> EXPORTING</P><P> i_interface_check = ' '</P><P> i_bypassing_buffer = ' '</P><P> i_buffer_active = ' '</P><P> i_callback_program = lv_alv_callback_program</P><P> i_callback_pf_status_set = ' '</P><P> i_callback_user_command = ' '</P><P> i_callback_top_of_page = ' '</P><P> i_callback_html_top_of_page = ' '</P><P> i_callback_html_end_of_list = ' '</P><P> i_structure_name = p_table</P><P> i_background_id = ' '</P><P> is_layout = ls_alv_layout</P><P> TABLES</P><P> t_outtab = <ft_data></P><P> EXCEPTIONS</P><P> program_error = 1</P><P> OTHERS = 2.</P><P> IF sy-subrc <> 0.</P><P> MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno</P><P> WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.</P><P> ENDIF.</P><P> ELSE.</P><P> CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'</P><P> EXPORTING</P><P> i_interface_check = ' '</P><P> i_bypassing_buffer = ' '</P><P> i_buffer_active = ' '</P><P> i_callback_program = lv_alv_callback_program</P><P> i_callback_pf_status_set = ' '</P><P> i_callback_user_command = ' '</P><P> i_callback_top_of_page = ' '</P><P> i_callback_html_top_of_page = ' '</P><P> i_callback_html_end_of_list = ' '</P><P> i_structure_name = 'BAPIRET2'</P><P> i_background_id = ' '</P><P> is_layout = ls_alv_layout</P><P> TABLES</P><P> t_outtab = gt_error_report</P><P> EXCEPTIONS</P><P> program_error = 1</P><P> OTHERS = 2.</P><P> IF sy-subrc <> 0.</P><P> MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno</P><P> WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.</P><P> ENDIF.</P><P> ENDIF.</P><P> </P><P>ENDFORM.</P><P>*&---------------------------------------------------------------------*</P><P>*& Form initialization</P><P>*&---------------------------------------------------------------------*</P><P>*& text</P><P>*&---------------------------------------------------------------------*</P><P>*& --> p1 text</P><P>*& <-- p2 text</P><P>*&---------------------------------------------------------------------*</P><P>FORM initialization .</P><P> </P><P> "Create dynamic internal table</P><P> CREATE DATA gt_data TYPE TABLE OF (p_table).</P><P> ASSIGN gt_data->* TO <ft_data>.</P><P> </P><P> "Create dynamic work area</P><P> CREATE DATA gs_data TYPE (p_table).</P><P> ASSIGN gs_data->* TO <fs_data>.</P><P> </P><P>ENDFORM.</P><P>Selection Screen :</P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Srilatha1_0-1743736657701.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246591i9FDAB9C433E729D2/image-size/medium?v=v2&px=400" role="button" title="Srilatha1_0-1743736657701.png" alt="Srilatha1_0-1743736657701.png" /></span></P><P> </P><P><STRONG>Key Concepts:</STRONG></P><OL><LI><STRONG>Dynamic Table Creation Based on Structure Name</STRONG>:</LI><UL><LI>The lv_structure_name is used to specify the table's structure dynamically.</LI><LI>CREATE DATA lt_dynamic TYPE TABLE OF (lv_structure_name) dynamically creates a table based on the structure name passed.</LI></UL><LI><STRONG>Appending Data</STRONG>:</LI><UL><LI>In the example, the code simulates inserting data into the dynamic table based on the structure SFLIGHT. You would change this logic depending on the structure of the dynamic table you're working with.</LI></UL><LI><STRONG>Field Symbols</STRONG>:</LI><UL><LI>The field symbols (<fs_dynamic>, <fs_row>) allow you to reference and modify the data dynamically. You modify rows based on conditions, like carrid or connid.</LI></UL><LI><STRONG>Modifying Data</STRONG>:</LI><UL><LI>The MODIFY statement is used to update the rows of the dynamic internal table.</LI></UL></OL><P><STRONG>Conclusion:</STRONG></P><P>Dynamic table updates in SAP ABAP allow you to work with tables whose structures are not known at compile-time. This provides flexibility when dealing with data from various sources or working with user-defined structures. The key challenge is ensuring that the correct structure is used and modifying data efficiently at runtime.</P><P> </P><P> </P><P> </P><P> </P>2025-04-04T05:23:22.969000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/sdt-using-sap-business-transformation-center-end-to-end-process-amp/ba-p/14064861SDT Using SAP Business Transformation Center: End to End Process & Technical Configuration2025-04-04T14:37:07.858000+02:00sunildevandahttps://community.sap.com/t5/user/viewprofilepage/user-id/139545<P><STRONG>Introduction:</STRONG></P><P>SAP Business Transformation Center is a SaaS (software-as-a-service) product from SAP, embedded into SAP Cloud ALM. It is a one-stop shop for customers who want to selectively transition from SAP ERP Central Component (SAP ERP) 6.08 to SAP S/4HANA 2023 or beyond using through SHELL CONVERSION method of SDT. Their target can be either to S/4 HANA on-premises or SAP S/4 HANA private cloud edition under RISE. In general, it is available to all the customer with a valid SAP Service Cloud subscriptions and the SAP Enterprise Support agreement and does not involve any additional license cost for usage.</P><P>In this blog i will show you End-to-End migration process and setup the connectivity between source and target system with SAP Cloud ALM.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo19.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246819iFDBFB0EC6BA2E5B8/image-size/large?v=v2&px=999" role="button" title="Photo19.png" alt="Photo19.png" /></span></P><P><STRONG>Technical System Landscape:</STRONG></P><P>SAP Business Transformation Center is a cloud native application which relies on the following components:</P><UL><LI>The source system, which utilizes the current ST-PI add-on to enable the data transformation with SAP Business Transformation Center.</LI><LI>The SAP S/4HANA system, which contains all necessary subcomponents already shipped within the SAP S/4HANA CORE component.</LI></UL><P>Each system is accessed from the cloud layer using the SAP Cloud Connector. The SAP ECC system and the SAP S/4HANA system are connected via OData service bindings from SAP Business Technology Platform. There is an RFC-based connection between the SAP ECC and the SAP S/4HANA system.</P><P>Source system:<BR />ECC 6.0 EHP 8<BR />OS: SuSE Linux 15.2<BR />DB: SAP ASE 16.0.04.01</P><P>Target system:<BR />Release: SAP S4HANA 2023 FPS02<BR />OS: SuSE Linux 15.5<BR />DB: SAP HANA DB 2.00.081.00.1733303410</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo2.png" style="width: 922px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246752i0CE8FA2D2FCA1301/image-size/large?v=v2&px=999" role="button" title="Photo2.png" alt="Photo2.png" /></span></P><P><STRONG>Target system preparation for BTC:</STRONG></P><P>In a shell conversion scenario, all data from the source SAP ERP system is removed, leaving the system with the customizing data only (Without master and transaction data). This empty shell system is then converted to SAP S/4HANA using SUM DMO. After the completion of the conversion, the selected master and transaction data is then migrated to the newly converted S/4HANA system.</P><P><STRONG>Prerequisites Technical Aspects</STRONG><BR />1. Execution of SAP Readiness Check for conversion<BR />2. Execution of SAP Readiness Check for Usage and Data Profiling<BR />3. Create target system:<BR />a) Creation of a Shell based on customer ECC<BR />b) Conversion of ECC Shell to SAP S/4HANA with SAP SUM and provide as target system</P><P><STRONG>Prerequisites Functional Aspects:</STRONG><BR />A. Following SAP S/4HANA conversion guide (link):<BR />a) Simplification items<BR />b) CVI<BR />c) Custom Code adaption<BR />d) Inconsistencies</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo1.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246751i064F815CECB88759/image-size/large?v=v2&px=999" role="button" title="Photo1.png" alt="Photo1.png" /></span></P><P><STRONG>End-to-End Migration Process and activities in SAP BTC:</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo3.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246753i8842FD8E0794831E/image-size/large?v=v2&px=999" role="button" title="Photo3.png" alt="Photo3.png" /></span></P><P><STRONG>Technical configuration and connectivity of source and target system:</STRONG></P><P>1. Onboarding a New ABAP Source System<BR />a. Technical Prerequisites and Required Add-Ons<BR />b. Required SAP Notes<BR />c. OData Services for Source System<BR />d. Cloud Connector for Source System<BR />e. Connect a Source ABAP System to SAP Cloud ALM<BR />f. Maintenance of Property Store in the Connected Source Systems<BR />g. Additional Technical Prerequisites for Source System<BR />h. Next Steps After Onboarding a Source System</P><P><STRONG>Technical Prerequisites and Required Add-Ons:</STRONG></P><TABLE width="700"><TBODY><TR><TD width="542.896px" height="50px"><P><STRONG>Minimum software component version requirement</STRONG></P></TD><TD width="256.438px" height="50px"><P><STRONG>Our current version</STRONG></P></TD></TR><TR><TD width="542.896px" height="50px"><P>SAP_APPL 618</P></TD><TD width="256.438px" height="50px"><P>SAP_APPL 618 SP15</P></TD></TR><TR><TD width="542.896px" height="50px"><P>ST-PI 740 SP>=24</P></TD><TD width="256.438px" height="50px"><P>ST-PI 740 SP27</P></TD></TR><TR><TD width="542.896px" height="50px"><P>DMIS 2011_1_731 >=SP18</P></TD><TD width="256.438px" height="50px"><P>DMIS 2011_1_731 SP26</P></TD></TR></TBODY></TABLE><P><BR /><STRONG>Required SAP Notes:</STRONG></P><P>3443741 - Collective note for SAP Business Transformation Center<BR />Implement following S-Notes: 3548580</P><P><STRONG>OData Services for Source System:</STRONG></P><P>Activate below O-Data Services in source system-<BR />T-Code: /N/IWFND/MAINT_SERVICE<BR />/BDTS/COMMAND_SRV<BR />/BDTS/INSTALLED_SAP_NOTE_SRV<BR />/BDTS/PRESEL_TAB_DATA_SRV<BR />/BDTS/PRESEL_TAB_READ_NAME_SRV<BR />/BDTS/PRESEL_TASK_IS_CREATED_SRV<BR />/BDTS/PRESEL_TASK_PORTION_SRV<BR />/BDTS/PRESEL_TASK_READ_STATUS_SRV<BR />/BDTS/SOFTWARE_COMPONENT_SRV<BR />/BDTS/TABLE_FIELD_STRUCTUR_SRV<BR /><BR /><STRONG>Cloud Connector for Source System:</STRONG></P><P>1. Install Cloud Connector<BR />2. Connect your SAP Cloud ALM subaccount to the cloud connector<BR />3. Add backend source system in the cloud connector with HTTPS protocol</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo4.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246754iE56F73C14E2CED36/image-size/large?v=v2&px=999" role="button" title="Photo4.png" alt="Photo4.png" /></span></P><P>Connect a Source ABAP System to SAP Cloud ALM:</P><UL><LI>Connect the ABAP system to cloud ALM using the 'Landscape management'</LI><LI>T-Code /SDF/ALM_SETUP</LI><LI>Add endpoint for Business transformation center in the connected system and test the connectivity</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo5.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246755iC3346089833F12E1/image-size/large?v=v2&px=999" role="button" title="Photo5.png" alt="Photo5.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo9.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246760i1305F033F77F9831/image-size/large?v=v2&px=999" role="button" title="Photo9.png" alt="Photo9.png" /></span><BR /><STRONG>Maintenance of Property Store in the Connected Source Systems:</STRONG></P><UL><LI>Execute the /BDTS/ADMIN transaction.</LI><LI>Double-click on the /BDTS/PROPERTIES_SET object, or select this object and click Execute.</LI><LI>In the Property Store Maintenance transaction, you can create, change or delete a property.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo6.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246756iD41D86C9ADB26237/image-size/large?v=v2&px=999" role="button" title="Photo6.png" alt="Photo6.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo7.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246757i1AB7B2944394A2F5/image-size/large?v=v2&px=999" role="button" title="Photo7.png" alt="Photo7.png" /></span></P><P><STRONG>Next Steps After Onboarding a Source System:</STRONG></P><UL><LI>Generate Analysis File:</LI><LI>To generate an analysis file in the SAP ECC System, follow the instructions from SAP Note 3275056</LI><LI>For analysis file implement below two s-note</LI><LI>3112362 - SAP Readiness Check for SAP ERP Usage and Data Profiling</LI><LI>3275056 - SAP Readiness Check for SAP ERP Usage and Data Profiling: Initial Data Migration Profile 2.0</LI><LI>Execute the program <STRONG>RC_UDP_START_DMR2</STRONG> via transaction SA38 in the productive client of the production system to start the analysis</LI><LI>Choose Schedule Analysis to schedule the background job to collect the data.</LI><LI>Once the data collection job is finished, choose the Download DMR2 Analysis Data option from within the program RC_UDP_START_DMR2 to download the analysis data to your local file system.</LI><LI>Upload the analysis file in Cloud ALM</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo8.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246758i5AACD7E344CE486D/image-size/large?v=v2&px=999" role="button" title="Photo8.png" alt="Photo8.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo10.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246761i144D7DBE55F1AE4B/image-size/large?v=v2&px=999" role="button" title="Photo10.png" alt="Photo10.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo11.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246762iC3A839EF89E41523/image-size/large?v=v2&px=999" role="button" title="Photo11.png" alt="Photo11.png" /></span></P><P><STRONG>Run system scan in Cloud ALM:</STRONG></P><P>Like we had scoped the company code and transformation object for SDT, we must also check the relevance of each of the Z object and scope it based on the customer requirement or based on its last Activity after discussing with the object owner. This scoping can be performed using '<STRONG>Select Scanned Table</STRONG>' app as shown below. Please note that any Z table with record count zero is automatically marked as <STRONG><I>out of scope</I></STRONG> by SAP BTC.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo12.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246763i4723AD5DC59D9888/image-size/large?v=v2&px=999" role="button" title="Photo12.png" alt="Photo12.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo13.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246765iC43E738482C2535E/image-size/large?v=v2&px=999" role="button" title="Photo13.png" alt="Photo13.png" /></span></P><P><STRONG>Onboarding of target S/4 HANA Shell to SAP BTC:</STRONG></P><P>Technical Prerequisites and Required Add-Ons<BR />Required SAP Notes<BR />OData Services for Target System<BR />Cloud Connector for Target System<BR />Connect a Target ABAP System to SAP Cloud ALM<BR />Create RFC Destination to SAP ECC Source System<BR />Maintenance of Property Store in the Connected Target System<BR />Save the Upgrade Buffers<BR />Start the Command Daemon<BR />Next Steps After Onboarding a Target System</P><P><STRONG>Technical Prerequisites and Required Add-Ons:</STRONG></P><P>Ensure that the minimum version requirement<BR />S4COREOP 108, with corresponding support package level >=FPS1.<BR />ST-PI >=740, with corresponding support package level >=0024.</P><P><STRONG>Required SAP Notes:</STRONG></P><P>Ensure to apply the SAP note 3443741 in target system.</P><P><STRONG>OData Services for Target System:</STRONG></P><P><SPAN>In the </SPAN><SPAN class="">SAP S/4HANA</SPAN><SPAN> target system, some components from the ST-PI add-on are reused, therefore both OData V2 and V4 services need to be activated.</SPAN></P><P>OData V2 services:<BR />T-Code: /IWFND/MAINT_SERVICES<BR />/BDTS/INSTALLED_SAP_NOTE_SRV<BR />/BDTS/SOFTWARE_COMPONENT_SRV<BR />/BDTS/TABLE_FIELD_STRUCTUR_SRV</P><P>OData V4 services:<BR />T-Code: /IWFND/V4_ADMIN<BR />API_BDTSCOMMAND<BR />API_BDTSDESIGNTIMEENTITY<BR />API_BDTSEXECUTIONPLAN<BR />API_BDTSHEALTHCHECK<BR />API_BDTSMIGRATIONSTATUS<BR />API_BDTSTABLEFIELDSTRUCT<BR />API_BDTSVALUEMAPPINGDATA</P><P><STRONG>Cloud Connector for Target System:</STRONG></P><P>1. Install Cloud Connector<BR />2. Connect your SAP Cloud ALM subaccount to the cloud connector<BR />3. Add backend target system in the cloud connector with HTTPS protocol</P><P><STRONG>Connect a Target ABAP System to SAP Cloud ALM:</STRONG></P><UL><LI>Connect the ABAP system to cloud ALM using the 'Landscape management'</LI><LI>T-Code /SDF/ALM_SETUP</LI><LI>Add endpoint for Business transformation center in the connected system and test the connectivity</LI></UL><P><STRONG>Create RFC Destination to SAP ECC Source System:</STRONG></P><P>Create RFC Destination to SAP ECC Source System in target system and maintain the property store in target as described in Maintenance of Property Store in SAP S/4HANA System.</P><P>This RFC will be used by the migration engine of SAP BTC to pull data packages from the SAP ECC source system and hence must be maintained in the property RfcDestinationSender in t-code bdts_admin-> Select BDTS_PROPERTIES_SET.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo15.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246766iACDE00502D5D0508/image-size/large?v=v2&px=999" role="button" title="Photo15.png" alt="Photo15.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo14.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246767iCDA2FA73084E3FA6/image-size/large?v=v2&px=999" role="button" title="Photo14.png" alt="Photo14.png" /></span></P><P><STRONG>Maintenance of Property Store in the Connected Target System:</STRONG></P><P><STRONG>Save the Upgrade Buffers:</STRONG></P><P>During the shell conversion process, the upgrade buffer of the system was updated and this must be saved</P><OL><LI> Execute the BDTS_ADMIN transaction.</LI><LI> Double-click on BDTS_DMC_SAVE_UPG_TRANS object or select Execute.</LI><LI> Select Save transports from upgrade</LI></OL><P><STRONG>Start the Command Daemon:</STRONG></P><P>To enable the handling of cloud commands on the ABAP side, the Command Daemon must be activated</P><OL><LI>Execute the BDTS_ADMIN transaction.</LI><LI>Double-click on BDTS_CMD_WDOG_START object or select it and click Execute.</LI><LI>Enter BDTS_T_DAE as the daemon user (or whatever you set up for this task) and set the frequency. The recommended frequency to use is 1.000 milliseconds.</LI><LI>In case the daemon is already running, a corresponding notification is issued.</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo16.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246771iF8653EC4F3D06F09/image-size/large?v=v2&px=999" role="button" title="Photo16.png" alt="Photo16.png" /></span></P><P><STRONG>Next Steps After Onboarding a Target System:</STRONG></P><P>Now that your target system is onboarded, you can run a final check from the BDTS_ADMIN transaction with the BDTS_ADM_SETUP_CHECK health check, as described in Health Checks. This setup check runs health checks that are specific for the setup.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo18.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246815i9E7E29AA6D326587/image-size/large?v=v2&px=999" role="button" title="Photo18.png" alt="Photo18.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo17.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246816i3B298C1B96752BDB/image-size/large?v=v2&px=999" role="button" title="Photo17.png" alt="Photo17.png" /></span></P><P>In this way we can prepare and stablished the connectivity for source and target system with SAP Cloud ALM.</P><P><STRONG>Next steps after the technical configuration-</STRONG></P><P>Create digital blueprint<BR />Create transformation model and version<BR />Create cycle and Run cycle</P><P><SPAN>Once we create a version of transformation model from the blueprint and connect it to the source ECC system and target S/4 HANA system, it triggers the application data migration from source to the target. It happens in 4 phases as shown below.</SPAN></P><P><SPAN>PHASE 1: CYCLE PREVALIDATION (UPTIME)<BR />PHASE 2: CYCLE PREPARATION (UPTIME)<BR />PHASE 3: RUN CYCLES (DOWNTIME)<BR />PHASE 4: POSTPROCESS CYCLE (DOWNTIME)</SPAN></P><P>All these phases can be managed using the "<EM><STRONG>Manage Cycle</STRONG></EM>" app in SAP BTC.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo20.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246824i28A24C53C314F7FB/image-size/large?v=v2&px=999" role="button" title="Photo20.png" alt="Photo20.png" /></span></P><P><STRONG>1.Cycle Prevalidation:</STRONG></P><P><SPAN>During the "Cycle prevalidation" phase, several prerequisites of the connected systems are examined. Making sure there is no business data on the target S/4 HANA shell system. Any problems found are recorded in the cycle log as indicated, and they can be carried out repeatedly until this phase turns green.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo21.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246825i7B6B1E48DB316044/image-size/large?v=v2&px=999" role="button" title="Photo21.png" alt="Photo21.png" /></span></P><P><STRONG>2. Cycle Preparation:</STRONG></P><P><SPAN>In '<STRONG>Cycle preparation</STRONG>' phase, the actual preparation and configuration of the migration engine takes place. This phase runs as a part of uptime phase and runs before the cutover. This step along with initial step up, also covers transformation rule creation, sub-transformation object creation and validation followed by the postprocessing items creation. </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo22.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246826i8BA1181534019D9C/image-size/large?v=v2&px=999" role="button" title="Photo22.png" alt="Photo22.png" /></span></P><P><STRONG>3. Run Cycles:</STRONG></P><P><SPAN>Based on the specified and scoped elements in the transformation model, the third phase, "Run Cycles," involves the actual physical data migration to the target S/4 SHELL.<BR /></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo23.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246827i6DAF2CEBDAED8076/image-size/large?v=v2&px=999" role="button" title="Photo23.png" alt="Photo23.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo26.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246834i82A2EDDD2FA56844/image-size/large?v=v2&px=999" role="button" title="Photo26.png" alt="Photo26.png" /></span></P><P><STRONG>4. Postprocess Cycles:</STRONG></P><P><SPAN>In the final step of "<STRONG>Post-processing</STRONG>", all the data that was transferred directly at database table level gets converted into SAP S/4 HANA model. Like all phases, logging is available which enables us to view the progress at a granular level.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo24.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246829i716CFAA8A0F9E7F0/image-size/large?v=v2&px=999" role="button" title="Photo24.png" alt="Photo24.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Photo25.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/246833i0CAA7E829E2C0473/image-size/large?v=v2&px=999" role="button" title="Photo25.png" alt="Photo25.png" /></span></P><P>This blog covers End to End Process & Technical Configuration for SDT using SAP BTC.</P><P>Thanks for reading!</P>2025-04-04T14:37:07.858000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/rap-managed-vs-unmanaged-rap/ba-p/14067526RAP: MANAGED VS UNMANAGED RAP2025-04-08T10:33:54.672000+02:00Arunagirish1https://community.sap.com/t5/user/viewprofilepage/user-id/889803<P><STRONG>Managed RAP</STRONG><BR />• Greenfield Implementation<BR />• CRUD operations are handled by the framework.<BR />• Transactional buffer is managed by the framework.<BR />• The framework takes care of the save sequence.</P><P><BR /><STRONG>Unmanaged RAP</STRONG><BR />• Brownfield Implementation<BR />• CRUD requires custom implementation.<BR />• Transactional buffer is managed with a global singleton/static class.<BR />• Custom save sequence logic must be written.</P><P><BR /><STRONG>Managed with Unmanaged Save:</STRONG><BR />• The interactive phase remains the same, but the save sequence is handled by the developer.<BR />• Transactional buffer is managed by RAP architecture.<BR />• No persistence table in unmanaged save.</P><P><BR /><STRONG>Additional Save (Enhancing Managed RAP)</STRONG><BR />• Allows developers to implement additional steps for the save logic of a managed RAP BO,<BR />enhancing the standard save sequence.<BR />• Can have a persistence table, as the RAP framework takes care of persisting to the database.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Arunagirish1_0-1743925295605.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/247346i6CBD0B30559DEF75/image-size/large?v=v2&px=999" role="button" title="Arunagirish1_0-1743925295605.png" alt="Arunagirish1_0-1743925295605.png" /></span></P><P><STRONG>Restrictions:</STRONG><BR />You can’t use a BAPI with a commit statement, as the RAP LUW takes care of commit and<BR />rollback. Additionally, there’s no persistence table in Unmanaged Save, as the developer writes their<BR />own logic for persisting. Please refer to the attachment for complete restrictions.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Arunagirish1_1-1743925377318.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/247347i1F05CF0987449BD7/image-size/large?v=v2&px=999" role="button" title="Arunagirish1_1-1743925377318.png" alt="Arunagirish1_1-1743925377318.png" /></span></P><P>When using a function module (on-premise), always create a wrapper around it and<BR />release it with C1 to maintain cloud compatibility.</P><P><BR /><STRONG>Best Practices & Recommendations</STRONG>:<BR />• Managed RAP with Unmanaged Save is often the recommended option, combining the best<BR />of both approaches.<BR />• Unmanaged RAP should usually be a last resort.</P><P><BR /><STRONG>Key Use Cases:</STRONG><BR />• No Custom Code: Go for Managed RAP.<BR />• Need to Utilize Update Function Module: opt for Managed RAP with Unmanaged Save.<BR />• Reusable Code/Loose Coupling with Pre-existing Functionality: Choose Unmanaged<BR />RAP.<BR />• Consume Custom APIs (on-premise) in BTP: Use Custom Entities + Unmanaged RAP.<BR />• Unmanaged Queries: Combine Custom Entities + Unmanaged RAP.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Arunagirish1_3-1743925753359.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/247349i3DA0C69A93D319F3/image-size/large?v=v2&px=999" role="button" title="Arunagirish1_3-1743925753359.png" alt="Arunagirish1_3-1743925753359.png" /></span></P><P> </P><P> </P><P> </P>2025-04-08T10:33:54.672000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/unleashing-the-power-of-aster-scripting-your-way-to-enhanced-sap/ba-p/14074174Unleashing the Power of ASTER: Scripting Your Way to Enhanced SAP Integration Testing2025-04-13T08:00:00.015000+02:00MichalKrawczykhttps://community.sap.com/t5/user/viewprofilepage/user-id/45785<H2 id="toc-hId-1708311140">What is ASTER?</H2><P>ASTER stands for "Another Syntax Tree Expression Runtime." But what does that really mean? Essentially, ASTER is a scripting language that allows you to go beyond standard configuration-based data manipulation and validation within Int4 Suite. It provides a syntax tree execution runtime, enabling you to handle complex scenarios and edge cases with greater ease and efficiency.<BR /><BR />Think of it this way: while Int4 Suite's configuration-based engine is incredibly robust and serves the majority of testing needs brilliantly, ASTER offers an additional layer of flexibility for those unique, intricate situations. It's not meant to replace the existing, proven methods but rather to enhance them, providing you with a powerful tool for advanced features.</P><H2 id="toc-hId-1511797635"><STRONG>Why ASTER? The Story Behind the Script</STRONG></H2><P>Int4 Suite has a well-deserved reputation for its strong configuration-based data manipulation and validation engine. It has been instrumental in supporting large-scale cloud integration migrations. However, as with any powerful tool, there are always scenarios that push the boundaries.<BR /><BR />We began to notice recurring questions and challenges from our users, particularly around variable manipulation and complex validations. "Is it possible to concatenate variables?" "How can we handle this specific edge case?" These questions spurred us to think beyond the existing configuration options.<BR /><BR />The turning point came with a particularly demanding validation scenario presented by a customer. It became clear that we needed a solution that could enable more than just what configuration alone could provide. That's when the idea for ASTER began to take shape. What started as a small concept evolved into a significant addition to the Int4 Suite, designed to empower users with the ability to script their own solutions.</P><H2 id="toc-hId-1315284130"><STRONG>The Technology Behind ASTER</STRONG></H2><P>ASTER is built on a solid foundation of ABAP classes. The parsing and execution of the ASTER script occur in a safe and isolated environment, ensuring that your scripting activities don't interfere with the underlying ABAP server environment. This isolation means you can confidently use ASTER without worrying about unintended side effects.</P><H3 id="toc-hId-1247853344"><STRONG>Key Features of ASTER</STRONG></H3><UL><LI><STRONG>Syntax Tree Execution:</STRONG> ASTER utilizes a syntax tree approach, which is a common technique in language design. This allows for efficient parsing and evaluation of expressions, even complex ones.</LI><LI><STRONG>Dynamic Typing:</STRONG> ASTER is dynamically typed, meaning you don't have to worry about declaring data types. This simplifies scripting and makes it more accessible.</LI><LI><STRONG>Arithmetic and String Manipulation:</STRONG> ASTER supports basic arithmetic operations, string manipulation, and boolean logic, providing you with the tools you need for a wide range of tasks.</LI><LI><STRONG>User-Defined Functions:</STRONG> You can build your own functions in ASTER, allowing you to create reusable code and tailor the language to your specific needs.</LI><LI><STRONG>Integration with Int4 Suite:</STRONG> ASTER seamlessly integrates with Int4 Suite features. You can access test case execution data, payloads, set variables, and more, making it a powerful tool for enhancing your testing workflows.</LI><LI><STRONG>Safe and Isolated Environment:</STRONG> ASTER scripts are executed in a safe and isolated environment, ensuring that they don't interfere with the underlying ABAP server.</LI></UL><H2 id="toc-hId-922257120"><BR /><STRONG>Getting Started with ASTER</STRONG></H2><P>ASTER is designed to be intuitive and easy to learn, especially if you have some familiarity with other programming languages. We've drawn inspiration from popular languages to make the syntax familiar and accessible.</P><H3 id="toc-hId-854826334"><BR /><STRONG>Where to Play with ASTER</STRONG></H3><P>In the upcoming Int4 Suite 3.11 release, you'll find a new tile called "Scripts" within the Int4 tiles. This tile will provide access to a script management interface and a user-friendly editor. The editor, based on the open-source Ace editor, has been extended to support ASTER syntax, including syntax highlighting and code completion. This makes writing and debugging ASTER scripts a breeze.</P><P><STRONG>Basic Concepts</STRONG></P><UL><LI><STRONG>Expressions:</STRONG> ASTER primarily works with expressions. An expression is a piece of code that evaluates to a value. This could be a simple arithmetic calculation, a string, or a more complex operation.</LI><LI><STRONG>Variables:</STRONG> You can use variables in ASTER to store and manipulate data. Variables don't need to be explicitly declared; you can simply assign a value to a variable and start using it.</LI><LI><STRONG>Semicolons:</STRONG> Use semicolons to separate multiple expressions on a single line.</LI><LI><STRONG>Output:</STRONG> The output of an ASTER script is the result of the last evaluated expression.</LI></UL><P><STRONG>Example: Hello World</STRONG><BR /><BR />Here's a simple "Hello World" example in ASTER:</P><P>"Hello World";</P><P>When you run this script, the output will be "Hello World."<BR /><BR /><STRONG>Beyond Hello World</STRONG><BR /><BR />Of course, ASTER can do much more than just print "Hello World." You can perform arithmetic calculations, manipulate strings, work with variables, and build complex logic as shown in Figure below.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="MichalKrawczyk_1-1744473490004.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/250034iA34B0A67F424F7A9/image-size/large?v=v2&px=999" role="button" title="MichalKrawczyk_1-1744473490004.png" alt="MichalKrawczyk_1-1744473490004.png" /></span></P><H2 id="toc-hId-529230110"><STRONG>Extending Int4 Suite with ASTER</STRONG></H2><P>One of the most exciting aspects of ASTER is its ability to extend the capabilities of Int4 Suite. You can use ASTER to:</P><UL><LI><STRONG>Perform complex data validations:</STRONG> Validate data based on calculations, comparisons, and logical operations.</LI><LI><STRONG>Manipulate data:</STRONG> Transform and manipulate data in ways that are not possible with standard configuration.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="MichalKrawczyk_2-1744473490012.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/250035iA23C14C9CCEFA525/image-size/large?v=v2&px=999" role="button" title="MichalKrawczyk_2-1744473490012.png" alt="MichalKrawczyk_2-1744473490012.png" /></span></P><UL><LI><STRONG>Handle edge cases:</STRONG> Address unique and intricate scenarios that require custom logic.</LI><LI><STRONG>Automate tasks:</STRONG> Automate repetitive tasks and streamline your testing workflows.</LI></UL><P>Using the Aster script is done directly in the payload processing tab of Automation Objects as shown in the Figure below.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="MichalKrawczyk_3-1744473490023.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/250037i14C9440E51E9BDCF/image-size/large?v=v2&px=999" role="button" title="MichalKrawczyk_3-1744473490023.png" alt="MichalKrawczyk_3-1744473490023.png" /></span></P><H2 id="toc-hId-332716605"><STRONG>The Future of ASTER</STRONG></H2><P>We believe that ASTER has the potential to revolutionize how you approach integration testing with Int4 Suite. We're committed to continuously improving ASTER and adding new features based on your feedback.</P><H2 id="toc-hId-136203100">Kudos</H2><P>Special Kudos to our two members of our Int4 Suite Product Team - Marcin Galczynski and Tomasz Mackowski for making ASTER happen! </P><H2 id="toc-hId--60310405"><STRONG>Conclusion</STRONG></H2><P>ASTER is a powerful new scripting language that brings enhanced flexibility and precision to integration testing with Int4 Suite. It allows you to handle complex scenarios, manipulate data, and automate tasks with greater ease. We encourage you to explore ASTER and discover the possibilities it unlocks for your testing workflows.<BR /><BR />Stay tuned for the release of Int4 Suite 3.11 and get ready to unleash the power of ASTER!<BR />I hope this blog post meets your needs! Let me know if you'd like any adjustments or further assistance.</P>2025-04-13T08:00:00.015000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/performance-comparison-filter-vs-loop-vs-for/ba-p/14073954Performance comparison: FILTER vs LOOP vs FOR2025-04-16T12:06:26.335000+02:00Michał_Biegunhttps://community.sap.com/t5/user/viewprofilepage/user-id/168342<P><SPAN>Recently, I needed to move lines from one table to another. I decided to check which method is the fastest (most performant). Below is my analysis — but first, a few comments on the methodology.</SPAN></P><P> </P><H1 id="toc-hId-1579206256"><SPAN>Methodology</SPAN></H1><OL><LI><P><SPAN>When comparing how AS ABAP processes a set of data (in particular, a table), I realized that the method executed first is always slower. Therefore, I use </SPAN><FONT face="courier new,courier"><SPAN>run_dummy()</SPAN></FONT><SPAN> to eliminate this issue.</SPAN></P></LI><LI><P><SPAN>I use </SPAN><FONT face="courier new,courier"><SPAN>DO n TIMES</SPAN></FONT><SPAN> for the same reason. If I called each method only once, the first one would take twice as much time as the second (proof at the end of the blog).</SPAN></P></LI><LI><P><SPAN>I ran each test multiple times and present here the results that consistently occurred.</SPAN></P></LI><LI><P><SPAN>First, I tested with a sorted table using a unique key, and then with a standard table without a key. Without a key, I couldn’t use </SPAN><FONT face="courier new,courier"><SPAN>FILTER</SPAN></FONT><SPAN>.</SPAN></P></LI><LI><P><SPAN>The first set of tests was performed on ECC 7.5. The second was repeated on BTP Steampunk, although with a different table type (VBRP and SFLIGHT), so direct comparison of results from ECC and BTP is impossible.</SPAN></P></LI></OL><P> </P><H1 id="toc-hId-1382692751"><SPAN>ECC tests</SPAN></H1><P><SPAN>Just paste this into any report and it should run. In the second case, the key definition and the </SPAN><FONT face="courier new,courier">run_filter()</FONT><SPAN> method were removed.</SPAN></P><pre class="lia-code-sample language-abap"><code>CLASS main DEFINITION CREATE PUBLIC.
PUBLIC SECTION.
constants runs TYPE i VALUE 1000.
METHODS: constructor,
run_dummy,
run_loop,
run_for,
run_filter.
PRIVATE SECTION.
DATA all_items TYPE SORTED TABLE OF vbrp WITH UNIQUE KEY vbeln posnr.
ENDCLASS.
CLASS main IMPLEMENTATION.
METHOD constructor.
SELECT * FROM vbrp UP TO 20000 ROWS
INTO TABLE _items
ORDER BY vbeln DESCENDING.
ENDMETHOD.
METHOD run_dummy.
LOOP AT all_items ASSIGNING FIELD-SYMBOL(<item>).
ENDLOOP.
ENDMETHOD.
METHOD run_for.
DATA: selected_items TYPE TABLE OF vbrp.
selected_items = VALUE #( FOR item IN all_items
WHERE ( vbeln = '0080011871' )
( item )
).
ENDMETHOD.
METHOD run_loop.
DATA: selected_items TYPE TABLE OF vbrp.
LOOP AT all_items ASSIGNING FIELD-SYMBOL(<item>) WHERE vbeln = '0080011871'.
APPEND <item> TO selected_items.
ENDLOOP.
ENDMETHOD.
METHOD run_filter.
DATA: selected_items TYPE TABLE OF vbrp.
selected_items = FILTER #( all_items USING KEY primary_key WHERE vbeln = '0080011871' ).
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA(main) = new main( ).
do main->runs TIMES.
main->run_dummy( ).
ENDDO.
do main->runs TIMES.
main->run_loop( ).
ENDDO.
do main->runs TIMES.
main->run_filter( ).
ENDDO.
do main->runs TIMES.
main->run_for( ).
ENDDO.
ENDCLASS.</code></pre><H2 id="toc-hId-1315261965">Results: sorted table, 1000 executions</H2><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Micha_Biegun_0-1744417035935.png" style="width: 536px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/249960iFEE9C275934B8580/image-dimensions/536x145?v=v2" width="536" height="145" role="button" title="Micha_Biegun_0-1744417035935.png" alt="Micha_Biegun_0-1744417035935.png" /></span></P><P>I've made about a dozen runs. This result is representative of all of them (they didn't differ). <FONT face="courier new,courier">LOOP</FONT> is always the fastest, but FILTER is always right behind (difference is insignificant). <FONT face="courier new,courier">VALUE FOR</FONT> however is 50% slower.</P><H2 id="toc-hId-1118748460">Results: standard table, 1000 executions</H2><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Micha_Biegun_1-1744417133596.png" style="width: 537px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/249961i0CFA606B0CBED031/image-dimensions/537x153?v=v2" width="537" height="153" role="button" title="Micha_Biegun_1-1744417133596.png" alt="Micha_Biegun_1-1744417133596.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Micha_Biegun_2-1744417144037.png" style="width: 538px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/249962iB044B677947C9684/image-dimensions/538x129?v=v2" width="538" height="129" role="button" title="Micha_Biegun_2-1744417144037.png" alt="Micha_Biegun_2-1744417144037.png" /></span></P><P><SPAN>I've made probably about 30 test runs. Results varied slightly but all of them can be summed up to two trends presented above.</SPAN></P><P><SPAN>Initially, </SPAN><FONT face="courier new,courier">LOOP</FONT><SPAN> was faster. A few minutes later, </SPAN><FONT face="courier new,courier">FOR</FONT><SPAN> overtook it, only to lose its lead again later. I have no idea what caused this fluctuation. In any case, the difference between both methods is minimal.</SPAN></P><P> </P><H1 id="toc-hId-793152236">BTP Steampunk Test</H1><P><SPAN>This test used a different table: the all-time favorite </SPAN><FONT face="courier new,courier">/DMO/FLIGHT</FONT><SPAN>. Unfortunately, my BTP version doesn’t offer performance profiling (trace), so I had to use timestamps, which might introduce small measurement errors.</SPAN></P><pre class="lia-code-sample language-abap"><code>CLASS ycl_test_loops DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
CONSTANTS runs TYPE i VALUE 1000.
PRIVATE SECTION.
DATA: all_items TYPE STANDARD TABLE OF /dmo/flight WITH NON-UNIQUE SORTED KEY ki COMPONENTS connection_id,
connid TYPE /dmo/connection_id VALUE '0407'.
METHODS: prepare_data,
run_dummy,
run_loop,
run_for,
run_filter.
ENDCLASS.
CLASS ycl_test_loops IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
DATA: start TYPE timestampl,
end TYPE timestampl.
me->prepare_data( ).
GET TIME STAMP FIELD start.
DO runs TIMES.
me->run_dummy( ).
ENDDO.
GET TIME STAMP FIELD end.
out->write( |dummy: { end - start }| ).
GET TIME STAMP FIELD start.
DO runs TIMES.
me->run_loop( ).
ENDDO.
GET TIME STAMP FIELD end.
out->write( |loop: { end - start }| ).
GET TIME STAMP FIELD start.
DO runs TIMES.
me->run_for( ).
ENDDO.
GET TIME STAMP FIELD end.
out->write( |for: { end - start }| ).
GET TIME STAMP FIELD start.
DO runs TIMES.
me->run_filter( ).
ENDDO.
GET TIME STAMP FIELD end.
out->write( |filter: { end - start }| ).
ENDMETHOD.
METHOD prepare_data.
DO 500 TIMES. "I have only 40 entries in DB, so 40 * 500 gives me 20k entries
SELECT * FROM /dmo/flight
APPENDING TABLE _items.
ENDDO.
ENDMETHOD.
METHOD run_dummy.
LOOP AT all_items ASSIGNING FIELD-SYMBOL(<item>).
ENDLOOP.
ENDMETHOD.
METHOD run_filter.
DATA: selected_items TYPE TABLE OF /dmo/flight.
selected_items = FILTER #( all_items USING KEY ki WHERE connection_id = connid ).
ENDMETHOD.
METHOD run_for.
DATA: selected_items TYPE TABLE OF /dmo/flight.
selected_items = VALUE #( FOR item IN all_items USING KEY ki
WHERE ( connection_id = connid )
( item )
).
ENDMETHOD.
METHOD run_loop.
DATA: selected_items TYPE TABLE OF /dmo/flight.
LOOP AT all_items ASSIGNING FIELD-SYMBOL(<item>) USING KEY ki
WHERE connection_id = connid.
APPEND <item> TO selected_items.
ENDLOOP.
ENDMETHOD.
ENDCLASS.</code></pre><H2 id="toc-hId-725721450"><SPAN>Results: Standard Table, 1000 Executions</SPAN></H2><P><SPAN>The results are in seconds.</SPAN></P><pre class="lia-code-sample language-abap"><code>dummy: 3.5287930
loop: 1.3220800
for: 1.3824890
dummy: 3.5545590
loop: 1.3494420
for: 1.3473680</code></pre><P> As in ECC, there’s no noticeable difference between <FONT face="courier new,courier">LOOP</FONT> and <FONT face="courier new,courier">VALUE FOR</FONT>.</P><H2 id="toc-hId-529207945"><SPAN>Results: Sorted key, 1000 Executions</SPAN></H2><P><SPAN>The results are in seconds.</SPAN></P><pre class="lia-code-sample language-abap"><code>dummy: 3.5353230
loop: 0.4449050
for: 0.5068880
filter: 0.0389550
dummy: 3.5583420
loop: 0.4789230
for: 0.4469660
filter: 0.0380170
dummy: 3.4402150
loop: 0.4193350
for: 0.4578140
filter: 0.0394450</code></pre><P><SPAN>Here things get interesting. Again, </SPAN><FONT face="courier new,courier">FOR</FONT> and <FONT face="courier new,courier">LOOP</FONT> are very close — but what shocked me is that <FONT face="courier new,courier">FILTER</FONT> is <STRONG>10x faster</STRONG>!<SPAN> If anyone could double-check my results, please let me know in the comments if I made a mistake.</SPAN></P><P> </P><H1 id="toc-hId-203611721"><SPAN>Conclusions</SPAN></H1><H3 id="toc-hId-265263654">On ECC with sorted keys:</H3><UL><LI>LOOP was consistently the fastest,</LI><LI>FILTER was nearly as fast — arguably equivalent,</LI><LI>VALUE FOR was 50% slower (still acceptable, but noticeably slower)</LI></UL><H3 id="toc-hId-68750149">On BTP with sorted keys:</H3><UL><LI><P>LOOP and FOR perform almost identically.</P></LI><LI>FILTER is in a league of its own, being over <STRONG>10 times faster</STRONG>.</LI></UL><H3 id="toc-hId--202994725"><SPAN>Others:</SPAN></H3><P><SPAN>When working with standard tables, there’s virtually no difference between </SPAN>LOOP and VALUE FOR. On BTP, LOOP is slightly better.</P><P><SPAN>Using a sorted key reduced search time by ~20–30x on ECC, and ~3x on BTP. On BTP, combining a</SPAN> sorted key with FILTER reduced execution time by a factor of 45.</P><P>Interestingly, the SELECT operation is not affected by the key definition — so initializing the sorted key costs nothing. Naturally, modifying the table means the key must be rebuilt, which adds overhead. But if <FONT face="courier new,courier">all_items</FONT> is read-only, a sorted key makes a massive difference.</P><P><SPAN>It’s clear that performance optimizations differ between systems. You can’t write code that’s optimal for both ECC and BTP. And it’s not just about DB storage types — even pure ABAP operations behave differently. On BTP (and likely in all ABAP Cloud environments), </SPAN><FONT face="courier new,courier">FILTER</FONT><SPAN> is a game changer. On ECC, it offers little to no advantage—aside from its more concise syntax. </SPAN></P><P> </P><H1 id="toc-hId-187297784"><SPAN>Discussion</SPAN></H1><P>I see no value in the VALUE FOR statement (pun intended). Its syntax is unintuitive and has too many brackets. Also, it’s not debuggable, which makes troubleshooting more complex scenarios a pain in the...</P><P>VALUE requires a static type (# is statically derived from context), whereas LOOP supports dynamic types determined at runtime (using field symbols and ASSIGN COMPONENT). In general, we should prefer static typing, but cases where it has to be used, LOOP remains the only way.</P><P>FILTER has a clear and concise syntax and is shorter than LOOP. Most importantly, it's significantly faster in ABAP Cloud. It forces us to use sorted keys, while LOOP allows us to be lazy.</P><P>On ECC, I used a sorted table. On Steampunk, I used a standard table with a sorted key — so some differences might stem from this.</P><H2 id="toc-hId--302618728">Proof for Point 2 in Methodology</H2><P>For standard tables, running a tested method only once causes results to heavily depend on the order of method calls — even if <FONT face="courier new,courier">run_dummy()</FONT> is used:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Micha_Biegun_0-1744568216811.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/250172iE3CDA0ED5104EE2F/image-size/medium?v=v2&px=400" role="button" title="Micha_Biegun_0-1744568216811.png" alt="Micha_Biegun_0-1744568216811.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Micha_Biegun_1-1744568227052.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/250173i03EBEDEFAA5215A5/image-size/medium?v=v2&px=400" role="button" title="Micha_Biegun_1-1744568227052.png" alt="Micha_Biegun_1-1744568227052.png" /></span></P><P>Someone once said: "The last shall be first, and the first last" ;).</P><P>Anyways, when testing performance, be careful not to be fooled by call order.</P>2025-04-16T12:06:26.335000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/abap-cloud-landing-page-in-abap-development-tools-adt/ba-p/14079929ABAP Cloud Landing Page in ABAP Development Tools (ADT)2025-04-19T08:05:51.235000+02:00pavankumar_reddy90https://community.sap.com/t5/user/viewprofilepage/user-id/189954<P><STRONG><SPAN class=""><SPAN class="">I am an ABAP developer How can I learn about ABAP Cloud?</SPAN></SPAN></STRONG><SPAN class=""><STRONG> </STRONG><BR /></SPAN></P><P><STRONG><SPAN>"Learn About ABAP Cloud Landing Page"</SPAN></STRONG><SPAN> in ADT is one way of learning. The ABAP Cloud Landing Page serves as a comprehensive gateway that caters to developers across all proficiency levels - from newcomers to seasoned ABAP experts. </SPAN></P><P><SPAN>This centralized platform offers a meticulously organized collection of SAP-validated, trusted, repository, resources, making it effortless to navigate through essential information. The page features distinct sections including "Get Started," "ABAP Cloud wizards for each Development Scenarios," documentation links, Roadmaps, What's New Information, available tutorials, ensuring a smooth learning journey.</SPAN><SPAN> </SPAN></P><P><STRONG>How to navigate to Learn About ABAP Cloud Landing Page in ADT?<BR /></STRONG>ADT (ABAP in Eclipse )->Select Project -> Help -> Learn About About ABAP Cloud</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_0-1744975730313.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252381iF98DC7AE49043600/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_0-1744975730313.png" alt="pavankumar_reddy90_0-1744975730313.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_1-1744975893190.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252382iD7D7A6279A7F4132/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_1-1744975893190.png" alt="pavankumar_reddy90_1-1744975893190.png" /></span></P><P>This page features several sections:</P><OL><LI>Get Started</LI><LI>News</LI><LI>Transactional Apps</LI><LI>Analytical Apps</LI><LI>Integration Services</LI><LI>More about cloud development Concepts.</LI></OL><P><STRONG>1. Get Started - Learn More Section</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_3-1744976494662.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252384i0A1C233F06330513/image-size/medium?v=v2&px=400" role="button" title="pavankumar_reddy90_3-1744976494662.png" alt="pavankumar_reddy90_3-1744976494662.png" /></span></P><P>When you click on "<STRONG>Learn more</STRONG>" it navigate to SAP help documentation where you get the most important information about ABAP Cloud in one page.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_4-1744977933161.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252389iAAEA487826865E63/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_4-1744977933161.png" alt="pavankumar_reddy90_4-1744977933161.png" /></span></P><P><STRONG>1.1. Get Started - Resources</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_6-1744978045261.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252391i2AD9E335E5C79AFB/image-size/medium?v=v2&px=400" role="button" title="pavankumar_reddy90_6-1744978045261.png" alt="pavankumar_reddy90_6-1744978045261.png" /></span></P><P>The resource overview includes documentation which provides detailed technical information about ABAP, tutorials that guide users through specific tasks or processes, blog posts that offer insights and tips from experienced users and developers, and videos that visually explain and demonstrate ABAP concepts and programming techniques. </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_0-1744991135682.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252472i5EBAD2AA662A97F6/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_0-1744991135682.png" alt="pavankumar_reddy90_0-1744991135682.png" /></span></P><P>You will also find "Resources" in every section where corresponding blogs, how to guides, tutorials, events sessions are linked accordingly.</P><P>2. <STRONG>News - Roadmap</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_2-1744992987020.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252483iEC7FAFAFAAABA815/image-size/medium?v=v2&px=400" role="button" title="pavankumar_reddy90_2-1744992987020.png" alt="pavankumar_reddy90_2-1744992987020.png" /></span></P><P><SPAN>News Roadmap section gives about the ABAP Cloud roadmap, planned and upcoming features across all solutions that offer ABAP Cloud.<BR /></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_1-1744991986597.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252475iFE57143245A335E1/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_1-1744991986597.png" alt="pavankumar_reddy90_1-1744991986597.png" /></span></P><P><STRONG>3. Transactional Apps - Open Generators </STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_3-1744993267192.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252484iEEC28192C9B6EF31/image-size/medium?v=v2&px=400" role="button" title="pavankumar_reddy90_3-1744993267192.png" alt="pavankumar_reddy90_3-1744993267192.png" /></span></P><P>Generators help you to develop transactional applications with low code. Through wizard in ADT you can develop a transaction applications.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_4-1744993429986.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252485i165C3C175823D7BD/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_4-1744993429986.png" alt="pavankumar_reddy90_4-1744993429986.png" /></span></P><P><STRONG>Learn More Section </STRONG></P><P>Learn More section navigates to help documentation for how to develop transactional, analytical and Integration services in ABAP Cloud.</P><P><STRONG>4. Analytical Apps</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_0-1745036917092.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252522iF33BA821572E72DD/image-size/medium?v=v2&px=400" role="button" title="pavankumar_reddy90_0-1745036917092.png" alt="pavankumar_reddy90_0-1745036917092.png" /></span></P><P>In this section you will find help documentation and resources related to how develop analytical apps in ABAP Cloud.</P><P><STRONG>5. Integration Services - Open Generators</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_3-1745037156119.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252525iB06B6B83263233B3/image-size/medium?v=v2&px=400" role="button" title="pavankumar_reddy90_3-1745037156119.png" alt="pavankumar_reddy90_3-1745037156119.png" /></span></P><P>Click Open Generators -> Choose a Project from Project Select -> Click OK</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_1-1745037055592.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252523i3DCABEB5A7EAC0E5/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_1-1745037055592.png" alt="pavankumar_reddy90_1-1745037055592.png" /></span>Generators help you to develop Integration services with low code. </P><P><STRONG>6 More Section</STRONG></P><P><STRONG>Localization and Internalization</STRONG></P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_5-1745037437697.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252527i528AB65F851C5031/image-size/medium?v=v2&px=400" role="button" title="pavankumar_reddy90_5-1745037437697.png" alt="pavankumar_reddy90_5-1745037437697.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_0-1745041831854.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252538i4EC60DB206BCAC0E/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_0-1745041831854.png" alt="pavankumar_reddy90_0-1745041831854.png" /></span></P><P><SPAN>This sections given information about how apps and services can be translated and adapted to country/region-specific requirements.</SPAN></P><P><STRONG>Access Management</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_6-1745037615597.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252528i1854F6DA9258BBF7/image-size/medium?v=v2&px=400" role="button" title="pavankumar_reddy90_6-1745037615597.png" alt="pavankumar_reddy90_6-1745037615597.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_1-1745041892953.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252539i6192DEE7C65C0E34/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_1-1745041892953.png" alt="pavankumar_reddy90_1-1745041892953.png" /></span></P><P>This section gives <SPAN>a overview of the important points about identity and access management considerations for SAP S/4HANA Cloud, public edition and SAP BTP, ABAP environment.</SPAN></P><P><STRONG>Extensibility:</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_7-1745037784843.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252529i8524345288152089/image-size/medium?v=v2&px=400" role="button" title="pavankumar_reddy90_7-1745037784843.png" alt="pavankumar_reddy90_7-1745037784843.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_2-1745041948301.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252540iFB68C849680AA5C7/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_2-1745041948301.png" alt="pavankumar_reddy90_2-1745041948301.png" /></span></P><P>This section give information about extensibility options in ABAP Cloud such as:</P><OL><LI><SPAN>Key User Extensibility</SPAN></LI><LI><SPAN>Developer Extensibility</SPAN></LI><LI><SPAN>Side-by-Side Extensibility</SPAN></LI><LI><SPAN>Difference between these extensibility options when to which extensibility. </SPAN></LI><LI><SPAN>Extensibility Tools for Key users and developers.</SPAN></LI></OL><P><STRONG>More ABAP Cloud Development</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_3-1745041987557.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252541iF3ACAB30F2C35EA5/image-size/medium?v=v2&px=400" role="button" title="pavankumar_reddy90_3-1745041987557.png" alt="pavankumar_reddy90_3-1745041987557.png" /></span></P><P><STRONG>Test: </STRONG>This section gives overview of <SPAN>requirements and considerations during the test phase of application development in ABAP cloud.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_4-1745042048424.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252542i86449791B0B80256/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_4-1745042048424.png" alt="pavankumar_reddy90_4-1745042048424.png" /></span></P><P><STRONG>Extend: </STRONG>This section gives information about <SPAN>how to extend existing services and apps, background information about the release contract framework and the ABAP language.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_5-1745042099883.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252543iF1204C6B31166AD9/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_5-1745042099883.png" alt="pavankumar_reddy90_5-1745042099883.png" /></span></P><P><STRONG>Deploy: </STRONG>This section gives information about <SPAN>how to deploy and transport your app or service with ABAP lifecycle management.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_6-1745042154415.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252544iBEE8A35CC6DDA4E3/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_6-1745042154415.png" alt="pavankumar_reddy90_6-1745042154415.png" /></span></P><P><STRONG>Administrator, Configure and Monitor: </STRONG>This section gives information about the requirements and tools involved with, for example, monitoring an app or service that you've developed, Analyzing SQL statements, Identify and Access Management, Communication Management, security and Transport Management in ABAP Cloud.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_7-1745042211401.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252545iB56181A74FBE6B2A/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_7-1745042211401.png" alt="pavankumar_reddy90_7-1745042211401.png" /></span></P><P><SPAN class="">This centralized landing page in ADT offers a meticulously organized collection of SAP-validated, trusted, repository, resources, making it effortless to navigate through essential information at single page which <SPAN>caters to developers across all proficiency levels - from newcomers to seasoned ABAP experts.</SPAN></SPAN></P><P><SPAN class=""><SPAN>ABAP Cloud Landing Page will be updated with new content by SAP every BTP, S/4HANA release. Then tiles, links, generators shown in this blogs, page would be updated accordingly with new releases. Update you ADT to latest version when a new update comes up to see new changes to this page. <BR /></SPAN></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_0-1745043496508.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252546i5BC0EBA656D7D868/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_0-1745043496508.png" alt="pavankumar_reddy90_0-1745043496508.png" /></span></P><P> </P><P><SPAN class=""><SPAN><BR /><BR /><BR /><BR /><BR /></SPAN></SPAN></P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P><SPAN> </SPAN></P><P> </P><P> </P><P> </P><P> </P><P> </P><P><SPAN> </SPAN></P><P> </P>2025-04-19T08:05:51.235000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/rap-numbering-early-numbering-late-numbering-managed-numbering/ba-p/14075168RAP: Numbering | Early numbering | Late numbering | Managed numbering2025-04-21T09:38:17.384000+02:00Arunagirish1https://community.sap.com/t5/user/viewprofilepage/user-id/889803<P class="lia-align-center" style="text-align: center;"><FONT size="5"><STRONG>Numbering</STRONG></FONT></P><H1 id="toc-hId-1579258185"> </H1><H1 id="toc-hId-1382744680"><FONT size="5"><SPAN>Road Map for Learning Numbering in RAP</SPAN></FONT></H1><P class="lia-indent-padding-left-60px" style="padding-left : 60px;"><FONT size="5"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Arunagirish1_0-1744621645483.jpeg" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/250312i9CA6C20071EDDE48/image-size/medium?v=v2&px=400" role="button" title="Arunagirish1_0-1744621645483.jpeg" alt="Arunagirish1_0-1744621645483.jpeg" /></span><STRONG><SPAN> </SPAN></STRONG></FONT></P><P> </P><P><FONT size="6"><STRONG><SPAN>Early numbering:</SPAN></STRONG></FONT></P><P><SPAN>The numbering type early numbering refers to an early value assignment for the primary key field. In this case, the final key value is available in the transactional buffer instantly after the MODIFY request for CREATE.</SPAN></P><H1 id="toc-hId-1186231175"> </H1><H1 id="toc-hId-989717670"><FONT size="5"><SPAN>1. </SPAN><SPAN>External Early Numbering:</SPAN></FONT></H1><UL><LI><SPAN>consumer provides key</SPAN></LI><LI><SPAN>Key should be unique</SPAN></LI><LI><SPAN>key should be editable in create, and non-editable in modify. syntax:</SPAN></LI></UL><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Arunagirish1_1-1744621645484.jpeg" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/250311iDB4663EAA5B84F93/image-size/medium?v=v2&px=400" role="button" title="Arunagirish1_1-1744621645484.jpeg" alt="Arunagirish1_1-1744621645484.jpeg" /></span></P><H1 id="toc-hId-793204165"> </H1><H1 id="toc-hId-596690660"><FONT size="5"><SPAN>2. </SPAN><SPAN>Managed Internal Early Numbering:</SPAN></FONT></H1><UL><LI><SPAN>Managed early numbering is only possible for key fields with ABAP type raw (16) (UUID) of BOs with</SPAN></LI></UL><P><SPAN>implementation type managed.</SPAN></P><UL><LI><SPAN>UUID is read-only. syntax:</SPAN></LI></UL><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Arunagirish1_2-1744621645486.jpeg" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/250313i7A99DA75D6F0C593/image-size/medium?v=v2&px=400" role="button" title="Arunagirish1_2-1744621645486.jpeg" alt="Arunagirish1_2-1744621645486.jpeg" /></span></P><H1 id="toc-hId-400177155"> </H1><H1 id="toc-hId-203663650"><FONT size="5"><SPAN>3. </SPAN><SPAN>Unmanaged Internal Early Numbering:</SPAN></FONT></H1><UL><LI><SPAN>Unmanaged Early Numbering is available in Managed and Unmanaged Implementation Scenarios with Draft Capabilities</SPAN></LI><LI><SPAN>Key is read-only. Syntax:</SPAN></LI></UL><P>Bdef:</P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Arunagirish1_3-1744621645487.jpeg" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/250315iE66488042F386417/image-size/medium?v=v2&px=400" role="button" title="Arunagirish1_3-1744621645487.jpeg" alt="Arunagirish1_3-1744621645487.jpeg" /></span></P><P><SPAN>Local handler class:</SPAN></P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Arunagirish1_4-1744621645487.jpeg" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/250314i45DC29B4CE4C1454/image-size/medium?v=v2&px=400" role="button" title="Arunagirish1_4-1744621645487.jpeg" alt="Arunagirish1_4-1744621645487.jpeg" /></span></P><H1 id="toc-hId-7150145"> </H1><H1 id="toc-hId--189363360"><FONT size="6"><SPAN>Late numbering:</SPAN></FONT></H1><UL><LI><SPAN>The RAP runtime engine assigns values to the primary key fields.</SPAN></LI><LI><SPAN>In the ABAP behaviour pool, the RAP saver method adjust_numbers must be implemented to assign a final primary key value for each entity instance.</SPAN></LI><LI><SPAN>The key value for an instance is assigned just before the instance is saved on the database. Thus, a gapless assignment of unique keys is ensured.</SPAN></LI><LI><SPAN>Late numbering is available for managed and unmanaged implementation scenarios with and without draft.</SPAN></LI></UL><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Arunagirish1_5-1744621645488.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/250316iEE64CE7F7474D794/image-size/medium?v=v2&px=400" role="button" title="Arunagirish1_5-1744621645488.png" alt="Arunagirish1_5-1744621645488.png" /></span></P><H1 id="toc-hId-383863218"><FONT size="5">Note:</FONT></H1><UL><LI><SPAN>late numbering can't be external, since a consumer can't influence the SAVE sequence after the point of no return.</SPAN></LI><LI><SPAN>If draft enabled, it is mandatory that the RAP draft table has an additional key field DRAFTUUID of data type raw (16).</SPAN></LI></UL><H1 id="toc-hId-187349713"> </H1><H1 id="toc-hId--9163792"><FONT size="5">Summary:</FONT></H1><UL><LI><SPAN>passed externally by the application user: External numbering</SPAN></LI><LI><SPAN>set internally by the framework: Managed internal</SPAN></LI><LI><SPAN>set internally by developer (implementation the FOR-NUMBERING method): Unmanaged Internal</SPAN></LI></UL><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Arunagirish1_6-1744621645489.jpeg" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/250317iCA8AF127EADEA070/image-size/medium?v=v2&px=400" role="button" title="Arunagirish1_6-1744621645489.jpeg" alt="Arunagirish1_6-1744621645489.jpeg" /></span></P><P> </P>2025-04-21T09:38:17.384000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/augmentation-operation-in-rap/ba-p/14082109Augmentation Operation in RAP2025-04-21T10:41:27.204000+02:00pavankumar_reddy90https://community.sap.com/t5/user/viewprofilepage/user-id/189954<P><STRONG>Ever wondered how to set default values for the object page fields during Create Operation in Fiori using RAP at the projection level?</STRONG></P><P>With an augmentation implementation you can add data or modify incoming requests on the projection layer before data reaches the transactional buffer. You can add data to a modify request or issue additional requests by augmenting the operation before the request is passed to the base business object.</P><DIV class=""><H3 id="toc-hId-1838257586">Use case</H3></DIV><P>• Defaulting for incoming requests. For example: Populate default values for fields of object page on create operation in Fiori</P><P>• Behavior-enabling denormalized fields, for example enabling editing of language dependent fields.<BR /><BR /></P><DIV class=""><H4 id="toc-hId-1770826800">Definition</H4></DIV><P>Augmentation is defined in the <STRONG>projection behavior definition</STRONG> on the relevant operation with the following syntax: </P><pre class="lia-code-sample language-abap"><code>define behavior for Entity [alias AliasedName]
..
{
use create (augment);
use update (augment);
use association AssocName { create (augment); }
...
}</code></pre><P>Below steps will result you how to populate default values for the object page fields on create operation especially at project layer. That means this default values population is specific to projection not for entire BO. </P><OL><LI>In your projection behavior<SPAN> </SPAN><STRONG>ZC_TRAVEL_PROCESSOR_M_XX</STRONG><SPAN> </SPAN>definition, define augmentation for the create operation.</LI></OL><pre class="lia-code-sample language-abap"><code>use create (augment);</code></pre><P>2. Add behavior implementation class to the project behavior.</P><pre class="lia-code-sample language-abap"><code>…
define behavior for ZC_TRAVEL_PROCESSOR_M_XX alias Travel
implementation in class zcl_bp_c_travelm_xx
….</code></pre><P>3. Click the activation button or use the shortcut<SPAN> </SPAN>Ctrl + F3<SPAN> </SPAN>to activate the behavior definition.</P><P>4. The ADT Quick Fix feature can be used to create implementation class for travel entity. </P><P><SPAN>For this, set the cursor on the class name, and press </SPAN>Ctrl+1<SPAN> to star the Quick Fix dialog.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_0-1745219773658.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/253035iD1BC926F81F1BEDB/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_0-1745219773658.png" alt="pavankumar_reddy90_0-1745219773658.png" /></span> <SPAN>Click on create behavior implementation to create the class.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_1-1745221092360.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/253049i59D70AFC3E7548AC/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_1-1745221092360.png" alt="pavankumar_reddy90_1-1745221092360.png" /></span></P><P>Click <STRONG>Next</STRONG> and <STRONG>Finish</STRONG> to create the class. In <STRONG>Local Types</STRONG> of Class you will see a augmentation operation method created where you need to implement logic to populate default values.</P><P>5.<SPAN>In the method implementation paste the below code. </SPAN></P><pre class="lia-code-sample language-abap"><code>METHOD augment_create.
DATA: travel_create TYPE TABLE FOR CREATE zi_travel_m_xx.
travel_create = CORRESPONDING #( entities ).
LOOP AT travel_create ASSIGNING FIELD-SYMBOL(<travel>).
<travel>-agency_id = '070012'.
<travel>-status = 'O'.
<travel>-%control-agency_id = if_abap_behv=>mk-on.
<travel>-%control-status = if_abap_behv=>mk-on.
ENDLOOP.
MODIFY AUGMENTING ENTITIES OF zi_travel_m_xx ENTITY Travel CREATE FROM travel_create.
ENDMETHOD.</code></pre><P>"<STRONG>MODIFY AUGMENTING ENTITIES</STRONG>" is a EML statement with which you can modify entities of base business object. In the above example "<STRONG>ZI_TRAVEL_M_XX</STRONG>" is the base business object and "<STRONG>ZC_TRAVEL_PROCESSOR_M_XX" </STRONG>is the project business object.</P><P>6. Save and Activate the Class.</P><P>7.Test the app now using preview tool. On Click of<SPAN> </SPAN>Create<SPAN> </SPAN><STRONG>Agency ID</STRONG> and <STRONG>Status</STRONG> fields are defaulted.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_2-1745221376616.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/253051i4C4C3C28E055C009/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_2-1745221376616.png" alt="pavankumar_reddy90_2-1745221376616.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_3-1745221416057.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/253052i07ECCB6CBE5E1CB0/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_3-1745221416057.png" alt="pavankumar_reddy90_3-1745221416057.png" /></span></P><P><SPAN>Same behavior can be achieved with determination with draft as well. But what is the difference ?</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_0-1745223890753.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/253066i47B3E2DEEDEF7C47/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_0-1745223890753.png" alt="pavankumar_reddy90_0-1745223890753.png" /></span></P><P><STRONG>Note:</STRONG> Only when draft is enabled in BO above feature can be achieved. </P><P> </P><P> </P>2025-04-21T10:41:27.204000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/sap-btp-oauth-2-0-authentication-using-client-credentials-in-abap/ba-p/14079100SAP BTP OAuth 2.0 Authentication Using Client Credentials in ABAP Environment2025-04-22T18:37:06.382000+02:00DarshanShahhttps://community.sap.com/t5/user/viewprofilepage/user-id/17206<H1 id="toc-hId-1579377155">SAP BTP OAuth 2.0 Authentication Using Client Credentials in ABAP Environment</H1><P>When working with SAP BTP (Business Technology Platform), securely sending JSON data often requires OAuth 2.0 authentication using the <STRONG>Client Credentials</STRONG> flow (Client ID and Secret Key).</P><P>This blog provides a step-by-step guide to setting up OAuth 2.0 communication in the SAP BTP ABAP environment, including creating Communication Scenarios, Communication Arrangements, and executing an outbound HTTP call with JSON payloads.</P><H2 id="toc-hId-1511946369">Step 1: Enable Communication Scenario in ABAP Environment</H2><OL><LI><H3 id="toc-hId-1444515583">Open <STRONG>ABAP Development Tools (ADT) </STRONG>in Eclipse.</H3><OL><LI><P><FONT size="3">Navigate to <STRONG>Cloud Communication Management</STRONG><SPAN>.</SPAN></FONT></P></LI><LI><P><FONT size="3">Create a <STRONG>new Outbound Service</STRONG> by assigning a Service Binding and specifying an Outbound Service ID.</FONT><BR /> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Outbound" style="width: 382px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/251931i1AD05CAEC93A7AF6/image-size/medium?v=v2&px=400" role="button" title="DarshanShah_7-1744882138880.png" alt="DarshanShah_7-1744882138880.png" /></span></P></LI><LI><P>Outbound Service ID (Default Path Prefix is<STRONG> optional</STRONG>)</P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DarshanShah_11-1744883088444.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/251946iA649214E6192F7D0/image-size/medium?v=v2&px=400" role="button" title="DarshanShah_11-1744883088444.png" alt="DarshanShah_11-1744883088444.png" /></span></LI></OL></LI></OL><H3 id="toc-hId-1248002078">Step 2: Create a Custom Communication Scenario</H3><OL><LI><SPAN>Log in to the </SPAN><STRONG>SAP Fiori Launchpad</STRONG><SPAN> on your SAP S/4HANA Cloud system.</SPAN><OL><LI>Open the <STRONG>Custom Communication Scenarios</STRONG> app.</LI><LI>Click <STRONG>New</STRONG> and provide a <STRONG>Communication Scenario ID</STRONG> and <STRONG>Description.</STRONG></LI><LI>Add the <STRONG>Outbound Service ID</STRONG> and <STRONG>Publish</STRONG> the scenario.<span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Communication" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/251933iB6D9EAB921578239/image-size/medium?v=v2&px=400" role="button" title="DarshanShah_8-1744882258630.png" alt="Communication" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Communication</span></span><P> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DarshanShah_10-1744882304586.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/251937i54CA5E059D4A8D02/image-size/medium?v=v2&px=400" role="button" title="DarshanShah_10-1744882304586.png" alt="DarshanShah_10-1744882304586.png" /></span></P><P> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DarshanShah_13-1744884880107.png" style="width: 422px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/251976iEA43979B7F65BDEB/image-dimensions/422x165?v=v2" width="422" height="165" role="button" title="DarshanShah_13-1744884880107.png" alt="DarshanShah_13-1744884880107.png" /></span></P><P> </P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DarshanShah_15-1744888488156.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252033i87EE087B22F5FD9C/image-size/medium?v=v2&px=400" role="button" title="DarshanShah_15-1744888488156.png" alt="DarshanShah_15-1744888488156.png" /></span> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DarshanShah_17-1744888768068.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252043i7EF6AF6020FC3E04/image-size/medium?v=v2&px=400" role="button" title="DarshanShah_17-1744888768068.png" alt="DarshanShah_17-1744888768068.png" /></span><P> </P></LI></OL></LI></OL><H3 id="toc-hId-1051488573">Step 3: Create a Communication Arrangement</H3><OL><LI>Log in to the <STRONG>SAP Fiori Launchpad</STRONG> on your SAP Cloud system.</LI><LI><P class="">Navigate to the <STRONG>Extensibility</STRONG> section and open the <STRONG>Custom Communication Scenarios</STRONG> app.</P><H3 id="toc-hId-854975068">2.2 Create a Communication System</H3><UL><LI><P class="">Switch to your <STRONG>SAP S/4HANA Cloud</STRONG> system.</P></LI><LI><P class="">Open the <STRONG>Communication Systems</STRONG> app. <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DarshanShah_0-1744894916778.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252106i37971EFC35EA18A7/image-size/medium?v=v2&px=400" role="button" title="DarshanShah_0-1744894916778.png" alt="DarshanShah_0-1744894916778.png" /></span></P></LI><LI><P class="">Create a new communication system and paste the <STRONG>URL</STRONG> as the <STRONG>hostname</STRONG>.</P></LI><LI><P class="">Enter <STRONG>DUMMY</STRONG> as the <STRONG>Logical System</STRONG> and <STRONG>Business System</STRONG>.</P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DarshanShah_1-1744896049124.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252107i7AE0469C8A6DBEE5/image-size/medium?v=v2&px=400" role="button" title="DarshanShah_1-1744896049124.png" alt="DarshanShah_1-1744896049124.png" /></span> </LI><LI> </LI><LI><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DarshanShah_2-1744896378085.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252108i75C8F142ADCE164A/image-size/medium?v=v2&px=400" role="button" title="DarshanShah_2-1744896378085.png" alt="DarshanShah_2-1744896378085.png" /></span></LI><LI> </LI></UL></LI><LI><P class="">Click <STRONG>New</STRONG> to create a new communication scenario.</P></LI><LI><P class="">Enter values for both the <STRONG>Communication Scenario ID</STRONG> and <STRONG>Description</STRONG> fields.</P></LI><LI><P class="">In the <STRONG>Outbound Services</STRONG> section, add the <STRONG>Outbound Service ID</STRONG>.</P></LI><LI><P class="">Once completed, click <STRONG>Publish</STRONG> to activate the communication scenario.</P></LI></OL><P class=""><STRONG>Now we require a Create a Communication Arrangement:</STRONG></P><P class=""><SPAN>OAuth 2.0 Settings</SPAN></P><P class=""><SPAN>Define additional settings if OAuth 2.0 is used for outbound communication </SPAN></P><P class=""><SPAN><STRONG>Note</STRONG>:- </SPAN><SPAN>The propagation of technical users from the cloud application towards on-premises systems can be enabled in the Communication Systems app. To propagate the technical user, you must select the Cloud Conn. Technical User Propagation checkbox in the OAuth 2.0 Settings area (the checkbox is only active if the Cloud Connector switch is on). This is similar to principal propagation, but in this case, a technical user is propagated instead of a business user.</SPAN></P><OL><LI>Choose + in the outbound communication user area to create a outbound communication user.</LI><LI><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DarshanShah_3-1744897360661.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252115i06094AAFE5138CA2/image-size/medium?v=v2&px=400" role="button" title="DarshanShah_3-1744897360661.png" alt="DarshanShah_3-1744897360661.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DarshanShah_4-1744897390647.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252116iFDD18CE20F5E3A15/image-size/medium?v=v2&px=400" role="button" title="DarshanShah_4-1744897390647.png" alt="DarshanShah_4-1744897390647.png" /></span></LI><LI>Add Communication System and it will get all the rest details then Go to Outbound Services and add Path and service URL <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DarshanShah_0-1744897813502.png" style="width: 454px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/252125iAAE47FE792410373/image-dimensions/454x82?v=v2" width="454" height="82" role="button" title="DarshanShah_0-1744897813502.png" alt="DarshanShah_0-1744897813502.png" /></span></LI></OL><P>Choose to Save to save your communication system. And now you can Check the Connection as well</P><H2 id="toc-hId-529378844">Sample ABAP Code to Send JSON Data via OAuth 2.0</H2><pre class="lia-code-sample language-abap"><code>DATA: lv_json TYPE string,
lr_cscn TYPE if_com_scenario_factory=>ty_query-cscn_id_range,
http_header_fields TYPE if_web_http_request=>name_value_pairs.
* Format JSON Data
lv_json = '{ "d": { "root": ' && |{ lv_json }| && '} }'.
* Find Communication Arrangement by Scenario ID
lr_cscn = VALUE #( ( sign = 'I' option = 'EQ' low = 'ZCS_OUTBONDXXX' ) ).
DATA(lo_factory) = cl_com_arrangement_factory=>create_instance( ).
lo_factory->query_ca(
EXPORTING
is_query = VALUE #( cscn_id_range = lr_cscn )
IMPORTING
et_com_arrangement = DATA(lt_ca)
).
IF lt_ca IS INITIAL.
EXIT.
ENDIF.
* Select the first available Communication Arrangement
READ TABLE lt_ca INTO DATA(lo_ca) INDEX 1.
* Create HTTP Destination
TRY.
DATA(lo_http_destination) = cl_http_destination_provider=>create_by_comm_arrangement(
comm_scenario = 'Z_CS_OUTBONDXXX',
service_id = 'Z_OB_EXPORT_XXX_XXX',
comm_system_id = lo_ca->get_comm_system_id( )
).
DATA(lo_http_client) = cl_web_http_client_manager=>create_by_http_destination( lo_http_destination ).
lo_http_client->get_http_request( )->set_text( lv_json ).
lo_http_client->get_http_request( )->set_header_fields( http_header_fields ).
DATA(http_response) = lo_http_client->execute( if_web_http_client=>get ).
DATA(http_status_code) = http_response->get_status( ).
IF http_status_code-code = '200'.
* Success Message
DATA(item_msg) = new_message(
id = 'Zmsg_XXX',
number = '001',
severity = cl_abap_behv=>ms-success,
v1 = http_status_code-code,
v2 = http_status_code-reason
).
APPEND VALUE #( %msg = item_msg ) TO reported-Z_XXXX_ui.
ELSE.
* Authentication failed
DATA(item_msg2) = new_message(
id = 'Z_XXX',
number = '002',
severity = cl_abap_behv=>ms-error,
v1 = http_status_code-code,
v2 = http_status_code-reason
).
APPEND VALUE #( %msg = item_msg2 ) TO reported-z_XXXX_ui.
ENDIF.
CATCH cx_http_dest_provider_error INTO DATA(lx_http_dest_provider_error).
DATA(text) = lx_http_dest_provider_error->get_text( ).
CATCH cx_web_http_client_error.
ENDTRY.</code></pre><UL><LI>Always implement proper error handling for smooth integration with external systems. </LI></UL><P>I tried this approach myself — hope it helps!</P>2025-04-22T18:37:06.382000+02:00https://community.sap.com/t5/technology-blog-posts-by-sap/introducing-the-new-pricing-and-packaging-for-sap-build-a-unified/ba-p/14086382Introducing the New Pricing and Packaging for SAP Build: A Unified Experience for all Developers2025-04-29T12:47:47.359000+02:00thomas_volmeringhttps://community.sap.com/t5/user/viewprofilepage/user-id/189303<P><SPAN>As </SPAN>SAP is evolving its Business Suite, AI, and Data Products to meet rising market demands, and as part of this strategy, we are introducing a new exciting,<STRONG> unified commercial model for SAP Build</STRONG>. This updated offering consolidates capabilities for pro-code, low code and AI powered development tools making it easier than ever to build applications and extensions within the SAP ecosystem.</P><P>With built-in access to runtime, automation, and extensibility services, SAP Build now empowers both business users and professional developers to choose the right tool set for the right job. The integration of generative AI enhances productivity by streamlining workflows, automating tasks, and accelerating decision-making.</P><P>To further support development, SAP Build capabilities along with SAP HANA Cloud are now fully included in SAP S/4HANA Cloud Private Packages empowering customers to handle the majority of their expected scenarios right out of the box. Read the full announcement <SPAN><A href="https://news.sap.com/2025/04/sap-build-sap-s4hana-cloud-simplify-development/" target="_blank" rel="noopener noreferrer">here</A></SPAN>.</P><P><STRONG><U><SPAN>What changes? </SPAN></U></STRONG></P><P>We've heard our customers loud and clear; they asked for simpler licensing, easier provisioning, and a unified toolset. Previously, each SAP Build product like Build Apps, Process Automation, Work Zone, Build Code, and ABAP was licensed separately. This resulted in having lots of different services for customers to manage. </P><P>The following list of 14 services from SAP Build have now been consolidated:</P><P><STRONG><SPAN>SAP Build Services: </SPAN></STRONG></P><UL><LI><SPAN>SAP Build Work Zone, standard edition</SPAN></LI><LI><SPAN>SAP Build Work Zone, advanced edition </SPAN></LI><LI><SPAN>SAP Build Process Automation</SPAN></LI><LI><SPAN>SAP Task Center</SPAN></LI><LI><SPAN>SAP Build Apps</SPAN></LI><LI><SPAN>SAP Mobile Services </SPAN></LI><LI><SPAN>Application Frontend Service</SPAN></LI><LI><SPAN>SAP Business Application Studio </SPAN></LI></UL><P><SPAN> </SPAN><STRONG><SPAN>SAP Build Runtime Services: </SPAN></STRONG></P><UL><LI><SPAN>SAP BTP, Cloud Foundry Runtime</SPAN></LI><LI><SPAN>SAP BTP ABAP environment</SPAN></LI><LI><SPAN>SAP BTP, Kyma runtime</SPAN></LI><LI><SPAN>SAP Document Management Service </SPAN></LI><LI><SPAN>SAP Cloud Transport Management </SPAN></LI><LI><SPAN>SAP Continuous Integration and Delivery </SPAN></LI></UL><P><SPAN> </SPAN>Now you can access the full range of SAP Build capabilities listed above through just four distinct licenses:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thomas_volmering_1-1745579944028.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/254713i0370155E26F16ACC/image-size/medium?v=v2&px=400" role="button" title="thomas_volmering_1-1745579944028.png" alt="thomas_volmering_1-1745579944028.png" /></span></P><P><STRONG><SPAN>SAP Build base user</SPAN></STRONG></P><P><SPAN>This edition is for users who need to access applications, gain insights for day-to-day business needs, and approve tasks. SAP Build base user includes: </SPAN></P><UL><LI><SPAN>Access to digital workspaces</SPAN></LI><LI><SPAN>Access web and mobile apps</SPAN></LI><LI><SPAN>Request and approve workflow tasks</SPAN></LI><LI><SPAN>Access mobile start</SPAN></LI><LI><SPAN>1000 API Calls</SPAN></LI><LI><SPAN>100 MB Storage</SPAN></LI></UL><P><SPAN> </SPAN><SPAN>Note: Prerequisite is at least one Build Developer license to manage SAP Build. </SPAN></P><P><SPAN> </SPAN><STRONG><SPAN>SAP Build premium user</SPAN></STRONG></P><P>This edition is for users who author content, monitor processes, customize pages, and deploy bots. SAP Build premium user includes:</P><UL><LI><SPAN>Everything in SAP Build base user, plus</SPAN></LI><LI><SPAN>Monitor processes via the dashboard</SPAN></LI><LI><SPAN>Deploy attended robotic process automation bots</SPAN></LI><LI><SPAN>Author and access workspace content</SPAN></LI><LI><SPAN>Visually design digital workspaces and guided experiences</SPAN></LI><LI><SPAN>1000 API Calls</SPAN></LI><LI><SPAN>100 MB Storage</SPAN></LI></UL><P><SPAN> </SPAN><SPAN>Note: Prerequisite is at least one Build Developer license to manage SAP Build.</SPAN></P><P><STRONG><SPAN>SAP Build developer</SPAN></STRONG></P><P>This edition is for users who develop application/extensions, workflows, and automations for S/4 and other LoB apps. SAP Build developer includes:</P><UL><LI><SPAN>Everything in SAP Build premium user, plus</SPAN></LI><LI><SPAN>Build with low-code/no-code developer tools</SPAN></LI><LI><SPAN>Develop with code-first developer tools (IDEs)</SPAN></LI><LI><SPAN>Create and deploy apps and extensions</SPAN></LI><LI><SPAN>Develop and deploy mobile applications</SPAN></LI><LI><SPAN>Design and deploy workflows</SPAN></LI><LI><SPAN>5000 API Calls</SPAN></LI><LI><SPAN>500 MB Storage</SPAN></LI></UL><P><STRONG><SPAN>SAP Build runtime </SPAN></STRONG></P><P><SPAN>Required for application-hosting and lifecycle management services that support the creation and execution for dev/test as well as production environments. SAP Build runtime includes: </SPAN></P><UL><LI><SPAN>SAP BTP, Cloud Foundry runtime</SPAN></LI><LI><SPAN>SAP BTP ABAP Environment</SPAN></LI><LI><SPAN>SAP BTP, Kyma runtime</SPAN></LI><LI><SPAN>Application runtime</SPAN></LI><LI><SPAN>Document management storage and API</SPAN></LI><LI><SPAN>Cloud transport management</SPAN></LI><LI><SPAN>Continuous integration and continuous delivery </SPAN>(CI/CD)</LI></UL><P>Note: Customers can access applications hosted on runtimes without using any end-user capabilities. This ensures customers aren't charged for user licenses they don’t actively use.</P><P><SPAN>Find detailed information about SAP Build and what’s in scope </SPAN><SPAN>on the <A href="https://help.sap.com/docs/build-service?locale=en-US" target="_blank" rel="noopener noreferrer">SAP Help Portal.</A></SPAN><STRONG> </STRONG></P><P><STRONG>What are the key benefits of the new SAP Build packaging, and how will it help our customers?</STRONG></P><P>The new SAP Build packaging delivers a streamlined, powerful experience for building extensions, automations, and apps across the SAP ecosystem. Here's how it benefits customers:</P><UL><LI><STRONG>Unified Access Across Tools</STRONG>: SAP Build now brings together low-code, pro-code, and AI-powered development tools under a single license removing the complexity of managing multiple products and licenses.</LI><LI><STRONG>Built-In ERP Integration</STRONG>: SAP Build and SAP HANA Cloud entitlements are now included in SAP Cloud ERP Private Packages, enabling faster innovation and development for SAP S/4HANA Cloud customers.</LI><LI><STRONG>Empowerment for Developers & Business Users</STRONG>: Both professional developers and key users gain the flexibility to personalize SAP systems with greater speed up to 3x faster, according to</LI><LI><STRONG>Optimized Cost & Efficiency</STRONG>: A flexible, usage-based runtime model helps reduce total cost of ownership and streamline operational overhead.</LI><LI><STRONG>Simplified Governance</STRONG>: A unified licensing approach improves compliance management and centralizes governance across all tools.</LI><LI><STRONG>Business Value First</STRONG>: By removing commercial and technical barriers, organizations can focus more on driving transformation and delivering real business outcomes.</LI></UL><P><STRONG>With SAP Build, customers can:</STRONG></P><UL><LI><STRONG>Scale confidently within the SAP ecosystem</STRONG>: Use included licenses to rapidly build compliant extensions that align with SAP standards and scale across the enterprise.</LI><LI><STRONG>Leverage AI to boost productivity</STRONG>: Automate complex cross-system processes with AI agents, customize Joule with skill-specific tasks, and speed up development using SAP-optimized AI tools.</LI><LI><STRONG>Deliver faster from front-end to full-stack</STRONG>: Build complete extensions with prebuilt templates, low-code tools, and integrated services like authentication, deployment, and lifecycle management—all on a single, seamless platform.</LI></UL><P><SPAN> </SPAN><STRONG>Commercial Model and Availability </STRONG></P><P>As of 22nd April 2025, SAP Build is available to customers for <U>subscription only</U>. <SPAN>Availability for consumption under BTPEA and PayGo is anticipated by the end of Q2.</SPAN></P><P><STRONG><SPAN>Call to action</SPAN></STRONG></P><UL><LI><SPAN>Visit the <A href="https://www.sap.com/products/technology-platform/build/pricing.html" target="_blank" rel="noopener noreferrer">SAP Build pricing page</A> to learn more</SPAN></LI><LI><SPAN>Help portal documentation</SPAN></LI><LI><SPAN><A href="https://event.on24.com/eventRegistration/EventLobbyServlet?target=reg20.jsp&eventid=4911203&sessionid=1&key=93644E353DCACBD0512BEA32BB936ACB&groupId=6054508&partnerref=BharatsBlog&sourcepage=register" rel="nofollow noopener noreferrer">Register for</A> the SAP Build webinar on May 8th </SPAN></LI><LI><SPAN>Read the full <A href="https://news.sap.com/2025/04/sap-build-sap-s4hana-cloud-simplify-development/" target="_blank" rel="noopener noreferrer">announcement here</A> </SPAN></LI><LI><SPAN>Visit the <A href="https://discovery-center.cloud.sap/serviceCatalog/sap-build?service_plan=default&region=all&commercialModel=subscription" target="_blank" rel="noopener nofollow noreferrer">SAP Discovery Center</A> for more details.</SPAN></LI><LI><SPAN>Review pricing on <A href="https://discovery-center.cloud.sap/serviceCatalog/sap-build?service_plan=default&region=all&commercialModel=subscription&tab=" target="_blank" rel="noopener nofollow noreferrer">Discovery Center</A></SPAN></LI></UL>2025-04-29T12:47:47.359000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/enable-multi-input-field-on-the-object-page-using-rap/ba-p/14089415Enable Multi-Input Field on the Object Page using RAP2025-04-29T20:46:31.881000+02:00pavankumar_reddy90https://community.sap.com/t5/user/viewprofilepage/user-id/189954<P><STRONG>How to enable Multi-Input Field on the Object Page using RAP?</STRONG><BR /><BR />Lets take a example of Procurement Project Business Object. In the BO there is a field "Company Code" for which multi-input needs to enabled in object page. </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_0-1745925601110.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/256030iE4401D40E3A30733/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_0-1745925601110.png" alt="pavankumar_reddy90_0-1745925601110.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_1-1745952492661.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/256343i1F3624A027302A3E/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_1-1745952492661.png" alt="pavankumar_reddy90_1-1745952492661.png" /></span></P><P>Below are the steps to enable above functionality using RAP:</P><P>1. Create a custom table with fields "company code" (here companycode is the field of root entity project ) and "<SPAN>procurementprojectuuid" ( here project uuid is the key field of root entity project)</SPAN></P><pre class="lia-code-sample language-abap"><code>@EndUserText.label : 'Procurement Project Company Code'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #RESTRICTED
define table zprocproj_cc {
key client : abap.clnt not null;
key companycode : bukrs not null;
procurementprojectuuid : vdm_procurementprojectuuid;
}</code></pre><P>2. Create a Interface view for custom table create at step 1.</P><pre class="lia-code-sample language-abap"><code>@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Company COde'
@Metadata.ignorePropagatedAnnotations: true
@ObjectModel.usageType:{
serviceQuality: #X,
sizeCategory: #S,
dataClass: #MIXED
}
define view entity ZI_Company_Code_XX
as select from zprocproj_cc
association to parent ZI_PROC_PROJ_XX as _procproj on $projection.procurementprojectuuid = _procproj.Procurementprojectuuid
{
key companycode,
procurementprojectuuid,
_procproj
}</code></pre><P>Here "<SPAN>ZI_Company_Code_XX" is the Interface View for CompanyCode custom table and "ZI_PROC_PROJ_XX" is the Root Interface View for Procurement Project BO.</SPAN></P><P><SPAN>You can also find <STRONG>association to parent </STRONG>relationship from companycode Interface view to root view procurement project.</SPAN></P><P><SPAN>3. Create 1:N composition relation from root entity to company code interface view which is created in step 2</SPAN></P><pre class="lia-code-sample language-abap"><code>@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Procument Project Interface View'
@Metadata.ignorePropagatedAnnotations: true
@ObjectModel.usageType:{
serviceQuality: #X,
sizeCategory: #S,
dataClass: #MIXED
}
define root view entity ZI_PROC_PROJ_XX
as select from mmprocmtproj
composition [0..*] of zi_proc_plant_xx as _plant
composition [0..*] of ZI_Company_Code_XX as _CompanyCode
{
key procurementprojectuuid as Procurementprojectuuid,
procurementproject as Procurementproject,
procurementprojectname as Procurementprojectname,
externalprojectreference as Externalprojectreference,
companycode as Companycode,
@Semantics.user.createdBy: true
createdbyuser as Createdbyuser,
@Semantics.user.lastChangedBy: true
lastchangedbyuser as Lastchangedbyuser,
@Semantics.systemDateTime.createdAt: true
creationdatetime as Creationdatetime,
@Semantics.systemDateTime.lastChangedAt: true
lastchangedatetime as Lastchangedatetime,
procurementprojectactvtnsts as Procurementprojectactvtnsts,
procmtplanningsubprojectuuid as Procmtplanningsubprojectuuid,
sourcingorigin as Sourcingorigin,
sourcingscenario as Sourcingscenario,
iseopblocked as Iseopblocked,
_plant,
_CompanyCode
}</code></pre><P>Here root entity is <SPAN>ZI_PROC_PROJ_XX and it has 1:N composition relationship to child entity ZI_Company_Code_XX.</SPAN></P><P><SPAN>Make sure you activate ZI_PROC_PROJ_XX and ZI_Company_Code_XX together when you form the business object relationship.</SPAN></P><P>4. Enhance <SPAN>ZI_Company_Code_XX behavior in base BO ZI_PROC_PROJ_XX</SPAN></P><pre class="lia-code-sample language-abap"><code>managed implementation in class zbp_i_proc_proj_xx unique;
strict ( 2 );
with draft;
define behavior for ZI_PROC_PROJ_XX alias Project
persistent table mmprocmtproj
draft table zprocproj_dxx
lock master
total etag Lastchangedatetime
authorization master ( instance, global )
etag master Lastchangedatetime
with additional save
early numbering
{
create;
update;
delete ( features : global );
draft action Edit;
draft action Discard;
draft action Resume;
draft action Activate;
draft determine action Prepare
{
validation validate_companycode;
}
//field ( numbering : managed ) Procurementprojectuuid;
// field ( mandatory ) Companycode;
field ( readonly : update ) Externalprojectreference;
field ( readonly ) Sourcingscenario;
//field ( mandatory : create, readonly : update ) Procurementproject; //V4
field ( features : instance ) Procurementproject;
association _plant { create; with draft; }
association _CompanyCode { create; with draft; }
action ( features : instance ) setactive parameter zabstract_project_xx result [1] $self;
validation validate_companycode on save { field Companycode; }
determination set_status on modify { create; }
determination set_project_key on save { create; }
mapping for mmprocmtproj corresponding
{
Lastchangedatetime = lastchangedatetime;
}
}
define behavior for zi_proc_plant_xx alias Plant
//persistent table mmpprojplant
draft table zprocplantd_xx
lock dependent by _project
authorization dependent by _project
//etag master <field_name>
with unmanaged save
{
update;
delete;
field ( numbering : managed ) procmtprojectplantuuid;
field ( readonly ) Procurementprojectuuid;
association _project { with draft; }
}
define behavior for ZI_Company_Code_XX alias CompanyCode
persistent table zprocproj_cc
draft table zprocproj_ccd
lock dependent by _procproj
authorization dependent by _procproj
{
update;
delete;
field ( readonly ) Procurementprojectuuid;
association _procproj { with draft; }
}</code></pre><P> What additions are added in the above behavior:</P><P>1. <SPAN>define behavior for ZI_Company_Code_XX</SPAN></P><P><SPAN>2. association _CompanyCode { create; with draft; } in root behavior ZI_PROC_PROJ_XX</SPAN></P><P><SPAN>3. draft table zprocproj_ccd created using quick fix.</SPAN></P><P> </P><P><SPAN>5. Create a projection view ZC_PROC_CC_XX for interface view ZI_Company_Code_XX created in step 2</SPAN></P><pre class="lia-code-sample language-abap"><code>@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Procement Project CC Projection View'
@Metadata.ignorePropagatedAnnotations: true
define view entity ZC_PROC_CC_XX as projection on ZI_Company_Code_XX
{
key companycode,
procurementprojectuuid,
/* Associations */
_procproj : redirected to parent ZC_PROC_PROJ_XX
}</code></pre><P><SPAN>Here "_procproj : redirected to parent ZC_PROC_PROJ_XX" relation is formed to root projection entity ZC_PROC_PROJ_XX</SPAN></P><P><SPAN>6. Create a relation from root project projection view ZC_PROC_PROJ_XX to company code project view zc_proc_cc_xx.</SPAN></P><pre class="lia-code-sample language-abap"><code>_CompanyCode : redirected to composition child zc_proc_cc_xx,</code></pre><P><SPAN>Make sure you activate ZC_PROC_PROJ_XX and zc_proc_cc_xx together when you form the business object relationship.</SPAN></P><P><SPAN><BR />7. Enhance projection Company code behavior ZC_PROC_CC_XX in projection</SPAN></P><pre class="lia-code-sample language-abap"><code>projection;
strict ( 2 );
use draft;
define behavior for ZC_PROC_PROJ_XX //alias <alias_name>
implementation in class zcl_proc_proj_c_xx unique
use etag
{
use create ( augment, precheck );
use update;
use delete;
use action Edit;
use action Resume;
use action Activate;
use action Prepare;
use action Discard;
use action setactive;
use association _plant { create; with draft; }
use association _CompanyCode { create; with draft; }
}
define behavior for ZC_PROC_PLANT_XX //alias <alias_name>
{
use update;
use delete;
use association _project { with draft; }
}
define behavior for ZC_PROC_CC_XX
{
use update;
use delete;
use association _procproj { with draft; }
}</code></pre><P>What additions are added in the above behavior:</P><P>1. <SPAN>define behavior for ZC_PROC_CC_XX</SPAN></P><P><SPAN>2. use association _CompanyCode { create; with draft; } in root behavior ZC_PROC_PROJ_XX</SPAN></P><P> </P><P>8. Expose company code projection view <SPAN>ZC_PROC_CC_XX service definition.</SPAN></P><pre class="lia-code-sample language-abap"><code>@EndUserText.label: 'Service Binding for Procurement Project'
define service ZSD_PROC_PROJ_XX {
expose ZC_PROC_PROJ_XX as ProcurementProject;
expose ZC_PROC_PLANT_XX as ProcurementPlant;
expose ZC_PROC_CC_XX as ProcurementCC;
}</code></pre><P>Here <SPAN> "expose ZC_PROC_CC_XX as ProcurementCC;" added.</SPAN></P><P>9. Enhance the metadata extension of root view <SPAN>ZC_PROC_PROJ_XX </SPAN></P><pre class="lia-code-sample language-abap"><code> : { lineItem: [ { position: 70, importance: #HIGH, value: '_CompanyCode.companycode' }
] }
.identification: [{ position: 70, importance: #HIGH, value: '_CompanyCode.companycode' }]
_CompanyCode;</code></pre><P><SPAN>Here association _CompanyCode; is exposed in metadata extension and value property '_CompanyCode.companycode' is added to <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1445379">@ui</a>.linetem and <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1445379">@ui</a>.identification annotation.</SPAN></P><P><SPAN>10. Now preview the UI.</SPAN></P><P><SPAN>Now multi-input is enabled for <STRONG>company code</STRONG> field in Object page.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_0-1745951665376.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/256337i9BA486F2D1D379F0/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_0-1745951665376.png" alt="pavankumar_reddy90_0-1745951665376.png" /></span></P><P>On save in display mode it appears like below:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_1-1745951839802.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/256338iCAEED2226D15828A/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_1-1745951839802.png" alt="pavankumar_reddy90_1-1745951839802.png" /></span></P><P>In list page field it displays like below:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pavankumar_reddy90_2-1745951925181.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/256339i103D3A625311214B/image-size/large?v=v2&px=999" role="button" title="pavankumar_reddy90_2-1745951925181.png" alt="pavankumar_reddy90_2-1745951925181.png" /></span></P><P> </P><P> </P><P> </P>2025-04-29T20:46:31.881000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/new-mass-upload-of-test-cases-in-sap-cloud-alm/ba-p/14090247New Mass-Upload of Test Cases in SAP Cloud ALM2025-04-30T09:15:29.630000+02:00Daniel_Enderlihttps://community.sap.com/t5/user/viewprofilepage/user-id/2995<H2 id="toc-hId-1710039889">New Mass-Upload of Test Cases in SAP Cloud ALM</H2><P>It is now possible to upload a large number of test cases to SAP Cloud ALM using the mass upload feature.<BR />With this blog post I briefly describe the process.</P><H3 id="toc-hId-1642609103">1. Click on the Test Preparation app</H3><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Daniel_Enderli_0-1745996268427.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/256465i06FE5A8F9BFC4C14/image-size/medium?v=v2&px=400" role="button" title="Daniel_Enderli_0-1745996268427.png" alt="Daniel_Enderli_0-1745996268427.png" /></span></P><H3 id="toc-hId-1446095598">2. Navigate to the "Upload Button"</H3><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Daniel_Enderli_1-1745996434945.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/256469i4E3B7E946020B69F/image-size/medium?v=v2&px=400" role="button" title="Daniel_Enderli_1-1745996434945.png" alt="Daniel_Enderli_1-1745996434945.png" /></span></P><H3 id="toc-hId-1249582093">3. Download the template to fill it with your test cases<BR /><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Daniel_Enderli_3-1745996643898.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/256471iA743B2EED76CA526/image-size/medium?v=v2&px=400" role="button" title="Daniel_Enderli_3-1745996643898.png" alt="Daniel_Enderli_3-1745996643898.png" /></span></H3><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Daniel_Enderli_2-1745996615633.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/256470iB79396F676B56C93/image-size/medium?v=v2&px=400" role="button" title="Daniel_Enderli_2-1745996615633.png" alt="Daniel_Enderli_2-1745996615633.png" /></span></P><H3 id="toc-hId-1053068588">4. Perform the upload</H3><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Daniel_Enderli_4-1745996704551.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/256472iFBC2BF076F934DB3/image-size/medium?v=v2&px=400" role="button" title="Daniel_Enderli_4-1745996704551.png" alt="Daniel_Enderli_4-1745996704551.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Daniel_Enderli_5-1745996767591.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/256473iEDFF3EAA48527E79/image-size/medium?v=v2&px=400" role="button" title="Daniel_Enderli_5-1745996767591.png" alt="Daniel_Enderli_5-1745996767591.png" /></span></P><H1 id="toc-hId-598389645">Ideas and input for SAP</H1><UL><LI>What would certainly be helpful is downloading existing test cases in SAP Cloud ALM, editing them in Excel, and uploading them again.</LI><LI>The exchange and reuse of test cases between multiple SAP Cloud ALM projects would also be helpful.</LI><LI>SAP should also consider the easy storage of test cases from multiple projects into a central operational project. This is a requirement I hear from many customers.</LI></UL><H1 id="toc-hId-401876140">Conclusion</H1><P>In any case, the new mass upload of test cases is a very helpful feature and a first big step in the right direction.</P><P>It saves us a lot of time and makes test management much more efficient.</P><P>Thank you SAP for providing this functionality.</P><P> </P>2025-04-30T09:15:29.630000+02:00https://community.sap.com/t5/technology-blog-posts-by-sap/sap-btp-abap-environment-switch-to-digicert-g5-root-certificate-authority/ba-p/14090737SAP BTP ABAP Environment - Switch to DigiCert G5 Root Certificate Authority2025-04-30T17:37:27.896000+02:00FrankJentschhttps://community.sap.com/t5/user/viewprofilepage/user-id/4296<P>Current server certificates for the domains of the <A href="https://discovery-center.cloud.sap/serviceCatalog/abap-environment?tab=feature&region=all" target="_self" rel="nofollow noopener noreferrer">SAP BTP ABAP Environment</A> <SPAN>(aka "Steampunk") </SPAN>are issued by the <STRONG>DigiCert G2 Root Certificate Authority (CA)</STRONG>. Based on current recommendations, SAP is switching to the <STRONG>DigiCert TLS RSA4096 Root G5</STRONG> CA, see SAP Note <A href="https://me.sap.com/notes/3566727" target="_self" rel="noopener noreferrer">3566727</A> for more details. This switch applies to the SAP BTP Cloud Foundry Environment, to the SAP BTP ABAP Environment, and to other SAP services. New regions of the SAP BTP ABAP Environment from Q1 2025 are already set up with the DigiCert G5 Root CA. For existing regions of the SAP BTP ABAP Environment, the switch from the DigiCert G2 Root CA to the DigiCert G5 Root CA is currently planned for <STRONG>Q3/2025</STRONG>.</P><P> </P><H1 id="toc-hId-1580961944">Call to Action</H1><H3 id="toc-hId-1642613877">Inbound Connections</H3><P>If you manage trust stores of client applications/services, which connect to your SAP BTP ABAP Environment instance(s), by yourself, then add the <STRONG>DigiCert TLS RSA4096 Root G5</STRONG> CA to these trust stores to ensure that your applications/services still can connect to the SAP BTP ABAP Environment instance(s) when the new server certificates are used. This applies to all <A href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/supported-protocols-and-authentication-methods" target="_self" rel="noopener noreferrer">supported protocols</A>.</P><P>Since different (external) client applications / services are using different technical implementations for such trust stores, we cannot provide detailed instructions how to configure these trust stores.</P><H3 id="toc-hId-1446100372">Outbound Connections</H3><P>For outbound connections from your SAP BTP ABAP Environment instances, for example, towards other services in SAP BTP Cloud Foundry environment, please check the trust settings for the <STRONG>DigiCert TLS RSA4096 Root G5</STRONG> CA via the <A href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/maintain-certificate-trust-list" target="_self" rel="noopener noreferrer">Maintain Certificate Trust List</A> application. Since some releases, the Automatic Trust List Update feature is enabled and new certificates from the SAP trust list should have been added automatically to the trust store. If the CA is not contained in the list, click on Check for Updates and add the certificate, or add it manually. You can also download it <A href="https://github.com/sap-software/btp-trust-store/blob/main/required/pem/DigiCertTLSRSA4096RootG5.pem" target="_self" rel="nofollow noopener noreferrer">here</A>.</P><P> </P><H1 id="toc-hId-991421429">References</H1><UL><LI><SPAN>SAP Note <A href="https://me.sap.com/notes/3566727" target="_self" rel="noopener noreferrer">3566727</A> : Root Certificate Replacement in the SAP BTP, Cloud Foundry Environment</SPAN></LI><LI><SPAN><A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-btp-cloud-foundry-switching-to-higher-security-level-root-certificate/ba-p/14061965" target="_self">Blog Post</A>: SAP BTP Cloud Foundry: Switching to higher security level Root Certificate Authority</SPAN></LI><LI><SPAN><A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-btp-abap-environment-new-root-certificate-authority/ba-p/13571857" target="_self">Blog Post</A>: SAP BTP ABAP Environment – New Root Certificate Authority</SPAN></LI><LI><SPAN><A href="https://github.com/sap-software/btp-trust-store" target="_self" rel="nofollow noopener noreferrer">Github</A>: Trust Store for SAP BTP</SPAN></LI></UL>2025-04-30T17:37:27.896000+02:00https://community.sap.com/t5/application-development-and-automation-blog-posts/sap-community-escape-house-for-may-abap-cloud/ba-p/14073134SAP Community Escape House for May - ABAP Cloud2025-05-01T09:00:00.029000+02:00sheenamkhttps://community.sap.com/t5/user/viewprofilepage/user-id/142394<P><STRONG>Welcome to the Developer Challenge for the Month of May!!!! <SPAN>The </SPAN><SPAN class="lia-unicode-emoji"><span class="lia-unicode-emoji" title=":backhand_index_pointing_right:">👉</span></SPAN><SPAN> </SPAN><A href="https://sap-community-escape-house.cfapps.us10.hana.ondemand.com/" target="_self" rel="noopener noreferrer">SAP Community Escape House</A><SPAN> has a new addition!!</SPAN></STRONG></P><P><STRONG>Hope you all escaped alive from the SAP Build Escape House last month <span class="lia-unicode-emoji" title=":grinning_face:">😀</span></STRONG><STRONG> . So now let us r<SPAN>elax by extending </SPAN>our living room this month.</STRONG></P><P><STRONG><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP Community Escape House" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/253764i4F2D47CE0DD214D0/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-04-23 at 8.44.50 AM.png" alt="SAP Community Escape House" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP Community Escape House</span></span></STRONG></P><P>We will be focusing on <STRONG>ABAP</STRONG> with an emphasis on <STRONG>Extensibility</STRONG>. Like previous challenges, we will explore a crucial topic that allows customers and partners to tailor SAP standard software to their business needs. Extensibility covers various aspects, including:</P><UL><LI>Adjusting software behaviour beyond standard configurations.</LI><LI>Extending the data model.</LI><LI>Exposing additional data.</LI><LI>Modifying UI layouts, forms, and reports.</LI><LI>Creating new UI elements and applications.</LI></UL><P>You can get more details on Extensibility and the various options available by watching this video: <A href="https://www.youtube.com/watch?v=IPEotH-6ekI&t=786s" target="_blank" rel="noopener nofollow noreferrer">https://www.youtube.com/watch?v=IPEotH-6ekI&t=786s</A></P><H1 id="toc-hId-1579198506"> </H1><H1 id="toc-hId-1382685001"><STRONG>Task 0 – Preparation</STRONG></H1><P>We hope all of you might remember the 2024 ABAP Developer Challenge which was focused on ABAP CDS where we had created an end to end Fiori List Report from a database table. This year will take a further step and explore developer extensibility on the same Travel demo data.</P><OL><LI>Refer <A href="https://community.sap.com/t5/application-development-and-automation-discussions/task-0-pre-requisite-for-august-developer-challenge-quot-abap-core-data/td-p/13778243" target="_blank">Task0</A> of the 2024 ABAP Developer Challenge to complete the prerequisites.</LI><LI>Create the objects mentioned in the readme.md file in <A href="https://github.com/SAP-samples/sap-community-abap-developer-challenge/blob/main/README.md" target="_self" rel="nofollow noopener noreferrer">SAP GitHub Repository</A> for the base data model which will be extended.</LI><LI>Now you will have a table, a structure, a view and a data generator class.</LI></OL><P>For this year, all SAP Developer Challenges created by the<SPAN> </SPAN><A href="https://developers.sap.com/developer-advocates..html" target="_self" rel="noopener noreferrer">Developer Advocates</A><SPAN> </SPAN>will happen in the<SPAN> </SPAN><A href="https://sap-community-escape-house.cfapps.us10.hana.ondemand.com/" target="_blank" rel="noopener noreferrer">SAP Community Escape House</A><SPAN> </SPAN>(shout out to <A href="https://community.sap.com/t5/user/viewprofilepage/user-id/898" target="_blank">@nicoschoenteich</A> for his amazing creativity). Each month we will unlock a new room in the house with a specific focus. Completing a challenge means successfully escaping the room by solving a series of coding – or no-code<SPAN> </SPAN>– tasks/questions. This month let us explore ABAP Extensibility.</P><P>Here are the links to our previous challenges:</P><UL><LI><A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-developer-challenge-sap-community-escape-house-ui5/ba-p/13982639" target="_self">January</A>: UI5 </LI><LI><A href="https://community.sap.com/t5/integration-blog-posts/february-s-developer-challenge-in-sap-community-integration/ba-p/14004094" target="_self">February:</A> Integration Suite</LI><LI><A href="https://community.sap.com/t5/artificial-intelligence-and-machine-learning-blogs/sap-developer-challenge-march-sap-community-escape-house-ai/ba-p/14030669" target="_self">March</A>: AI</LI><LI><A href="https://community.sap.com/t5/application-development-and-automation-blog-posts/sap-community-escape-house-for-april-sap-build-%EF%B8%8F/ba-p/14064735" target="_self">April</A> : Build</LI></UL><H1 id="toc-hId-1572762875" id="toc-hId-1186171496">How to participate</H1><P><SPAN>Visit the</SPAN><SPAN> </SPAN><A href="https://sap-community-escape-house.cfapps.us10.hana.ondemand.com/" target="_blank" rel="noopener noreferrer">SAP Community Escape House</A><SPAN> </SPAN><SPAN>and enter your </SPAN><STRONG>numeric</STRONG><SPAN> SAP Community user ID.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="EscapeHouseLogin.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/249579i2F2AB24C5B2B35C4/image-size/large?v=v2&px=999" role="button" title="EscapeHouseLogin.png" alt="EscapeHouseLogin.png" /></span></SPAN></P><P><SPAN>If you don't know your user ID, click </SPAN><STRONG>Need Help?</STRONG><SPAN> This will display a link to your community settings page.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NeedHelp.png" style="width: 200px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/249580iC718744E4A1EEB5E/image-size/small?v=v2&px=200" role="button" title="NeedHelp.png" alt="NeedHelp.png" /></span></P><P><SPAN>Then you will see your ID here:</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="My Settings.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/249581i3FA49F0970406271/image-size/medium?v=v2&px=400" role="button" title="My Settings.png" alt="My Settings.png" /></span></SPAN></P><P><SPAN>Once you see the SAP Community Escape House, select the ABAP Living Room.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP Community Escape House - Available rooms" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/253766iED70C627E1A641CA/image-size/large?v=v2&px=999" role="button" title="ABAP - pic 2.png" alt="SAP Community Escape House - Available rooms" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP Community Escape House - Available rooms</span></span></P><P><SPAN>The user interface of an escape room includes the room itself as well as a terminal. You can click the objects in the room to receive tips. Like in a real (physical) escape room, you will have to try out a few things and explore the room until you receive helpful tips and, eventually, instructions. These tips and instructions are printed in the terminal next to the room. The terminal is also used to submit solutions to tasks. Read the instructions you receive carefully to understand how.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP Community Escape House - ABAP room" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/253771iC2CD4581F67F72C3/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-04-23 at 9.04.26 AM.png" alt="SAP Community Escape House - ABAP room" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP Community Escape House - ABAP room</span></span></P><P><SPAN>If you successfully escape the room (you will know when that happens), you will receive a badge in the SAP Community. We will assign the badges once the challenge closes.</SPAN></P><H1 id="toc-hId-989657991"> </H1><H1 id="toc-hId-793144486"><SPAN>The schedule</SPAN></H1><P>The ABAP room will be unlocked on May 5th and will stay unlocked until the end of the year. However, the challenge closes on May 31st, so you will have to escape the room until then to qualify for a badge. Unlike the previous year, this SAP Developer Challenge does not consist of weekly sub-challenges. The next room (next challenge) will be unlocked in June.</P><H1 id="toc-hId-596630981"> </H1><H1 id="toc-hId-1376249370" id="toc-hId-400117476">Useful links for the challenge</H1><OL><LI><A href="https://learning.sap.com/learning-journeys/acquire-core-abap-skills/extending-dictionary-objects_b0c9bfa6-d415-408c-baed-2f15fb3a977f" target="_blank" rel="noopener noreferrer">https://learning.sap.com/learning-journeys/acquire-core-abap-skills/extending-dictionary-objects_b0c9bfa6-d415-408c-baed-2f15fb3a977f</A></LI><LI><A href="https://learning.sap.com/learning-journeys/acquire-core-abap-skills/extending-cds-views_fab548c5-6438-41e1-8384-c5190f13ea7b" target="_blank" rel="noopener noreferrer">https://learning.sap.com/learning-journeys/acquire-core-abap-skills/extending-cds-views_fab548c5-6438-41e1-8384-c5190f13ea7b</A></LI><LI><A href="https://www.youtube.com/shorts/dnAALtV0FCE" target="_blank" rel="noopener nofollow noreferrer">https://www.youtube.com/shorts/dnAALtV0FCE</A></LI><LI><A href="https://help.sap.com/docs/abap-cloud/abap-rap/developing-unit-tests-for-cds-view?locale=en-US" target="_blank" rel="noopener noreferrer">https://help.sap.com/docs/abap-cloud/abap-rap/developing-unit-tests-for-cds-view?locale=en-US</A></LI></OL><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class=""><P><STRONG>Good luck and happy escaping!</STRONG></P></DIV></DIV></DIV></DIV></DIV></DIV>2025-05-01T09:00:00.029000+02:00https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-members/amdp-class-database-procedure/ba-p/14091914AMDP Class - Database procedure2025-05-05T10:31:42.902000+02:00Krishnaveni_Palanisamyhttps://community.sap.com/t5/user/viewprofilepage/user-id/1593289<P><STRONG>AMDP Class</STRONG><STRONG> </STRONG></P><P>An AMDP (ABAP Managed Database Procedure) class is used to write complex logic directly in the SAP HANA database using SQL Script, instead of writing everything in ABAP.</P><P>This helps to:</P><UL><LI>Improve performance by processing data inside the database.</LI><LI>Reduce load on the application layer.</LI><LI>Speed up reports and data-heavy programs.</LI></UL><P><STRONG><EM> </EM></STRONG>Open Eclipse.</P><P><STRONG>Step 1: </STRONG>Create a package.</P><P><STRONG> </STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Krishnaveni_Palanisamy_14-1746180496124.png" style="width: 595px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/257091i474594CA78F0A948/image-dimensions/595x607?v=v2" width="595" height="607" role="button" title="Krishnaveni_Palanisamy_14-1746180496124.png" alt="Krishnaveni_Palanisamy_14-1746180496124.png" /></span></P><P> </P><P>Give basic properties.</P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Krishnaveni_Palanisamy_15-1746180496127.png" style="width: 627px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/257092i1057244A79CD1FED/image-dimensions/627x608?v=v2" width="627" height="608" role="button" title="Krishnaveni_Palanisamy_15-1746180496127.png" alt="Krishnaveni_Palanisamy_15-1746180496127.png" /></span></P><P> </P><P>Select Transpost request.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Krishnaveni_Palanisamy_16-1746180496133.png" style="width: 613px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/257094i274122B48A2D7FFC/image-dimensions/613x576?v=v2" width="613" height="576" role="button" title="Krishnaveni_Palanisamy_16-1746180496133.png" alt="Krishnaveni_Palanisamy_16-1746180496133.png" /></span></P><P><STRONG>STEP2 :</STRONG> Create AMDP class</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Krishnaveni_Palanisamy_17-1746180496139.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/257098i8AD65E3778FE3544/image-size/medium?v=v2&px=400" role="button" title="Krishnaveni_Palanisamy_17-1746180496139.png" alt="Krishnaveni_Palanisamy_17-1746180496139.png" /></span></P><P><STRONG> </STRONG>The class will be like below.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Krishnaveni_Palanisamy_18-1746180496142.png" style="width: 641px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/257097i5EDC1D00AF53B25C/image-dimensions/641x449?v=v2" width="641" height="449" role="button" title="Krishnaveni_Palanisamy_18-1746180496142.png" alt="Krishnaveni_Palanisamy_18-1746180496142.png" /></span></P><P> </P><P>To convert the normal class into the AMDP class, use the interface <STRONG>IF_AMDP_MARKER_HDB</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Krishnaveni_Palanisamy_19-1746180496151.png" style="width: 637px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/257099i5E5070B4397EF1F8/image-dimensions/637x254?v=v2" width="637" height="254" role="button" title="Krishnaveni_Palanisamy_19-1746180496151.png" alt="Krishnaveni_Palanisamy_19-1746180496151.png" /></span></P><P> </P><P>Create class attributes, and to implement the method, click on <STRONG>CTRL+1.</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Krishnaveni_Palanisamy_20-1746180496164.png" style="width: 643px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/257108iD91187A5AA44DD13/image-dimensions/643x357?v=v2" width="643" height="357" role="button" title="Krishnaveni_Palanisamy_20-1746180496164.png" alt="Krishnaveni_Palanisamy_20-1746180496164.png" /></span></P><P>The AMDP procedure will run on <STRONG>HANA DB</STRONG>. The memory location is not available at the database level. It is only available at the application level, so we have to pass the parameter with a <STRONG>pass-by value</STRONG>.</P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Krishnaveni_Palanisamy_21-1746180496168.png" style="width: 660px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/257106i1163F86577E52396/image-dimensions/660x688?v=v2" width="660" height="688" role="button" title="Krishnaveni_Palanisamy_21-1746180496168.png" alt="Krishnaveni_Palanisamy_21-1746180496168.png" /></span></P><P><STRONG><U>Two Types of AMDP Methods :</U></STRONG></P><P>In AMDP, we can write two types of methods:</P><OL><LI><STRONG>Database Procedure</STRONG></LI></OL><UL><LI>This is a <STRONG>normal AMDP method</STRONG> written in SQL Script.</LI><LI>It can be used to <STRONG>read or modify data</STRONG>.</LI><LI>Called directly from ABAP like a regular method</LI></UL><OL><LI><STRONG>Database Function (Table Function)</STRONG></LI></OL><UL><LI>This is used with <STRONG>CDS Views</STRONG> to return a result set like a virtual table.</LI><LI>Implemented using an <STRONG>AMDP method</STRONG>, but used as a <STRONG>function in CDS</STRONG>.</LI><LI>Always <STRONG>read-only</STRONG>.</LI></UL><P>Here we will see <STRONG>Database Procedure.</STRONG></P><P>To convert the <STRONG>method to the AMDP method.</STRONG></P><UL><LI>To convert the normal method to the AMDP method write some code to the implementation part of methods.</LI></UL><P>Specify the target database in which you want to create the database procedure, along with the database language to be used. Additionally, list all the objects (such as tables, views, procedures, etc.) that need to be accessed within the specified schema.</P><UL><LI>2.AMDP procedure is <STRONG>not implicit</STRONG> in client handling. So, we need one more parameter to pass the client.</LI></UL><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Krishnaveni_Palanisamy_22-1746180496174.png" style="width: 624px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/257105i2CC3B5C26BC2ECB6/image-dimensions/624x447?v=v2" width="624" height="447" role="button" title="Krishnaveni_Palanisamy_22-1746180496174.png" alt="Krishnaveni_Palanisamy_22-1746180496174.png" /></span></P><P>An error will occur when using the Database table in the AMDP method.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Krishnaveni_Palanisamy_23-1746180496179.png" style="width: 631px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/257111iA9AFB722EFA92494/image-dimensions/631x682?v=v2" width="631" height="682" role="button" title="Krishnaveni_Palanisamy_23-1746180496179.png" alt="Krishnaveni_Palanisamy_23-1746180496179.png" /></span></P><P><STRONG>Step 3:</STRONG></P><P>Create a program to consume the AMDP class.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Krishnaveni_Palanisamy_24-1746180496194.png" style="width: 625px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/257113i03E883FD6058A2B6/image-dimensions/625x272?v=v2" width="625" height="272" role="button" title="Krishnaveni_Palanisamy_24-1746180496194.png" alt="Krishnaveni_Palanisamy_24-1746180496194.png" /></span></P><P>Search PROGRAM and select ABAP program.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Krishnaveni_Palanisamy_25-1746180496199.png" style="width: 593px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/257112i592D1CA8F63A018D/image-dimensions/593x399?v=v2" width="593" height="399" role="button" title="Krishnaveni_Palanisamy_25-1746180496199.png" alt="Krishnaveni_Palanisamy_25-1746180496199.png" /></span></P><P>Write the below code.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Krishnaveni_Palanisamy_26-1746180496201.png" style="width: 608px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/257114i2D03BFAA62272A34/image-dimensions/608x337?v=v2" width="608" height="337" role="button" title="Krishnaveni_Palanisamy_26-1746180496201.png" alt="Krishnaveni_Palanisamy_26-1746180496201.png" /></span></P><P> </P><P><STRONG>Output :</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Krishnaveni_Palanisamy_27-1746180496203.png" style="width: 450px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/257115iBAA7022A97893E72/image-dimensions/450x485?v=v2" width="450" height="485" role="button" title="Krishnaveni_Palanisamy_27-1746180496203.png" alt="Krishnaveni_Palanisamy_27-1746180496203.png" /></span></P><P> </P><P><STRONG>Conclusion:</STRONG></P><P>AMDP procedures are a powerful way to push complex logic to the SAP HANA database, allowing you to handle large volumes of data more efficiently.</P><P>Use AMDP procedures when:</P><UL><LI>You want to <STRONG>improve performance</STRONG> with code pushdown.</LI><LI>You need to <STRONG>process data-heavy logic</STRONG> directly in HANA.</LI><LI>You want to keep your ABAP code clean and efficient.</LI></UL>2025-05-05T10:31:42.902000+02:00https://community.sap.com/t5/technology-blog-posts-by-sap/customer-amp-partner-roundtable-for-sap-btp-abap-environment-23-demo-time/ba-p/14093815Customer & Partner Roundtable for SAP BTP ABAP Environment #23 - demo time in ADT2025-05-07T11:19:49.506000+02:00iwona_hahnhttps://community.sap.com/t5/user/viewprofilepage/user-id/4326<H3 id="toc-hId-1839217652"><STRONG><SPAN class="lia-unicode-emoji"><span class="lia-unicode-emoji" title=":backhand_index_pointing_right:">👉</span></SPAN> The call for contributions for one of the upcoming roundtables is open! </STRONG></H3><P> </P><DIV><TABLE><TBODY><TR><TD>If you want to show a demo or share a use case scenario for SAP BTP ABAP Environment send us an<SPAN> </SPAN><A href="mailto:sap_btp_abap_environment@sap.com" target="_blank" rel="noopener nofollow noreferrer">email</A> and we will get back to you.</TD></TR></TBODY></TABLE><SPAN> </SPAN></DIV><H2 id="toc-hId-1513621428">Introduction</H2><P> </P><DIV><SPAN class="">A</SPAN><SPAN class="">s<SPAN> </SPAN></SPAN><A href="https://www.sap.com/products/technology-platform/abap/environment.html" target="_blank" rel="noopener noreferrer"><SPAN class="">SAP BTP ABAP environment (aka Steampunk)</SPAN><SPAN> </SPAN></A>and ABAP Cloud<SPAN> </SPAN><SPAN class="">became </SPAN><SPAN class="">more popular</SPAN><SPAN class=""><SPAN> </SPAN>inside and outside of SAP, there is a high demand for rolling out the latest product news and updates, asking questions, and showing demos. </SPAN><BR /><BR /><SPAN class="lia-unicode-emoji"><span class="lia-unicode-emoji" title=":light_bulb:">💡</span></SPAN> You can find the slides presented, recordings, and further references from the previous roundtables in this<SPAN> </SPAN><A href="https://github.com/iwonahahn/SAP-BTP-ABAP-Environment-Roundtable/tree/main" target="_blank" rel="noopener nofollow noreferrer">GitHub repository</A>.<BR /><BR /></DIV><DIV><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="iwona_hahn_1-1711369871866.jpeg" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/85948i899EEF37EF74A54C/image-size/medium?v=v2&px=400" role="button" title="iwona_hahn_1-1711369871866.jpeg" alt="iwona_hahn_1-1711369871866.jpeg" /></span><H2 id="toc-hId-1317107923"><BR />Meeting Information<BR /><BR /></H2><STRONG>When: </STRONG><BR /><UL><LI><STRONG><SPAN class="">May 20th</SPAN></STRONG>, 10:00 - 11:00 AM CET –<SPAN> </SPAN><A href="https://sap-se.zoom.us/meeting/register/dFJhC-2mQhm4SG1G25y4jQ" target="_blank" rel="nofollow noopener noreferrer">Zoom Meeting</A> (<STRONG>please register</STRONG><SPAN> </SPAN>in advance) </LI></UL></DIV><DIV> </DIV><DIV><STRONG>Who:</STRONG><UL><LI>All interested <STRONG>customers, partners,</STRONG> and <STRONG>stakeholders</STRONG> are invited to join this roundtable</LI><LI><STRONG>BTP ABAP team</STRONG>:<UL class="lia-list-style-type-circle"><LI><FONT color="#FF0000"><A href="https://community.sap.com/t5/user/viewprofilepage/user-id/4296" target="_blank">Frank Jentsch</A> <FONT color="#000000"><SPAN class="">(Product Lead for SAP BTP ABAP Environment)</SPAN></FONT></FONT></LI><LI><A href="https://community.sap.com/t5/user/viewprofilepage/user-id/4326" target="_self"><SPAN class="">Iwona Hahn</SPAN></A> <SPAN class="">(Product Management)</SPAN></LI><LI><FONT color="#FF0000"><FONT color="#000000"><SPAN class=""><A href="https://community.sap.com/t5/user/viewprofilepage/user-id/1641196" target="_blank">Nora Klemp</A> (Product Management)</SPAN></FONT></FONT></LI><LI><FONT color="#000000"><A href="https://profile.sap.com/profile/id4a4e3eedd6dc973f8402281af6626a942e0467d4a090a1da8331283255fa50c3" target="_blank" rel="noopener noreferrer">Shyam Balachandran</A> (Development Expert)</FONT></LI><LI><A href="https://community.sap.com/t5/user/viewprofilepage/user-id/349817" target="_blank">Dr. Oliver Brein</A> (Development Expert)</LI><LI><A href="https://profile.sap.com/profile/idaa22cfe8ab7ab3b3c5f26e249b57e8208f9b1e513525a03e0a4923e8421e6457" target="_blank" rel="noopener noreferrer">Simon Dold</A> (Developer)</LI></UL></LI></UL></DIV><DIV><STRONG>Preliminary Agenda:</STRONG><BR /><UL><LI>Product update for SAP BTP ABAP Environment release 2505</LI><LI><FONT color="#000000"><SPAN><STRONG>Demos in ABAP Development Tools (ADT)</STRONG>:</SPAN></FONT><UL><LI><FONT color="#000000">Quick Fiori app generation (Shyam Balachandran)</FONT></LI><LI><FONT color="#000000">Swagger support for OData services (Shyam Balachandran)</FONT></LI><LI><FONT color="#000000">UX improvements of generator framework (Shyam Balachandran)</FONT></LI><LI><FONT color="#000000">HANA PLV tracing incl. SQL statement viewer in ADT Cross Trace (Dr. Oliver Brein)</FONT></LI><LI><FONT color="#000000">Enhancements of Manage Software Components app (Simon Dold)</FONT></LI></UL></LI><LI>Q&A </LI></UL><SPAN>Looking forward to meeting you!</SPAN></DIV><DIV> </DIV><DIV><A href="https://sap-se.zoom.us/meeting/register/dFJhC-2mQhm4SG1G25y4jQ" target="_blank" rel="noopener nofollow noreferrer"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="iwona_hahn_2-1711369871851.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/85947i01677A9AE51AAC1D/image-size/medium?v=v2&px=400" role="button" title="iwona_hahn_2-1711369871851.png" alt="iwona_hahn_2-1711369871851.png" /></span></A><BR /><BR /><SPAN>Check out our</SPAN><SPAN> </SPAN><A href="https://pages.community.sap.com/topics/btp-abap-environment" target="_blank" rel="noopener noreferrer">SAP Business Technology ABAP Environment</A><SPAN> page in SAP Community </SPAN><SPAN>for </SPAN><SPAN>product </SPAN><SPAN>updates </SPAN><SPAN>and </SPAN><SPAN>upcoming events.</SPAN></DIV>2025-05-07T11:19:49.506000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/ui-datapoint-with-comparison-field-in-rap/ba-p/14095299@UI.dataPoint with Comparison Field in RAP2025-05-08T09:37:12.601000+02:00Krishnaveni_Palanisamyhttps://community.sap.com/t5/user/viewprofilepage/user-id/1593289<P> </P><P><STRONG><a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1445379">@ui</a>.dataPoint </STRONG></P><P>In <STRONG>RAP (Restful ABAP Programming Model)</STRONG>, the <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1445379">@ui</a>.dataPoint annotation is used to define how <STRONG>individual fields</STRONG> should be presented in a UI, especially in <STRONG>SAP Fiori Elements</STRONG> applications</P><P>This annotation provides <STRONG>semantic metadata</STRONG> for a field such as:</P><UL><LI><STRONG>Title</STRONG></LI><LI><STRONG>Criticality</STRONG> (status-based coloring)</LI><LI><STRONG>Visualization</STRONG> (e.g., progress bar)</LI><LI><STRONG>Target or forecast values</STRONG></LI></UL><P>It is commonly used in <STRONG>object pages</STRONG>, <STRONG>analytical cards</STRONG>, or <STRONG>list reports</STRONG> to visually highlight important values.</P><UL class="lia-list-style-type-square"><LI><STRONG>Use Case: Data Point with Comparison Field</STRONG></LI></UL><P>We will walk through how to dynamically control the <STRONG>color</STRONG> of a field (e.g., Fees) using a <STRONG>comparison field</STRONG>.</P><UL><LI><STRONG>Step1 :</STRONG> Create a comparison field .</LI></UL><P>In your <STRONG>root CDS view</STRONG>, define a derived field based on some logic to act as the <STRONG>criticality field</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Krishnaveni_Palanisamy_0-1746612437302.png" style="width: 800px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/258409i418D6757CA18E978/image-dimensions/800x94?v=v2" width="800" height="94" role="button" title="Krishnaveni_Palanisamy_0-1746612437302.png" alt="Krishnaveni_Palanisamy_0-1746612437302.png" /></span></P><UL><LI><STRONG>Step2 :</STRONG> Annotate in Metadata Extension</LI></UL><P>In the <STRONG>metadata extension</STRONG> of the root view, annotate the field using <STRONG><a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1445379">@ui</a>.dataPoint</STRONG>.</P><P>Key properties:</P><UL><LI>Type : #AS_DATAPOINT</LI><LI>Title : Display label for the field</LI><LI>Qualifier: Uniquely identifies the data point (if multiple exist)</LI><LI>Visualization: Display the field appearance in UI.</LI><LI>Criticality: Reference to your comparison field that controls the color</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Krishnaveni_Palanisamy_1-1746612437304.png" style="width: 735px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/258410i2E9D893BA1ABD3B6/image-dimensions/735x197?v=v2" width="735" height="197" role="button" title="Krishnaveni_Palanisamy_1-1746612437304.png" alt="Krishnaveni_Palanisamy_1-1746612437304.png" /></span></P><P> </P><UL><LI><STRONG>Step 3: Implement Behavior and Service Layers</STRONG></LI></UL><P>To expose this in Fiori:</P><UL><LI>Define a behavior definition (for managed or unmanaged BO).</LI><LI>Create a service definition for the CDS view.</LI><LI>Bind it to a service binding (e.g., for OData V4 / Fiori Elements).</LI></UL><P><STRONG><span class="lia-unicode-emoji" title=":direct_hit:">🎯</span> Output :</STRONG></P><P><STRONG>The Fees field will be displayed:</STRONG></P><UL><LI>With dynamic color based on the comparison field value:</LI><UL><LI>🟢 Green — Positive</LI><LI>🟠 Orange — Critical</LI><LI><span class="lia-unicode-emoji" title=":red_circle:">🔴</span> Red — Negative</LI></UL></UL><P><STRONG> </STRONG><STRONG>Object page.</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Krishnaveni_Palanisamy_2-1746612437310.png" style="width: 757px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/258411i5FED2D34B674DBDC/image-dimensions/757x237?v=v2" width="757" height="237" role="button" title="Krishnaveni_Palanisamy_2-1746612437310.png" alt="Krishnaveni_Palanisamy_2-1746612437310.png" /></span></P><P><STRONG> </STRONG><STRONG>List Page:</STRONG></P><P>Based on the comparison of the field value the F<STRONG>ees</STRONG> field color will be changed.</P><P><STRONG>Green.</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Krishnaveni_Palanisamy_3-1746612437312.png" style="width: 739px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/258412i032CD6F5810EA959/image-dimensions/739x316?v=v2" width="739" height="316" role="button" title="Krishnaveni_Palanisamy_3-1746612437312.png" alt="Krishnaveni_Palanisamy_3-1746612437312.png" /></span></P><P> </P><P><STRONG>Red.</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Krishnaveni_Palanisamy_4-1746612437314.png" style="width: 746px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/258413iFF5DA66178472976/image-dimensions/746x194?v=v2" width="746" height="194" role="button" title="Krishnaveni_Palanisamy_4-1746612437314.png" alt="Krishnaveni_Palanisamy_4-1746612437314.png" /></span></P><P> </P><P><STRONG>Orange.</STRONG></P><P><STRONG> </STRONG><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Krishnaveni_Palanisamy_5-1746612437316.png" style="width: 759px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/258414i5E2E7821FF98512D/image-dimensions/759x220?v=v2" width="759" height="220" role="button" title="Krishnaveni_Palanisamy_5-1746612437316.png" alt="Krishnaveni_Palanisamy_5-1746612437316.png" /></span></P><P> </P><P><STRONG>Conclusion:</STRONG></P><P>By leveraging <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1445379">@ui</a>.dataPoint, developers can deliver data-rich, visually intuitive, Fiori-compliant UIs directly from the backend using CDS views—without needing to build custom front-end logic.</P><P>This enhances both developer productivity and end-user experience in Fiori Elements apps.</P>2025-05-08T09:37:12.601000+02:00