https://raw.githubusercontent.com/ajmaradiaga/feeds/main/scmt/topics/SAP-BTP-ABAP-environment-blog-posts.xml SAP Community - SAP BTP, ABAP environment 2026-02-25T00:00:25.757785+00:00 python-feedgen SAP BTP, ABAP environment blog posts in SAP Community https://community.sap.com/t5/technology-blog-posts-by-sap/sap-btp-abap-environment-customer-amp-partner-roundtable-update-for-2026/ba-p/14304337 SAP BTP ABAP Environment Customer & Partner Roundtable โ€“ Update for 2026 2026-01-14T13:58:33.145000+01:00 Burcu_Karlidag https://community.sap.com/t5/user/viewprofilepage/user-id/151005 <P>We would like to share an update to the <STRONG>SAP BTP ABAP Environment Customer &amp; Partner Roundtable</STRONG> as we kick off the <STRONG>2026 session series</STRONG>.</P><H2 id="toc-hId-1787735747"><STRONG>Whatโ€™s new in 2026?</STRONG></H2><P>As of 2026, the roundtable sessions are hosted on <STRONG>Microsoft Teams</STRONG> instead of Zoom.</P><P>The roundtable is a monthly series taking place <STRONG>on the first Tuesday of every month 10:00 - 11:00 CET</STRONG>.</P><H2 id="toc-hId-1591222242"><STRONG>Schedule &amp; Calendar Invitation</STRONG></H2><P><span class="lia-unicode-emoji" title=":calendar:">๐Ÿ“…</span>&nbsp;The first session of the 2026 series takes place on <STRONG>3 February 2026.</STRONG></P><P><span class="lia-unicode-emoji" title=":backhand_index_pointing_right:">๐Ÿ‘‰</span><STRONG>Download the</STRONG>&nbsp;<STRONG><A href="https://github.com/iwonahahn/SAP-BTP-ABAP-Environment-Roundtable/releases/download/v26/SAP.BTP.ABAP.Environment.Customer.und.Partner.Roundtable.ics" target="_self" rel="nofollow noopener noreferrer">.ics calendar file</A> for the full 2026 series</STRONG>&nbsp;and&nbsp;import it directly into your calendar.<BR />Each calendar entry already includes the Microsoft Teams meeting link.</P><P>Microsoft Teams meeting link (valid for the entire 2026 series): <A href="https://teams.microsoft.com/l/meetup-join/19%3ameeting_YTE0YzFlNGMtMDA2NC00NThlLWEzYWQtNWExNzU3MmRmNGE1%40thread.v2/0?context=%7b%22Tid%22%3a%2242f7676c-f455-423c-82f6-dc2d99791af7%22%2c%22Oid%22%3a%223d2a93aa-8f6e-4294-826f-80727ddf8588%22%7d" target="_self" rel="nofollow noopener noreferrer">Microsoft Teams meeting link</A>&nbsp;</P><H2 id="toc-hId-1394708737"><STRONG>Agenda, Slides &amp; Recordings โ€“ Single Access Point</STRONG></H2><P>All agendas, slides, recordings, and updates from past and current sessions are published centrally via the<BR /><A href="https://pages.community.sap.com/topics/btp-abap-environment/customer-partner-roundtable" target="_self" rel="noopener noreferrer"><STRONG>SAP Community โ€“ SAP BTP ABAP Environment Customer &amp; Partner Roundtable.</STRONG></A></P><H2 id="toc-hId-1198195232"><STRONG>Looking ahead</STRONG></H2><P>We look forward to welcoming you to the first session on <STRONG>3 February 2026</STRONG>.</P><P>Agenda:</P><UL><LI><STRONG>Welcome &amp; Introduction new session format</STRONG></LI><LI><STRONG>Product updates</STRONG></LI><LI><STRONG>E-Mail Templates incl. demo</STRONG></LI><LI><STRONG>Business Configuration Sets incl. demo</STRONG></LI></UL><P>Weโ€™re looking forward to another year of open discussions with our customers and partners around <STRONG>SAP BTP ABAP Environment</STRONG>.</P> 2026-01-14T13:58:33.145000+01:00 https://community.sap.com/t5/technology-blog-posts-by-members/blue-green-deployment-in-sap-how-btp-s-4hana-cloud-public-edition-and/ba-p/14308969 Blueโ€‘Green Deployment in SAP: How BTP, S/4HANA Cloud Public Edition, and Commerce Cloud Deliver(NZD) 2026-01-16T21:09:22.059000+01:00 vaibhav31 https://community.sap.com/t5/user/viewprofilepage/user-id/3812 <P>SAP utilizes blue-green deployment strategies across several of its cloud offerings to achieve zero-downtime updates and minimize release risk. Blueโ€‘green is the default way many SAP cloud services roll out change without interrupting users: run <EM>Blue</EM> (live) and <EM>Green</EM> (new) sideโ€‘byโ€‘side, verify, then switch traffic. If something misbehaves, point traffic back to Blueโ€”fast</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="vaibhav31_0-1768592988668.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/362113iF3944C654DB1A870/image-size/medium/is-moderation-mode/true?v=v2&amp;px=400" role="button" title="vaibhav31_0-1768592988668.png" alt="vaibhav31_0-1768592988668.png" /></span></P><P>&nbsp;</P><P>1) SAP BTP (Cloud Foundry runtime): Blueโ€‘Green for MTAs</P><P>What happens</P><UL><LI>Deploy the new MTA as <EM>Green</EM> next to <EM>Blue</EM>; the deployer creates โ€œidleโ€ apps and temporary routes (often with an -idle suffix).</LI><LI>After tests, resume to remap productive routes to Green, clean up temporary routes, and remove the old Blue apps.</LI></UL><P>Command youโ€™ll actually run</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="vaibhav31_1-1768593174703.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/362114i4CDA7AB217B1C3A4/image-size/medium?v=v2&amp;px=400" role="button" title="vaibhav31_1-1768593174703.png" alt="vaibhav31_1-1768593174703.png" /></span></P><P>Important restrictions</P><UL><LI>Supported only for Cloud Foundry apps; not for bound services such as workflow content or HTML5 repo content. Plan compatibility (DB schema, UAA) in advance.</LI></UL><P>Nice to know</P><UL><LI>SAPโ€™s Community guide walks through the approach and its benefits for missionโ€‘critical app <A href="https://help.sap.com/docs/btp/sap-business-technology-platform/blue-green-deployment-strategy" target="_blank" rel="noopener noreferrer">[help.sap.com]</A></LI></UL><P>2) SAP S/4HANA Cloud Public Edition: Blueโ€‘Green Uptime</P><P>SAP uses a blueโ€‘green uptime window to complete most upgrade/update work while users can still log in. Typical goals: โ‰ค5 minutes downtime, with a roadmap toward zero.</P><P>How it behaves</P><UL><LI>Uptime can begin ~12 hours before the maintenance window; users continue most dayโ€‘toโ€‘day work.</LI><LI>Restrictions apply to safeguard consistency (e.g., transport release, certain migration activities).</LI><LI>Landscape coverage: blueโ€‘green currently applies to all systems in 3โ€‘system landscapes and to production in 2โ€‘system landscapes.</LI></UL><P><A href="https://www.sap.com/documents/2022/12/26c42391-5a7e-0010-bca6-c68f7e60039b.html?url_id=text-glo-404-reclink" target="_blank" rel="noopener noreferrer">SAP S/4HANA Cloud Public Edition - Software Lifecycle Management for Customers</A></P><P>What to tell the business</P><UL><LI>โ€œYou can keep transacting during uptime; a short logoff occurs only for the final switch.โ€ (Share the permitted/blocked activities list from the SAP blog before each release. <A href="https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-sap/s-4hana-cloud-public-edition-systems-behaviour-during-blue-green-deployment/ba-p/14261971" target="_blank">[community.sap.com]</A></LI></UL><P>3) SAP Commerce Cloud: Preview in Green, Then Cut Over</P><P>Purpose<BR />Preview the release in the production environment (but on isolated endpoints) before users see it. Green and Blue share the same live database, which enables realistic checks while avoiding duplicate data migrations.</P><P>Scope of Green</P><UL><LI>You can create Green endpoints only for Storefront, JS Storefront, and APIโ€”ideal for experience and integration validation.</LI><LI>The Green preview exists for ~2 hours by default; accept or itโ€™s automatically removed.</LI><LI>Single replica by default in Green; scale if needed.</LI><LI>Practical implication: keep heavy write/admin processes (Backoffice, background jobs, Solr changes) on Blue until cutover; SAP advises avoiding blueโ€‘green for complex DB or Backoffice/Solr changes. <A href="https://help.sap.com/docs/SAP_COMMERCE_CLOUD_PUBLIC_CLOUD/0fa6bcf4736c46f78c248512391eb467/070e0be7499a4d14aa08917bcd338798.html?q=scalable+sandbox" target="_blank" rel="noopener noreferrer">[help.sap.com]</A></LI></UL><P>Sideโ€‘byโ€‘Side Benefits (Quick Comparison)</P><TABLE><TBODY><TR><TD><P>Feature</P></TD><TD><P>Why it helps</P></TD></TR><TR><TD><P>Zero/nearโ€‘zero downtime</P></TD><TD><P>Routerโ€‘level switch keeps users online; S/4HANA aims for โ‰ค5 min today. <A href="https://help.sap.com/docs/btp/sap-business-technology-platform/blue-green-deployment-strategy" target="_blank" rel="noopener noreferrer">[help.sap.com]</A>, <A href="https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-sap/s-4hana-cloud-public-edition-systems-behaviour-during-blue-green-deployment/ba-p/14261971" target="_blank">[community.sap.com]</A></P></TD></TR><TR><TD><P>Instant rollback</P></TD><TD><P>Point traffic back to Blue if defects appear. <A href="https://help.sap.com/docs/btp/sap-business-technology-platform/blue-green-deployment-strategy" target="_blank" rel="noopener noreferrer">[help.sap.com]</A>, <A href="https://community.sap.com/t5/crm-and-cx-blog-posts-by-sap/an-introduction-to-blue-green-deployment-for-sap-commerce-cloud/ba-p/13548232" target="_blank">[community.sap.com]</A></P></TD></TR><TR><TD><P>Lower release risk</P></TD><TD><P>Validate Green in productionโ€‘identical conditions (routes in BTP; preview endpoints in Commerce Cloud). <A href="https://help.sap.com/docs/btp/sap-business-technology-platform/blue-green-deployment-strategy" target="_blank" rel="noopener noreferrer">[help.sap.com]</A>, <A href="https://help.sap.com/docs/SAP_COMMERCE_CLOUD_PUBLIC_CLOUD/0fa6bcf4736c46f78c248512391eb467/070e0be7499a4d14aa08917bcd338798.html?q=scalable+sandbox" target="_blank" rel="noopener noreferrer">[help.sap.com]</A></P></TD></TR></TBODY></TABLE><P>Design Patterns &amp; Guardrails</P><P>1) Backwardโ€‘compatible change sets</P><UL><LI>Keep DB changes additive until the next cycle; avoid breaking contracts during the window. (SAP BTP help explicitly calls out version compatibility across DB/UAA.)</LI></UL><P>2) Feature flags + canary checks</P><UL><LI>Gate risky features behind toggles; smokeโ€‘test Green via its temporary routes (BTP) or preview endpoints (Commerce) before promotion.</LI></UL><P>3) Capacity planning</P><UL><LI>Expect temporarily doubled instances during BTP testing (both Blue and Green running). Budget memory/instances accordingly.</LI></UL><P>4) Know when <EM>not</EM> to use blueโ€‘green (Commerce)</P><UL><LI>Skip blueโ€‘green for complex schema changes, Backoffice/Solr modifications, or nonโ€‘backwardโ€‘compatible changesโ€”use a different rollout plan.</LI></UL><P>5) Align with S/4HANA blueโ€‘green uptime policy</P><UL><LI>Socialize whatโ€™s allowed vs. blocked during uptime; schedule transports/data migration outside uptime.</LI></UL><P>Thanks for the read.&nbsp;</P><P>Cheers, VS</P> 2026-01-16T21:09:22.059000+01:00 https://community.sap.com/t5/technology-blog-posts-by-sap/navigate-sap-fiori-launchpad-with-ease-launch-apps-via-transaction-codes/ba-p/14303662 Navigate SAP Fiori launchpad with Ease: Launch Apps via Transaction Codes 2026-01-19T16:39:27.978000+01:00 Aparna_N https://community.sap.com/t5/user/viewprofilepage/user-id/181564 <P class="lia-align-justify" style="text-align : justify;"><FONT size="4"><STRONG><SPAN>Overview</SPAN></STRONG></FONT></P><P class="lia-align-justify" style="text-align : justify;"><SPAN>We have introduced an innovative feature in the SAP Fiori launchpad offering a swift and efficient way to navigate to applications using transaction codes<FONT color="#FF0000">**</FONT>. </SPAN></P><P class="lia-align-justify" style="text-align : justify;"><SPAN>Users can now perform quick search on transaction code with instant navigation to the corresponding application.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Aparna_N_0-1768834333412.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/362893iFE3B5F1E66E62A40/image-size/large?v=v2&amp;px=999" role="button" title="Aparna_N_0-1768834333412.png" alt="Aparna_N_0-1768834333412.png" /></span></P><P class="lia-align-justify" style="text-align : justify;"><STRONG><SPAN>Seamless In-Place and Ex-Place Navigation</SPAN></STRONG></P><UL><LI><STRONG><SPAN>In-Place Launch</SPAN></STRONG><SPAN><SPAN>: If you have access to a role-based app, simply enter /n followed by the transaction code to launch it in the same browser tab.</SPAN></SPAN>&nbsp;</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="Aparna_N_1-1768834472454.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/362896i7C2984E08ABE4FA8/image-size/large?v=v2&amp;px=999" role="button" title="Aparna_N_1-1768834472454.png" alt="Aparna_N_1-1768834472454.png" /></span></P><UL class="lia-align-justify" style="text-align : justify;"><LI><STRONG><SPAN>Ex-Place Launch</SPAN></STRONG><SPAN><SPAN><SPAN><SPAN><SPAN>: For opening ap</SPAN></SPAN></SPAN></SPAN></SPAN>ps in a new browser tab, use /o followed by the transaction code.&nbsp;</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="Aparna_N_3-1768834702462.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/362900i4B43F6AD25DEB7A6/image-size/large?v=v2&amp;px=999" role="button" title="Aparna_N_3-1768834702462.png" alt="Aparna_N_3-1768834702462.png" /></span></P><UL class="lia-align-justify" style="text-align : justify;"><LI><STRONG><SPAN>Navigation to Start Page</SPAN></STRONG><SPAN>: Easily return to the start page with /n, or open it in a new tab with /o.</SPAN></LI></UL><P class="lia-align-justify" style="text-align : justify;"><STRONG><SPAN>Key Ben</SPAN></STRONG><STRONG>efits</STRONG></P><UL class="lia-align-justify" style="text-align : justify;"><LI><STRONG><SPAN>Instant App Access</SPAN></STRONG><SPAN>: Accelerate your workflow with immediate app navigation.</SPAN></LI><LI><STRONG><SPAN>Enhanced User Experience</SPAN></STRONG><SPAN>: Business users enjoy an empowering and intuitive navigation experience.</SPAN></LI><LI><STRONG><SPAN>Familiarity for SAP GUI Users</SPAN></STRONG><SPAN><SPAN><SPAN><SPAN>: Mimics the classic navigation style for those accustomed to transaction codes in SAP GUI.</SPAN></SPAN></SPAN></SPAN></LI></UL><P class="lia-align-justify" style="text-align : justify;"><STRONG>Initial Release Restrictions</STRONG></P><P class="lia-align-justify" style="text-align : justify;"><SPAN>Please note that some restrictions apply to this feature in its initial release. For detailed information, refer to SAP Note <A href="https://me.sap.com/notes/3687260" target="_blank" rel="noopener noreferrer">3687260</A>.</SPAN></P><P class="lia-align-justify" style="text-align : justify;"><STRONG><SPAN>Feature Release Horizon</SPAN></STRONG></P><P class="lia-align-justify" style="text-align : justify;"><SPAN>This feature is included in version 2602 across various platforms:</SPAN></P><UL class="lia-align-justify" style="text-align : justify;"><LI><STRONG><SPAN>SAP S/4HANA Cloud Public Edition</SPAN></STRONG><SPAN>: <A href="https://help.sap.com/docs/SAP_S4HANA_CLOUD/4fc8d03390c342da8a60f8ee387bca1a/f951b50a07ce41deb08ced62711fe8b5.html?version=2602.500" target="_blank" rel="noopener noreferrer">Official Documentation</A></SPAN></LI><LI><STRONG><SPAN>SAP BTP ABAP Environment</SPAN></STRONG><SPAN>: <A href="https://help.sap.com/docs/btp/sap-fiori-launchpad-for-sap-btp-abap-environment/searching-for-business-objects-and-apps?version=Cloud" target="_blank" rel="noopener noreferrer">Official Documentation</A>&nbsp;</SPAN></LI><LI><STRONG><SPAN>SAP Integrated Business Planning</SPAN></STRONG><SPAN>: <A href="https://help.sap.com/docs/SAP_INTEGRATED_BUSINESS_PLANNING/0292066056f642f1a0f6d9135e39abaf/03000c73b2474a318bb2e9882d62676a.html?version=2602" target="_blank" rel="noopener noreferrer">Official Documentation</A>&nbsp;</SPAN></LI></UL><DIV class=""><SPAN>Experience the power of seamless navigation and user empowerment while keeping your workflows efficient and intuitive with this cutting-edge feature!</SPAN></DIV><DIV class="lia-align-justify" style="text-align : justify;"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="2026-01-19_16-19-45.gif" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/362918iB2F627A28B63BA8D/image-size/large?v=v2&amp;px=999" role="button" title="2026-01-19_16-19-45.gif" alt="2026-01-19_16-19-45.gif" /></span></DIV><DIV class="lia-align-justify" style="text-align : justify;"><P><STRONG><FONT color="#FF0000">**</FONT> <FONT size="2">Discovering Transaction Codes for applications</FONT></STRONG></P><P><FONT size="2">Some of the ways to identify the transaction code corresponding to an application include:</FONT></P></DIV><P class="lia-align-justify" style="text-align : justify;"><FONT size="2"><SPAN>1. Access the&nbsp;&nbsp;<A href="https://fioriappslibrary.hana.ondemand.com/sap/fix/externalViewer/#" target="_blank" rel="noopener nofollow noreferrer">Fiori reference library</A>&nbsp;, typically<FONT color="#000000">&nbsp;for SAP Fiori and SAP GUI applications</FONT>&nbsp;the&nbsp; App ID information would correspond to the transaction code.</SPAN></FONT></P><P class="lia-align-justify" style="text-align : justify;"><FONT size="2"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Aparna_N_0-1768818055638.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/362612iE79FDB962C1BE165/image-size/large?v=v2&amp;px=999" role="button" title="Aparna_N_0-1768818055638.png" alt="Aparna_N_0-1768818055638.png" /></span></FONT><FONT size="2">2. <SPAN>Navigate to an application by other means such as clicking on the tile and invoke the About dialog via User menu</SPAN><SPAN>&nbsp;to find the transaction code.</SPAN></FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Aparna_N_0-1768838953511.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/362970iD29D43926703D0E1/image-size/large/is-moderation-mode/true?v=v2&amp;px=999" role="button" title="Aparna_N_0-1768838953511.png" alt="Aparna_N_0-1768838953511.png" /></span></P><P><FONT size="2">Feel free to share any additional shortcuts or cheat sheets you may have in the comments section!</FONT></P><P>&nbsp;</P> 2026-01-19T16:39:27.978000+01:00 https://community.sap.com/t5/technology-blog-posts-by-sap/what-s-new-in-sap-btp-q4-2025-innobytes/ba-p/14311120 What's New in SAP BTP - Q4 2025 Innobytes 2026-01-21T17:28:03.157000+01:00 romymann https://community.sap.com/t5/user/viewprofilepage/user-id/2090926 <P><FONT size="3"><SPAN>Happy new year and welcome back to the SAP BTP Innobytes! 2026 is going to be an exciting year and we have big ideas and a strong strategy for the year ahead! In the meantime, letโ€™s see how we finished out last year with some innovative highlights.</SPAN></FONT></P><P><FONT size="3">Check out the video below and explore the latest features in Application Development, Integration and more. Enjoy watching!</FONT></P><P>&nbsp;</P><P><div class="video-embed-center video-embed"><iframe class="embedly-embed" src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FBw6WGI_rc74%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBw6WGI_rc74&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FBw6WGI_rc74%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="200" height="112" scrolling="no" title="Whats New in SAP BTP: Top New Features | Joule Studio Agent Builder | Q4 2025" frameborder="0" allow="autoplay; fullscreen; encrypted-media; picture-in-picture;" allowfullscreen="true"></iframe></div></P><P>&nbsp;</P><P><STRONG><FONT size="5" color="#33CCCC">Data &amp; Analytics </FONT></STRONG></P><P><STRONG><FONT size="5" color="#3366FF">My Metrics</FONT></STRONG></P><P><FONT size="3">To keep up with the important numbers and data, let me introduce you to your personalized watchlist to keep up with what really matters: <STRONG>My Metrics in SAP Analytics Cloud on SAP BTP</STRONG>.</FONT></P><P><FONT size="3">You can find it via the My Metrics Card on the new Homepage, bringing together performance cards from stories and models into one easy-to-access space with these core areas:</FONT></P><UL><LI><FONT size="3">Your Metrics to manage cards</FONT></LI><LI><FONT size="3">Detailed Visualization with instant charts and active filters</FONT></LI><LI><FONT size="3">Smart Insights surfacing automated observations</FONT></LI></UL><P>You can create lists from <STRONG>My Metrics</STRONG> page or directly from a story chart: select a data point that you want to track and add it to an existing list or create a new one. You can name the metric and customize suggested comparisons and default visualizations. Itโ€™s now possible to rename, delete, copy or move metrics between different lists. You can Share multiple metrics with tailored permissions and distribute it with different SAC users or teams.&nbsp;</P><P>See these steps in action (starting at 0:09).</P><P>Learn more</P><UL><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/introducing-my-metrics-your-personalized-view-of-metrics-in-sap-analytics/ba-p/14241430" target="_blank">MyMetrics Blog Post</A></SPAN></LI></UL><P>&nbsp;</P><P><STRONG><FONT size="5" color="#33CCCC">App Dev Highlights</FONT></STRONG></P><P><STRONG><FONT size="5" color="#3366FF">Analytical Table with RAP and SAP Fiori</FONT></STRONG></P><P>Real-time data analysis tools are essential for decision-making, thatโ€™s why <STRONG>SAP BTP ABAP</STRONG>&nbsp;introduced these powerful features for business users.</P><P>By adding the annotation <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1599241">@odata</a>.applySupportedForAggregation: #FULL to your data model, you can now unlock <STRONG>advanced aggregation, grouping</STRONG>, and <STRONG>subtotalling</STRONG> directly in Fiori analytical tables. View real-time summarized business data, group by key fields, and dynamically sort and analyse profitability. This way you can simplify analytics for end users, enabling faster, data-driven decisions.</P><P>Watch the demo starting at 1:37 to get more insights.</P><P>Learn more</P><UL><LI><SPAN><A href="https://help.sap.com/docs/abap-cloud/abap-rap/developing-read-only-rap-analytical-tables?state=DRAFT" target="_blank" rel="noopener noreferrer">Developing Read-Only RAP Analytical Tables</A></SPAN></LI></UL><P>&nbsp;</P><P><STRONG><FONT size="5" color="#3366FF">SAP Build Extensibility Wizard now available in SAP SuccessFactors</FONT></STRONG></P><P>You might already know the <STRONG>SAP Build Extensibility Wizard</STRONG>, supporting developers in process creation and UI extensions directly from Cloud ERP apps. This feature is now also available in <STRONG>SAP SuccessFactors</STRONG>.</P><P>In this example we want to simplify the process of requesting personal data from new hires in the onboarding process:</P><OL><LI>Launch the <STRONG>process variant manager</STRONG> from the <STRONG>SAP SuccessFactors application</STRONG> and select the specific HR process you want to extend.</LI><LI>To let the new hire know, that their data has been accepted, we want to add a step of approval. The <STRONG>wizard</STRONG> will walk you through the familiar steps to set up our extension.</LI><LI>You can jump directly into <STRONG>SAP Build</STRONG> to customize this process.</LI><LI>View the process from the SAP SuccessFactors application, reviewing the new hires and the personal data they have collected.</LI><LI>HR will get a notification in the <STRONG>Task Center Inbox</STRONG> and can select approve, notifying the new hire.</LI></OL><P>The Extensibility wizard can now practice its magic in SAP SuccessFactors, delivering a better experience for our employees with SAP Build.</P><P><SPAN>To watch this innovation example, start the video at 2:41.</SPAN></P><P>Learn more</P><UL><LI><SPAN><A href="https://help.sap.com/docs/successfactors-release-information/8e0d540f96474717bbf18df51e54e522/d751e3642bba4bb68c56474c70e0f268.html" target="_blank" rel="noopener noreferrer">Extensibility Support</A></SPAN></LI><LI><SPAN><A href="https://help.sap.com/docs/successfactors-platform/extensibility-in-successfactors-using-btp-extensibility-wizard/what-is-extensibility" target="_blank" rel="noopener noreferrer">Understanding Extensibility</A></SPAN></LI><LI><SPAN><A href="https://help.sap.com/docs/successfactors-platform/extensibility-in-successfactors-using-btp-extensibility-wizard/type-of-extensions" target="_blank" rel="noopener noreferrer">Extension types</A></SPAN></LI></UL><P>&nbsp;</P><P><STRONG><FONT size="5" color="#3366FF">Joule Studio Agent Builder</FONT></STRONG></P><P><SPAN>When it comes to making decisions for your business, transparency and control are essential. <STRONG>AI agents</STRONG> can help speed up the process but building AI agents that are both powerful and enterprise-ready is a challenge. How do you combine development speed with the governance and trust your business demands?&nbsp;</SPAN></P><P><SPAN>Describe your business goals to your <STRONG>AI conversational Partner</STRONG> and let <STRONG>Joule</STRONG> build an agent that fits your needs. It automatically discovers tools and connects to external systems through the framework support for MCP.&nbsp;Giving the agent deep business context enables smarter decision-making.&nbsp;The timeline feature gives you full transparency, showing every step of the agent's logic, essential for debugging and governance.&nbsp;</SPAN></P><P><SPAN>Start the demo at </SPAN>4:21<SPAN> to learn all about the Agent Builder in Joule Studio.</SPAN></P><P><SPAN>Learn more</SPAN></P><UL><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/the-joule-studio-learning-series-lead-agentic-development-with-confidence/ba-p/14258233" target="_blank">Joule Studio Learning Series (Blog Post)</A></SPAN></LI><LI><SPAN><A href="https://developers.sap.com/group.joule-studio-first-skill.html" target="_blank" rel="noopener noreferrer">SAP Learning: Building your first Joule Skill</A></SPAN></LI><LI><SPAN><A href="https://www.sap.com/products/artificial-intelligence/joule-studio.html" target="_blank" rel="noopener noreferrer">Joule Studio</A></SPAN></LI></UL><P>&nbsp;</P><P><STRONG><FONT size="5" color="#33CCCC">Integration</FONT></STRONG></P><P><STRONG><FONT size="5" color="#3366FF">Local OData API access &amp; SAP HANA support in Edge Integration Cell</FONT></STRONG></P><P>When it comes to manage persistence and monitoring in hybrid landscapes, <STRONG>integration</STRONG> is an essential step to make it more flexible.</P><P><STRONG>Edge Integration Cell</STRONG> now supports <STRONG>SAP HANA </STRONG>as both a<STRONG> database and datastore</STRONG>, offering an alternative to PostgreSQL and Redis. If your landscape already runs on HANA, avoid maintaining separate persistence systems by unifying your data layer. One SAP HANA instance can be used for multiple Edge to keep everything consistent and centralized.&nbsp;To ensure the reliability of your integrations even if the cloud connection isnโ€™t available, try the <STRONG>Local OData API access for your Edge runtime</STRONG>. You can retrieve message processing logs, data stores, and other runtime info through local GET APIs.</P><P>To use the Local API Access,</P><UL><LI>Activate the <STRONG>API Plan</STRONG> support to the cluster using the ELMO UI</LI><LI>Modify the configuration by <STRONG>adding a valid API Virtual Host</STRONG> and an <STRONG>API Virtual Host</STRONG> <STRONG>Key Alias</STRONG></LI></UL><P>These settings are also available upon onboarding a new Edge node, allowing a stronger performance and visibility into your integrations.&nbsp;</P><P>Watch this part (starting at 5:36) to get more insights.</P><P>Learn more</P><UL><LI><SPAN><A href="https://pages.community.sap.com/topics/integration-suite" target="_blank" rel="noopener noreferrer">SAP Integration Suite</A></SPAN></LI><LI><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/local-odata-api-access-in-edge-integration-cell-runtimes/ba-p/14195001" target="_blank">Local OData API Access in Edge Integration Cell Runtimes</A></SPAN></LI></UL><P>&nbsp;</P><P><STRONG><FONT size="5" color="#33CCCC">Security</FONT></STRONG></P><P><STRONG><FONT size="5" color="#3366FF">SAP Key Management Service</FONT></STRONG></P><P><STRONG>SAP Key Management Service (KMS)</STRONG> enables customers to manage encryption keys to business compliance and regulations. Group systems and keys in key configurations according to your requirements.&nbsp;&nbsp;&nbsp;</P><P>The Primary Key is the active one for encryption. The SAP KMS supports Hold Your Own Key (HYOK) and Bring Your Own Key (BYOK) by importing <STRONG>Your Key</STRONG>. Revoke a key at any time by disabling or deleting it, leading to a shutdown of the connected systems, locking the data. When assigned to a KMS tenant, connect the system seamless via the UI. The four-eye-principle secures tasks like connecting a system or a key action.</P><P>To see this demo in action, watch the video (starting at 7:04).</P><P><STRONG>&nbsp;</STRONG></P><P><FONT size="5" color="#FFCC00"><STRONG>Share your thoughts&nbsp;</STRONG></FONT></P><P>These videos are for YOU, and we would love to hear your impressions. How do you like the video? How can we improve the upcoming videos? Please share your feedback by liking this post or leaving a comment below.</P><P>Thank you for your support and happy viewing, sharing, and enjoying!</P><P>You Might Also Be Interested In</P><UL><LI><A href="https://events.sap.com/sap-btp-garage-2025/en_us/home.html" target="_blank" rel="noopener noreferrer">SAP BTP Garage</A>:&nbsp;monthly LIVE webinar with hands-on use case walkthroughs and demos.</LI><LI><A href="https://podcast.opensap.info/cloud-platform/" target="_blank" rel="noopener nofollow noreferrer">Unlocking SAP BTP</A>: monthly podcast covering all things SAP BTP.</LI></UL><P><SPAN>&nbsp;</SPAN></P> 2026-01-21T17:28:03.157000+01:00 https://community.sap.com/t5/technology-blog-posts-by-sap/your-2026-roadmap-to-getting-started-with-abap-ai-and-abap-1/ba-p/14312060 Your 2026 Roadmap to Getting Started with ABAP AI and ABAP-1 2026-01-21T18:01:36.956000+01:00 JanMatthes https://community.sap.com/t5/user/viewprofilepage/user-id/194386 <P data-unlink="true"><A title="ABAP AI Capabilities" href="https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/joule-for-developers-abap-ai-capabilities-f14ebffef77b41bfb0746c33dcb70e84" target="_blank" rel="noopener noreferrer"><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="ABAP_AI.png" style="width: 200px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/363821iFBD41BCBF30A65A8/image-size/small/is-moderation-mode/true?v=v2&amp;px=200" role="button" title="ABAP_AI.png" alt="ABAP_AI.png" /></span></A>The era of "Wait and See" for AI in ABAP development is officially over. With the general availability of <STRONG>Joule for Developers (J4D)</STRONG> and the <A href="https://www.linkedin.com/posts/sonjalienard_introducing-the-next-era-of-abap-development-activity-7391805653905993728-J9a-?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAAwC8YBn3fP-40jJLXucycHYaj7szVogRw" target="_blank" rel="noopener nofollow noreferrer">planned availability of ABAP agentic AI frameworks in 2026</A>,&nbsp; the question isn't <EM>if</EM> you should use AI, but <EM>where</EM> you should start.&nbsp;</P><P data-unlink="true"><STRONG>The "Start Here" Recommendation:&nbsp;&nbsp;</STRONG>For 90% of developers, the best starting point is <STRONG><SPAN class=""><SPAN><A class="" href="https://www.sap.com/products/erp/s4hana-cloud-public-edition-joule-for-developers-abap-ai-capabilities.html" target="_blank" rel="noopener noreferrer">SAP Joule for Developers</A></SPAN></SPAN></STRONG> integrated within <STRONG>ABAP Development Tools (ADT) for Eclipse</STRONG>. In addition you can also experiment with the first versions of <A href="https://help.sap.com/docs/sap-ai-core/generative-ai/sap-abap-1?locale=en-US&amp;version=LATEST" target="_blank" rel="noopener noreferrer">ABAP-1 model to <STRONG>analyze and explain code</STRONG></A> on your own - but be aware that this is <STRONG>currently not for code generation </STRONG>and only for those which want to be independent of J4D<STRONG>.</STRONG> Therefore starting with J4D is the fastest but also the most powerful way to start with ABAP AI.</P><DIV class="">&nbsp;</DIV><DIV class=""><STRONG>Why should I start with Joule for Developers (J4D)?</STRONG></DIV><UL class=""><LI><SPAN class=""><STRONG>Contextual Intelligence:</STRONG> Unlike generic LLMs, Joule for Developers is additionally trained on over <STRONG>250 million lines of proprietary SAP code</STRONG> and is aware of your specific <STRONG>ABAP Cloud context.</STRONG> In general&nbsp;J2D is powered by a combination of third-party foundation models (e.g. OpenAI, Gemini, Anthropic, Mistral AI), alongside SAP-centric models like the LLMs, trained specifically on ABAP and purpose-built for cloud-based SAP development.</SPAN></LI><LI><SPAN class=""><STRONG>Itโ€™s Free (For Now):</STRONG> SAP has extended the free promotional period for Joule for Developers until <STRONG>September 2026</STRONG>.</SPAN></LI><LI><SPAN class=""><STRONG>Native Skills:</STRONG> It handles predictive code generation (e.g. RAP generation), "Explain" skills for legacy code, and unit test generation directly within your IDE. So it can do way more then ABAP-1 right now.</SPAN></LI><LI><SPAN class=""><STRONG>J4D&nbsp;</STRONG>is out of the box <STRONG>integrated in Eclipse ADT.</STRONG></SPAN></LI></UL><DIV class=""><STRONG>The Three Paths for ABAP AI Evolution:</STRONG></DIV><DIV class=""><STRONG>1. The Standard Path: Joule for Developers in ADT</STRONG></DIV><UL class=""><LI><SPAN class=""><STRONG>Best for:</STRONG> Daily coding, documentation, and unit testing.</SPAN></LI><LI><SPAN class=""><STRONG>Action:</STRONG> Request access through your administrator (Material 8019124 for customers and 8019541 for partners) and activate it in ADT.</SPAN></LI></UL><DIV class=""><STRONG>2. The Innovation Path: ABAP AI SDK &amp; BTP Free Tier</STRONG></DIV><UL class=""><LI><SPAN class=""><STRONG>Best for:</STRONG> Building your own AI-powered business applications (e.g., automated invoice processing).</SPAN></LI><LI><SPAN class=""><STRONG>Action:</STRONG> Use the <STRONG>SAP BTP Free Tier</STRONG> to access the Generative AI Hub and the <STRONG>ABAP AI SDK</STRONG> to connect your custom ABAP code to external foundation models.</SPAN></LI></UL><DIV class=""><STRONG>3. The Modernization Path: VS Code with ABAP Cloud (Roadmap Q2/2026)</STRONG></DIV><UL class=""><LI><SPAN class=""><STRONG>Best for:</STRONG> Developers looking for a lightweight, file-based experience and for those which want to be the first to leverage agentic ABAP AI in side-by-side approach.</SPAN></LI><LI><STRONG>Action</STRONG>: Explore the new side-by-side ABAP Cloud Extension for <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/introducing-the-next-era-of-abap-development/ba-p/14260522" target="_blank">VS Code (GA planned for Q2 2026) with built-in Agentic AI</A> assistance powered by an <STRONG>ABAP MCP server</STRONG>. This will support a <STRONG>broader range of&nbsp;SAP S/4HANA Private Editions</STRONG> and provide <STRONG>faster update cycles</STRONG>.</LI></UL><DIV class=""><STRONG>Key Takeaway for 2026:</STRONG><BR />Don't get bogged down trying to "prompt engineer" experimental models like ABAP-1 for production code generation. Instead, leverage <STRONG>Joule for Developers</STRONG>&nbsp;mature "Explain" and "Generate" skills to <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/custom-code-migration-to-sap-s-4hana-powered-by-sap-joule-for-developers/ba-p/14329094" target="_blank">maintain a <STRONG>Clean Core</STRONG> and accelerate your migration to SAP S/4HANA.</A></DIV><P><STRONG>Here you can learn more:</STRONG></P><OL><LI><P><SPAN class=""><A class="" href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-joule-for-developers-expands-to-private-cloud-accelerating-abap/ba-p/14237958" target="_blank">SAP Joule for Developers (J4D) Expands to Private Cloud: Accelerating ABAP Innovation and Transformation </A></SPAN></P></LI><LI><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/abap-ai-revolution-accelerates-the-abap-developer-who-built-enterprise-apps/ba-p/14216073" target="_blank"><SPAN class="">ABAP AI Revolution Accelerates: The ABAP Developer Who Built Enterprise Apps in Minutes </SPAN></A></LI><LI><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/introducing-the-next-era-of-abap-development/ba-p/14260522" target="_blank"><SPAN class="">Joule for Developers and ABAP AI capabilities are coming to SAP S/4HANA Private Edition 2021, 2022, and 2023</SPAN></A></LI><LI><SPAN class="">Public Roadmap: <A href="https://help.sap.com/docs/abap-cross-product/roadmap-info/genai" target="_blank" rel="noopener noreferrer">SAP Help</A> / <A href="https://roadmaps.sap.com/board?PRODUCT=73554900100800001562&amp;PRODUCT=73555000100800001164&amp;range=CURRENT-LAST" target="_blank" rel="noopener noreferrer">SAP Roadmap Explorer</A></SPAN></LI><LI><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-joule-for-developers-abap-ai-capabilities-for-sap-s-4hana-cloud-private/ba-p/14236954" target="_blank"><SPAN class="">Step-by-step guide how to activate SAP Joule for Developers, ABAP AI capabilities for your SAP S/4HANA Cloud Private Edition</SPAN></A></LI><LI><SPAN class=""><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/joule-for-developers-with-sap-s-4hana-public-cloud-edition-setup-guide/ba-p/14209989" target="_blank">Joule for Developers (J4D) for S/4HANA Public Cloud Setup Guide</A></SPAN></SPAN></LI><LI><A href="https://discovery-center.cloud.sap/search/abap%20ai" target="_blank" rel="noopener nofollow noreferrer"><SPAN class=""><SPAN>SAP ABAP AI Discovery Center</SPAN></SPAN></A></LI><LI><SPAN class=""><SPAN><A class="" href="https://discovery-center.cloud.sap/search/Free-tier" target="_blank" rel="noopener nofollow noreferrer">SAP BTP Discovery Center (Free Tier Services)</A></SPAN></SPAN></LI><LI><SPAN class=""><SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/custom-code-migration-to-sap-s-4hana-powered-by-sap-joule-for-developers/ba-p/14329094" target="_blank">Custom code migration to SAP S/4HANA powered by SAP Joule for Developers, ABAP AI capabilities</A> </SPAN></SPAN></LI><LI><A href="http://www.youtube.com/playlist?list=PL6RpkC85SLQAt9lvPw0gF4E3nwbJD0EUe" target="_blank" rel="noopener nofollow noreferrer"><SPAN class=""><SPAN>YouTube playlist for Joule for Developers (J4D)</SPAN></SPAN></A></LI><LI><A href="https://help.sap.com/docs/abap-ai" target="_blank" rel="noopener noreferrer"><SPAN class=""><SPAN>Joule for Developers Help (J4D)</SPAN></SPAN></A></LI><LI><A href="https://github.com/SAP-samples/abap-platform-rap120" target="_blank" rel="noopener nofollow noreferrer">Build SAP Fiori Apps with ABAP Cloud and SAP Joule for developers (RAP120)</A>&nbsp;</LI><LI><A href="https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/joule-for-developers-abap-ai-capabilities-f14ebffef77b41bfb0746c33dcb70e84" target="_blank" rel="noopener noreferrer"><SPAN class=""><SPAN>ADT Eclipse AI Capabilities Help</SPAN></SPAN></A></LI><LI><SPAN class=""><SPAN><A class="" href="https://help.sap.com/docs/abap-ai/generative-ai-in-abap-cloud/set-up-abap-ai-sdk-powered-by-intelligent-scenario-lifecycle-management" target="_blank" rel="noopener noreferrer">ABAP AI SDK Help</A></SPAN></SPAN></LI><LI><A href="https://help.sap.com/docs/sap-ai-core/generative-ai/sap-abap-1?locale=en-US&amp;version=LATEST" target="_blank" rel="noopener noreferrer"><SPAN class="">ABAP-1 Help</SPAN></A></LI></OL><P data-unlink="true"><SPAN class="">More high-level insights about <A href="https://www.sap.com/sea/products/artificial-intelligence/joule-for-developers.html" target="_blank" rel="noopener noreferrer">Joule for Developers/ABAP AI</A> and <A href="https://www.sap.com/products/technology-platform/abap/environment.html" target="_blank" rel="noopener noreferrer">ABAP platform can be found&nbsp;here</A>&nbsp;. Here you find <A href="https://www.sap.com/products/artificial-intelligence/sap-abap.html" target="_blank" rel="noopener noreferrer">more on ABAP-&nbsp;1</A>,</SPAN></P> 2026-01-21T18:01:36.956000+01:00 https://community.sap.com/t5/technology-blog-posts-by-members/mass-update-through-custom-action-in-rap/ba-p/14312466 Mass Update Through Custom Action In RAP 2026-01-23T06:31:27.262000+01:00 harsha_reddy24 https://community.sap.com/t5/user/viewprofilepage/user-id/2263071 <P><STRONG>Introduction</STRONG>:</P><P>With the increasing adoption of the RESTful ABAP Programming Model (RAP), SAP developers are encouraged to move away from classic procedural approaches and design applications that are behavior-driven, scalable, and Fiori-ready. While RAP provides powerful standard operations such as create, update, and delete, real-world business scenarios often require <STRONG>mass processing or bulk updates</STRONG> triggered by user actions.</P><P>In this blog, I will walk through a <STRONG>practical implementation of mass update using a custom action in RAP</STRONG>. This approach is especially useful when you need to update multiple records based on business logic that cannot be handled by standard CRUD operations alone.</P><P><STRONG>Solution Overview:</STRONG></P><P>The blog covers:</P><UL><LI><P>Why custom actions are required for mass updates in RAP</P></LI><LI><P>How to define a custom action in the Behavior Definition</P></LI><LI><P>Implementing the action logic in the Behavior Implementation class</P></LI><LI><P>Triggering the mass update from a Fiori Elements UI</P></LI><LI><P>Key considerations and best practices</P></LI></UL><P><BR /><STRONG>Database Table:</STRONG></P><pre class="lia-code-sample language-abap"><code>@EndUserText.label : 'travel uuid table' @AbapCatalog.enhancement.category : #NOT_EXTENSIBLE @AbapCatalog.tableCategory : #TRANSPARENT @AbapCatalog.deliveryClass : #A @AbapCatalog.dataMaintenance : #RESTRICTED define table zuuid_table { key client : abap.clnt not null; key travel_id : sysuuid_x16 not null; description : /dmo/description; status : /dmo/travel_status; @Semantics.amount.currencyCode : 'zuuid_table.currency_code' booking_fee : /dmo/booking_fee; @Semantics.amount.currencyCode : 'zuuid_table.currency_code' total_price : /dmo/total_price; currency_code : /dmo/currency_code; createdby : syuname; createdat : timestampl; lastchangedby : syuname; lastchangedat : abp_locinst_lastchange_tstmpl; }</code></pre><P><STRONG>Root Entity:<BR /></STRONG></P><pre class="lia-code-sample language-abap"><code>@AccessControl.authorizationCheck: #MANDATORY @Metadata.allowExtensions: true @ObjectModel.sapObjectNodeType.name: 'ZUUID_TABLE' @EndUserText.label: '###GENERATED Core Data Service Entity' define root view entity ZR_UUID_TABLE as select from zuuid_table as R_UUID_TABLE { key travel_id as TravelID, description as Description, status as Status, @Semantics.amount.currencyCode: 'CurrencyCode' booking_fee as BookingFee, @Semantics.amount.currencyCode: 'CurrencyCode' total_price as TotalPrice, currency_code as CurrencyCode, createdby as Createdby, createdat as Createdat, lastchangedby as Lastchangedby, @Semantics.systemDateTime.localInstanceLastChangedAt: true lastchangedat as Lastchangedat }</code></pre><P><BR /><STRONG>Projection View:</STRONG></P><pre class="lia-code-sample language-abap"><code>@Metadata.allowExtensions: true @Metadata.ignorePropagatedAnnotations: true @EndUserText: { label: '###GENERATED Core Data Service Entity' } @ObjectModel: { sapObjectNodeType.name: 'ZUUID_TABLE' } @AccessControl.authorizationCheck: #MANDATORY define root view entity ZC_UUID_TABLE provider contract transactional_query as projection on ZR_UUID_TABLE association [1..1] to ZR_UUID_TABLE as _BaseEntity on $projection.TravelID = _BaseEntity.TravelID { key TravelID, Description, Status, @Semantics: { amount.currencyCode: 'CurrencyCode' } BookingFee, @Semantics: { amount.currencyCode: 'CurrencyCode' } TotalPrice, CurrencyCode, Createdby, Createdat, Lastchangedby, @Semantics: { systemDateTime.localInstanceLastChangedAt: true } Lastchangedat, _BaseEntity }</code></pre><P><STRONG>Metadata Extension:<BR /></STRONG></P><pre class="lia-code-sample language-abap"><code><a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1445379">@ui</a>.lineItem: [ { position: 10 , label: 'Modify Status', type: #FOR_ACTION, dataAction: 'UpdateStatus' } ] <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1445379">@ui</a>.selectionField: [ { position: 10 } ] </code></pre><P><STRONG>&nbsp;</STRONG></P><P><STRONG>Root Behavior Definition:</STRONG></P><UL><LI>define action in BDEF.</LI><LI>parameter which defines inputs for our actions.</LI></UL><pre class="lia-code-sample language-abap"><code>managed implementation in class ZBP_R_UUID_TABLE unique; strict ( 2 ); with draft; extensible; define behavior for ZR_UUID_TABLE alias R_UUID_TABLE persistent table ZUUID_TABLE extensible draft table ZUUID_TABLE_D etag master Lastchangedat lock master total etag Lastchangedat authorization master( global ) { field ( readonly ) TravelID, Lastchangedat; field ( numbering : managed ) TravelID; create; update(features : instance ); delete(features : global); action(features : global) UpdateStatus parameter zstatus_str; draft action Activate optimized; draft action Discard; draft action Edit; draft action Resume; draft determine action Prepare; mapping for ZUUID_TABLE corresponding extensible { TravelID = travel_id; Description = description; Status = status; BookingFee = booking_fee; TotalPrice = total_price; CurrencyCode = currency_code; Createdby = createdby; Createdat = createdat; Lastchangedby = lastchangedby; Lastchangedat = lastchangedat; } }</code></pre><P><STRONG>Parameter For Action:</STRONG></P><pre class="lia-code-sample language-abap"><code>@EndUserText.label : 'staus structure' @AbapCatalog.enhancement.category : #NOT_EXTENSIBLE define structure zstatus_str { status : /dmo/travel_status; }</code></pre><P><BR /><STRONG>Implementation:<BR /></STRONG></P><pre class="lia-code-sample language-abap"><code> METHOD UpdateStatus. MODIFY ENTITIES OF zr_uuid_table IN LOCAL MODE ENTITY r_uuid_table UPDATE FIELDS ( Status ) WITH VALUE #( for key in keys ( %key-TravelID = key-TravelID Status = key-%param-status ) ) REPORTED data(lt_reported) FAILED data(lt_failed). ENDMETHOD.</code></pre><P>&nbsp;</P><P><STRONG>Explanation:<BR /></STRONG></P><UL><LI><STRONG>MODIFY ENTITIES</STRONG> is the RAP statement used to change data in a behavior-managed entity.</LI><LI><STRONG>IN LOCAL MODE</STRONG> ensures the operation runs within the current LUW without immediately committing to the database.</LI><LI><STRONG>UPDATE FIELDS</STRONG>&nbsp; Status&nbsp; explicitly restricts the update to the Status field only, improving clarity and performance.</LI><LI><STRONG>keys</STRONG> contains all selected instances for which the action is triggered.</LI><LI>The <STRONG>FOR</STRONG> expression loops over each selected key, enabling mass processing in a single statement.</LI><LI><STRONG>%key-TravelID</STRONG> identifies the record to be updated.</LI><LI><STRONG>key-%param-status</STRONG> retrieves the action parameter value passed from the UI for ex, a new status selected by the user.</LI><LI><STRONG>lt_reported</STRONG> captures informational, warning, or success messages generated during the update.</LI><LI><STRONG>lt_failed</STRONG> contains records that could not be updated due to validation errors, authorization issues, or business rule violations.</LI><LI>These tables are automatically processed by RAP and reflected back to the UI, ensuring proper user feedback.</LI></UL><P><STRONG>Projection BDEF:</STRONG></P><UL><LI>expose our custom action in projection behavior definition.</LI></UL><pre class="lia-code-sample language-abap"><code>projection implementation in class ZBP_C_UUID_TABLE unique; strict ( 2 ); extensible; use draft; use side effects; define behavior for ZC_UUID_TABLE alias R_UUID_TABLE extensible use etag { use create; use update; use delete; use action Edit; use action Activate; use action Discard; use action Resume; use action Prepare; use action UpdateStatus; }</code></pre><P><STRONG><BR /><BR />Preview</STRONG>:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="harsha_reddy24_0-1769070515390.png" style="width: 524px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/364004iD9317102B5D59FE8/image-dimensions/524x155?v=v2" width="524" height="155" role="button" title="harsha_reddy24_0-1769070515390.png" alt="harsha_reddy24_0-1769070515390.png" /></span></P><UL><LI>select records and click on <STRONG>modify status</STRONG> button.</LI><LI>Assign any travel status and it will be updated.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="harsha_reddy24_1-1769070896884.png" style="width: 504px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/364008i51970E15FE7EA866/image-dimensions/504x155?v=v2" width="504" height="155" role="button" title="harsha_reddy24_1-1769070896884.png" alt="harsha_reddy24_1-1769070896884.png" /></span></P><P>&nbsp;</P><P><STRONG>Conclusion:</STRONG></P><P>Custom actions in RAP provide a clean and scalable way to handle mass update scenarios that go beyond standard CRUD operations. By leveraging MODIFY ENTITIES, action parameters, and RAP-managed messaging, developers can implement efficient bulk updates while fully adhering to RAP principles. This approach ensures better performance, cleaner code, and seamless integration with Fiori Elements, making it a recommended pattern for real-world business requirements.<BR /><BR /><a href="https://community.sap.com/t5/c-khhcw49343/ABAP+Connectivity/pd-p/266264953119842772207986043063520" class="lia-product-mention" data-product="313-1">ABAP Connectivity</a>&nbsp; <a href="https://community.sap.com/t5/c-khhcw49343/ABAP+Extensibility/pd-p/338571334339306322581424656448659" class="lia-product-mention" data-product="315-1">ABAP Extensibility</a>&nbsp; <a href="https://community.sap.com/t5/c-khhcw49343/SAP+BTP+ABAP+environment/pd-p/73555000100800001164" class="lia-product-mention" data-product="11-1">SAP BTP ABAP environment</a>&nbsp;</P> 2026-01-23T06:31:27.262000+01:00 https://community.sap.com/t5/technology-blog-posts-by-sap/how-to-enable-bc-set-support-for-bc-app/ba-p/14313371 How to enable BC Set support for BC app 2026-01-23T11:06:48.347000+01:00 patrick_winkler https://community.sap.com/t5/user/viewprofilepage/user-id/729521 <H1 id="toc-hId-887480474" id="toc-hId-1659546876">Introduction</H1><P><SPAN>In order to use the "import from transport" function in the <A href="https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/creating-business-configuration-sets" target="_blank" rel="noopener noreferrer">BC Set editor</A>, the data must be recorded in the context of a transport object (TOBJ) and the business configuration maintenance object (SMBC) must maintain the corresponding transport object attribute.</SPAN></P><P><SPAN>This blog explains the necessary steps to enable existing SMBC objects for the "import from transport" functionality.&nbsp;Newly generated SMBC objects are automatically enabled.<BR /><BR /></SPAN>This blog is relevant for</P><UL><LI><a href="https://community.sap.com/t5/c-khhcw49343/SAP+S%25252F4HANA+Cloud+Public+Edition/pd-p/08e2a51b-1ce5-4367-8b33-4ae7e8b702e0" class="lia-product-mention" data-product="1199-1">SAP S/4HANA Cloud Public Edition</a></LI><LI><a href="https://community.sap.com/t5/c-khhcw49343/SAP+BTP+ABAP+environment/pd-p/73555000100800001164" class="lia-product-mention" data-product="11-1">SAP BTP ABAP environment</a></LI></UL><P>Further reading:</P><UL><LI><A href="https://community.sap.com/t5/tag/business%20configuration%20maintenance%20object/tg-p/board-id/technology-blog-sap" target="_blank">Related blog posts</A></LI><LI>Learn how you can use<SPAN>&nbsp;</SPAN><A href="https://learning.sap.com/products/business-technology-platform/development/abap?url_id=text-sapcommunity-prdteng-ABAP" target="_blank" rel="noopener noreferrer">ABAP technology</A><SPAN>&nbsp;</SPAN>to develop innovative applications and business solutions across SAPโ€™s portfolio on<SPAN>&nbsp;</SPAN><A href="https://learning.sap.com/products/business-technology-platform/development/abap" target="_blank" rel="noopener noreferrer">SAP Learning Site</A>.</LI></UL><H2 id="toc-hId-1592116090">Case 1: Transport object is already used in the BC app</H2><P><SPAN>As of release 2302, when you use the&nbsp;</SPAN><A href="https://help.sap.com/docs/btp/sap-business-technology-platform/generating-business-configuration-maintenance-object-with-generate-abap-repository-objects-wizard" target="_self" rel="noopener noreferrer">ADT wizard</A><SPAN>&nbsp;to generate a business configuration maintenance object (SMBC), a transport object (TOBJ) is generated by default and used in the behavior implementation. In this case you only need to maintain the new "Transport Object" attribute of the SMBC object.</SPAN></P><P>You can do this manually in the ADT editor of the SMBC object or programmatically. First you need to find out the name of the transport object. In most cases the name is equal to the name of the SMBC object. You can open the behavior implementation class and check the first couple of rows to verify the name of the transport object ( depending on the release the object was created: CO_TRANSPORT_OBJECT or TDAT_NAME )</P><pre class="lia-code-sample language-abap"><code>CLASS LHC_COMPANYCODEALL DEFINITION FINAL INHERITING FROM CL_ABAP_BEHAVIOR_HANDLER. PUBLIC SECTION. CONSTANTS: CO_ENTITY TYPE abp_entity_name VALUE `ZI_COMPANYCODE_S`, CO_TRANSPORT_OBJECT TYPE mbc_cp_api=&gt;indiv_transaction_obj_name VALUE `ZCOMPANYCODE`, CO_AUTHORIZATION_ENTITY TYPE abp_entity_name VALUE `ZI_COMPANYCODE`.</code></pre><pre class="lia-code-sample language-abap"><code>CLASS LHC_RAP_TDAT_CTS DEFINITION FINAL. PUBLIC SECTION. CLASS-METHODS: GET RETURNING VALUE(RESULT) TYPE REF TO IF_MBC_CP_RAP_TDAT_CTS. ENDCLASS. CLASS LHC_RAP_TDAT_CTS IMPLEMENTATION. METHOD GET. result = mbc_cp_api=&gt;rap_tdat_cts( tdat_name = 'ZTAB6'</code></pre><P>You can maintain the attribute "Transport Object" in the "Service Configuration" section of the SMBC object in the ADT editor. Save and activate.</P><P>You can update this attribute also programmatically:</P><pre class="lia-code-sample language-abap"><code>CLASS zset_tobj DEFINITION PUBLIC FINAL CREATE PUBLIC . PUBLIC SECTION. INTERFACES if_oo_adt_classrun . PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. CLASS zset_tobj IMPLEMENTATION. METHOD if_oo_adt_classrun~main. DATA smbc_id TYPE TABLE OF if_mbc_cp_api_business_config=&gt;ty_technical_id WITH EMPTY KEY. SELECT ABAPObject FROM I_CustABAPObjDirectoryEntry WHERE ABAPObjectType = 'SMBC' AND ABAPObject LIKE '&lt;NAMESPACE&gt;%' INTO TABLE @smbc_id . LOOP AT smbc_id ASSIGNING FIELD-SYMBOL(&lt;smbc_id&gt;). out-&gt;write( |SMBC object: { &lt;smbc_id&gt; }| ). TRY. DATA(tobj) = mbc_cp_api=&gt;business_configuration_api( &lt;smbc_id&gt; )-&gt;read( )-transport_object. IF tobj IS NOT INITIAL. out-&gt;write( |TOBJ already set: { tobj }| ). ELSE. mbc_cp_api=&gt;business_configuration_api( &lt;smbc_id&gt; )-&gt;update_transport_object( transport_object = &lt;smbc_id&gt; "if the table list of the transport object does not match the table list of the behavior definition an exception is raised transport = '&lt;Workbench Request&gt;' ). "transport=space for local objects out-&gt;write( |TOBJ set: { mbc_cp_api=&gt;business_configuration_api( &lt;smbc_id&gt; )-&gt;read( )-transport_object }| ). ENDIF. CATCH cx_root INTO DATA(exc). out-&gt;write( |Error: { exc-&gt;get_text( ) }| ). ENDTRY. ENDLOOP. ENDMETHOD. ENDCLASS.</code></pre><H2 id="toc-hId-1395602585">Use Case 2: The BC app does not use a transport object</H2><P>Delete the existing BC app and create it again using the ADT wizard.</P><P>If you cannot do that, you can also use the ADT wizard to generate a new BC app for the table(s) with different object names. Move the generated transport object to the package of the old BC app and maintain the transport object attribute of the old SMBC object.<BR />If necessary, adjust the generated TOBJ by changing the table piece list.<BR />Adjust the old behavior implementation class by by replacing the existing method implementation with the equivalent method implementation of the new behavior implementation class. Adjust the constants to match the old object names.<BR />You can now delete the newly generated objects.</P><H2 id="toc-hId-1199089080">Transport object names</H2><P>The last character of the technical name of a transport object is its type. In the SMBC and TOBJ ADT editor, the technical name of the transport object is used. Use the input help to select a transport object.<BR />In the API calls in the behavior implementation class, the type of a transport object is either a separate parameter or T (Individual Transaction Object) by default. That is, remove the last character for the name of the transport object.<BR />Example:&nbsp;<BR />In ADT, the name of the transport object is "ZTOBJ1&nbsp; &nbsp; T" or "ZCOMPANYCODET". In the behavior implementation class, use "ZTOBJ1" or "ZCOMPANYCODE".</P><P>&nbsp;</P> 2026-01-23T11:06:48.347000+01:00 https://community.sap.com/t5/technology-blog-posts-by-sap/my-home-in-sap-btp-abap-environment/ba-p/14314918 My Home in SAP BTP ABAP Environment 2026-01-28T10:41:54.700000+01:00 LauraEiraElias https://community.sap.com/t5/user/viewprofilepage/user-id/793763 <P>Good news โ€“ My Home is finally available with SAP BTP ABAP environment!</P><P>My Home is your personalized entry page that provides you with easy access to the business insights and applications you need to do your job with greater speed and agility. My Home for SAP BTP ABAP Environment lets you access and manage your favorite pages, your favorite apps, and your insights on any device. It follows a modular approach to meet the needs of different roles and builds on the functionality of the SAP Fiori launchpad using <SPAN><A href="https://help.sap.com/docs/btp/sap-fiori-launchpad-for-sap-btp-abap-environment/spaces-and-pages" target="_self" rel="noopener noreferrer">spaces and pages</A></SPAN>.</P><H3 id="toc-hId-1917747692">&nbsp;</H3><H3 id="toc-hId-1721234187">New Look and Feel</H3><P><STRONG>My Home will be set as default for newly provisioned and existing systems as of SAP BTP ABAP Environment 2602.</STRONG> Accordingly, this soon changes the appearance of the SAP Fiori launchpad for every user. So, look forward to the new look and feel!</P><P><STRONG>However, the setting to disable My Home will still be available for administrators until the release upgrade SAP BTP ABAP environment 2608. Then, My Home will be the one and only entry page within SAP BTP ABAP environment.</STRONG></P><P><STRONG><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="My Home in SAP BTP ABAP environment" style="width: 873px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/365264iFA42766B899B2563/image-size/large?v=v2&amp;px=999" role="button" title="My Home.png" alt="My Home in SAP BTP ABAP environment" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">My Home in SAP BTP ABAP environment</span></span></STRONG></P><P>&nbsp;</P><H4 id="toc-hId-1653803401">&nbsp;</H4><H4 id="toc-hId-1457289896">My Home Sections</H4><P>My Home is divided into different sections. You can view your <STRONG>News</STRONG>, <STRONG>Pages</STRONG>, <STRONG>Apps</STRONG>, <STRONG>Insights Tiles</STRONG>, and <STRONG>Insights Cards</STRONG> on this page.</P><H4 id="toc-hId-1260776391">&nbsp;</H4><H4 id="toc-hId-1064262886">News</H4><P>The News section keeps you updated on your company's latest news, or SAP BTP ABAP environment system news.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="News section on My Home entry page" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/365266i1894F76DC213F66E/image-size/large/is-moderation-mode/true?v=v2&amp;px=999" role="button" title="News.png" alt="News section on My Home entry page" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">News section on My Home entry page</span></span></P><P>&nbsp;</P><H4 id="toc-hId-867749381">Pages</H4><P>The Pages section provides you with quick access to your favorite or most used pages. You can manage the visibility of your pages and order them in a way that enhances your productivity.&nbsp;&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Pages section on My Home entry page" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/365267i4B9ECD9C88714D2B/image-size/large/is-moderation-mode/true?v=v2&amp;px=999" role="button" title="Pages.png" alt="Pages section on My Home entry page" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Pages section on My Home entry page</span></span></P><H4 id="toc-hId-671235876">&nbsp;</H4><H4 id="toc-hId-474722371">Apps</H4><P>The Apps section provides easy access to your favorite, most used, recently used, and recommended applications. The Apps section improves the discoverability of your applications. The <STRONG>Recommended</STRONG> tab offers app suggestions using SAP Business AI, based on your user-specific role assignment. You can add apps to the <STRONG>Favorites</STRONG> tab from your most used, recently used, and recommended applications. You can organize and categorize your favorite applications by using the grouping, ordering and color-coding functionality so you can access them even more efficiently.&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Apps section on My Home entry page" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/365268i87787047F533C3AA/image-size/large?v=v2&amp;px=999" role="button" title="Apps.png" alt="Apps section on My Home entry page" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Apps section on My Home entry page</span></span></P><P>&nbsp;</P><H4 id="toc-hId-278208866">Insights Tiles and Insights Cards</H4><P>The Insights section allows you to manage and monitor your companyโ€™s activities. It shows critical business information through KPIs and micro charts. This section is broken into two sections: <STRONG>Insights Tiles</STRONG> and <STRONG>Insights Cards</STRONG>.&nbsp;Insights cards and tiles display dynamic content at a glance. They provide quick and easy access to the applications that can provide more detailed information.</P><P>Insights tiles offer analytical information, such as charts or KPIs. Insights cards are similar to Insights tiles but provide more detailed analytical information in the form of charts, tables or lists from supporting overview page-, list report-, and analytical list page-based applications. Thanks to this information, you can assess what is happening at any time and take action when needed.&nbsp;You can customize the Insights section to display information that enables you to do your job with speed and agility.&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Insights section on My Home entry page" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/365270i6A352999FB17DADD/image-size/large?v=v2&amp;px=999" role="button" title="Tiles and Cards.png" alt="Insights section on My Home entry page" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Insights section on My Home entry page</span></span></P><P>&nbsp;</P><H3 id="toc-hId--122618727">Make it Mine โ€“ Personalize My Home to Your Needs</H3><P>Following the โ€œMake it Mineโ€ approach, you can personalize the entry page to hide or display specific sections as well as the content maintained within these sections. Another key feature is the ability to customize the layout of these sections. This personalization capability allows you to prioritize the information that is most important to you.&nbsp;</P><P>To personalize the entry page to your needs, choose <STRONG>My Home Settings</STRONG> from the dropdown menu of the respective sections. Here, you can customize the layout and configure the respective sections.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="My Home Settings" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/365271iA68D69E3C590E099/image-size/large?v=v2&amp;px=999" role="button" title="My Home Settings.png" alt="My Home Settings" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">My Home Settings</span></span></P><P>&nbsp;</P><P>We hope you enjoy working with&nbsp;My Home&nbsp;in SAP BTP ABAP environment and reap its benefits. You can&nbsp;look forward to more enhancements that will improve your My Home experience even further in future releases. Stay tuned for more updates!</P> 2026-01-28T10:41:54.700000+01:00 https://community.sap.com/t5/technology-blog-posts-by-sap/removal-of-business-groups-in-sap-btp-abap-environment-switching-to-spaces/ba-p/14316689 Removal of Business Groups in SAP BTP ABAP Environment: Switching to Spaces and Pages 2026-01-28T11:58:43.178000+01:00 LauraEiraElias https://community.sap.com/t5/user/viewprofilepage/user-id/793763 <P>Recently, we announced <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/my-home-in-sap-btp-abap-environment/ba-p/14314918" target="_self">My Home in SAP BTP ABAP environment.</A><BR />My Home is your personalized entry page that provides you with easy access to the business insights and applications you need to do your job with greater speed and agility.</P><P>As a prerequisite for My Home, SAP Fiori launchpad spaces and pages need to be enabled.<BR />The spaces mode was developed to offer more flexibility to influence the launchpad layout for specific user groups. Pages are assigned to users via spaces that are assigned to business roles. The business role defines which users see a specific space. By defining pages with meaningful sections, you can define in which order the apps are sorted on the page.</P><P>&nbsp;</P><H3 id="toc-hId-1917804609">Switching to Spaces and Pages</H3><P>Spaces and pages have been announced as the standard layout approach for structuring content in the SAP Fiori launchpad with SAP BTP ABAP environment 2302.<BR />Consequently, <STRONG>the classic Fiori launchpad home page with business groups will be removed gradually until 2608 in favor of SAP Fiori launchpad spaces and pages. </STRONG></P><P>Luckily, this is no news: The transition is going on for quite some time now, as spaces and pages are already the default in newly provisioned systems for several years.&nbsp;<BR /><STRONG>The removal of groups will affect newly provisioned systems at first with 2602. Later, with 2605, the switch will take place for existing systems as well.</STRONG></P><P>This means in detail:</P><UL><LI>With 2602, it is no longer possible to switch between spaces and pages and the classic Fiori launchpad home page with groups in newly provisioned systems.</LI><LI>With 2605, spaces and pages will be the default in existing systems as well. The option to switch to the classic home page with groups will still be available for end users if the administrator has enabled it in the Manage Launchpad Settings app.</LI><LI>With 2608, the option to switch to the classic FLP home page will be removed completely in production systems.</LI></UL><P>&nbsp;</P><H3 id="toc-hId-1721291104"><STRONG>How to Prepare for the Transition</STRONG></H3><P>Good news: The transition is straightforward, but there are a few important points to note. Until now, users couldnโ€™t create their own groups in the SAP BTP ABAP environment. They relied on SAP-delivered groups and personalized them by adding, removing, or renaming tiles.</P><P>SAP provides predefined spaces and pages with similarly structured content. SAP-delivered groups will be switched to these predefined spaces and pages. <STRONG>Important: user-level personalizations made to the previous groups will not be carried over and will be lost due to the switch. You will need to recreate personal adjustments after the transition.</STRONG></P><P>To be as well prepared as possible, we recommend administrator to enable the switch to spaces and pages now to remain productive after the transition.</P><P>Here are our best practices for end users:</P><UL><LI>Plan the switch carefully and identify which adjustments are important to you.</LI><LI>Document your existing personalizations so you can rebuild them in spaces and pages.</LI><LI>Use SAPโ€™s predefined spaces and pages as a starting point and tailor them to your workflow.</LI></UL><P>&nbsp;</P><H3 id="toc-hId-1524777599"><STRONG>For Administrators: Summary of the Upcoming Changes</STRONG></H3><P>As part of the mentioned transition to spaces and pages, SAP will change the SAP Fiori launchpad settings in the <EM>Manage Launchpad Settings</EM> app for administrators accordingly over the next release upgrades:</P><P><STRONG>With SAP BTP ABAP environment 2602:</STRONG></P><UL><LI><P>The parameter <FONT face="andale mono,times">SPACES</FONT> is removed in newly provisioned systems.</P></LI><LI>The parameter <FONT face="andale mono,times">SPACES_ENABLE_USER</FONT> is removed in newly provisioned systems.</LI><LI>The parameter <FONT face="andale mono,times">SPACES_CUSTOM_HOME</FONT> is true (ON) as default for all existing and newly provisioned systems. The setting to disable My Home is still available. Since spaces and pages need to be enabled as a prerequisite for My Home, this needs to be manually activated for existing systems.</LI></UL><P><STRONG>With SAP BTP ABAP environment 2605:</STRONG></P><UL><LI>The parameter <FONT face="andale mono,times">SPACES</FONT> is true (ON) as default in existing systems.</LI><LI>The parameter <FONT face="andale mono,times">SPACES_ENABLE_USER</FONT> is false (OFF) as default in existing systems. The settings to enable switching between the classic FLP homepage and the spaces and pages layout is still available.</LI></UL><P><STRONG>With SAP BTP ABAP environment 2608:</STRONG></P><UL><LI>The parameter <FONT face="andale mono,times">SPACES</FONT> is removed.</LI><LI>The parameter <FONT face="andale mono,times">SPACES_ENABLE_USER</FONT> is removed.</LI><LI>The parameter <FONT face="andale mono,times">SPACES_CUSTOM_HOME</FONT> is removed.</LI></UL><P><SPAN>&nbsp;</SPAN></P><P>Ultimately, there will be no option to switch back to groups or to enable toggling between spaces and pages and groups after the SAP BTP ABAP environment 2608 release upgrade. You must complete the transition to spaces and pages before the final, irreversible switch in production systems with the 2608 release upgrade.</P><P>We therefore invite all customers to begin transitioning now and proactively embrace this change.</P> 2026-01-28T11:58:43.178000+01:00 https://community.sap.com/t5/abap-blog-posts/dynamic-rap-actions-explained-abstract-entities-powering-flexible-action/ba-p/14317341 Dynamic RAP Actions Explained: Abstract Entities Powering Flexible Action Buttons 2026-02-04T08:58:36.978000+01:00 Bikash_R https://community.sap.com/t5/user/viewprofilepage/user-id/1527809 <P><U><FONT face="times new roman,times" size="4" color="#000000"><STRONG>Introduction--</STRONG></FONT></U></P><P><FONT face="times new roman,times" color="#000000"><SPAN>In the&nbsp;RESTful ABAP Programming Model (RAP),&nbsp;</SPAN><I><SPAN>actions</SPAN></I><SPAN>&nbsp;play a crucial role in triggering custom business logic on business objects โ€” for example, approving, rejecting, or performing special updates on records.</SPAN><SPAN>&nbsp;</SPAN></FONT></P><P><FONT face="times new roman,times" color="#000000"><SPAN>Sometimes, these actions require&nbsp;user inputs, such as selecting a reason code, approval type, or custom parameter value before execution. To achieve this, RAP provides&nbsp;parameterized actions, and to enhance usability, we can use an&nbsp;abstract entity&nbsp;to define the parameter structure along with a&nbsp;dropdown (value help).</SPAN><SPAN>&nbsp;</SPAN></FONT></P><P><FONT face="times new roman,times" color="#000000">In this blog,&nbsp;weโ€™ll&nbsp;explore how to build a&nbsp;parameterized RAP action&nbsp;that displays a dropdown list for user&nbsp;selection, powered by an&nbsp;abstract entity. This approach keeps the core logic clean, reusable, and consistent with RAPโ€™s โ€œclean coreโ€ principles.&nbsp;</FONT></P><P><FONT size="4"><U><FONT face="times new roman,times"><STRONG>Objective--</STRONG></FONT></U></FONT></P><P><FONT size="4"><U><FONT face="times new roman,times"><STRONG>By the end of this blog,&nbsp;youโ€™ll&nbsp;learn how to: -</STRONG></FONT></U></FONT></P><UL><LI><FONT face="times new roman,times">Define an&nbsp;abstract entity&nbsp;to&nbsp;represent&nbsp;the action parameters&nbsp;</FONT></LI></UL><UL><LI><FONT face="times new roman,times">Provide a&nbsp;dropdown&nbsp;for the parameter field&nbsp;</FONT></LI></UL><UL><LI><FONT face="times new roman,times">Link the abstract entity to the&nbsp;RAP action definition&nbsp;</FONT></LI></UL><UL><LI><FONT face="times new roman,times">Implement the&nbsp;behavior logic&nbsp;to handle user input&nbsp;</FONT></LI></UL><UL><LI><FONT face="times new roman,times">Execute and test the action from the&nbsp;Fiori Elements UI</FONT></LI></UL><P><FONT size="4"><U><FONT face="times new roman,times"><STRONG>Business Scenario Overview--</STRONG></FONT></U></FONT></P><P><FONT face="times new roman,times">You are designing a&nbsp;Purchase Order (PO) Management RAP application, consisting of a&nbsp;Header&nbsp;and&nbsp;Item&nbsp;structure.&nbsp;</FONT></P><P><FONT size="4"><U><FONT face="times new roman,times"><STRONG>The goal: -</STRONG></FONT></U></FONT></P><UL><LI><FONT face="times new roman,times">To&nbsp;release purchase orders&nbsp;(POs) from Fiori using a&nbsp;parameterized action.&nbsp;</FONT></LI></UL><UL><LI><FONT face="times new roman,times">The action uses an&nbsp;abstract entity&nbsp;to capture runtime parameters (like&nbsp;release&nbsp;flag).&nbsp;</FONT></LI></UL><P><FONT size="4"><U><FONT face="times new roman,times"><STRONG>Database Tables--</STRONG></FONT></U></FONT></P><P><FONT face="times new roman,times" size="4"><STRONG>Header Table:&nbsp;ZBRT_T_PO_HRD</STRONG>&nbsp;</FONT></P><P><FONT face="times new roman,times" size="4"><STRONG>This table stores high-level details of a purchase order</STRONG>.&nbsp;</FONT></P><pre class="lia-code-sample language-abap"><code>@EndUserText.label : 'Purchase order header table' @AbapCatalog.enhancement.category : #NOT_EXTENSIBLE @AbapCatalog.tableCategory : #TRANSPARENT @AbapCatalog.deliveryClass : #A @AbapCatalog.dataMaintenance : #RESTRICTED define table zbrt_t_po_hrd { key mandt : abap.clnt not null; key ebeln : ebeln not null; bukrs : abap.char(4); supplier : abap.char(10); bsart : abap.char(4); lifnr : abap.char(10); land1 : abap.char(2); country_desc : abap.char(40); po_release : abap.char(1); migo_status : abap.char(40); email : abap.char(60); lastdatetime : timestampl; }</code></pre><P><FONT size="4"><U><FONT face="times new roman,times"><STRONG>Key&nbsp;points:--</STRONG></FONT></U></FONT></P><UL><LI><FONT face="times new roman,times">EBELN&nbsp;is the primary key.&nbsp;</FONT></LI></UL><UL><LI><FONT face="times new roman,times">lastdatetime&nbsp;acts as the&nbsp;ETag&nbsp;for draft handling and concurrency control.&nbsp;</FONT></LI></UL><UL><LI><FONT face="times new roman,times">po_release&nbsp;indicates&nbsp;whether the PO has been released or not.&nbsp;</FONT></LI></UL><P><FONT size="4"><U><FONT face="times new roman,times"><STRONG>Item Table: ZBRT_T_PO_ITEM--</STRONG></FONT></U></FONT></P><P><FONT face="times new roman,times"><STRONG>This stores&nbsp;item-level details&nbsp;linked to the header via a foreign key.</STRONG>&nbsp;</FONT></P><pre class="lia-code-sample language-abap"><code>@EndUserText.label : 'Purchase order item table' @AbapCatalog.enhancement.category : #NOT_EXTENSIBLE @AbapCatalog.tableCategory : #TRANSPARENT @AbapCatalog.deliveryClass : #A @AbapCatalog.dataMaintenance : #RESTRICTED define table zbrt_t_po_item { key mandt : abap.clnt not null; @AbapCatalog.foreignKey.screenCheck : false key ebeln : ebeln not null with foreign key [1..*,1] zbrt_t_po_hrd where mandt = zbrt_t_po_item.mandt and ebeln = zbrt_t_po_item.ebeln; key ebelp : abap.numc(5) not null; matnr : abap.char(40); werks : abap.char(4); lgort : abap.char(4); @Semantics.quantity.unitOfMeasure : 'zbrt_t_po_item.meins' menge : abap.quan(12,2); meins : abap.unit(3); @Semantics.amount.currencyCode : 'zbrt_t_po_item.waers' netpr : abap.curr(15,2); waers : abap.cuky; lastdatechanged : timestampl; }</code></pre><P><FONT size="4"><U><FONT face="times new roman,times"><STRONG>Key&nbsp;points:-</STRONG></FONT></U></FONT></P><UL><LI><FONT face="times new roman,times">The association&nbsp;[1..*,1]&nbsp;means:&nbsp;Many items&nbsp;can belong to&nbsp;one header.&nbsp;</FONT></LI></UL><UL><LI><FONT face="times new roman,times">Semantic annotations help map units and currencies for UI display.&nbsp;</FONT></LI></UL><UL><LI><FONT face="times new roman,times">lastdatechanged&nbsp;helps track data changes per item.&nbsp;</FONT></LI></UL><P><FONT size="4"><U><FONT face="times new roman,times"><STRONG>Abstract Entity: ZBRT_POPUP-</STRONG></FONT></U></FONT></P><P><FONT face="times new roman,times">Abstract entities are&nbsp;not physical tables; they are used for&nbsp;data transfer or parameter passing.&nbsp;</FONT></P><P><FONT face="times new roman,times">In this case,&nbsp;itโ€™s&nbsp;used as a&nbsp;parameter popup&nbsp;entity during your&nbsp;action execution&nbsp;(e.g., PO release).&nbsp;</FONT></P><pre class="lia-code-sample language-abap"><code>@EndUserText.label: 'PO RELEASE' @Metadata.allowExtensions: true define abstract entity zbrt_popup { @UI.defaultValue: 'X' @EndUserText.label: 'po_release' po_release : abap.char( 1 ); }</code></pre><P><FONT size="4"><U><FONT face="times new roman,times"><STRONG>Purpose:-</STRONG></FONT></U></FONT></P><UL><LI><FONT face="times new roman,times">Used as a&nbsp;popup parameter&nbsp;for a RAP&nbsp;parameterized action.&nbsp;</FONT></LI></UL><UL><LI><FONT face="times new roman,times">When the user triggers the&nbsp;<I>Release PO</I>&nbsp;action in the Fiori UI, this abstract entity is displayed to capture&nbsp;additional&nbsp;inputs (like โ€œRelease Flagโ€).&nbsp;</FONT></LI></UL><UL><LI><FONT face="times new roman,times">It is&nbsp;decoupled&nbsp;from the database, acting only as a&nbsp;temporary input structure.&nbsp;</FONT></LI></UL><P><FONT face="times new roman,times" size="4"><STRONG>Interface View for Header: ZC_BRT_PO_HEAD--</STRONG>&nbsp;</FONT></P><P><FONT face="times new roman,times" size="4"><STRONG>This is the&nbsp;Root Entity&nbsp;of your RAP Business Object.</STRONG>&nbsp;</FONT></P><pre class="lia-code-sample language-abap"><code>@AbapCatalog.viewEnhancementCategory: [#NONE] @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'Projection view for header' @Metadata.ignorePropagatedAnnotations: true @ObjectModel.usageType:{ serviceQuality: #X, sizeCategory: #S, dataClass: #MIXED } @Metadata.allowExtensions: true define root view entity zc_brt_po_head as select from zbrt_t_po_hrd composition [1..*] of zc_brt_po_item as _item { key ebeln, bukrs, supplier, bsart, lifnr, land1, country_desc, po_release, migo_status, email, @Semantics.systemDateTime.localInstanceLastChangedAt: true lastdatetime, cast('3' as abap.char(1)) as porelease, cast('1' as abap.char(1)) as noporelease, _item }</code></pre><P><FONT size="4"><U><FONT face="times new roman,times"><STRONG>Key concepts:-</STRONG></FONT></U></FONT></P><UL><LI><FONT face="times new roman,times"><STRONG>root view entity</STRONG>: Marks it as the&nbsp;root node&nbsp;of the RAP Business Object.&nbsp;</FONT></LI></UL><UL><LI><FONT face="times new roman,times"><STRONG>composition [1..*] of _item</STRONG>:&nbsp;Establishes&nbsp;a&nbsp;headerโ€“item relationship&nbsp;(1 header โ†’ many items).&nbsp;</FONT></LI></UL><UL><LI><FONT face="times new roman,times"><STRONG><I>@Semantics.systemDateTime.localInstanceLastChangedAt</I></STRONG>: Enables&nbsp;ETag-based&nbsp;draft and lock management.&nbsp;</FONT></LI></UL><UL><LI><FONT face="times new roman,times"><STRONG>cast('3' as&nbsp;abap.char(1)) as&nbsp;porelease</STRONG>:&nbsp;&nbsp;Defines&nbsp;a&nbsp;calculated field&nbsp;named&nbsp;porelease. This is a constant value ('3') cast to a character of length 1. It is typically used to&nbsp;represent&nbsp;a&nbsp;fixed feature control&nbsp;value (e.g., enabling a 'Release PO' button on the UI).&nbsp;</FONT></LI></UL><UL><LI><FONT face="times new roman,times"><STRONG>cast('1' as&nbsp;abap.char(1)) as&nbsp;noporelease</STRONG>:&nbsp;Defines another&nbsp;calculated field&nbsp;named&nbsp;noporelease&nbsp;with a constant value of&nbsp;'1'.&nbsp;Similar to&nbsp;above, this could be used for feature control (e.g., disabling a 'No Release' button).&nbsp;</FONT></LI></UL><P><FONT face="times new roman,times" size="4"><STRONG>Interface View for Item: ZC_BRT_PO_ITEM--</STRONG>&nbsp;</FONT></P><P><FONT face="times new roman,times" size="4"><STRONG>This is the&nbsp;child entity&nbsp;linked to the header.</STRONG>&nbsp;</FONT></P><pre class="lia-code-sample language-abap"><code>@AbapCatalog.viewEnhancementCategory: [#NONE] @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'Projection view for item' @Metadata.ignorePropagatedAnnotations: true @ObjectModel.usageType:{ serviceQuality: #X, sizeCategory: #S, dataClass: #MIXED } @Metadata.allowExtensions: true define view entity zc_brt_po_item as select from zbrt_t_po_item association to parent zc_brt_po_head as _head on $projection.ebeln = _head.ebeln { key ebeln, key ebelp, matnr, werks, lgort, @Semantics.quantity.unitOfMeasure: 'Meins' menge, meins, @Semantics.amount.currencyCode: 'Waers' netpr, waers, @Semantics.systemDateTime.localInstanceLastChangedAt: true lastdatechanged, _head }</code></pre><P><FONT size="4"><U><FONT face="times new roman,times"><STRONG>Explanation:-</STRONG></FONT></U></FONT></P><UL><LI><FONT face="times new roman,times">This view&nbsp;represents&nbsp;the&nbsp;<STRONG>item-level node</STRONG>&nbsp;in your RAP BO.&nbsp;</FONT></LI></UL><UL><LI><FONT face="times new roman,times">_head&nbsp;is a&nbsp;<STRONG>public association</STRONG>&nbsp;to navigate back to the header.&nbsp;</FONT></LI></UL><UL><LI><FONT face="times new roman,times">The same&nbsp;<STRONG>ETag annotation</STRONG>&nbsp;(<STRONG><I>@Semantics.systemDateTime.localInstanceLastChangedAt</I></STRONG>) ensures concurrency management for items too.&nbsp;</FONT></LI></UL><P><FONT face="times new roman,times" size="4"><U><STRONG>Then design the&nbsp;behavior&nbsp;definition-</STRONG></U></FONT></P><pre class="lia-code-sample language-abap"><code>managed implementation in class zbp_c_brt_po_head unique; strict ( 2 ); with draft; define behavior for zc_brt_po_head //alias &lt;alias_name&gt; persistent table zbrt_t_po_hrd lock master total etag Lastdatetime draft table zbrt_t_h_dft authorization master ( instance ) etag master lastdatetime { create ( precheck ) { default function GetDefaultsForCreate; } update ( precheck, features : instance ); delete ( precheck, features : instance ); field ( readonly ) bsart, Country_Desc; field ( mandatory ) bukrs; field ( readonly : create ) po_release; association _item { create; with draft; } mapping for zbrt_t_po_hrd { bsart = bsart; bukrs = bukrs; country_desc = country_desc; ebeln = ebeln; land1 = land1; lastdatetime = lastdatetime; lifnr = lifnr; migo_status = migo_status; porelease = po_release; email = email; } validation check_email on save { field Email; } determination migo_status_update on modify { field porelease; } action ( features : instance ) POREL parameter zbrt_popup result [1] $self; action ( features : instance ) PONOREL result [1] $self; static action Static_ALL result [1] $self; draft action Activate optimized; draft action Edit; draft action Resume; draft action Discard; draft determine action Prepare; } define behavior for zc_brt_po_item //alias &lt;alias_name&gt; persistent table zbrt_t_po_item lock dependent by _head draft table zbrt_t_i_ft authorization dependent by _head etag master Lastdatechanged { update; delete; field ( readonly ) ebeln, ebelp; association _head; }</code></pre><pre class="lia-code-sample language-abap"><code>determination migo_status_update on modify { field porelease; }</code></pre><P><FONT face="times new roman,times"><SPAN>Automatically updates&nbsp;</SPAN><STRONG><SPAN>MIGO status</SPAN></STRONG><SPAN>&nbsp;whenever the&nbsp;</SPAN><STRONG><SPAN>PO Release</SPAN></STRONG><SPAN>&nbsp;field changes.</SPAN></FONT></P><pre class="lia-code-sample language-abap"><code>action ( features : instance ) POREL parameter zbrt_popup result [1] $self; action ( features : instance ) PONOREL result [1] $self; static action Static_ALL result [1] $self;</code></pre><UL><LI><FONT face="times new roman,times"><STRONG><SPAN>POREL</SPAN></STRONG><SPAN>&nbsp;โ†’ Triggered to release a purchase order (with parameter&nbsp;popup).</SPAN><SPAN>&nbsp;</SPAN></FONT></LI></UL><UL><LI><FONT face="times new roman,times"><STRONG><SPAN>PONOREL</SPAN></STRONG><SPAN>&nbsp;โ†’ Reverses release.</SPAN><SPAN>&nbsp;</SPAN></FONT></LI></UL><UL><LI><FONT face="times new roman,times"><STRONG><SPAN>Static_ALL</SPAN></STRONG><SPAN>&nbsp;โ†’ Static action (not tied to any instance).</SPAN><SPAN>&nbsp;</SPAN></FONT></LI></UL><P><FONT size="4" color="#000000"><U><STRONG><FONT face="times new roman,times"><SPAN class="">Metadata extension--</SPAN></FONT></STRONG></U></FONT></P><pre class="lia-code-sample language-abap"><code>@Metadata.layer: #CORE @UI:{ headerInfo:{ title:{ value: 'Ebeln'}, description:{value: 'Migo_Status' }, typeName: 'Purchase Order Data', typeNamePlural: 'Purchase Order Data' } } annotate view zc_brt_po_head with { @UI.facet: [ { position: 10, label: 'PO Header', type: #IDENTIFICATION_REFERENCE }, { position: 20 , label: 'PO Item' , type: #LINEITEM_REFERENCE , targetElement: '_item' } ] @UI.identification: [ { position: 10, label: 'PO Number' } , { type: #FOR_ACTION_GROUP, label: 'PO Release Options', actionGroupId: '_ClickRelease' }, { type: #FOR_ACTION, label: 'PO Release', dataAction: 'POREL', actionGroupId: '_ClickRelease' }, { type: #FOR_ACTION, label: 'PO NotRelease', dataAction: 'PONOREL', actionGroupId: '_ClickRelease' } ] @UI.lineItem: [ { position: 10, label: 'PO Number' } , { type: #FOR_ACTION_GROUP, label: 'PO Release Options', actionGroupId: '_ClickRelease' }, { type: #FOR_ACTION, label: 'PO Release', dataAction: 'POREL', actionGroupId: '_ClickRelease' }, { type: #FOR_ACTION, label: 'PO NotRelease', dataAction: 'PONOREL', actionGroupId: '_ClickRelease' } , //This button we will use as static button { type: #FOR_ACTION, label: 'Release All POs', dataAction: 'Static_ALL',actionGroupId: '_ClickRelease' } ] @UI.selectionField: [ { position: 10 } ] @EndUserText.label: 'PO Number' ebeln; @UI.identification: [ { position: 20 , label: 'Company Code' } ] @UI.lineItem: [ { position: 20 , label: 'Company Code' } ] @UI.selectionField: [ { position: 20 } ] @EndUserText.label: 'Company Code' bukrs; @EndUserText.label: 'Document Type' @UI.identification: [ { position: 40 , label: 'Document Type' } ] @UI.lineItem: [ { position: 40 , label: 'Document Type' } ] @UI.selectionField: [ { position: 40 } ] bsart; @EndUserText.label: 'Vendor' @UI.identification: [ { position: 50 , label: 'Vendor' } ] @UI.lineItem: [ { position: 50 , label: 'Vendor' } ] @UI.selectionField: [ { position: 50 } ] lifnr; @EndUserText.label: 'Country' @UI.identification: [ { position: 60 , label: 'Country' } ] @UI.lineItem: [ { position: 60 , label: 'Country' } ] @UI.selectionField: [ { position: 60 } ] land1; @EndUserText.label: 'Country Name' @UI.identification: [ { position: 70 , label: 'Country Name' } ] @UI.lineItem: [ { position: 70 , label: 'Country Name' } ] @UI.selectionField: [ { position: 70 } ] country_desc; @EndUserText.label: 'PO Release' @UI.identification: [ { position: 80 , label: 'PO Release' } ] @UI.lineItem: [ { position: 80 , label: 'PO Release' } ] @UI.selectionField: [ { position: 80 } ] po_release; @EndUserText.label: 'MIGO Status' @UI.identification: [ { position: 90 , label: 'MIGO Status' } ] @UI.lineItem: [ { position: 90 , label: 'MIGO Status' } ] @UI.selectionField: [ { position: 90 } ] migo_status; @EndUserText.label: 'Email ID' @UI.identification: [ { position: 100 , label: 'Email ID' } ] @UI.lineItem: [ { position: 100 , label: 'Email ID' } ] @UI.selectionField: [ { position: 100 } ] email; @UI.identification: [ { position: 110, label: 'Change Date Time' } ] @UI.lineItem: [ { position: 110, label: 'Change Date Time' } ] @UI.selectionField: [ { position: 110 } ] @EndUserText.label: 'Change Date Time' lastdatetime; }</code></pre><P><FONT face="times new roman,times"><SPAN class="">This is the<SPAN>&nbsp;</SPAN></SPAN><SPAN class="">Metadata Extension (UI annotations)</SPAN><SPAN class=""><SPAN>&nbsp;</SPAN>for<SPAN>&nbsp;</SPAN></SPAN><SPAN class="">RAP Purchase Order application--</SPAN><SPAN class=""><SPAN>&nbsp;</SPAN>it defines how the fields and actions from our behavior definition (zc_brt_po_head) appear in the<SPAN>&nbsp;</SPAN></SPAN><SPAN class="">Fiori Elements app (List Report/Object Page)</SPAN><SPAN class="">.</SPAN><SPAN class="">&nbsp;</SPAN></FONT></P><pre class="lia-code-sample language-abap"><code>.identification: [ { position: 10, label: 'PO Number' } , { type: #FOR_ACTION_GROUP, label: 'PO Release Options', actionGroupId: '_ClickRelease' }, { type: #FOR_ACTION, label: 'PO Release', dataAction: 'POREL', actionGroupId: '_ClickRelease' }, { type: #FOR_ACTION, label: 'PO NotRelease', dataAction: 'PONOREL', actionGroupId: '_ClickRelease' } ]</code></pre><P><FONT face="times new roman,times" size="4"><STRONG><SPAN>These create&nbsp;grouped action buttons&nbsp;and drop-down&nbsp;on both the&nbsp;List Report and Object Page:-</SPAN></STRONG></FONT></P><UL><LI><FONT face="times new roman,times"><STRONG><SPAN>PO Release Options</SPAN></STRONG><SPAN>&nbsp;โ†’ Acts as a dropdown group.</SPAN><SPAN>&nbsp;</SPAN></FONT></LI></UL><UL><LI><FONT face="times new roman,times"><SPAN>Inside it:</SPAN><SPAN>&nbsp;</SPAN></FONT></LI></UL><UL><LI><FONT face="times new roman,times"><STRONG><SPAN>PO Release</SPAN></STRONG><SPAN>&nbsp;โ†’ Triggers the&nbsp;POREL&nbsp;action (for releasing PO).</SPAN><SPAN>&nbsp;</SPAN></FONT></LI></UL><UL><LI><FONT face="times new roman,times"><STRONG><SPAN>PO&nbsp;NotRelease</SPAN></STRONG><SPAN>&nbsp;โ†’ Triggers&nbsp;PONOREL&nbsp;action (for cancelling release).</SPAN><SPAN>&nbsp;</SPAN></FONT></LI><LI><FONT face="times new roman,times"><STRONG><SPAN>Release All POs</SPAN></STRONG><SPAN>&nbsp;โ†’ Added later as a&nbsp;</SPAN><STRONG><SPAN>static action</SPAN></STRONG><SPAN>.</SPAN></FONT></LI></UL><pre class="lia-code-sample language-abap"><code>{ type: #FOR_ACTION, label: 'Release All POs', dataAction: 'Static_ALL', actionGroupId: '_ClickRelease' }</code></pre><P><FONT face="times new roman,times"><STRONG><SPAN>This button executes the&nbsp;Static Action&nbsp;(Static_ALL) โ€” useful for mass operations like&nbsp;</SPAN></STRONG><STRONG><I><SPAN>โ€œRelease All Purchase Ordersโ€</SPAN></I></STRONG><STRONG><SPAN>&nbsp;without selecting individual ones.</SPAN></STRONG><SPAN>&nbsp;</SPAN></FONT></P><P><FONT face="times new roman,times"><STRONG><SPAN>Then implement the logic in the behavior implementation class for validation,&nbsp;actions&nbsp;and determination--</SPAN></STRONG><SPAN>&nbsp;</SPAN></FONT></P><pre class="lia-code-sample language-abap"><code>CLASS lhc_zc_brt_po_head DEFINITION INHERITING FROM cl_abap_behavior_handler. PRIVATE SECTION. METHODS get_instance_features FOR INSTANCE FEATURES IMPORTING keys REQUEST requested_features FOR zc_brt_po_head RESULT result. METHODS get_instance_authorizations FOR INSTANCE AUTHORIZATION IMPORTING keys REQUEST requested_authorizations FOR zc_brt_po_head RESULT result. METHODS precheck_create FOR PRECHECK IMPORTING entities FOR CREATE zc_brt_po_head. METHODS precheck_update FOR PRECHECK IMPORTING entities FOR UPDATE zc_brt_po_head. METHODS precheck_delete FOR PRECHECK IMPORTING keys FOR DELETE zc_brt_po_head. METHODS GetDefaultsForCreate FOR READ IMPORTING keys FOR FUNCTION zc_brt_po_head~GetDefaultsForCreate RESULT result. METHODS ponorel FOR MODIFY IMPORTING keys FOR ACTION zc_brt_po_head~ponorel RESULT result. METHODS porel FOR MODIFY IMPORTING keys FOR ACTION zc_brt_po_head~porel RESULT result. METHODS Static_ALL FOR MODIFY IMPORTING keys FOR ACTION zc_brt_po_head~Static_ALL RESULT result. METHODS migo_status_update FOR DETERMINE ON MODIFY IMPORTING keys FOR zc_brt_po_head~migo_status_update. METHODS check_email FOR VALIDATE ON SAVE IMPORTING keys FOR zc_brt_po_head~check_email. ENDCLASS. CLASS lhc_zc_brt_po_head IMPLEMENTATION. METHOD get_instance_features. ENDMETHOD. METHOD get_instance_authorizations. ENDMETHOD. METHOD precheck_create. LOOP AT entities INTO DATA(ls_enity). IF ls_enity-bukrs EQ '6000'. APPEND VALUE #( ebeln = ls_enity-ebeln ) TO failed-zc_brt_po_head. APPEND VALUE #( ebeln = ls_enity-ebeln %msg = new_message_with_text( severity = if_abap_behv_message=&gt;severity-error text = 'Please enter correct Company Code' &amp;&amp; ls_enity- bukrs ) ) TO reported-zc_brt_po_head. ENDIF. ENDLOOP. ENDMETHOD. METHOD precheck_update. LOOP AT entities INTO DATA(ls_enity). IF ls_enity-bukrs EQ '6000'. APPEND VALUE #( ebeln = ls_enity-ebeln ) TO failed-zc_brt_po_head. APPEND VALUE #( ebeln = ls_enity-ebeln %msg = new_message_with_text( severity = if_abap_behv_message=&gt;severity-error text = 'Please enter correct Company Code' &amp;&amp; ls_enity-Bukrs ) ) TO reported-zc_brt_po_head. ENDIF. ENDLOOP. ENDMETHOD. METHOD precheck_delete. READ ENTITY IN LOCAL MODE zc_brt_po_head ALL FIELDS WITH VALUE #( FOR ls_key IN keys ( ebeln = ls_key-ebeln ) ) RESULT DATA(lt_prechk_delete). LOOP AT lt_prechk_delete INTO DATA(ls_enity). IF ls_enity-porelease EQ abap_true. APPEND VALUE #( ebeln = ls_enity-ebeln ) TO failed-zc_brt_po_head. APPEND VALUE #( ebeln = ls_enity-ebeln %msg = new_message_with_text( severity = if_abap_behv_message=&gt;severity-error text = 'You can not delete this line Item as PO release is X' ) ) TO reported-zc_brt_po_head. ENDIF. ENDLOOP. ENDMETHOD. METHOD GetDefaultsForCreate. APPEND VALUE #( %cid = keys[ 1 ]-%cid %param-bsart = 'ZNB' ) TO result. ENDMETHOD. METHOD ponorel. READ ENTITY IN LOCAL MODE zc_brt_po_head ALL FIELDS WITH VALUE #( FOR ls_key IN keys ( ebeln = ls_key-ebeln ) ) RESULT DATA(lt_po_action). LOOP AT lt_po_action ASSIGNING FIELD-SYMBOL(&lt;fs_po_action&gt;). MODIFY ENTITY IN LOCAL MODE zc_brt_po_head UPDATE FIELDS ( porelease ) WITH VALUE #( ( ebeln = &lt;fs_po_action&gt;-ebeln porelease = abap_false ) ) REPORTED reported FAILED failed. READ ENTITY IN LOCAL MODE zc_brt_po_head ALL FIELDS WITH VALUE #( ( ebeln = &lt;fs_po_action&gt;-ebeln ) ) RESULT DATA(lt_result). result = VALUE #( FOR ls_result IN lt_result ( ebeln = ls_result-ebeln %param-ebeln = ls_result-ebeln %param-porelease = ls_result-porelease ) ). ENDLOOP. ENDMETHOD. METHOD porel. LOOP AT keys ASSIGNING FIELD-SYMBOL(&lt;fs_po_action&gt;). DATA(lv_popup_value) = &lt;fs_po_action&gt;-%param-po_release. MODIFY ENTITY IN LOCAL MODE zc_brt_po_head UPDATE FIELDS ( po_release ) WITH VALUE #( ( Ebeln = &lt;fs_po_action&gt;-Ebeln po_release = lv_popup_value ) ) REPORTED reported FAILED failed. READ ENTITY IN LOCAL MODE zc_brt_po_head ALL FIELDS WITH VALUE #( ( Ebeln = &lt;fs_po_action&gt;-Ebeln ) ) RESULT DATA(lt_result). result = VALUE #( FOR ls_result IN lt_result ( ebeln = ls_result-Ebeln %param-ebeln = ls_result-ebeln %param-po_release = ls_result-po_release ) ). ENDLOOP. ENDMETHOD. METHOD Static_ALL. SELECT FROM zbrt_t_po_hrd FIELDS ebeln , po_release WHERE po_release = _false INTO TABLE(lt_static_act). LOOP AT lt_static_act INTO DATA(ls_static_action). MODIFY ENTITY IN LOCAL MODE zc_brt_po_head UPDATE FIELDS ( porelease ) WITH VALUE #( ( ebeln = ls_static_action-ebeln porelease = abap_true ) ) . READ ENTITY IN LOCAL MODE zc_brt_po_head ALL FIELDS WITH VALUE #( ( ebeln = ls_static_action-ebeln ) ) RESULT DATA(lt_result). result = VALUE #( FOR ls_result IN lt_result ( %param-ebeln = ls_result-ebeln %param-porelease = ls_result-porelease ) ). ENDLOOP. INSERT VALUE #( %msg = new_message_with_text( severity = if_abap_behv_message=&gt;severity-success text = |{ lines( lt_static_act ) } Records has been upadted | ) ) INTO TABLE reported-zc_brt_po_head. ENDMETHOD. METHOD migo_status_update. READ ENTITY IN LOCAL MODE zc_brt_po_head ALL FIELDS WITH VALUE #( FOR ls_key IN keys ( ebeln = ls_key-ebeln ) ) RESULT DATA(lt_migo_status). LOOP AT lt_migo_status ASSIGNING FIELD-SYMBOL(&lt;fs_migo&gt;). IF &lt;fs_migo&gt;-porelease EQ abap_true. MODIFY ENTITY IN LOCAL MODE zc_brt_po_head UPDATE FIELDS ( migo_status ) WITH VALUE #( ( ebeln = &lt;fs_migo&gt;-ebeln migo_status = 'GR has done' ) ). ELSEIF &lt;fs_migo&gt;-porelease EQ abap_false. MODIFY ENTITY IN LOCAL MODE zc_brt_po_head UPDATE FIELDS ( migo_status ) WITH VALUE #( ( ebeln = &lt;fs_migo&gt;-ebeln migo_status = 'Open' ) ). ENDIF. ENDLOOP. ENDMETHOD. METHOD check_email. DATA: lr_reg TYPE REF TO cl_abap_regex. DATA: lr_matcher TYPE REF TO cl_abap_matcher, lv_email TYPE string. CREATE OBJECT lr_reg EXPORTING pattern = '\w+(\.\w+)*@(\w+\.)+(\w{2,4})' ignore_case = abap_true. READ ENTITY IN LOCAL MODE zc_brt_po_head ALL FIELDS WITH VALUE #( FOR ls_key IN keys ( Ebeln = ls_key-Ebeln ) ) RESULT DATA(lt_validation). LOOP AT lt_validation INTO DATA(ls_validation). DATA(lv_po_count) = strlen( ls_validation-Email ). IF lv_po_count LT 10. APPEND VALUE #( Ebeln = ls_validation-Ebeln ) TO failed-zc_brt_po_head. APPEND VALUE #( Ebeln = ls_validation-Ebeln %msg = new_message_with_text( severity = if_abap_behv_message=&gt;severity-error text = 'Pls enter correct length for Email' &amp;&amp; ls_validation-Email ) ) TO reported-zc_brt_po_head. ENDIF. lr_matcher = lr_reg-&gt;create_matcher( text = ls_validation-Email ). IF lr_matcher-&gt;match( ) IS INITIAL. APPEND VALUE #( Ebeln = ls_validation-Ebeln ) TO failed-zc_brt_po_head. APPEND VALUE #( Ebeln = ls_validation-Ebeln %msg = new_message_with_text( severity = if_abap_behv_message=&gt;severity-error text = 'Pls enter correct format for Email Id' &amp;&amp; ls_validation-Email ) ) TO reported-zc_brt_po_head. ENDIF. ENDLOOP. ENDMETHOD. ENDCLASS.</code></pre><pre class="lia-code-sample language-abap"><code>METHOD ponorel. READ ENTITY IN LOCAL MODE zc_brt_po_head ALL FIELDS WITH VALUE #( FOR ls_key IN keys ( ebeln = ls_key-ebeln ) ) RESULT DATA(lt_po_action). LOOP AT lt_po_action ASSIGNING FIELD-SYMBOL(&lt;fs_po_action&gt;). MODIFY ENTITY IN LOCAL MODE zc_brt_po_head UPDATE FIELDS ( porelease ) WITH VALUE #( ( ebeln = &lt;fs_po_action&gt;-ebeln porelease = abap_false ) ) REPORTED reported FAILED failed. READ ENTITY IN LOCAL MODE zc_brt_po_head ALL FIELDS WITH VALUE #( ( ebeln = &lt;fs_po_action&gt;-ebeln ) ) RESULT DATA(lt_result). result = VALUE #( FOR ls_result IN lt_result ( ebeln = ls_result-ebeln %param-ebeln = ls_result-ebeln %param-porelease = ls_result-porelease ) ). ENDLOOP. ENDMETHOD. </code></pre><P><FONT face="times new roman,times" size="4"><STRONG><SPAN>Purpose of the Method--</SPAN></STRONG></FONT></P><P><FONT face="times new roman,times"><SPAN>ponorel&nbsp;is triggered when a user clicks the&nbsp;</SPAN><STRONG><SPAN>โ€œPO Not Releaseโ€</SPAN></STRONG><SPAN>&nbsp;button in Fiori.</SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>Its job is to:</SPAN><SPAN>&nbsp;</SPAN></FONT></P><OL><LI><FONT face="times new roman,times"><SPAN>Read the&nbsp;</SPAN><STRONG><SPAN>selected PO(s)</SPAN></STRONG><SPAN>&nbsp;from the&nbsp;frontend.</SPAN><SPAN>&nbsp;</SPAN></FONT></LI><LI><FONT face="times new roman,times"><SPAN>Update their&nbsp;</SPAN><STRONG><SPAN>porelease&nbsp;field to false</SPAN></STRONG><SPAN>.</SPAN></FONT></LI><LI><FONT face="times new roman,times"><SPAN>Return the updated PO information back to the&nbsp;frontend&nbsp;so the UI reflects the change.</SPAN><SPAN>&nbsp;</SPAN></FONT></LI></OL><TABLE border="2"><TBODY><TR><TD width="215.948px" height="51px"><P><FONT face="times new roman,times"><STRONG><SPAN>Step</SPAN></STRONG><SPAN>&nbsp;</SPAN></FONT></P></TD><TD width="312.177px" height="51px"><P><FONT face="times new roman,times"><STRONG><SPAN>Purpose</SPAN></STRONG><SPAN>&nbsp;</SPAN></FONT></P></TD></TR><TR><TD width="215.948px" height="50px"><P><FONT face="times new roman,times"><SPAN>Read entity from local mode</SPAN></FONT></P></TD><TD width="312.177px" height="50px"><P><FONT face="times new roman,times"><SPAN>Fetch selected POs from draft/local buffer</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD></TR><TR><TD width="215.948px" height="50px"><P><FONT face="times new roman,times"><SPAN>Loop through POs</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD><TD width="312.177px" height="50px"><P><FONT face="times new roman,times"><SPAN>Process each PO individually</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD></TR><TR><TD width="215.948px" height="50px"><P><FONT face="times new roman,times"><SPAN>Modify entity</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD><TD width="312.177px" height="50px"><P><FONT face="times new roman,times"><SPAN>Set&nbsp;</SPAN><SPAN>porelease&nbsp;= false</SPAN><SPAN>&nbsp;(Not Released)</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD></TR><TR><TD width="215.948px" height="50px"><P><FONT face="times new roman,times"><SPAN>Read back updated record</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD><TD width="312.177px" height="50px"><P><FONT face="times new roman,times"><SPAN>Get latest values for UI</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD></TR><TR><TD width="215.948px" height="51px"><P><SPAN>Assign to&nbsp;</SPAN><SPAN>result</SPAN><SPAN>&nbsp;</SPAN></P></TD><TD width="312.177px" height="51px"><P><SPAN>Send updated record(s) back to Fiori</SPAN><SPAN>&nbsp;</SPAN></P></TD></TR></TBODY></TABLE><pre class="lia-code-sample language-abap"><code>METHOD porel. LOOP AT keys ASSIGNING FIELD-SYMBOL(&lt;fs_po_action&gt;). DATA(lv_popup_value) = &lt;fs_po_action&gt;-%param-po_release. MODIFY ENTITY IN LOCAL MODE zc_brt_po_head UPDATE FIELDS ( po_release ) WITH VALUE #( ( Ebeln = &lt;fs_po_action&gt;-Ebeln po_release = lv_popup_value ) ) REPORTED reported FAILED failed. READ ENTITY IN LOCAL MODE zc_brt_po_head ALL FIELDS WITH VALUE #( ( Ebeln = &lt;fs_po_action&gt;-Ebeln ) ) RESULT DATA(lt_result). result = VALUE #( FOR ls_result IN lt_result ( ebeln = ls_result-Ebeln %param-ebeln = ls_result-ebeln %param-po_release = ls_result-po_release ) ). ENDLOOP. ENDMETHOD. </code></pre><P><FONT face="times new roman,times" size="4"><STRONG><SPAN>Purpose of the Method--</SPAN></STRONG></FONT></P><P><FONT face="times new roman,times"><SPAN>porel&nbsp;is triggered when a user clicks the&nbsp;</SPAN><STRONG><SPAN>โ€œPO Releaseโ€</SPAN></STRONG><SPAN>&nbsp;button in Fiori.</SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>Its job is to:</SPAN><SPAN>&nbsp;</SPAN></FONT></P><OL><LI><FONT face="times new roman,times"><SPAN>Read the&nbsp;</SPAN><STRONG><SPAN>selected POs</SPAN></STRONG><SPAN>&nbsp;from the&nbsp;frontend.</SPAN><SPAN>&nbsp;</SPAN></FONT></LI><LI><FONT face="times new roman,times"><SPAN>Update their&nbsp;</SPAN><STRONG><SPAN>po_release&nbsp;field</SPAN></STRONG><SPAN>&nbsp;based on the value passed from the frontend (%param-po_release).</SPAN></FONT></LI><LI><FONT face="times new roman,times"><SPAN>Return the updated PO(s) back to the&nbsp;frontend&nbsp;so the UI reflects the change.</SPAN><SPAN>&nbsp;</SPAN></FONT></LI></OL><TABLE border="2"><TBODY><TR><TD><P><FONT face="times new roman,times"><STRONG><SPAN>Feature</SPAN></STRONG><SPAN>&nbsp;</SPAN></FONT></P></TD><TD><P><FONT face="times new roman,times"><STRONG><SPAN>ponorel</SPAN></STRONG><SPAN>&nbsp;</SPAN></FONT></P></TD><TD><P><FONT face="times new roman,times"><STRONG><SPAN>porel</SPAN></STRONG><SPAN>&nbsp;</SPAN></FONT></P></TD></TR><TR><TD><P><FONT face="times new roman,times"><SPAN>po_release&nbsp;update</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD><TD><P><FONT face="times new roman,times"><SPAN>Always sets to&nbsp;false</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD><TD><P><FONT face="times new roman,times"><SPAN>Sets dynamically from frontend&nbsp;%param-po_release</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD></TR><TR><TD><P><FONT face="times new roman,times"><SPAN>Use case</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD><TD><P><FONT face="times new roman,times"><SPAN>โ€œPO Not Releaseโ€ button</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD><TD><P><FONT face="times new roman,times"><SPAN>โ€œPO Releaseโ€ button or popup</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD></TR><TR><TD><P><FONT face="times new roman,times"><SPAN>Logic</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD><TD><P><FONT face="times new roman,times"><SPAN>Hard-coded</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD><TD><P><FONT face="times new roman,times"><SPAN>Dynamic based on action parameter</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD></TR></TBODY></TABLE><pre class="lia-code-sample language-abap"><code>METHOD Static_ALL. SELECT FROM zbrt_t_po_hrd FIELDS ebeln , po_release WHERE po_release = _false INTO TABLE (lt_static_act). LOOP AT lt_static_act INTO DATA(ls_static_action). MODIFY ENTITY IN LOCAL MODE zc_brt_po_head UPDATE FIELDS ( porelease ) WITH VALUE #( ( ebeln = ls_static_action-ebeln porelease = abap_true ) ) . READ ENTITY IN LOCAL MODE zc_brt_po_head ALL FIELDS WITH VALUE #( ( ebeln = ls_static_action-ebeln ) ) RESULT DATA(lt_result). result = VALUE #( FOR ls_result IN lt_result ( %param-ebeln = ls_result-ebeln %param-porelease = ls_result-porelease ) ). ENDLOOP. INSERT VALUE #( %msg = new_message_with_text( severity = if_abap_behv_message=&gt;severity-success text = |{ lines( lt_static_act ) } Records has been upadted | ) ) INTO TABLE reported-zc_brt_po_head. ENDMETHOD.</code></pre><P><FONT face="times new roman,times" size="4"><STRONG><SPAN>Purpose of&nbsp;Static_ALL--</SPAN></STRONG><SPAN>&nbsp;</SPAN></FONT></P><UL><LI><FONT face="times new roman,times"><SPAN>This method is typically triggered by a&nbsp;</SPAN><STRONG><SPAN>โ€œRelease All POsโ€</SPAN></STRONG><SPAN>&nbsp;button in Fiori.</SPAN><SPAN>&nbsp;</SPAN></FONT></LI></UL><UL><LI><FONT face="times new roman,times"><SPAN>It automatically sets&nbsp;</SPAN><STRONG><SPAN>all POs with&nbsp;porelease&nbsp;= false</SPAN></STRONG><SPAN>&nbsp;to&nbsp;true.</SPAN><SPAN>&nbsp;</SPAN></FONT></LI></UL><UL><LI><FONT face="times new roman,times"><SPAN>Provides a&nbsp;</SPAN><STRONG><SPAN>success message</SPAN></STRONG><SPAN>&nbsp;for the user showing how many POs were updated.</SPAN></FONT></LI></UL><TABLE border="2"><TBODY><TR><TD width="45.4948px"><P><FONT face="times new roman,times"><STRONG><SPAN>Step</SPAN></STRONG><SPAN>&nbsp;</SPAN></FONT></P></TD><TD width="352.995px"><P><FONT face="times new roman,times"><STRONG><SPAN>Action</SPAN></STRONG><SPAN>&nbsp;</SPAN></FONT></P></TD></TR><TR><TD width="45.4948px"><P><FONT face="times new roman,times"><SPAN>1</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD><TD width="352.995px"><P><FONT face="times new roman,times"><SPAN>Select all unreleased POs from DB</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD></TR><TR><TD width="45.4948px"><P><FONT face="times new roman,times"><SPAN>2</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD><TD width="352.995px"><P><FONT face="times new roman,times"><SPAN>Loop through them</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD></TR><TR><TD width="45.4948px"><P><FONT face="times new roman,times"><SPAN>3</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD><TD width="352.995px"><P><FONT face="times new roman,times"><SPAN>Set&nbsp;</SPAN><SPAN>porelease&nbsp;= true</SPAN><SPAN>&nbsp;in local/draft mode</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD></TR><TR><TD width="45.4948px"><P><FONT face="times new roman,times"><SPAN>4</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD><TD width="352.995px"><P><FONT face="times new roman,times"><SPAN>Read the updated record</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD></TR><TR><TD width="45.4948px"><P><FONT face="times new roman,times"><SPAN>5</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD><TD width="352.995px"><P><FONT face="times new roman,times"><SPAN>Return updated data to frontend</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD></TR><TR><TD width="45.4948px"><P><FONT face="times new roman,times"><SPAN>6</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD><TD width="352.995px"><P><FONT face="times new roman,times"><SPAN>Insert a success message in&nbsp;</SPAN><SPAN>reported-zc_brt_po_head</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD></TR></TBODY></TABLE><pre class="lia-code-sample language-abap"><code>METHOD migo_status_update. READ ENTITY IN LOCAL MODE zc_brt_po_head ALL FIELDS WITH VALUE # ( FOR ls_key IN keys ( ebeln = ls_key-ebeln ) ) RESULT DATA(lt_migo_status). LOOP AT lt_migo_status ASSIGNING FIELD-SYMBOL(&lt;fs_migo&gt;). IF &lt;fs_migo&gt;-porelease EQ abap_true. MODIFY ENTITY IN LOCAL MODE zc_brt_po_head UPDATE FIELDS ( migo_status ) WITH VALUE #( ( ebeln = &lt;fs_migo&gt;-ebeln migo_status = 'GR has done') ). ELSEIF &lt;fs_migo&gt;-porelease EQ abap_false. MODIFY ENTITY IN LOCAL MODE zc_brt_po_head UPDATE FIELDS ( migo_status ) WITH VALUE #( ( ebeln = &lt;fs_migo&gt;-ebeln migo_status = 'Open' ) ). ENDIF. ENDLOOP. ENDMETHOD. </code></pre><P><FONT size="4"><U><FONT face="times new roman,times"><STRONG>Purpose--</STRONG></FONT></U></FONT></P><UL><LI><FONT face="times new roman,times"><SPAN>Whenever the field&nbsp;porelease&nbsp;is&nbsp;modified&nbsp;(via&nbsp;POREL,&nbsp;PONOREL, or&nbsp;Static_ALL), this determination triggers.</SPAN><SPAN>&nbsp;</SPAN></FONT></LI></UL><UL><LI><FONT face="times new roman,times"><SPAN>Updates&nbsp;migo_status&nbsp;dynamically:</SPAN><SPAN>&nbsp;</SPAN></FONT></LI></UL><UL><LI><FONT face="times new roman,times"><SPAN>'GR has done'&nbsp;โ†’ if the PO is released (porelease&nbsp;=&nbsp;abap_true).</SPAN><SPAN>&nbsp;</SPAN></FONT></LI></UL><UL><LI><FONT face="times new roman,times"><SPAN>'Open'&nbsp;โ†’ if the PO is not released (porelease&nbsp;=&nbsp;abap_false).</SPAN><SPAN>&nbsp;</SPAN></FONT></LI></UL><TABLE border="2"><TBODY><TR><TD><P><FONT face="times new roman,times"><STRONG><SPAN>Concept</SPAN></STRONG><SPAN>&nbsp;</SPAN></FONT></P></TD><TD><P><FONT face="times new roman,times"><STRONG><SPAN>Explanation</SPAN></STRONG><SPAN>&nbsp;</SPAN></FONT></P></TD></TR><TR><TD><P><FONT face="times new roman,times"><STRONG><SPAN>Determination</SPAN></STRONG><SPAN>&nbsp;</SPAN></FONT></P></TD><TD><P><FONT face="times new roman,times"><SPAN>Runs automatically when a field changes (porelease) in RAP.</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD></TR><TR><TD><P><FONT face="times new roman,times"><STRONG><SPAN>Local Mode</SPAN></STRONG><SPAN>&nbsp;</SPAN></FONT></P></TD><TD><P><FONT face="times new roman,times"><SPAN>Updates the draft version, ensuring changes are visible in the UI before committing.</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD></TR><TR><TD><P><FONT face="times new roman,times"><STRONG><SPAN>Dynamic Update</SPAN></STRONG><SPAN>&nbsp;</SPAN></FONT></P></TD><TD><P><FONT face="times new roman,times"><SPAN>migo_status&nbsp;is computed automatically based on&nbsp;porelease.</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD></TR><TR><TD><P><FONT face="times new roman,times"><STRONG><SPAN>No result table</SPAN></STRONG><SPAN>&nbsp;</SPAN></FONT></P></TD><TD><P><FONT face="times new roman,times"><SPAN>The UI will automatically get updated via RAP binding; no explicit&nbsp;result&nbsp;table&nbsp;needed.</SPAN><SPAN>&nbsp;</SPAN></FONT></P></TD></TR></TBODY></TABLE><P><STRONG><FONT face="times new roman,times"><SPAN class="">Create the service&nbsp;definition&nbsp;and service binding--</SPAN></FONT></STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Bikash_R_4-1769664175553.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/366691i0D3DE125AD7BF3F8/image-size/large?v=v2&amp;px=999" role="button" title="Bikash_R_4-1769664175553.png" alt="Bikash_R_4-1769664175553.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Bikash_R_5-1769664184125.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/366692iEB61478A7121F01A/image-size/large?v=v2&amp;px=999" role="button" title="Bikash_R_5-1769664184125.png" alt="Bikash_R_5-1769664184125.png" /></span></P><P><STRONG><FONT face="times new roman,times"><SPAN class="">Let's&nbsp;preview our application in Fiori--</SPAN></FONT></STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Bikash_R_6-1769664218575.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/366693i16048C536E0F3508/image-size/large?v=v2&amp;px=999" role="button" title="Bikash_R_6-1769664218575.png" alt="Bikash_R_6-1769664218575.png" /></span></P><P><FONT face="times new roman,times">Above&nbsp;can see the PO Release status and MIGO Status is done.&nbsp;</FONT></P><P><FONT face="times new roman,times">Let's&nbsp;create a record and see the&nbsp;pop-up.</FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Bikash_R_7-1769664248642.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/366694iBDE1EB6765F89F76/image-size/large?v=v2&amp;px=999" role="button" title="Bikash_R_7-1769664248642.png" alt="Bikash_R_7-1769664248642.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Bikash_R_8-1769664254933.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/366695iE8568632EE200BDB/image-size/large?v=v2&amp;px=999" role="button" title="Bikash_R_8-1769664254933.png" alt="Bikash_R_8-1769664254933.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Bikash_R_9-1769664276910.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/366696i4DB59DBDA907B6E8/image-size/large?v=v2&amp;px=999" role="button" title="Bikash_R_9-1769664276910.png" alt="Bikash_R_9-1769664276910.png" /></span></P><P><FONT face="times new roman,times">Above can the action button with drop down.&nbsp;</FONT></P><P><FONT face="times new roman,times">Letโ€™s&nbsp;check the actions button, how PO release and MIGO status&nbsp;are changing.&nbsp;</FONT></P><P><FONT face="times new roman,times">Select one record--&gt;click on action drop-down--&gt;click on PO Not Release.</FONT>&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Bikash_R_10-1769664304304.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/366697i2DF2C4D81D783700/image-size/large?v=v2&amp;px=999" role="button" title="Bikash_R_10-1769664304304.png" alt="Bikash_R_10-1769664304304.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Bikash_R_11-1769664311932.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/366698i43EE73C65937BD30/image-size/large?v=v2&amp;px=999" role="button" title="Bikash_R_11-1769664311932.png" alt="Bikash_R_11-1769664311932.png" /></span></P><P><FONT face="times new roman,times"><SPAN class="">Now<SPAN>&nbsp;</SPAN>can see<SPAN>&nbsp;</SPAN>automatically MIGO status<SPAN>&nbsp;</SPAN>changed based on PO Release.</SPAN><SPAN class="">&nbsp;</SPAN></FONT></P><P><FONT size="4"><U><FONT face="times new roman,times"><STRONG>Conclusion--</STRONG></FONT></U></FONT></P><P><FONT face="times new roman,times">In this blog, we explored how to implement&nbsp;parameterized actions in RAP&nbsp;using&nbsp;abstract entities&nbsp;and a&nbsp;dropdown-based parameter&nbsp;selection, enabling flexible and user-driven behavior in Fiori applications.&nbsp;</FONT></P><P><FONT face="times new roman,times">We&nbsp;demonstrated&nbsp;how multiple actions -- such as POREL, PONOREL, and STATIC_ALL โ€” can be designed to handle different business scenarios like&nbsp;Purchase Order release,&nbsp;mass update, and&nbsp;status refresh&nbsp;dynamically. Furthermore, with the MIGO_STATUS_UPDATE determination, we ensured&nbsp;real-time consistency&nbsp;between release and goods receipt statuses, illustrating the power of&nbsp;behavior-driven logic&nbsp;in the RAP framework.</FONT></P><P><FONT face="times new roman,times"><SPAN><SPAN class="">Thanks-------</SPAN><SPAN class="">&nbsp;</SPAN></SPAN></FONT></P> 2026-02-04T08:58:36.978000+01:00 https://community.sap.com/t5/technology-blog-posts-by-sap/how-to-deliver-customizing-as-a-saas-provider-using-business-configuration/ba-p/14321537 How to Deliver Customizing as a SaaS Provider using Business Configuration Sets 2026-02-05T09:59:15.458000+01:00 peterpersiel https://community.sap.com/t5/user/viewprofilepage/user-id/14643 <DIV>In our previous blog post,&nbsp;<A href="https://community.sap.com/t5/technology-blog-posts-by-sap/how-to-provide-customizing-as-a-saas-provider/ba-p/14009081" target="_blank">How to Provide Customizing as a SaaS Provider</A>, we described a programmatic approach that used EML statements with explicitly coded object templates in application jobs to deliver customizing entries. With release 2511, you can now use&nbsp;<A href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/business-configuration-sets-2adb1bfdb1404a7497a4424e0411e2a6?version=Cloud" target="_self" rel="noopener noreferrer">Business Configuration Sets</A> instead, removing the need to include explicitly coded customizing data in your business logic.</DIV><P>This blog illustrates how to maintain customizing data in a <A href="https://help.sap.com/docs/btp/sap-business-technology-platform/fiori-apps-business-configuration?version=Cloud" target="_self" rel="noopener noreferrer">Business Configuration Maintenance Object</A>, how to maintain customizing translations, importing the created customizing data/translations into a BC Set, implementing an application job for the BC Set activation and finally how to deploy the BC Set content to the relevant customizing table.<BR />We will also have a look into how BC Sets can be updated programmatically for the case when the customizing data was changed and BC Set data needs to be reimported.</P><P>This blog presents an alternative method to the Fiori app Upload Business Configuration. One <A href="https://influence.sap.com/sap/ino/#/idea/338295/?section=sectionDetails" target="_blank" rel="noopener noreferrer">restriction</A> of the Upload Business Configuration app is that it does not validate the customizing data being uploaded.<BR />In contrast, customizing data imported into Business Configuration (BC) Sets via ADT originates from existing customizing requests. This data is created within custom business configuration objects, where it is automatically validated through the underlying BO behavior (for example, error codes greater than 500 are rejected):</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="peterpersiel_0-1770205854371.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368896i5858C39B446622DF/image-size/medium?v=v2&amp;px=400" role="button" title="peterpersiel_0-1770205854371.png" alt="peterpersiel_0-1770205854371.png" /></span></P><P>This blog covers the following topics:</P><P><ul =""><li style="list-style-type:square; margin-left:0px; margin-bottom:1px;"><a href="https://community.sap.com/t5/technology-blog-posts-by-sap/how-to-deliver-customizing-as-a-saas-provider-using-business-configuration/ba-p/14321537#toc-hId-1660412619">Create Business Configuration Maintenance Object</a></li><li style="list-style-type:square; margin-left:0px; margin-bottom:1px;"><a href="https://community.sap.com/t5/technology-blog-posts-by-sap/how-to-deliver-customizing-as-a-saas-provider-using-business-configuration/ba-p/14321537#toc-hId-1463899114">Providing Authorization Control for a Business Configuration Maintenance Object</a></li><li style="list-style-type:square; margin-left:0px; margin-bottom:1px;"><a href="https://community.sap.com/t5/technology-blog-posts-by-sap/how-to-deliver-customizing-as-a-saas-provider-using-business-configuration/ba-p/14321537#toc-hId-1267385609">Creating customizing data &amp; translations</a></li><li style="list-style-type:square; margin-left:0px; margin-bottom:1px;"><a href="https://community.sap.com/t5/technology-blog-posts-by-sap/how-to-deliver-customizing-as-a-saas-provider-using-business-configuration/ba-p/14321537#toc-hId-1070872104">Creating a BC Set and importing customizing data &amp; translations</a></li><li style="list-style-type:square; margin-left:0px; margin-bottom:1px;"><a href="https://community.sap.com/t5/technology-blog-posts-by-sap/how-to-deliver-customizing-as-a-saas-provider-using-business-configuration/ba-p/14321537#toc-hId-874358599">Creating an Application Job for the BC Set activation</a></li><li style="list-style-type:square; margin-left:0px; margin-bottom:1px;"><a href="https://community.sap.com/t5/technology-blog-posts-by-sap/how-to-deliver-customizing-as-a-saas-provider-using-business-configuration/ba-p/14321537#toc-hId-677845094">Deploying the BC Set content by running the application job</a></li><li style="list-style-type:square; margin-left:0px; margin-bottom:1px;"><a href="https://community.sap.com/t5/technology-blog-posts-by-sap/how-to-deliver-customizing-as-a-saas-provider-using-business-configuration/ba-p/14321537#toc-hId-481331589">Maintaining customizing data programmatically in BC Sets</a></li></ul></P><H1 id="toc-hId-1660412619"><STRONG>Create Business Configuration Maintenance Object</STRONG></H1><P>The Business Configuration Maintenance Object discussed in this blog can be developed using the following tutorial, which guides you in creating a table for storing error codes:</P><P><A href="https://developers.sap.com/tutorials/abap-environment-business-configuration-object.html" target="_blank" rel="noopener noreferrer">Create Business Configuration Maintenance Object | SAP Tutorials</A></P><H1 id="toc-hId-1463899114"><STRONG>Providing Authorization Control for a Business Configuration Maintenance Object</STRONG></H1><P>To use the Business Configuration Maintenance Object, the required authorization must be set up. How to do this is explained in this tutorial:</P><P><A href="https://developers.sap.com/tutorials/abap-environment-authorization-control.html" target="_blank" rel="noopener noreferrer">Providing Authorization Control for a Business Configuration Maintenance Object | SAP Tutorials</A></P><H1 id="toc-hId-1267385609"><STRONG>Creating customizing data &amp; translations</STRONG></H1><P>Maintain following customizing data as described in tutorial <A href="https://developers.sap.com/tutorials/abap-environment-maintain-bc-app.html" target="_blank" rel="noopener noreferrer">Use Custom Business Configurations app</A> on a new customizing request:</P><TABLE width="271"><TBODY><TR><TD width="105"><P><STRONG>Error Code</STRONG></P></TD><TD width="165"><P><STRONG>Description</STRONG></P></TD></TR><TR><TD width="105"><P>400</P></TD><TD width="165"><P>Bad Request</P></TD></TR><TR><TD width="105"><P>401</P></TD><TD width="165"><P>Unauthorized</P></TD></TR><TR><TD width="105"><P>403</P></TD><TD width="165"><P>Forbidden</P></TD></TR></TBODY></TABLE><P>Afterwards your customizing request should include the primary customizing data as <EM>Customizing: Table Contents</EM>. Such customizing requests can be used for importing into a BC Set. Corresponding data records and translations will be extracted automatically during the process.</P><P>Maintain customizing translations for source language<EM> English United States</EM> and target language, for example <EM>German Germany,</EM> for the error codes using the <A href="https://help.sap.com/docs/btp/sap-business-technology-platform/maintain-customizing-translations?version=Cloud" target="_blank" rel="noopener noreferrer">Maintain Customizing Translations</A> app.</P><P>Select the text table <EM>ZERRCODET_###</EM> that was created earlier as text source in your translation project.</P><H1 id="toc-hId-1070872104"><STRONG>Creating a BC Set and importing customizing data &amp; translations</STRONG></H1><P>Follow the steps provided in&nbsp;<A href="https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/creating-business-configuration-sets" target="_blank" rel="noopener noreferrer">Creating Business Configuration Sets</A> to create a new business configuration set and use the customizing request that was created in the previous step for importing the data.</P><P>After successful import from the customizing request the error code data records as well as translations are included:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="peterpersiel_1-1770206570634.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368900i16C97DB6762B6F87/image-size/large?v=v2&amp;px=999" role="button" title="peterpersiel_1-1770206570634.png" alt="peterpersiel_1-1770206570634.png" /></span></P><P>We can now proceed to implement an application job that can be used activate this BC Set.</P><P><STRONG>Note: </STRONG>To import customizing data into a BC Set, the customizing data needs to be maintained for customizing objects of type Individual Transaction Object. A business configuration maintenance object (CUBCO) is configured as such by defining a <A href="https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/working-with-transport-object-definitions" target="_blank" rel="noopener noreferrer">transport object definition (TOBJ)</A> in the service configuration settings of the CUBCO. By using the business configuration maintenance object wizard as described in <A href="https://developers.sap.com/tutorials/abap-environment-business-configuration-object.html" target="_blank" rel="noopener noreferrer">Create Business Configuration Maintenance Object | SAP Tutorials</A>, this prerequisite is fulfilled. For more information, please refer to <A href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/generating-business-configuration-maintenance-object-with-generate-abap-repository-objects-wizard?version=Cloud#bc-management" target="_blank" rel="noopener noreferrer">Generating a Business Configuration Maintenance Object with the Generate ABAP Repository Objects Wizard</A>&nbsp;<SPAN>โ†’</SPAN> BC Management. Configuration changes are then recorded with object type TDAT instead of a TABU.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="peterpersiel_2-1770206570637.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368899iBCA9DA4E870B838B/image-size/large?v=v2&amp;px=999" role="button" title="peterpersiel_2-1770206570637.png" alt="peterpersiel_2-1770206570637.png" /></span></P><P>Those business configuration maintenance objects without existing transport object definition must be migrated, and a transport object definition needs to be created manually. How this can be done is described in the blog post <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/how-to-enable-bc-set-support-for-bc-app/ba-p/14313371" target="_blank">How to enable BC Set support for BC app</A>.</P><H1 id="toc-hId-874358599"><STRONG>Creating an Application Job for the BC Set activation</STRONG></H1><P>In this example, an <A href="https://help.sap.com/docs/btp/sap-business-technology-platform/application-jobs" target="_blank" rel="noopener noreferrer">Application Job</A> is used for creating and updating the customizing entries in a SaaS tenant. The customizing entries are deployed within the Application Job's implementation by activating the business configuration set using the corresponding <A href="https://help.sap.com/docs/btp/sap-business-technology-platform/runtime-api-986855193ceb4e06862ac78466327928" target="_blank" rel="noopener noreferrer">runtime API</A>.</P><P>As a first step, implement the BC Set activation as the <A href="https://help.sap.com/docs/btp/sap-business-technology-platform/implementing-business-logic" target="_blank" rel="noopener noreferrer">business logic of the of the application job</A> with a parameter for the BC Set to be activated and while saving activation messages in the application log:</P><pre class="lia-code-sample language-abap"><code>CLASS zcl_errorcode_set_activate_000 DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. "! &lt;p class="shorttext synchronized"&gt;Error Codes BC Set&lt;/p&gt; DATA errorcode_bc_set TYPE cl_scpr_cd_bcset_activation=&gt;ty_bcset_id VALUE 'Z_ERROR_CODES_SET_000'. INTERFACES if_apj_rt_run. INTERFACES if_apj_dt_defaults. PRIVATE SECTION. CONSTANTS log_object TYPE cl_bali_header_setter=&gt;ty_object VALUE 'Z_ERRORCODE_SET_000'. CONSTANTS log_subobject TYPE cl_bali_header_setter=&gt;ty_subobject VALUE 'ACTIVATE'. ENDCLASS. CLASS zcl_errorcode_set_activate_000 IMPLEMENTATION. METHOD if_apj_dt_defaults~fill_attribute_defaults. errorcode_bc_set = 'Z_ERROR_CODES_SET_000'. ENDMETHOD. METHOD if_apj_rt_run~execute. TRY. DATA(lo_bali_log) = cl_bali_log=&gt;create_with_header( header = cl_bali_header_setter=&gt;create( object = log_object subobject = log_subobject ) ). TRY. DATA(lo_bcset_activate) = cl_scpr_cd_bcset_activation=&gt;of( errorcode_bc_set ). CATCH cx_scpr_object_not_permitted INTO DATA(lx_scpr_object_not_permitted). lo_bali_log-&gt;add_item( item = cl_bali_exception_setter=&gt;create( severity = if_bali_constants=&gt;c_severity_error exception = lx_scpr_object_not_permitted ) ). ENDTRY. DATA(lo_activation_handler) = lo_bcset_activate-&gt;get_activate_handler( ). DATA(lo_activation_result) = lo_activation_handler-&gt;local( )-&gt;add_activation_options( )-&gt;start( ). DATA(lt_activation_messages) = lo_activation_result-&gt;get_messages( ). LOOP AT lt_activation_messages INTO DATA(ls_msg). lo_bali_log-&gt;add_item( item = cl_bali_message_setter=&gt;create_from_bapiret2( message_data = ls_msg ) ). ENDLOOP. cl_bali_log_db=&gt;get_instance( )-&gt;save_log_2nd_db_connection( log = lo_bali_log assign_to_current_appl_job = abap_true ). CATCH cx_bali_runtime INTO DATA(lx_bali_runtime). RAISE EXCEPTION TYPE cx_apj_rt_content USING MESSAGE EXPORTING previous = lx_bali_runtime. ENDTRY. ENDMETHOD. ENDCLASS.</code></pre><P>Then create a catalog entry and job template for the class with the business logic: <A href="https://help.sap.com/docs/btp/sap-business-technology-platform/creating-job-catalog-entry-and-job-template-in-adt" target="_blank" rel="noopener noreferrer">Creating a Job Catalog Entry and a Job Template</A>. Also create an application log object and sub object according to the job logic implementation: <A href="https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/working-with-application-log-objects?version=sap_btp" target="_blank" rel="noopener noreferrer">Working with Application Log Objects</A>.</P><P>To run the application job for BC Set activation, users must have the authorization provided by a business catalog. In this case we will reuse the business catalog <EM>Z_ERROR_CODES_###</EM> that was already created as part of the tutorial <A href="https://developers.sap.com/tutorials/abap-environment-authorization-control.html" target="_blank" rel="noopener noreferrer">Providing Authorization Control for a Business Configuration Maintenance Object</A>.</P><P>The business catalog <EM>Z_ERROR_CODES_###</EM> already includes the <A href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/iam-app-types?version=Cloud" target="_blank" rel="noopener noreferrer">IAM App of type</A> <EM>MBC</EM> (Business Configuration App) that was created for the CUBCO. During creation of the job catalog entry for the BC Set activation job, another IAM app with name <EM>&lt;job catalog entry name&gt;_SAJC</EM> is automatically created (refer to <A href="https://help.sap.com/docs/btp/sap-business-technology-platform/setting-up-authorizations?version=Cloud" target="_blank" rel="noopener noreferrer">Setting up the Authorizations</A>). This IAM app, to start the application job, is added to the existing business catalog so that the catalog provides authorizations to maintain error codes in the CUBCO as well as to start the BC Set activation job:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="peterpersiel_3-1770207589713.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368904iE77B14E4AEE8D2BA/image-size/large?v=v2&amp;px=999" role="button" title="peterpersiel_3-1770207589713.png" alt="peterpersiel_3-1770207589713.png" /></span></P><P>The BC Set activation implemented in the activation job using the <EM>CL_SCPR_CD_BCSET_ACTIVATION</EM> API requires table access for all entities used in the BC Set, so for both the primary tables as well as text tables. This can be achieved by adding the names of the tables in the <EM>TABLE</EM> authorization field of the existing <EM>S_TABU_NAM</EM> authorization in the <EM>_MBC</EM> IAM app: in this case <EM>ZERRCODET_000</EM> (text table) and <EM>ZERRCODE_000</EM> (primary table):</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="peterpersiel_4-1770207786852.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368909i70BCA9687904C610/image-size/large?v=v2&amp;px=999" role="button" title="peterpersiel_4-1770207786852.png" alt="peterpersiel_4-1770207786852.png" /></span></P><P>Hint: If you plan to run the BC Set activation job in your development system, do not forget to publish your changes to the business catalog locally.</P><H1 id="toc-hId-677845094"><STRONG>Deploying the BC Set content by running the application job</STRONG></H1><P>Make sure that the user that shall run the BC Set activation job has following business roles/catalogs assigned in the ABAP tenant (for example your SaaS consumer tenant):</P><TABLE><TBODY><TR><TD width="267.996px" height="50px"><P><STRONG>Business Role</STRONG></P></TD><TD width="232.992px" height="50px"><P><STRONG>Business Catalog</STRONG></P></TD><TD width="123px" height="50px"><P><STRONG>Purpose</STRONG></P></TD></TR><TR><TD width="267.996px" height="132px"><P>SAP_BR_ADMINISTRATOR</P></TD><TD width="232.992px" height="132px"><P>SAP_CORE_BC_APJ_JCE</P></TD><TD width="123px" height="132px"><P>For scheduling jobs in the <A href="https://help.sap.com/docs/btp/sap-business-technology-platform/application-jobs-3?version=Cloud" target="_blank" rel="noopener noreferrer">Application Jobs</A> app</P></TD></TR><TR><TD width="267.996px" height="159px"><P>SAP_BR_BPC_EXPERT</P></TD><TD width="232.992px" height="159px"><P>SAP_CORE_BC_BCT_MBC_PC</P></TD><TD width="123px" height="159px"><P>To use the <A href="https://help.sap.com/docs/btp/sap-business-technology-platform/custom-business-configurations-app?version=Cloud" target="_blank" rel="noopener noreferrer">Custom Business Configurations app</A></P></TD></TR><TR><TD width="267.996px" height="488px"><P>ZBR_ERROR_CODES_EXPERT_###</P></TD><TD width="232.992px" height="488px"><P>Z_ERROR_CODES_###</P></TD><TD width="123px" height="488px"><P>To maintain error codes in the Custom Business Configurations app and to start the BC Set activation job.<BR />As created in tutorial <A href="https://developers.sap.com/tutorials/abap-environment-authorization-control.html" target="_blank" rel="noopener noreferrer">Providing Authorization Control for a Business Configuration Maintenance Object</A></P></TD></TR></TBODY></TABLE><P>Open the Application Job App and select "Create" to create a new Application Job, then<BR />choose the Application Job Template. Maintain the scheduling options and provide a valid BC Set in the parameter. Schedule the Application Job by clicking "Schedule".</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="peterpersiel_5-1770208025521.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368918i02D953A69DFD883A/image-size/large?v=v2&amp;px=999" role="button" title="peterpersiel_5-1770208025521.png" alt="peterpersiel_5-1770208025521.png" /></span></P><P>Check the Application Job Log to determine if the BC Set content was deployed correctly:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="peterpersiel_6-1770208059336.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368921i6DB487C8FB390C6F/image-size/large?v=v2&amp;px=999" role="button" title="peterpersiel_6-1770208059336.png" alt="peterpersiel_6-1770208059336.png" /></span></P><P>Users assigned to the required business roles (see above) can now check in the Custom Business Configurations App whether the customizing has been inserted and updated correctly:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="peterpersiel_7-1770208099315.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368922iE07C527C2359B269/image-size/medium?v=v2&amp;px=400" role="button" title="peterpersiel_7-1770208099315.png" alt="peterpersiel_7-1770208099315.png" /></span></P><H1 id="toc-hId-481331589"><STRONG>Maintaining customizing data programmatically in BC Sets</STRONG></H1><P>You might want to automate the lifecycle of your customizing data. For instance, you can update a BC Set with the latest customizing data after some changes. To do this, maintain your changes in EML within the configuration object on a customizing request. Then read the latest data from the underlying customizing tables and finally update the BC Set.</P><P>You can programmatically create a customizing request using the <A href="https://help.sap.com/docs/btp/sap-business-technology-platform/correction-and-transport-system?version=Cloud" target="_blank" rel="noopener noreferrer">XCO CTS module</A>. EML will then be used to maintain the data on that customizing request. Additionally, you have the option to programmatically release the customizing request afterward.</P><pre class="lia-code-sample language-abap"><code>CLASS zcl_errorcode_generate_000 DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES if_oo_adt_classrun. PRIVATE SECTION. TYPES tyt_errorcodes TYPE STANDARD TABLE OF zerrcode_000 WITH KEY error_code. TYPES tyt_errorcodestext TYPE STANDARD TABLE OF zerrcodet_000 WITH KEY langu error_code. TYPES tyt_errorcodes_update TYPE TABLE FOR UPDATE ZI_ErrorCode000. TYPES tyt_errorcodestext_update TYPE TABLE FOR UPDATE ZI_ErrorCode000Text. METHODS delete_errorcodes IMPORTING transportrequest TYPE trkorr. METHODS create_errorcodes IMPORTING transportrequest TYPE trkorr it_errorcodes_crt TYPE tyt_errorcodes it_errorcodestext_crt TYPE tyt_errorcodestext. METHODS update_errorcodes IMPORTING transportrequest TYPE trkorr it_errorcodes_update TYPE tyt_errorcodes_update it_errorcodestext_update TYPE tyt_errorcodestext_update. CONSTANTS co_cust_transport_target TYPE if_xco_transport_target=&gt;tv_value VALUE ''. " LOCAL CONSTANTS co_cust_transport_description TYPE sxco_ar_short_description VALUE 'Maintain new error codes programmatically'. ENDCLASS. CLASS zcl_errorcode_generate_000 IMPLEMENTATION. METHOD if_oo_adt_classrun~main. " Create customizing transport request DATA(lo_customizing_request) = xco_cp_cts=&gt;transports-&gt;customizing( co_cust_transport_target )-&gt;create_request( co_cust_transport_description ). " Programmatically create new error codes using EML create_errorcodes( transportrequest = lo_customizing_request-&gt;value it_errorcodes_crt = VALUE tyt_errorcodes( ( error_code = '404' ) ( error_code = '405' ) ( error_code = '406' ) ) it_errorcodestext_crt = VALUE tyt_errorcodestext( ( langu = 'D' error_code = '404' description = 'Not Found' ) ( langu = 'E' error_code = '404' description = 'Nicht gefunden' ) ( langu = 'D' error_code = '405' description = 'Method Not Allowed' ) ( langu = 'E' error_code = '405' description = 'Methode nicht erlaubt' ) ( langu = 'D' error_code = '406' description = 'Not Acceptable' ) ( langu = 'E' error_code = '406' description = 'Nicht akzeptabel' ) ) ). " Release customizing tasks and customizing request DATA(lt_transport_tasks) = lo_customizing_request-&gt;get_tasks( ). LOOP AT lt_transport_tasks INTO DATA(lo_transport_task). IF lo_transport_task-&gt;get_status( ) &lt;&gt; xco_cp_transport=&gt;status-&gt;modifiable. CONTINUE. ENDIF. lo_transport_task-&gt;release( ). ENDLOOP. lo_customizing_request-&gt;release( ). ENDMETHOD. METHOD create_errorcodes. DATA lt_errorcode_create TYPE TABLE FOR CREATE ZI_ErrorCode000_S\_ErrorCode000. TYPES tys_errorcode_create LIKE LINE OF lt_errorcode_create. DATA ls_errorcode_create TYPE tys_errorcode_create. DATA lt_errorcodestext_create TYPE TABLE FOR CREATE ZI_ErrorCode000\_ErrorCode000Text. TYPES tys_errorcodestext_create LIKE LINE OF lt_errorcodestext_create. DATA ls_errorcodestext_create TYPE tys_errorcodestext_create. LOOP AT it_errorcodes_crt INTO DATA(wa_errorcode_crt). ls_errorcode_create = VALUE #( SingletonID = 1 %target = VALUE #( ( ErrorCode = wa_errorcode_crt-error_code %control-ErrorCode = if_abap_behv=&gt;mk-on ) ) ). APPEND ls_errorcode_create TO lt_errorcode_create. ENDLOOP. LOOP AT it_errorcodestext_crt INTO DATA(wa_errorcodestext_crt). ls_errorcodestext_create = VALUE #( %tky-ErrorCode = wa_errorcodestext_crt-error_code %target = VALUE #( ( Langu = wa_errorcodestext_crt-langu %control-Langu = if_abap_behv=&gt;mk-on Description = wa_errorcodestext_crt-description %control-Description = if_abap_behv=&gt;mk-on ) ) ). APPEND ls_errorcodestext_create TO lt_errorcodestext_create. ENDLOOP. MODIFY ENTITIES OF ZI_ErrorCode000_S ENTITY ErrorCode000All UPDATE FIELDS ( TransportRequestID ) WITH VALUE #( ( SingletonId = 1 TransportRequestID = transportrequest ) ) ENTITY ErrorCode000All CREATE BY \_ErrorCode000 FROM lt_errorcode_create REPORTED DATA(r_errorcodes_crt) FAILED DATA(f_errorcodes_crt) MAPPED DATA(m_errorcodes_crt) ##NEEDED. MODIFY ENTITIES OF ZI_ErrorCode000_S ENTITY ErrorCode000 CREATE BY \_ErrorCode000Text FROM lt_errorcodestext_create REPORTED DATA(r_errorcodestext_crt) FAILED DATA(f_errorcodestext_crt) MAPPED DATA(m_errorcodestext_crt) ##NEEDED. COMMIT ENTITIES BEGIN RESPONSE OF ZI_ErrorCode000_S FAILED DATA(failed_create) REPORTED DATA(reported_create) ##NEEDED. COMMIT ENTITIES END. ENDMETHOD. METHOD delete_errorcodes. MODIFY ENTITIES OF ZI_ErrorCode000_S ENTITY ErrorCode000All UPDATE FIELDS ( TransportRequestID ) WITH VALUE #( ( SingletonId = 1 TransportRequestID = transportrequest ) ) FAILED DATA(f_delete_tr) MAPPED DATA(m_delete_tr) REPORTED DATA(r_delete_tr) ##NEEDED. MODIFY ENTITIES OF ZI_ErrorCode000_S ENTITY ErrorCode000All CREATE FIELDS ( TransportRequestID ) WITH VALUE #( ( TransportRequestID = transportrequest ) ) DELETE FROM VALUE #( ( SingletonID = 1 ) ) FAILED DATA(f_delete) MAPPED DATA(m_delete) REPORTED DATA(r_delete) ##NEEDED. COMMIT ENTITIES BEGIN RESPONSE OF ZI_ErrorCode000_S FAILED DATA(failed_delete) REPORTED DATA(reported_delete) ##NEEDED. COMMIT ENTITIES END. ENDMETHOD. METHOD update_errorcodes. DATA lt_errorcodestext_update_i TYPE TABLE FOR UPDATE ZI_ErrorCode000Text. IF it_errorcodes_update IS NOT INITIAL OR it_errorcodestext_update IS NOT INITIAL. LOOP AT it_errorcodestext_update INTO DATA(ls_errorcodetext_update). ls_errorcodetext_update-%control-Description = if_abap_behv=&gt;mk-on. APPEND ls_errorcodetext_update TO lt_errorcodestext_update_i. ENDLOOP. ENDIF. MODIFY ENTITIES OF ZI_ErrorCode000_S ENTITY ErrorCode000All UPDATE FIELDS ( transportrequestid ) WITH VALUE #( ( SingletonID = 1 TransportRequestID = transportrequest ) ) ENTITY ErrorCode000Text UPDATE FROM lt_errorcodestext_update_i REPORTED DATA(r_errorcodes_upd) FAILED DATA(f_errorcodes_upd) MAPPED DATA(m_errorcodes_upd) ##NEEDED. COMMIT ENTITIES BEGIN RESPONSE OF ZI_ErrorCode000_S FAILED DATA(failed_update) REPORTED DATA(reported_update) ##NEEDED. COMMIT ENTITIES END. ENDMETHOD. ENDCLASS.</code></pre><P>The advantage of using EML to create, update, and delete customizing entries is that all validations of the business configuration object (BCO) are performed. This approach also supports both customizing entries of type table data (TABU) and individual transaction object (TDAT) since API adapters are available for both cases to be used in the behavior implementation of the BCO (for example, <EM>mbc_cp_api=&gt;rap_tdat_cts()).</EM> For further information, refer to <A href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/transport-handling?version=Cloud" target="_blank" rel="noopener noreferrer">Transport Handling</A>.</P><P>After updating the customizing data in the Business Configuration Object (BCO) using EML, the latest customizing data can be retrieved from the underlying customizing tables for further processing. Once the up-to-date customizing data is obtained, it can be directly maintained in the BC Set. This process utilizes the <A href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/business-configuration-sets?version=Cloud" target="_self" rel="noopener noreferrer">XCO generation APIs for BC Sets</A>.</P><pre class="lia-code-sample language-abap"><code>CLASS zcl_errorcode_generate_000 DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES if_oo_adt_classrun. PRIVATE SECTION. CONSTANTS co_workbench_request TYPE trkorr VALUE ''. " ZLOCAL CONSTANTS co_error_codes_set_name TYPE if_xco_business_cnfgrtn_set=&gt;tv_name VALUE 'Z_ERROR_CODES_SET_000'. CONSTANTS co_error_codes_entity_primary TYPE if_xco_bcs_entity=&gt;tv_name VALUE 'ZERRCODE_000'. CONSTANTS co_error_codes_entity_text TYPE if_xco_bcs_entity=&gt;tv_name VALUE 'ZERRCODET_000'. CONSTANTS co_error_codes_tobj TYPE if_xco_bcs_customizing_object=&gt;tv_name VALUE 'ZERRORCODE000'. ENDCLASS. CLASS zcl_errorcode_generate_000 IMPLEMENTATION. METHOD if_oo_adt_classrun~main. " Read latest error codes from customizing tables SELECT * FROM zerrcode_000 WHERE error_code &lt; 500 INTO TABLE (lt_errorcodes). ASSERT sy-subrc = 0. SELECT * FROM zerrcodet_000 WHERE error_code &lt; 500 INTO TABLE (lt_errorcodes_text). ASSERT sy-subrc = 0. " Retrieve error codes BC set and make sure it exists DATA(lo_business_configuration_set) = xco_cp_abap_repository=&gt;object-&gt;scp1-&gt;for( co_error_codes_set_name ). ASSERT lo_business_configuration_set-&gt;if_xco_ar_object~exists( ). " Create BC Set patch operation and change specification to remove existing error codes customizing object (all its Entities and corresponding records) DATA(lo_patch_operation_delete) = xco_cp_generation=&gt;environment-&gt;dev_system( co_workbench_request )-&gt;for-scp1-&gt;create_patch_operation( ). DATA(lo_change_specification_delete) = lo_patch_operation_delete-&gt;add_object( co_error_codes_set_name )-&gt;create_change_specification( ). lo_change_specification_delete-&gt;for-delete-&gt;add_individual_transaction_obj( co_error_codes_tobj ). " Create BC Set patch operation and change specification to insert latest error codes using latest customizing data DATA(lo_patch_operation_insert) = xco_cp_generation=&gt;environment-&gt;dev_system( co_workbench_request )-&gt;for-scp1-&gt;create_patch_operation( ). DATA(lo_change_specification_insert) = lo_patch_operation_insert-&gt;add_object( co_error_codes_set_name )-&gt;create_change_specification( ). DATA(lo_tobj_insert) = lo_change_specification_insert-&gt;for-insert-&gt;add_individual_transaction_obj( co_error_codes_tobj ). lo_tobj_insert-&gt;for-insert-&gt;add_entity( co_error_codes_entity_primary )-&gt;for-insert-&gt;add_records( REF #( lt_errorcodes[] ) ). lo_tobj_insert-&gt;for-insert-&gt;add_entity( co_error_codes_entity_text )-&gt;for-insert-&gt;add_records( REF #( lt_errorcodes_text[] ) ). " After preparing the change specifications, execute the PATCH operations TRY. DATA(lo_result_delete) = lo_patch_operation_delete-&gt;execute( ) ##NEEDED. DATA(lo_result_insert) = lo_patch_operation_insert-&gt;execute( ) ##NEEDED. CATCH cx_xco_gen_patch_exception INTO DATA(lo_xco_gen_patch_exception). LOOP AT lo_xco_gen_patch_exception-&gt;findings-&gt;get( ) ASSIGNING FIELD-SYMBOL(&lt;fs_finding&gt;) ##NEEDED. " Process errors/exceptions raised from the PATCH operation ENDLOOP. ENDTRY. ENDMETHOD. ENDCLASS.</code></pre><P>This section of using the XCO generation API for BC Sets to update BC set data requires customizing entries of type individual transaction object (TDAT). This is because itโ€™s a requirement for importing any data into a BC Set. BC Sets are workbench objects and can be delivered alongside other development objects in your development software components.</P><P>Hint: In productive scenarios remove the <EM>##NEEDED</EM> pragma from the code examples and implement proper error handling!</P> 2026-02-05T09:59:15.458000+01:00 https://community.sap.com/t5/sap-for-oil-gas-and-energy-blog-posts/reimagining-utility-transformation-clean-core-principles-powered-by-sap-btp/ba-p/14321645 Reimagining Utility Transformation: Clean Core Principles Powered by SAP BTP 2026-02-06T07:51:30.744000+01:00 Atul_Joshi85 https://community.sap.com/t5/user/viewprofilepage/user-id/2274193 <H1 id="toc-hId-1660413609">Introduction</H1><P>Across the utility industry, one message appears in every transformation discussion: <STRONG>โ€œKeep the core clean.โ€</STRONG> The guidance is sound, especially for organizations preparing for S/4HANA. But inside SAP ISโ€‘Uโ€”where regulatory complexity, legacy billing logic, and decades of Zโ€‘programs coexistโ€”this principle often feels contradictory.</P><P>Utilities must modernize rapidly while protecting the stability of their revenue engine. This creates a familiar tension: <STRONG>innovation requires speed, but the core requires caution.</STRONG></P><P>This post explores why that tension exists, how SAP BTP resolves it, and how utilities can operationalize a Clean Core strategy without compromising business continuity.</P><H1 id="toc-hId-1463900104">Main Body</H1><H2 id="toc-hId-1396469318">1. The Customization Cage: How Utilities Got Here</H2><P>For many years, utilities solved business needs by customizing the ERP core:</P><UL><LI>Custom ABAP for tariffs</LI><LI>Modified standard tables for regulatory fields</LI><LI>Embedded workflows inside ISโ€‘U</LI><LI>Enhancements tightly coupled to billing and device management</LI></UL><P>These decisions were practical at the timeโ€”but over decades, they created a <STRONG>Rigid Core</STRONG> that is difficult to upgrade, expensive to test, and slow to evolve.</P><P><STRONG>Resulting challenges:</STRONG></P><UL><LI>High upgrade risk</LI><LI>Long regression cycles</LI><LI>Slow innovation</LI><LI>Technical debt that compounds every year</LI></UL><P>Your first diagram captures this reality perfectly.</P><P><STRONG>Diagram 1 โ€” The Customization Cage </STRONG></P><P><STRONG>&nbsp;</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Atul_Joshi85_0-1770216536920.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368957i685E3BEBFF734633/image-size/medium/is-moderation-mode/true?v=v2&amp;px=400" role="button" title="Atul_Joshi85_0-1770216536920.png" alt="Atul_Joshi85_0-1770216536920.png" /></span></P><P>&nbsp;</P><P><STRONG>&nbsp;</STRONG></P><P>&nbsp;</P><H2 id="toc-hId-1199955813">2. Clean Core + SAP BTP: The Agility Layer Utilities Needed</H2><P>A Clean Core strategy is not about reducing capabilityโ€”itโ€™s about <STRONG>relocating</STRONG> capability.</P><P>SAP Business Technology Platform (BTP) provides the architectural separation utilities have needed for years:</P><UL><LI><STRONG>S/4HANA Core</STRONG> โ†’ Stable, standardized, upgrade-friendly</LI><LI><STRONG>SAP BTP</STRONG> โ†’ Custom logic, workflows, APIs, event-driven processes</LI></UL><P>This separation transforms the ERP into a <STRONG>system of record</STRONG>, while BTP becomes the <STRONG>system of innovation</STRONG>.</P><P><STRONG>Key benefits:</STRONG></P><UL><LI>Faster delivery cycles</LI><LI>Reduced regression testing</LI><LI>Lower upgrade effort</LI><LI>Event-driven operations</LI><LI>Extensibility without core modification</LI></UL><H2 id="toc-hId-1003442308">3. A Practical Framework for Utility Clean Core Adoption</H2><P>SAP Community readers expect actionable, practitioner-focused guidance. Here is a structured approach utilities can follow.</P><P><STRONG>Step 1: Start With a Core Assessment</STRONG></P><P>Identify:</P><UL><LI>Business-critical customizations</LI><LI>Redundant or obsolete logic</LI><LI>Enhancements blocking upgrade cycles</LI><LI>High-change areas suitable for BTP</LI></UL><P>This reframes Clean Core as <STRONG>risk reduction</STRONG>, not cleanup.</P><P><STRONG>Step 2: Move High-Variability Logic to BTP First</STRONG></P><P>Ideal candidates include:</P><UL><LI>Rate and tariff changes</LI><LI>Regulatory reporting</LI><LI>Credit &amp; collections workflows</LI><LI>Meter-to-cash orchestration</LI><LI>BPEM automation</LI></UL><P>These areas generate the most upgrade frictionโ€”and deliver the fastest BTP wins.</P><H2 id="toc-hId-806928803">Step 3: Use SAP Event Mesh to Break the Batch Mindset</H2><P>Utilities can begin shifting toward real-time operations by triggering events for:</P><UL><LI>Move-in / move-out</LI><LI>Billing determinants</LI><LI>Meter read exceptions</LI><LI>Payment events</LI><LI>Outage notifications</LI></UL><P>This enables a hybrid model: <STRONG>batch where necessary, real-time where possible.</STRONG></P><H2 id="toc-hId-610415298">Step 4: Establish Governance That Protects the Core</H2><UL><LI>No custom code in S/4 unless SAP mandates it</LI><LI>BTP-first evaluation for all new logic</LI><LI>Standard APIs and events as default patterns</LI><LI>Quarterly architecture reviews to prevent โ€œcore creepโ€</LI></UL><P>Governance is the long-term safeguard of Clean Core.</P><H2 id="toc-hId-413901793">Step 5: Treat BTP as a Business Platform</H2><P>Executives respond when BTP is positioned as:</P><UL><LI>A revenue protection tool</LI><LI>A regulatory accelerator</LI><LI>A customer experience enabler</LI><LI>A technical debt reduction mechanism</LI></UL><H2 id="toc-hId-217388288">Step 6: Build a 24โ€‘Month Roadmap</H2><P>A practical roadmap includes:</P><UL><LI><STRONG>Phase 1:</STRONG> Core assessment + quick wins</LI><LI><STRONG>Phase 2:</STRONG> Event-driven architecture rollout</LI><LI><STRONG>Phase 3:</STRONG> Predictive and AI-driven use cases</LI><LI><STRONG>Phase 4:</STRONG> Full Clean Core enforcement + S/4 readiness</LI></UL><P>This provides clarity, sequencing, and measurable ROI.</P><H2 id="toc-hId-20874783">4. The Modern Utility Innovation Stack</H2><P>Your second diagram illustrates the future-state architecture:</P><UL><LI>A stable S/4HANA core</LI><LI>A flexible BTP layer</LI><LI>A connected utility ecosystem</LI></UL><P><STRONG>Diagram 2 โ€” The Utility Innovation Stack </STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Atul_Joshi85_1-1770216537147.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368958iDEA788D84B292DEB/image-size/medium/is-moderation-mode/true?v=v2&amp;px=400" role="button" title="Atul_Joshi85_1-1770216537147.png" alt="Atul_Joshi85_1-1770216537147.png" /></span></P><P>&nbsp;</P><P><STRONG>&nbsp;</STRONG></P><P>&nbsp;</P><H1 id="toc-hId-465018642">Conclusion</H1><P>A Clean Core is not a limitationโ€”it is a <STRONG>strategic advantage</STRONG>.</P><P>Utilities preparing for S/4HANA should shift the conversation from:</P><P><STRONG>โ€œHow do we migrate everything we built?โ€</STRONG> to <STRONG>โ€œHow do we protect the core and modernize the business at the same time?โ€</STRONG></P><P>SAP BTP provides the answer:</P><UL><LI>Keep the core stable</LI><LI>Move innovation to the agility layer</LI><LI>Adopt event-driven operations</LI><LI>Reduce technical debt</LI><LI>Build a future-ready architecture</LI></UL><P>Utilities that embrace this model will be better positioned to innovate, comply, and scale in the decade ahead.</P> 2026-02-06T07:51:30.744000+01:00 https://community.sap.com/t5/technology-blog-posts-by-sap/triggering-sap-datasphere-bdc-task-chains-from-sap-btp-abap-cloud-using-the/ba-p/14325528 Triggering SAP Datasphere/BDC Task Chains from SAP BTP ABAP Cloud using the Task Chain REST API 2026-02-10T16:44:24.061000+01:00 stefan_geiselhart2 https://community.sap.com/t5/user/viewprofilepage/user-id/200897 <P>Our modern data landscapes thrive on automation. In this post, weโ€™ll walk end-to-end through a real-life integration scenario that tackles one of the building blocks in this context:</P><P class="lia-align-center" style="text-align: center;"><STRONG>Starting a SAP Datasphere Task Chain remotely from SAP BTP ABAP Cloud using OAuth 2.0 Client Credentials and the Datasphere Task Chain REST API</STRONG></P><P>The goal is to orchestrate Datasphere data processing flows directly from ABAP Cloud โ€” securely, programmatically, and fully automated.</P><P>We will cover the below points:</P><UL><LI>Creating a Task Chain in Datasphere</LI><LI>Configuring OAuth clients in Datasphere</LI><LI>Setting up Communication System &amp; Arrangement in ABAP Cloud</LI><LI>Executing the Task Chain remotely: Consume REST API from ABAP Cloud</LI></UL><P><FONT size="5"><STRONG>1 Architecture Overview</STRONG></FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Solution Architecture" style="width: 550px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371166iB8C9DA6C7F6550B3/image-dimensions/550x406?v=v2" width="550" height="406" role="button" title="image.png" alt="Solution Architecture" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Solution Architecture</span></span></P><P>ABAP Cloud&nbsp;Task Chain Execution: ABAP Cloud acts as the caller. Datasphere exposes the Task Chain API protected by OAuth.</P><P><FONT size="5"><STRONG>2 Prerequisites</STRONG></FONT></P><P>You must have:</P><UL><LI>SAP Datasphere tenant with developer + admin access</LI><LI>A Task Chain to trigger</LI><LI>SAP BTP ABAP Environment (ABAP Cloud) with developer access</LI><LI>BTP ABAP: Authorization to configure OAuth clients and Communication Arrangements</LI></UL><P><FONT size="5"><STRONG>3 Creating a Task Chain in SAP Datasphere</STRONG></FONT></P><P>The first step is defining a Task Chain that encapsulates the processing logic you want to execute remotely.</P><P>In the given example:</P><UL><LI>The Task Chain starts with a <STRONG>Begin</STRONG> node</LI><LI>Executes a <STRONG>Replication Flow</STRONG>&nbsp;for loading dimension data</LI><LI>(Can be extended with transformations, views, or further flows)</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP Datasphere Task Chain with Replication Flow inside" style="width: 592px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371084i85FF39979A8A1F3B/image-dimensions/592x320?v=v2" width="592" height="320" role="button" title="image.png" alt="SAP Datasphere Task Chain with Replication Flow inside" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP Datasphere Task Chain with Replication Flow inside</span></span></P><P><EM>Main takeaways:</EM></P><UL><LI>Task Chain must be <EM>Deployed</EM></LI><LI>Note the <EM>Technical Name</EM> (used later by API)</LI><LI>Verify it runs manually before you automate via the API<STRONG>&nbsp;</STRONG></LI></UL><P><FONT size="5"><STRONG>4 Configuring OAuth Client in SAP Datasphere</STRONG></FONT></P><P>To allow ABAP Cloud to call Datasphere APIs securely, we create an OAuth Client in Datasphere Administration.</P><P><EM>Navigation Path</EM></P><P>Datasphere โ†’ Administration โ†’ App Integration โ†’ OAuth Clients</P><P><EM>OAuth Endpoints Provided</EM></P><P>Amongst others, SAP Datasphere automatically exposes:</P><UL><LI>Authorization URL</LI><LI>Token URL</LI></UL><P>These are required for OAuth2 token retrieval. Moreover you must create a technical user that has access to the Datasphere space and is able to run the task chains that are in scope. Typically this is done by assigning a scoped role.</P><P><EM>Configured OAuth Client (based on Technical User)</EM></P><P><STRONG><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Menu Path Datasphere" style="width: 172px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371014i26654901577A6E67/image-size/large?v=v2&amp;px=999" role="button" title="image.png" alt="Menu Path Datasphere" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Menu Path Datasphere</span></span></STRONG></P><P>This is where you see the OAuth Client specific URLs - take note of them for later configuration in ABAP BTP:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="OAuth Client Generation" style="width: 764px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371054i4BB7492B30B71B30/image-dimensions/764x458?v=v2" width="764" height="458" role="button" title="image.png" alt="OAuth Client Generation" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">OAuth Client Generation</span></span></P><P>Your specific OAuth client for consumption from ABAP BTP. The secret key is only shown once upon creation - keep this in mind!</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="OAuth Client Details" style="width: 404px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371055i19C15B5494614179/image-dimensions/404x580?v=v2" width="404" height="580" role="button" title="image.png" alt="OAuth Client Details" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">OAuth Client Details</span></span></P><P><EM>Important settings:</EM></P><TABLE><TBODY><TR><TD><P><STRONG>Parameter</STRONG></P></TD><TD><P><STRONG>Value</STRONG></P></TD></TR><TR><TD><P>Grant Type</P></TD><TD><P>Client Credentials</P></TD></TR><TR><TD><P>Purpose</P></TD><TD><P>Technical User</P></TD></TR><TR><TD><P>Roles</P></TD><TD><P>space access must be given (e.g. by scope role in DSP)</P></TD></TR><TR><TD><P>Token Lifetime</P></TD><TD><P>e.g. 60 minutes</P></TD></TR></TBODY></TABLE><P>Save the <EM>Client ID</EM> and <EM>Client Secret </EM>โ€” this is used in ABAP Cloud later on.</P><P><FONT size="5"><STRONG>&nbsp;5&nbsp;</STRONG><STRONG>Creating Communication Artifacts in ABAP Cloud</STRONG></FONT></P><P>Now we configure the outbound technical connection from ABAP Cloud to Datasphere.</P><P>First create an Outbound Service of type HTTP:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Create Outbound Service" style="width: 498px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371664i6B7CF4506456A6F6/image-dimensions/498x184?v=v2" width="498" height="184" role="button" title="image.png" alt="Create Outbound Service" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Create Outbound Service</span></span></P><P>Create a Communication Scenario with Authentication Methods = OAuth 2.0 only, bind it to your outbound service and publish it:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Communication Scenario Creation" style="width: 618px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371665iF1366B36E6FF0402/image-dimensions/618x251?v=v2" width="618" height="251" role="button" title="image.png" alt="Communication Scenario Creation" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Communication Scenario Creation</span></span></P><P><EM>Navigation:&nbsp;</EM>ABAP Environment Web Access โ†’ Communication Management โ†’ Communication Systems</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ABAP Cloud Web Access" style="width: 671px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371057i5B672EC77D24D22E/image-dimensions/671x269?v=v2" width="671" height="269" role="button" title="image.png" alt="ABAP Cloud Web Access" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">ABAP Cloud Web Access</span></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ABAP Cloud Communication Systems" style="width: 672px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371058i1807DF17EA76120F/image-dimensions/672x113?v=v2" width="672" height="113" role="button" title="image.png" alt="ABAP Cloud Communication Systems" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">ABAP Cloud Communication Systems</span></span></P><P>The hostname is your Datasphere tenant URL. Outbound OAuth URLs (like Token/Authentication) can be found on the Datasphere side under Administration -&gt; App Integration (previous step).</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ABAP Cloud Communication Systems Details" style="width: 673px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371059iF14B49A880B877F1/image-dimensions/673x497?v=v2" width="673" height="497" role="button" title="image.png" alt="ABAP Cloud Communication Systems Details" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">ABAP Cloud Communication Systems Details</span></span></P><P>You have to add a user "OAuth 2.0 (Basic)":</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ABAP Cloud Communication Systems Users" style="width: 672px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371061i0EC89B23ACC3A7F5/image-dimensions/672x269?v=v2" width="672" height="269" role="button" title="image.png" alt="ABAP Cloud Communication Systems Users" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">ABAP Cloud Communication Systems Users</span></span></P><P><EM>Key fields:</EM></P><TABLE><TBODY><TR><TD><P><EM>Field</EM></P></TD><TD><P><EM>Example</EM></P></TD></TR><TR><TD><P>System ID</P></TD><TD><P>DSP_REST</P></TD></TR><TR><TD><P>Host Name</P></TD><TD><P>&lt;your-datasphere-host&gt; (tenant URL)</P></TD></TR><TR><TD><P>Port</P></TD><TD><P>443</P></TD></TR><TR><TD><P>OAuth 2.0 Endpoints</P></TD><TD><P>From Datasphere for Token &amp; Authorization URL (Audience URL not required)</P></TD></TR><TR><TD><P>Client ID</P></TD><TD><P>Datasphere OAuth Client ID</P></TD></TR><TR><TD><P>Client Secret</P></TD><TD><P>Datasphere Secret (you must take note of this when creating the OAuth Client)</P></TD></TR></TBODY></TABLE><P><FONT size="5"><STRONG>6 Creating a Communication Arrangement in SAP ABAP Cloud</STRONG></FONT></P><P>Now we bind the Communication System to a Communication Scenario that allows REST calls.</P><P><EM>Navigation:&nbsp;</EM>Communication Management โ†’ Communication Arrangements</P><P><EM>Arrangement Example: ZDSP_CS_REST</EM></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ABAP Cloud Communication Arrangements" style="width: 675px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371062i5D6E57F823E5F6EB/image-dimensions/675x138?v=v2" width="675" height="138" role="button" title="image.png" alt="ABAP Cloud Communication Arrangements" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">ABAP Cloud Communication Arrangements</span></span></P><P>Note the service path: The dynamic parts of the path are set from ABAP (this is to keep the space + task chain flexible and controllable from the actual caller: ABAP).</P><P><EM><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ABAP Cloud Communication Arrangements Detailed Configuration" style="width: 673px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371063i82A3F766212E7AA8/image-dimensions/673x334?v=v2" width="673" height="334" role="button" title="image.png" alt="ABAP Cloud Communication Arrangements Detailed Configuration" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">ABAP Cloud Communication Arrangements Detailed Configuration</span></span></EM></P><P><EM>What this provides:</EM></P><UL><LI>Preconfigured service URL</LI><LI>OAuth token handling by ABAP runtime</LI><LI>Secure outbound API consumption</LI></UL><P><FONT size="5"><STRONG>7 Calling the Datasphere Task Chain API from ABAP Cloud</STRONG></FONT></P><P>Now comes the fun part: consuming the REST API. Datasphere exposes endpoints such as:</P><UL><LI>POST /api/v1/datasphere/tasks/chains/&lt;space_id&gt;/run/&lt;task_chain_technical_name&gt;</LI><LI>GET&nbsp;/api/v1/datasphere/tasks/logs/&lt;space_id&gt;/&lt;log_id&gt;</LI></UL><P>Which triggers a new execution or reads the status of a task chain run.</P><P><EM>ABAP Cloud Implementation Pattern</EM></P><P>In ABAP Cloud when working with REST API to integrate external services, you typically:</P><OL><LI>Create HTTP destination automatically from the created Communication Arrangement</LI><LI>Use CL_WEB_HTTP_CLIENT_MANAGER</LI><LI>Perform POST/GET requests</LI><LI>Parse response (run ID, status)</LI></OL><P>The code snippet performs the following parts in more detail:</P><OL><LI><EM>Run as a class-run program</EM> (IF_OO_ADT_CLASSRUN) -&gt; you can execute directly from ADT and print to the console.</LI><LI><EM>Locate the configured Communication Arrangement</EM> (bound to our Communication System DSP_REST) using CL_COM_ARRANGEMENT_FACTORY.</LI><LI><EM>Create an HTTP destination</EM> from the Communication Arrangement using CL_HTTP_DESTINATION_PROVIDER=&gt;CREATE_BY_COMM_ARRANGEMENT.</LI><LI><EM>Create an HTTP client</EM> from the destination (CL_WEB_HTTP_CLIENT_MANAGER).</LI><LI><EM>POST</EM>&nbsp;request to the Task Chain โ€œrunโ€ endpoint:</LI><UL><LI>triggers a new run</LI><LI>receives a JSON response containing a <EM>LogId</EM></LI></UL><LI><EM>WAIT</EM> a few seconds.</LI><LI><EM>GET</EM> the log endpoint using the returned&nbsp;<EM>LogId</EM>:</LI><UL><LI>retrieves the execution status (RUNNING, later SUCCESS / FAILED, etc.)</LI></UL><LI>Print everything in the <EM>ABAP Console</EM>.</LI></OL><P>ABAP-Code Snippet:</P><pre class="lia-code-sample language-abap"><code>CLASS zcl_dsp_rest_api DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES if_oo_adt_classrun. CLASS-DATA: out TYPE REF TO if_oo_adt_classrun_out. CLASS-METHODS: call_dsp RAISING cx_http_dest_provider_error cx_web_http_client_error. ENDCLASS. CLASS zcl_dsp_rest_api IMPLEMENTATION. METHOD if_oo_adt_classrun~main. zcl_dsp_rest_api=&gt;out = out. TRY. call_dsp( ). CATCH cx_web_http_client_error cx_http_dest_provider_error INTO DATA(exception). out-&gt;write( exception-&gt;get_text( ) ). ENDTRY. ENDMETHOD. METHOD call_dsp. TYPES: BEGIN OF ty_log, logId TYPE i, END OF ty_log. DATA: ls_log TYPE ty_log. DATA(communication_system) = 'DSP_REST'. DATA(arrangement_factory) = cl_com_arrangement_factory=&gt;create_instance( ). DATA(comm_arrangement_range) = VALUE if_com_arrangement_factory=&gt;ty_query-cs_id_range( ( sign = 'I' option = 'EQ' low = communication_system ) ). arrangement_factory-&gt;query_ca( EXPORTING is_query = VALUE #( cs_id_range = comm_arrangement_range ) IMPORTING et_com_arrangement = DATA(arrangements) ). DATA(arrangement) = arrangements[ 1 ]. DATA(destination) = cl_http_destination_provider=&gt;create_by_comm_arrangement( comm_scenario = 'ZDSP_CS_REST' service_id = 'ZDSP_REST_SRV_REST' comm_system_id = arrangement-&gt;get_comm_system_id( ) ). DATA(http_client) = cl_web_http_client_manager=&gt;create_by_http_destination( destination ). DATA(request) = http_client-&gt;get_http_request( ). request-&gt;set_uri_path( '/chains/BDCPOC/run/TC_DIM2_A001' ). DATA(response) = http_client-&gt;execute( if_web_http_client=&gt;post ). CALL METHOD /ui2/cl_json=&gt;deserialize EXPORTING json = response-&gt;get_text( ) CHANGING data = ls_log. data(log_str) = CONV string( ls_log-logId ). out-&gt;write( 'Task Chain started. LogId created:' &amp;&amp; log_str ). WAIT UP TO 10 SECONDS. CONCATENATE '/logs/BDCPOC/' log_str INTO DATA(uri). clear: request, response, http_client. http_client = cl_web_http_client_manager=&gt;create_by_http_destination( destination ). request = http_client-&gt;get_http_request( ). request-&gt;set_uri_path( uri ). response = http_client-&gt;execute( if_web_http_client=&gt;get ). out-&gt;write( 'Task Chain Log REST API - via GET - Task Chain Status:' &amp;&amp; response-&gt;get_text( ) ). ENDMETHOD. ENDCLASS.</code></pre><P>Once triggered:</P><UL><LI>Datasphere creates a new Task Chain run</LI><LI>Execution can be monitored in Datasphere UI</LI><LI>API returns run ID and status</LI></UL><P>Follow-up calls can fetch:</P><UL><LI>Execution status</LI><LI>Logs</LI><LI>Completion result</LI></UL><P><FONT size="5"><STRONG>8 Execution Results</STRONG></FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ABAP Cloud Console Log: Results" style="width: 964px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371044iA43931A0457AB770/image-size/large?v=v2&amp;px=999" role="button" title="image.png" alt="ABAP Cloud Console Log: Results" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">ABAP Cloud Console Log: Results</span></span></P><P>The Task Chain in Datasphere is in Running status:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP Datasphere Task Chain Running Status" style="width: 871px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371046i89C5349410537884/image-size/large?v=v2&amp;px=999" role="button" title="image.png" alt="SAP Datasphere Task Chain Running Status" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP Datasphere Task Chain Running Status</span></span></P><P><FONT size="5"><STRONG>9 Conclusion/Outlook &amp; Further aspects:</STRONG></FONT></P><P><STRONG>Overview of the major building blocks:</STRONG></P><TABLE><TBODY><TR><TD><P><STRONG>Capability</STRONG></P></TD><TD><P><STRONG>Result</STRONG></P></TD></TR><TR><TD><P>Secure Auth</P></TD><TD><P>OAuth 2.0 Client Credentials</P></TD></TR><TR><TD><P>No hardcoded secrets</P></TD><TD><P>via Communication Arrangements/System</P></TD></TR><TR><TD><P>Remote orchestration</P></TD><TD><P>Creating an end-to-end orchestrated chain of tasks</P></TD></TR><TR><TD><P>Cloud-native ABAP</P></TD><TD><P>Using appropriate ABAP Class APIs</P></TD></TR><TR><TD><P>Datasphere automation</P></TD><TD><P>Using Task Chain API</P></TD></TR></TBODY></TABLE><P><STRONG>Use Cases that the implementation enables:</STRONG></P><UL><LI>Nightly batch orchestration</LI><LI>Event-driven data loads</LI><LI>Cross-system workflows (this was our ultimate focus)</LI><LI>CI/CD data pipelines</LI><LI>API-driven analytical data refresh</LI></UL><P><STRONG>References</STRONG></P><UL><LI><SPAN>SAP Datasphere Task Chain API Documentation: </SPAN><A href="https://api.sap.com/api/DatasphereTasks/overview" target="_blank" rel="noopener noreferrer"><SPAN>https://api.sap.com/api/DatasphereTasks/overview</SPAN></A></LI><LI><SPAN>SAP Datasphere Task Chain Help Page: </SPAN><A href="https://help.sap.com/docs/SAP_DATASPHERE/c8a54ee704e94e15926551293243fd1d/274f2736465c4c48a091c675880502a2.html?locale=en-US" target="_blank" rel="noopener noreferrer"><SPAN>https://help.sap.com/docs/SAP_DATASPHERE/c8a54ee704e94e15926551293243fd1d/274f2736465c4c48a091c675880502a2.html?locale=en-US</SPAN></A></LI><LI><SPAN>ABAP Cloud - how to call external APIs: </SPAN><A href="https://jacekw.dev/blog/2022/oauth-client-credentials-from-abap-cloud/" target="_blank" rel="noopener nofollow noreferrer"><SPAN>https://jacekw.dev/blog/2022/oauth-client-credentials-from-abap-cloud/</SPAN></A></LI></UL><P><STRONG>These are your main takeaways to further <U>sharpen</U> the solution:</STRONG></P><UL><LI>Use short token lifetimes</LI><LI>Separate technical OAuth users</LI><LI>Monitor task runs via API from ABAP</LI><LI>Handle retries &amp; failures in ABAP</LI><LI>Log run IDs for observability</LI></UL><P>If you have any aspects, comments and/or concerns, please raise them and let's discuss. I'm happy and proud that this article was written by at least 90% human and only 10% AI <span class="lia-unicode-emoji" title=":slightly_smiling_face:">๐Ÿ™‚</span></P> 2026-02-10T16:44:24.061000+01:00 https://community.sap.com/t5/technology-blog-posts-by-members/unlock-s-4hana-cloud-secrets-hybrid-events-apis-strategy-for-seamless-btp/ba-p/14326758 Unlock S/4HANA Cloud Secrets: Hybrid Events+APIs Strategy for Seamless BTP Data Flows 2026-02-12T01:30:35.487000+01:00 tamitdassharma https://community.sap.com/t5/user/viewprofilepage/user-id/153763 <H2 id="toc-hId-1789646278">Strategic Financial Data Extraction from SAP S/4HANA Cloud Public Edition to SAP BTP</H2><H4 id="toc-hId-1851298211">Using Transfer Pricing as a Real-World Example</H4><P>Transfer pricing represents a perfect use case to demonstrate <STRONG>generic financial data extraction strategies</STRONG> from SAP S/4HANA Cloud Public Edition. Multinational organisations need GL, Controlling, Material Ledger, and Asset Accounting postings to flow reliably to external engines hosted on SAP BTPโ€”but Public Cloudโ€™s โ€œno direct database accessโ€ constraint demands architecturally sound patterns.</P><H3 id="toc-hId-1525701987">Why Transfer Pricing Perfectly Illustrates the Challenge</H3><P><STRONG>The business need</STRONG>: Calculate inter-company markups (cost-plus, resale-minus) using real-time ACDOCA postings across multiple currencies, profit centres, and cost elements.<BR /><STRONG>The constraint</STRONG>: Pure cloud extensibilityโ€”no RFCs, no custom ABAP, no direct table extracts.&nbsp;<BR /><STRONG>The solution:</STRONG> Three proven patterns that work for any financial data integration scenario.</P><H3 id="toc-hId-1329188482">Pattern 1: Event Notifications (Real-Time Push Model)</H3><P><STRONG>How transfer pricing uses it</STRONG>: GL postings trigger automatic business event notifications routed through SAP Event Mesh to BTP applications.</P><P>&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Event Notification" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371720i4CB6FC368836A2D3/image-size/large?v=v2&amp;px=999" role="button" title=" - visual selection-3.png" alt="Event Notification" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Event Notification</span></span></P><P><SPAN><STRONG>Generic applicability</STRONG>: Works for any posting-driven processโ€”revenue recognition, inter-company reconciliation, compliance monitoring.&nbsp;</SPAN></P><DIV><STRONG>High-level activation</STRONG>:</DIV><OL><LI><SPAN><STRONG>Integration configuration apps</STRONG> โ†’ Activate accounting-related event notifications</SPAN></LI><LI><SPAN><STRONG>Communication scenarios</STRONG> โ†’ Configure outbound event destinations</SPAN></LI><LI><SPAN><STRONG>Event Mesh subscription</STRONG> โ†’ Point to BTP service endpoint</SPAN></LI><LI><SPAN><STRONG>Payload contains</STRONG>: Company codes, ledger amounts (local/group), profit centres, material valuations</SPAN></LI></OL><H3 id="toc-hId-1132674977">Pattern 2: Standard Query Services (Scheduled Pull Model)</H3><P><STRONG>How transfer pricing uses it</STRONG>: BTP service queries S/4HANA nightly for new/changed financial postings.</P><P>&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Query Service" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371722iBABF11B5D5404615/image-size/large?v=v2&amp;px=999" role="button" title=" - visual selection-4.png" alt="Query Service" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Query Service</span></span><STRONG><SPAN>Key services (release-dependent availability):</SPAN></STRONG></P><UL><LI><SPAN><STRONG>Financial line item services</STRONG> โ†’ GL/CO/ML/AA postings</SPAN></LI><LI><SPAN><STRONG>Profitability services</STRONG> โ†’ Margin analysis data</SPAN></LI><LI><SPAN><STRONG>Material valuation services</STRONG> โ†’ Cost component details</SPAN></LI></UL><P><STRONG>Generic applicability</STRONG>: Perfect for scheduled reconciliation, historical backfills, or validation runs.</P><H3 id="toc-hId-936161472">Pattern 3: Hybrid Extraction (Production Resilience)</H3><P>Transfer pricing demands 99.9% coverage. Smart architects layer all three patterns:</P><TABLE border="1" width="100%"><TBODY><TR><TD width="25%"><STRONG>Use Case</STRONG></TD><TD width="25%"><STRONG>Primary Pattern</STRONG></TD><TD width="25%"><STRONG>Transfer Pricing Example</STRONG></TD><TD width="25%"><STRONG>Generic Use</STRONG></TD></TR><TR><TD width="25%">Real-time GL postings</TD><TD width="25%">Event notifications</TD><TD width="25%">Invoice โ†’ immediate markup</TD><TD width="25%">Any posting trigger</TD></TR><TR><TD>Historical catch-up</TD><TD>Standard APIs</TD><TD>Month-end reconciliation</TD><TD>Data migration</TD></TR><TR><TD>Day 1 implementation</TD><TD>Bulk extraction</TD><TD>Full ACDOCA baseline</TD><TD>Initial loads</TD></TR><TR><TD>Custom calculations</TD><TD>BTP processing</TD><TD>Exception overrides</TD><TD>Business rules</TD></TR></TBODY></TABLE><P><STRONG>&nbsp;Three-tier reference flow:</STRONG></P><H4 id="toc-hId-868730686"><STRONG><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Hybrid Extraction" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371723i0FA6EF631F99C2FE/image-size/large?v=v2&amp;px=999" role="button" title=" - visual selection-5.png" alt="Hybrid Extraction" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Hybrid Extraction</span></span></STRONG><SPAN>BTP Implementation Patterns (Transfer Pricing Example)</SPAN></H4><H5 id="toc-hId-801299900"><SPAN>Cloud Application Programming Model (CAP)</SPAN></H5><pre class="lia-code-sample language-javascript"><code>service FinancialIntegration { entity Postings as projection on external financial services; entity PricingResults as projection on HANA staging; }</code></pre><P><SPAN><STRONG>&nbsp;Pattern</STRONG>: Event handlers + scheduled queries โ†’ unified HANA staging โ†’ business rules.</SPAN></P><H5 id="toc-hId-604786395"><SPAN>ABAP RESTful Application Programming (RAP)</SPAN></H5><pre class="lia-code-sample language-abap"><code>define root view entity FinancialDataView as select from standard financial services</code></pre><P><STRONG>Pattern</STRONG>: Analytical CDS views over external data โ†’ transactional services.</P><H4 id="toc-hId-279190171">Architectโ€™s Production Checklist</H4><P><span class="lia-unicode-emoji" title=":white_heavy_check_mark:">โœ…</span> Tenant validation: Test events/APIs in your specific S/4HANA Cloud environment<BR /><span class="lia-unicode-emoji" title=":white_heavy_check_mark:">โœ…</span> Quota management: Monitor Event Mesh throughput + API rate limits<BR /><span class="lia-unicode-emoji" title=":white_heavy_check_mark:">โœ…</span> Fallback design: API polling validates event stream completeness<BR /><span class="lia-unicode-emoji" title=":white_heavy_check_mark:">โœ…</span> Quarterly readiness: SAP evolves event coverage and API fields continuously<BR /><span class="lia-unicode-emoji" title=":white_heavy_check_mark:">โœ…</span> Pure cloud: Zero custom code in production S/4HANA</P><H4 id="toc-hId--415040429">The Universal Pattern</H4><DIV>Transfer pricing proves the strategy works for complex financial scenarios. The same architecture applies to:</DIV><UL><LI><SPAN>Inter-company reconciliation</SPAN></LI><LI><SPAN>Revenue recognition automation</SPAN></LI><LI><SPAN>Compliance reporting engines</SPAN></LI><LI><SPAN>Analytics data pipelines</SPAN></LI><LI><SPAN>Any standard data object/model driven process</SPAN></LI></UL><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Universal Pattern" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371724i43222D4AB9F30955/image-size/large?v=v2&amp;px=999" role="button" title=" - visual selection-6.png" alt="Universal Pattern" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Universal Pattern</span></span></SPAN><SPAN><STRONG>Key takeaway</STRONG>: This isnโ€™t โ€œjust for transfer pricingโ€โ€”itโ€™s your reusable blueprint for any S/4HANA Cloud โ†’ BTP data integration.&nbsp;</SPAN></P> 2026-02-12T01:30:35.487000+01:00 https://community.sap.com/t5/technology-blog-posts-by-members/accelerating-sapui5-migration-to-bas-a-practical-framework/ba-p/14314334 Accelerating SAPUI5 Migration to BAS: A Practical Framework 2026-02-12T08:43:37.222000+01:00 abap_Sap https://community.sap.com/t5/user/viewprofilepage/user-id/1866490 <P><STRONG>Introduction: </STRONG></P><P>SAP has transitioned its development paradigm from SAP Web IDE to SAP Business Application Studio (BAS), pushing developers to migrate from legacy UI5 to Fiori applications to the new environment. This paper outlines a structured and scalable methodology to migrate SAP UI5 applications from WEB IDE to BAS, focusing on connectivity, tooling and configuration challenges.</P><P><STRONG>Methodology:</STRONG></P><OL><LI>Log in to your BTP Account. Go into your space. Go to the Service Marketplace. Search for Business Application Studio. Open Business Application Studio Application.</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="abap_Sap_0-1770403434384.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/369713iF197F23660D7110B/image-size/medium?v=v2&amp;px=400" role="button" title="abap_Sap_0-1770403434384.png" alt="abap_Sap_0-1770403434384.png" /></span></P><P>&nbsp;</P><P>Note: Pre-Requisite - Cloud Connector and Destination should be set up for connectivity with the S4.</P><P>2. Click on Create Dev Space. Give some Dev Space Nameโ€”select the SAP Fiori on the left. On the right side, under Additional SAP Extensions select HTML5 Application Template, Launchpad Module, Basic UI5 Template. Click on Create Dev Space.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="abap_Sap_1-1770403434392.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/369715i018AB441FE7B60F3/image-size/medium?v=v2&amp;px=400" role="button" title="abap_Sap_1-1770403434392.png" alt="abap_Sap_1-1770403434392.png" /></span></P><P>3. Dev Space is created as shown below. It will take a few minutes to start. Once it's started, click on the Dev space. Here, I have named it โ€œDemoMigrationโ€. It will open the Development workspace. Bookmark this URL for future use and easy navigation to Workspace.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="abap_Sap_2-1770403434397.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/369714i8F504A36E2665CF9/image-size/medium?v=v2&amp;px=400" role="button" title="abap_Sap_2-1770403434397.png" alt="abap_Sap_2-1770403434397.png" /></span></P><P>4. For the first time, click on the menu on the top left and select the open folder. Search for Projects Folder. Click on OK.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="abap_Sap_3-1770403434406.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/369717iBB5CEC9FD252F692/image-size/medium?v=v2&amp;px=400" role="button" title="abap_Sap_3-1770403434406.png" alt="abap_Sap_3-1770403434406.png" /></span></P><P>5. Click on Import on your Get Started page. It will prompt to start the migration. Select migration option. Below screen will appear. &nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="abap_Sap_4-1770403434413.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/369716i023CD735A9A97B96/image-size/medium?v=v2&amp;px=400" role="button" title="abap_Sap_4-1770403434413.png" alt="abap_Sap_4-1770403434413.png" /></span></P><P>&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="abap_Sap_5-1770403434417.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/369718i31B240F850C19990/image-size/medium?v=v2&amp;px=400" role="button" title="abap_Sap_5-1770403434417.png" alt="abap_Sap_5-1770403434417.png" /></span></P><P>6. Select Destination and Hostname and Client Details.</P><P><STRONG>Conclusion: </STRONG></P><P>Migrating SAP UI5 applications from SAP Web IDE to SAP Business Application Studio is more than a technical upgrade. It represents a strategic change towards a cloud-native and future ready development environment aligned with that of SAPโ€™s roadmap. This blog outlined a well-structured migration methodology, which includes prerequisite connectivity set up, dev space configuration, project import and environment preparation within BAS. By following these steps, organizations can ensure a smooth transition while minimizing disruption to existing Fiori applications. This structured approach simplifies migration from WEB IDE to BAS. It supports scalable and cloud-aligned SAPUI5 development for public institutions and enterprises.</P><P>.</P><P>&nbsp;</P> 2026-02-12T08:43:37.222000+01:00 https://community.sap.com/t5/technology-blog-posts-by-sap/sap-master-data-governance-cloud-edition-maintenance-windows-and-major/ba-p/14327350 SAP Master Data Governance, cloud edition โ€“ Maintenance Windows and Major Upgrade Windows in 2026 2026-02-12T18:25:20.539000+01:00 Ria4 https://community.sap.com/t5/user/viewprofilepage/user-id/1478971 <H2 id="toc-hId-769347355" id="toc-hId-1789672217">Major Upgrade Windows</H2><P>As in 2025, the SAP Master Data Governance, cloud edition has 4 Major Upgrade Windows in 2026. These 24 hours of potential system unavailability are used to upgrade the systems to the next major version.</P><UL><LI><STRONG>May 16th โ€“ 17th (Release 2605)</STRONG></LI><LI><STRONG>August 15th โ€“ 16th (Release 2608)</STRONG></LI><LI><STRONG>November 14th โ€“ 15th (Release 2611)</STRONG></LI></UL><P>Depending on the data center region, the 24 hours downtime will start/end at:</P><UL><LI><STRONG>Europe:&nbsp; &nbsp; &nbsp; SAT&nbsp; &nbsp;4 am โ€“ SUN&nbsp; &nbsp;4 am UTC</STRONG></LI><LI><STRONG>Americas: SAT 10 am โ€“ SUN 10 am UTC</STRONG></LI></UL><H2 id="toc-hId-572833850" id="toc-hId-1593158712">Weekly Maintenance Windows</H2><P>Potentially every weekend, the SAP Master Data Governance, cloud edition could use a downtime of 4 hours, to apply database updates, Hotfix Collections and other changes.</P><P>Depending on the data center region, the 4 hours downtime may start at:</P><UL><LI><STRONG>Europe:&nbsp; &nbsp; &nbsp; SAT 9 pm UTC</STRONG></LI><LI><STRONG>Americas: SUN 5 am UTC</STRONG></LI></UL><P>The following events for the release 2602 are planned as Weekly Maintenance Windows in 2026:</P><UL><LI><STRONG>Hotfix Collection ... for Release 2602 | </STRONG>... (information will be updated accordingly)</LI></UL><H2 id="toc-hId-977759522" id="toc-hId-1396645207">Cloud System Notification Subscriptions (CSNS)</H2><P>Please register to<SPAN>&nbsp;</SPAN><STRONG>Cloud System Notification Subscriptions (CSNS)</STRONG><SPAN>&nbsp;</SPAN>in<SPAN>&nbsp;</SPAN><A href="https://me.sap.com/" target="_self" rel="noopener noreferrer">SAP for Me</A><SPAN>&nbsp;</SPAN>to get important information about planned and unplanned downtimes:</P><UL><LI><P>Please register to<SPAN>&nbsp;</SPAN><STRONG>Cloud System Notification Subscriptions (CSNS)</STRONG>&nbsp;in<SPAN>&nbsp;</SPAN><A href="https://me.sap.com/" target="_self" rel="noopener noreferrer">SAP for Me</A><SPAN>&nbsp;</SPAN>to get important information about planned and unplanned downtimes:</P><UL><LI>Access to Cloud System Notification Subscriptions (CSNS):<SPAN>&nbsp;</SPAN><A href="https://me.sap.com/systemsprovisioning/getNotified" target="_blank" rel="noopener noreferrer">https://me.sap.com/systemsprovisioning/getNotified</A></LI><LI>Find more&nbsp;<SPAN>information about Cloud System Notification Subscriptions (CSNS) in this&nbsp;</SPAN><A href="https://support.sap.com/csns" target="_blank" rel="noopener noreferrer">documentation</A></LI><LI>To find<SPAN>&nbsp;</SPAN><SPAN>SAP Master Data Governance, cloud edition</SPAN><SPAN>&nbsp;</SPAN>entry select:<UL><LI>Subscription Type: Cloud Service</LI><LI>Solution Area:&nbsp;<STRONG>SAP Master Data Governance, cloud edition</STRONG></LI></UL></LI></UL></LI></UL><H2 id="toc-hId-781246017" id="toc-hId-1200131702">References</H2><UL><LI><A href="https://support.sap.com/en/my-support/systems-installations/cac/maintenance-windows.html" target="_self" rel="noopener noreferrer">Maintenance Windows and Major Upgrade Windows for SAP Cloud Services</A></LI><LI><A href="https://launchpad.support.sap.com/#/notes/2888562" target="_self" rel="noopener noreferrer">SAP Note 2888562 โ€“ Intelligent Enterprise Suite: Harmonized release calendar for SAP Cloud products</A></LI><LI><A href="https://www.sap.com/germany/about/trust-center/agreements/cloud/cloud-services.html?search=SAP+Cloud+Services&amp;sort=title_asc&amp;tag=language:english&amp;pdf-asset=c6188734-927d-0010-87a3-c30de2ffd8ff&amp;page=2" target="_self" rel="noopener noreferrer">Service Level Agreement for SAP Cloud Services</A></LI></UL> 2026-02-12T18:25:20.539000+01:00 https://community.sap.com/t5/technology-blog-posts-by-sap/live-demos-at-the-sap-btp-abap-environment-customer-amp-partner-roundtable/ba-p/14328427 Live Demos at the SAP BTP ABAP Environment Customer & Partner Roundtable โ€“ 03 March 2026 2026-02-17T09:22:16.939000+01:00 Burcu_Karlidag https://community.sap.com/t5/user/viewprofilepage/user-id/151005 <P>Join our next <STRONG>SAP BTP ABAP Environment Customer &amp; Partner Roundtable</STRONG> on <STRONG>03.03.2026 (10:00โ€“11:00 CET)</STRONG>&nbsp;</P><P>Packed with live demos and product insights:</P><P><span class="lia-unicode-emoji" title=":small_blue_diamond:">๐Ÿ”น</span><STRONG>Fiori Elements development with building blocks </STRONG>(Katrin Polloczek &amp; Marcel Wรคchter)</P><P><span class="lia-unicode-emoji" title=":small_blue_diamond:">๐Ÿ”น</span><STRONG>New My Home&nbsp;</STRONG>(Caroline Welsh)</P><P><span class="lia-unicode-emoji" title=":small_blue_diamond:">๐Ÿ”น</span><STRONG>Product Updates&nbsp;</STRONG>(Frank Jentsch)</P><P>The roundtable is a <STRONG>monthly series</STRONG> taking place on the <STRONG>first Tuesday of every month (10:00โ€“11:00 CET)</STRONG>.</P><P><SPAN class="lia-unicode-emoji"><span class="lia-unicode-emoji" title=":backhand_index_pointing_right:">๐Ÿ‘‰</span></SPAN><STRONG>Download the</STRONG><SPAN>&nbsp;</SPAN><STRONG><A href="https://github.com/iwonahahn/SAP-BTP-ABAP-Environment-Roundtable/releases/download/v26/SAP.BTP.ABAP.Environment.Customer.und.Partner.Roundtable.ics" target="_self" rel="nofollow noopener noreferrer">.ics calendar file</A><SPAN>&nbsp;</SPAN>for the full 2026 series</STRONG><SPAN>&nbsp;and&nbsp;import it directly into your calendar.</SPAN><BR /><SPAN>Each calendar entry already includes the Microsoft Teams meeting link.</SPAN></P><P><SPAN>Microsoft Teams meeting link (valid for the entire 2026 series):&nbsp;<A href="https://teams.microsoft.com/l/meetup-join/19%3ameeting_YTE0YzFlNGMtMDA2NC00NThlLWEzYWQtNWExNzU3MmRmNGE1%40thread.v2/0?context=%7b%22Tid%22%3a%2242f7676c-f455-423c-82f6-dc2d99791af7%22%2c%22Oid%22%3a%223d2a93aa-8f6e-4294-826f-80727ddf8588%22%7d" target="_self" rel="nofollow noopener noreferrer">Microsoft Teams meeting link</A>&nbsp;</SPAN></P><P><SPAN>All agendas, slides, recordings, and updates from past and current sessions are published centrally via the</SPAN><BR /><A href="https://pages.community.sap.com/topics/btp-abap-environment/customer-partner-roundtable" target="_self" rel="noopener noreferrer"><STRONG>SAP Community โ€“ SAP BTP ABAP Environment Customer &amp; Partner Roundtable.</STRONG></A></P><P>Weโ€™re looking forward to seeing you there!</P> 2026-02-17T09:22:16.939000+01:00 https://community.sap.com/t5/technology-blog-posts-by-sap/custom-code-migration-to-sap-s-4hana-powered-by-sap-joule-for-developers/ba-p/14329094 Custom code migration to SAP S/4HANA powered by SAP Joule for Developers, ABAP AI capabilities 2026-02-18T14:23:51.235000+01:00 OlgaDolinskaja https://community.sap.com/t5/user/viewprofilepage/user-id/6638 <P>Custom code migration during system conversion to SAP S/4HANA Cloud Private Edition is usually complex and time-consuming process. <SPAN>The whole custom code developed in the SAP ECC systems since years must be assessed and analysed for SAP S/4HANA and finally adapted after system conversion. </SPAN></P><P>Customers often face challenges to understand S/4HANA simplifications and their relation to the custom code due to scattered documentation across various channels like SAP simplification notes, SAP Help, blog posts. To find an answer to the specific SAP S/4HANA custom code migration question, one needs to go through multiple sources of information.</P><P><SPAN>The <STRONG>IT project managers</STRONG> have a tough time to carry out the custom code migration projects on time and within budget because they experience difficulties during execution of their tasks like defining custom code migration scope, getting high-level understanding of custom code issues, creating effort estimations and project plans and finding the right development experts for adaptation. Ability to meet a decision </SPAN>whether to migrate custom code to S/4HANA or not assumes understanding of its business purpose which is quite challenging primarily due to the absence of documentation for legacy code. <SPAN><A href="https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-sap/custom-code-analysis-for-sap-s-4hana-with-sap-fiori-app-custom-code/ba-p/13402751" target="_blank">Custom Code Migration app</A></SPAN> on SAP BTP can execute custom code analysis for S/4HANA readiness, but S/4HANA comes along with more than 430 simplification items which affect custom code. Thus, to get at least a high-level understanding of issues reported by the Custom Code Migration app to assign appropriate work packages to custom code migration developers a project manager needs to deep dive into these lengthy simplification items and provided cookbooks, which is time- and effort-consuming activity.</P><P>Along with this <STRONG>custom code migration developers</STRONG>, who finally must adapt the code for S/4HANA need to understand the old legacy code in all details: not only the business logic, but also the technical processing flow which is quite tedious task due to missing documentation. ABAP test cockpit (ATC) in ABAP development tools for Eclipse can check custom code for S/4HANA readiness, but developers still invest high effort into studying related simplification items and cookbooks to understand the issues in detail. The ATC issues in custom code should be fixed ideally with a high automation rate, but the <SPAN><A href="https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-sap/semi-automated-custom-code-adaptation-after-sap-s-4hana-system-conversion/ba-p/13359048" target="_blank">quick fixes provided for S/4HANA ATC issues in ABAP development tools for Eclipse</A></SPAN> can support about 40%-60% of the typical S/4HANA simplification use cases like conflicts with MATNR field extension or missing ORDER BY in SELECTs, the remaining ATC issues must be fixed manually by developers.</P><P><SPAN>To support IT project managers and developers during custom code migration projects to speed up the analysis and adaptation tasks and enhance productivity the AI-based skills were delivered for custom code management tools within SAP Joule for Developers, ABAP AI capabilities. This will shorten the custom code migration projects timelines, reduce project risks and enhance capacity to meet deadlines and budget constraints.</SPAN></P><P><SPAN>Letโ€™s look at them in detail.</SPAN></P><H2 id="toc-hId-1789729044"><FONT color="#000080"><SPAN>AI-based custom code migration support for IT project managers </SPAN></FONT></H2><P><SPAN>Starting with SAP BTP ABAP environment 2602 AI-based custom code analysis support for IT project managers is integrated in the Custom Code Migration app. To use it the SAP Joule for Developers, ABAP AI capabilities must be activated in your SAP BTP ABAP environment system. See the SAP note <A href="https://me.sap.com/notes/3571857" target="_blank" rel="noopener noreferrer">3571857</A>.</SPAN></P><H4 id="toc-hId-1851380977"><FONT color="#333399"><SPAN>Understand legacy code in the AI-based Custom Code Migration app</SPAN></FONT></H4><P><SPAN>After execution of remote SAP S/4HANA readiness ATC check run over the custom code in the ECC system with the Custom Code Migration app in SAP BTP ABAP environment it is now possible under the <EM>Analyze Findings</EM> view to select ABAP program or ABAP class in the <EM>Findings</EM> table and use <STRONG>Code Explain</STRONG> capability to get explanation of its business purpose and processing logic.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ccm_app_code_explain.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/372952i28C702CEFB75AE2A/image-size/large?v=v2&amp;px=999" role="button" title="ccm_app_code_explain.png" alt="ccm_app_code_explain.png" /></span></SPAN></P><P><SPAN>You will get short and clear AI-based explanation of the code in the pop-up window, which will support your migration decision. Subsequently you can use <EM>Explain business purpose</EM> <EM>in detail</EM> and <EM>Explain processing logic in detail options</EM> to get more details to deepen the clarification.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="OlgaDolinskaja_0-1771231457056.png" style="width: 659px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/372955i1A455015AF9AC70F/image-dimensions/659x485?v=v2" width="659" height="485" role="button" title="OlgaDolinskaja_0-1771231457056.png" alt="OlgaDolinskaja_0-1771231457056.png" /></span></P><P><SPAN>Finally, you can use <EM>Scope</EM> part of the Custom Code Migration app to add or remove the object from scope based on your decision.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ccm_app_scoping.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/372956i7AE5B9D251BBAFE0/image-size/large?v=v2&amp;px=999" role="button" title="ccm_app_scoping.png" alt="ccm_app_scoping.png" /></span></SPAN></P><H4 id="toc-hId-1654867472"><FONT color="#333399"><SPAN>Understand S/4HANA ATC issues in the AI-based Custom Code Migration app</SPAN></FONT></H4><P><SPAN>After execution of remote SAP S/4HANA readiness ATC check run over the custom code in the ECC system with the Custom Code Migration app in SAP BTP ABAP environment it is now possible under the <EM>Analyze Findings</EM> view to select an ATC issue in the <EM>Findings</EM> table and use <STRONG>ATC Explain</STRONG> capability to get an explanation of an S/4HANA related ATC finding. The explanation is provided in the pop-up window along with the proposed step-by-step resolution and contains also referenced S/4HANA simplification materials like simplification notes or cookbooks. Referenced documents are offered as clickable links within the AI-based response for navigation to further details.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ccm_app_atc_explain.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/372958i1D89154CF30A63FE/image-size/large?v=v2&amp;px=999" role="button" title="ccm_app_atc_explain.png" alt="ccm_app_atc_explain.png" /></span></SPAN></P><P><SPAN>This will enable you to </SPAN>grasp the root cause quickly without having to read through numerous SAP S/4HANA simplification information materials.</P><H2 id="toc-hId-1200188529"><FONT color="#000080"><SPAN>AI-based support for custom code migration developer in ABAP development tools for Eclipse</SPAN></FONT></H2><P><SPAN>Starting with SAP S/4HANA Cloud Private Edition 2025 AI-based custom code analysis and adaptation support for developers is provided in ABAP development tools for Eclipse within SAP Joule for Developers, ABAP AI capabilities. To find out how to activate it see the blog post <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-joule-for-developers-abap-ai-capabilities-for-sap-s-4hana-cloud-private/ba-p/14236954" target="_blank">SAP Joule for Developers, ABAP AI capabilities for SAP S/4HANA Cloud Private Edition 2025</A>.</SPAN></P><P><STRONG><SPAN>NOTE: </SPAN></STRONG><SPAN>Code Explain for module pools and ABAP classes along with the deep dive explain (code in INCLUDEs and called methods outside of the source code object) will be delivered with SAP S/4HANA Cloud Private Edition 2025 <STRONG>FPS01</STRONG>.</SPAN></P><H4 id="toc-hId-1261840462"><FONT color="#333399"><SPAN>Using Docs Chat for questions around custom code and S/4HANA simplifications</SPAN></FONT></H4><P><SPAN>In most cases you as a custom code migration developer before starting with your adaptation activities first need to gain general understanding of S/4HANA simplifications related to your functional area of expertise to get an overview as well as deep dive into SAP standard changes relevant to your custom code. </SPAN></P><P><STRONG><SPAN>Docs Chat </SPAN></STRONG><SPAN>capability utilizes SAP simplification notes, related technical information and SAP Help documentation to deliver based on this extensive input quick and accurate answers.</SPAN></P><P><SPAN>Select <STRONG>/docs</STRONG> topic in the Joule chat window and ask your question, for example โ€œ<EM>What are the data model changes in Sales and Distribution?</EM>โ€. Joule will list all technical changes along with affected objects including also reference links for further information. You can also ask follow- up questions for your query.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="docs_chat_sd.png" style="width: 839px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/372960iFF67F132289167E9/image-size/large?v=v2&amp;px=999" role="button" title="docs_chat_sd.png" alt="docs_chat_sd.png" /></span></SPAN></P><P><SPAN>Now for example after finding out that VBUK and VBUP tables were eliminated in S/4HANA and knowing that this has direct impact on your custom code, you can ask Joule โ€<EM>How can references to VBUK and VBUP be eliminated in my code?</EM>โ€. Joule will deliver short and concrete answer providing code proposals considering different use cases based on the information provided in the extensive cookbook about the VBUK and VBUP adaption.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="docs_chat_sd_eliminate_vbuk.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/372961iB1B72EC4B2B82F5D/image-size/large?v=v2&amp;px=999" role="button" title="docs_chat_sd_eliminate_vbuk.png" alt="docs_chat_sd_eliminate_vbuk.png" /></span></SPAN></P><H4 id="toc-hId-1065326957"><FONT color="#333399"><SPAN>Understanding of old legacy code </SPAN></FONT></H4><P><SPAN>Generally, you as a custom code migration developer starting with your adaptation activities need to understand the old legacy code, which must be analysed and adapted for S/4HANA. Thereby you are confronted with the following problems: the code has been implemented many years ago, often expands over multiple pages, has very little or no documentation, the author of the code is not available any more for questions and so on. Thus you have a tedious and long-time task to digest this code to verify if it is still needed from the business perspective and understand itโ€™s implementation logic for the adaptation.</SPAN></P><P><SPAN>The <STRONG>Explain for ABAP report</STRONG> and <STRONG>Explain for module pools </STRONG>as interactive Dynpro-based applications capabilities significantly speed up and make more accurate the task of understanding of old legacy code.</SPAN></P><P><SPAN>Just select an old ABAP report in the <EM>Project Explorer</EM> and use context menu <EM>Joule -&gt;Explain</EM>. Joule will explain its business purpose and processing logic and will list all called objects. You can further deep dive into details using <STRONG><EM>Explain business purpose in detail</EM></STRONG> or/and <STRONG><EM>Explain processing logic in detail</EM></STRONG> features in the Joule chat window or ask Joule to explain called objects. </SPAN></P><P><SPAN>In the example below the business purpose of this custom ABAP program is to upload customer email addresses, which length exceeds 50 characters since the standard ABAP program cannot handle it, and this custom functionality will be still required in the S/4HANA system.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="explain_old_report.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/372962iFF5BB5329830FDFB/image-size/large?v=v2&amp;px=999" role="button" title="explain_old_report.png" alt="explain_old_report.png" /></span></SPAN></P><P><SPAN>Therefore, you as developer can for example follow up on the details of processing logic to understand the program better for the upcoming adaptation.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="explain_old_report_logic.png" style="width: 900px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/372963i1E1BDAA1C254D946/image-size/large?v=v2&amp;px=999" role="button" title="explain_old_report_logic.png" alt="explain_old_report_logic.png" /></span></SPAN></P><P><SPAN>You can also select the source code snippet in the editor and ask Joule to explain it: </SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="explain_old_report_loop_logic.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/372964iBEEEDCF130897C92/image-size/large?v=v2&amp;px=999" role="button" title="explain_old_report_loop_logic.png" alt="explain_old_report_loop_logic.png" /></span></SPAN></P><P><SPAN>Here is one example of the module pool explanation by Joule. In addition to the general overview and business purpose Joule describes user flow, which is very important for screen-based Dynpro applications to follow on the screen logic along with technical details for the processing logic of the screens (PBO/PAI) comprising deep-dive into INCLUDEs and Dynpro logic:</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="module_pool_explain.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/372965i618C8AEC7C9AC764/image-size/large?v=v2&amp;px=999" role="button" title="module_pool_explain.png" alt="module_pool_explain.png" /></span></SPAN></P><H4 id="toc-hId-868813452"><FONT color="#333399"><SPAN>Understanding of S/4HANA related ATC findings </SPAN></FONT></H4><P><SPAN>The basis for all custom code adaptation activities is the execution of S/4HANA readiness checks with ATC over custom code in your S/4HANA system in ABAP development tools for Eclipse. The ATC check result contains the list of S/4HANA incompatibility issues in custom code, which must be adapted, explaining the error and providing as a reference the link to the corresponding simplification information. The custom code migration developer needs to read through it to find out how to apply it to solve the error in the particular custom code object, which is time-consuming task.</SPAN></P><P><SPAN>The <STRONG>Explain ATC finding </STRONG>capability offers c</SPAN>lear and short explanation of the S/4HANA related issue in custom code based on information provided in S/4HANA simplification items and cookbooks along with step-by-step recommendation on how to solve the issue.</P><P><SPAN>After execution of the ATC check run with S/4HANA readiness check variant S4HANA_READINESS_2025 over your custom code the ATC findings are displayed in the <EM>ATC Problems View</EM>. In the Details of an ATC finding you see the description of the error, in this example โ€œ<EM>DB Operation found (KONV, see Note(s) 0002220005)</EM>โ€ and the link to the related SAP simplification note 2220005, which must be examined to understand how to resolve this issue. Instead of doing this just select the ATC finding and use the context menu <EM>Joule-&gt;Explain</EM>.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="atc_finding_explain_menu.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/372966i6574F7216DCD8D54/image-size/large?v=v2&amp;px=999" role="button" title="atc_finding_explain_menu.png" alt="atc_finding_explain_menu.png" /></span></SPAN></P><P>Joule will deliver <SPAN>a crisp</SPAN> explanation telling you that the table KONV was replaced in S/4HANA with the table PRCD_ELEMENTS, which must be accessed using the new pricing result API. This explanation is based on the information provided within the cookbook about pricing conditions techniques attached to the related SAP simplification note <SPAN>2220005. </SPAN>Joule can also provide step-by-step recommendations on how to fix the issue and can answer follow-up questions for further clarification. The<SPAN> r</SPAN>eferenced documents (related SAP simplification note in this example) are offered as clickable links within the Joule response for navigation to further details.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="atc_finding_explain_result.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/372967i086D469995D83FD8/image-size/large?v=v2&amp;px=999" role="button" title="atc_finding_explain_result.png" alt="atc_finding_explain_result.png" /></span></P><P>This will allow you to quickly grasp the root cause without having to read through numerous SAP S/4HANA simplification information materials.</P><H4 id="toc-hId-672299947"><FONT color="#333399"><SPAN>Getting code proposal for adaptation of S/4HANA related issues</SPAN></FONT></H4><P><SPAN>The final step for a custom code migration developer is to fix S/4HANA related ATC findings to adapt the code to S/4HANA.</SPAN></P><P><SPAN>The ATC findings which can be resolved using deterministic quick fixes are marked with the yellow light bulb in the ATC findings list. The resolution of the remaining findings must be done manually based on simplification information, which is quite laborious and time-demanding task. </SPAN></P><P><SPAN>The <STRONG>Code proposal </STRONG>capability allows you to </SPAN>fix the issue in custom code based on AI-based proposal emulating the same process as deterministic quick fixes and can be utilized for S/4HANA issues where deterministic quick fixes are not available.</P><P>After AI-based explanation of an ATC finding just click <EM>Generate Code Proposal</EM> in the Joule window</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="OlgaDolinskaja_0-1771233025400.png" style="width: 237px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/372968iD144167B51865DB5/image-dimensions/237x48?v=v2" width="237" height="48" role="button" title="OlgaDolinskaja_0-1771233025400.png" alt="OlgaDolinskaja_0-1771233025400.png" /></span></P><P>The AI-based code proposal is UI friendly: it can be generated either after explanation of the ATC finding (as suggested above) or from a source code line in the editor.</P><P>For generating code proposal from source editor just click on the ATC finding marker like this:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ccm_ai_code_proposal_from_editor.png" style="width: 552px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/372970iFC117DD1992B30DD/image-size/large?v=v2&amp;px=999" role="button" title="ccm_ai_code_proposal_from_editor.png" alt="ccm_ai_code_proposal_from_editor.png" /></span></P><P><SPAN>After Joule proposed the code change, you have different options. You can <EM>Copy</EM> the code proposal for pasting it into the editor later or <EM>Insert </EM>the code at the cursor position in the editor, or use <EM>Apply</EM> (recommended).</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="atc_generate_code_proposal.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/372971i9D02D606A16E7C0D/image-size/large?v=v2&amp;px=999" role="button" title="atc_generate_code_proposal.png" alt="atc_generate_code_proposal.png" /></span></SPAN></P><P>If selecting <EM>Apply</EM>, then in the same way as for deterministic quick fixes the <EM>Code Review Dialog</EM> will be shown displaying the original source code and the source code containing code proposal.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="atc_code_proposal_apply.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/372972i75E92E84681CB385/image-size/large?v=v2&amp;px=999" role="button" title="atc_code_proposal_apply.png" alt="atc_code_proposal_apply.png" /></span></P><P>You as developer can review the code proposal and apply as needed. AI-based Code Proposal allows you to save the manual efforts and benefit from the semi-automated code adaptation as you already know it from the deterministic quick fixes.</P><H2 id="toc-hId-217621004"><FONT color="#000080">Further information</FONT></H2><P><SPAN>Discover generative AI capabilities for ABAP custom code migration by watching the video: </SPAN><A href="https://www.sap.com/assetdetail/2025/10/920b9e66-297f-0010-bca6-c68f7e60039b.html" target="_blank" rel="noopener noreferrer">Unleash the power of GenAI for ABAP Custom Code Migration</A>.</P><P>For more details about ABAP AI capabilities for custom code migration refer to the SAP Help Portal documentation <SPAN><A href="https://help.sap.com/docs/abap-ai/generative-ai-in-abap-cloud/using-custom-code-migration-ai-assistant" target="_blank" rel="noopener noreferrer">Using Custom Code Migration AI assistant</A></SPAN>&nbsp;including also video tutorials.</P> 2026-02-18T14:23:51.235000+01:00 https://community.sap.com/t5/beginner-corner-blog-posts/understanding-the-basic-terminologies-of-sap-cloud-world-a-beginner/ba-p/14320880 Understanding the Basic Terminologies of SAP Cloud World : A Beginner โ€‘ Friendly Guide 2026-02-19T10:03:58.866000+01:00 chandra_maverick1506 https://community.sap.com/t5/user/viewprofilepage/user-id/2199531 <DIV>๐——๐—ฒ๐—บ๐˜†๐˜€๐˜๐—ถ๐—ณ๐˜†๐—ถ๐—ป๐—ด ๐—ฆ/๐Ÿฐ๐—›๐—”๐—ก๐—”, ๐—•๐—ง๐—ฃ, ๐—ฅ๐—”๐—ฃ &amp; ๐—–๐—”๐—ฃ, ๐—ฅ๐—œ๐—ฆ๐—˜ ๐—ช๐—œ๐—ง๐—› ๐—ฆ๐—”๐—ฃ, ๐—–๐—น๐—ฒ๐—ฎ๐—ป ๐—–๐—ผ๐—ฟ๐—ฒ, ๐—–๐—™๐—Ÿ, ๐—ฆ๐—ถ๐—ฑ๐—ฒ ๐—ฏ๐˜† ๐—ฆ๐—ถ๐—ฑ๐—ฒ ๐—˜๐˜…๐˜๐—ฒ๐—ป๐˜€๐—ถ๐—ฏ๐—ถ๐—น๐—ถ๐˜๐˜† - ๐—” ๐—ฃ๐—ฟ๐—ฎ๐—ฐ๐˜๐—ถ๐—ฐ๐—ฎ๐—น ๐—๐—ผ๐˜‚๐—ฟ๐—ป๐—ฒ๐˜† ๐—ณ๐—ผ๐—ฟ ๐—”๐—•๐—”๐—ฃ ๐——๐—ฒ๐˜ƒ๐—ฒ๐—น๐—ผ๐—ฝ๐—ฒ๐—ฟ๐˜€</DIV><DIV>&nbsp;</DIV><DIV>๐Ÿญ. ๐—ฆ/๐Ÿฐ๐—›๐—”๐—ก๐—” ๐——๐—ฒ๐—ฝ๐—น๐—ผ๐˜†๐—บ๐—ฒ๐—ป๐˜ ๐— ๐—ผ๐—ฑ๐—ฒ๐—น๐˜€ ๐—˜๐˜…๐—ฝ๐—น๐—ฎ๐—ถ๐—ป๐—ฒ๐—ฑ</DIV><DIV>&nbsp;</DIV><DIV>๐—ข๐—ป-๐—ฃ๐—ฟ๐—ฒ๐—บ๐—ถ๐˜€๐—ฒ&nbsp;</DIV><DIV>โœ” You own/manage servers like ECC&nbsp;</DIV><DIV>โœ” Full ABAP Freedom - Custom Code, Debug, SE80/ADT</DIV><DIV>&nbsp;</DIV><DIV>๐—ฃ๐—ฟ๐—ถ๐˜ƒ๐—ฎ๐˜๐—ฒ ๐—–๐—น๐—ผ๐˜‚๐—ฑ</DIV><DIV>โœ”&nbsp; SAP Manages Servers for you(๐—ฆ๐—ถ๐—ป๐—ด๐—น๐—ฒ ๐—ง๐—ฒ๐—ป๐—ฎ๐—ป๐˜)</DIV><DIV>โœ” Limited Custom Code - Must Follow Clean Core Principles</DIV><DIV>&nbsp;</DIV><DIV>๐—ฃ๐˜‚๐—ฏ๐—น๐—ถ๐—ฐ ๐—–๐—น๐—ผ๐˜‚๐—ฑ</DIV><DIV>โœ” Shared Infrastructure(๐— ๐˜‚๐—น๐˜๐—ถ ๐—ง๐—ฒ๐—ป๐—ฎ๐—ป๐˜)</DIV><DIV>โœ” No Custom ABAP - Extensions Via BTP only</DIV><DIV>&nbsp;</DIV><DIV>๐Ÿฎ. ๐—ฆ๐—ถ๐—ป๐—ด๐—น๐—ฒ ๐—ง๐—ฒ๐—ป๐—ฎ๐—ป๐˜ ๐—ฉ๐˜€ ๐— ๐˜‚๐—น๐˜๐—ถ ๐—ง๐—ฒ๐—ป๐—ฎ๐—ป๐˜ : ๐—ง๐—ต๐—ฒ ๐—›๐—ผ๐˜‚๐˜€๐—ถ๐—ป๐—ด ๐—”๐—ป๐—ฎ๐—น๐—ผ๐—ด๐˜†</DIV><DIV>&nbsp;</DIV><DIV>๐—จ๐—ป๐—ฑ๐—ฒ๐—ฟ๐˜€๐˜๐—ฎ๐—ป๐—ฑ๐—ถ๐—ป๐—ด ๐˜๐—ต๐—ฒ ๐—”๐—ฟ๐—ฐ๐—ต๐—ถ๐˜๐—ฒ๐—ฐ๐˜๐˜‚๐—ฟ๐—ฒ ๐——๐—ถ๐—ณ๐—ณ๐—ฒ๐—ฟ๐—ฒ๐—ป๐—ฐ๐—ฒ</DIV><DIV>&nbsp;</DIV><DIV>โ–  ๐—ฃ๐—ฟ๐—ถ๐˜ƒ๐—ฎ๐˜๐—ฒ ๐—–๐—น๐—ผ๐˜‚๐—ฑ( ๐—ฆ๐—ถ๐—ป๐—ด๐—น๐—ฒ ๐—ง๐—ฒ๐—ป๐—ฎ๐—ป๐˜ )</DIV><DIV>&nbsp;</DIV><DIV>๐—›๐—ผ๐˜‚๐˜€๐—ถ๐—ป๐—ด ๐—”๐—ป๐—ฎ๐—น๐—ผ๐—ด๐˜† : You Rent an entire independent house - SAP is your Landlord who Maintains it, but you're the only resident.</DIV><DIV>&nbsp;</DIV><DIV>๐—ช๐—ต๐—ฎ๐˜ ๐˜๐—ต๐—ถ๐˜€ ๐— ๐—ฒ๐—ฎ๐—ป๐˜€ :</DIV><DIV>โœ”&nbsp; Your Data is Completely isolated from other companies</DIV><DIV>โœ” You get your own dedicated hardware/software stack</DIV><DIV>โœ” SAP manages infrastructure ( Servers, OS, backups )</DIV><DIV>โœ” You still control configurations and some customizations</DIV><DIV>&nbsp;</DIV><DIV>๐—˜๐˜…๐—ฎ๐—บ๐—ฝ๐—น๐—ฒ:</DIV><DIV>Company A :&nbsp; Server 1 Running S/4 HANA Instance A</DIV><DIV>Company B :&nbsp; Server 2 Running S/4 HANA Instance B</DIV><DIV>Company C : Server 3 Running S/4 HANA Instance c</DIV><DIV>&nbsp;</DIV><DIV>Each Company has their own ๐—ฆ๐—ฒ๐—ฝ๐—ฎ๐—ฟ๐—ฎ๐˜๐—ฒ ๐—ถ๐—ป๐˜€๐˜๐—ฎ๐—น๐—น๐—ฎ๐˜๐—ถ๐—ผ๐—ป.</DIV><DIV>&nbsp;</DIV><DIV>&nbsp;</DIV><DIV>โ– &nbsp; ๐—ฃ๐˜‚๐—ฏ๐—น๐—ถ๐—ฐ ๐—–๐—น๐—ผ๐˜‚๐—ฑ&nbsp;</DIV><DIV>&nbsp;</DIV><DIV>๐—›๐—ผ๐˜‚๐˜€๐—ถ๐—ป๐—ด ๐—”๐—ป๐—ฎ๐—น๐—ผ๐—ด๐˜†: You rent an apartment in a shared building - many families live in the same building, sharing elevators/parking but have separate locked units.</DIV><DIV>&nbsp;</DIV><DIV>๐—ช๐—ต๐—ฎ๐˜ ๐—ง๐—ต๐—ถ๐˜€ ๐— ๐—ฒ๐—ฎ๐—ป๐˜€:</DIV><DIV>โœ” Your data is logically separated (like database partitions)</DIV><DIV>โœ” Same software version for all customers (no custom patches)</DIV><DIV>โœ” Shared infrastructure (like AWS/Azure multi-tenancy)</DIV><DIV>โœ” No custom ABAP allowed (everyone uses same codebase)</DIV><DIV>&nbsp;</DIV><DIV>๐—˜๐˜…๐—ฎ๐—บ๐—ฝ๐—น๐—ฒ:</DIV><DIV>Single Server โ†’ Single S/4 Instance</DIV><DIV>&nbsp; โ”œโ”€โ”€ Company A Data (Tenant ID: 001)</DIV><DIV>&nbsp; โ”œโ”€โ”€ Company B Data (Tenant ID: 002)</DIV><DIV>&nbsp; โ””โ”€โ”€ Company C Data (Tenant ID: 003)</DIV><DIV>&nbsp;</DIV><DIV>๐—ฅ๐—ฒ๐—ฎ๐—น-๐—ช๐—ผ๐—ฟ๐—น๐—ฑ ๐—–๐—ผ๐—บ๐—ฝ๐—ฎ๐—ฟ๐—ถ๐˜€๐—ผ๐—ป</DIV><DIV>๐—ฃ๐—ฟ๐—ถ๐˜ƒ๐—ฎ๐˜๐—ฒ ๐—–๐—น๐—ผ๐˜‚๐—ฑ ๐—ถ๐˜€ ๐—น๐—ถ๐—ธ๐—ฒ:</DIV><DIV>Having your own ECC system but SAP hosts the servers</DIV><DIV>โœ” You still get your own environment (DEV/QAS/PRD)</DIV><DIV>โœ” Can have some customizations (within clean core limits)</DIV><DIV>&nbsp;</DIV><DIV>๐—ฃ๐˜‚๐—ฏ๐—น๐—ถ๐—ฐ ๐—–๐—น๐—ผ๐˜‚๐—ฑ ๐—ถ๐˜€ ๐—น๐—ถ๐—ธ๐—ฒ:</DIV><DIV>โœ” Using Gmail - Google's servers, everyone uses same version</DIV><DIV>โœ” You can't modify Gmail's code - only configure it</DIV><DIV>โœ” Cost-effective but zero flexibility</DIV><DIV>&nbsp;</DIV><DIV>๐—ช๐—ต๐—ถ๐—ฐ๐—ต ๐—–๐—ผ๐—บ๐—ฝ๐—ฎ๐—ป๐—ถ๐—ฒ๐˜€ ๐˜‚๐˜€๐—ฒ ๐˜„๐—ต๐—ฎ๐˜ ?</DIV><DIV>Manufacturing(Large) - Private Cloud/ On premise ( Heavy Customizations )</DIV><DIV>Retail(Small/mid) - Public Cloud ( Standard Process, Fast Deployments )</DIV><DIV>Start ups - Public cloud ( Cost Effective )</DIV><DIV>&nbsp;</DIV><DIV>๐Ÿฏ. ๐—ช๐—ต๐—ฎ๐˜ ๐—ถ๐˜€ ๐—ฅ๐—œ๐—ฆ๐—˜ ๐˜„๐—ถ๐˜๐—ต ๐—ฆ๐—”๐—ฃ ?</DIV><DIV>&nbsp;</DIV><DIV>๐—ฅ๐—œ๐—ฆ๐—˜ ๐—ถ๐˜€ ๐—ก๐—ข๐—ง ๐—ฎ ๐—ฝ๐—ฟ๐—ผ๐—ฑ๐˜‚๐—ฐ๐˜ - ๐—ถ๐˜'๐˜€ ๐—ฎ ๐˜€๐˜‚๐—ฏ๐˜€๐—ฐ๐—ฟ๐—ถ๐—ฝ๐˜๐—ถ๐—ผ๐—ป ๐—ฝ๐—ฎ๐—ฐ๐—ธ๐—ฎ๐—ด๐—ฒ like buying a car with insurance/maintenance bundled.</DIV><DIV>&nbsp;</DIV><DIV>๐—ฅ๐—œ๐—ฆ๐—˜ = ๐—ฆ/๐Ÿฐ๐—›๐—”๐—ก๐—” ๐—–๐—น๐—ผ๐˜‚๐—ฑ (๐—ฃ๐—ฟ๐—ถ๐˜ƒ๐—ฎ๐˜๐—ฒ/๐—ฃ๐˜‚๐—ฏ๐—น๐—ถ๐—ฐ) + ๐—•๐—ง๐—ฃ + ๐—ฆ๐˜‚๐—ฝ๐—ฝ๐—ผ๐—ฟ๐˜ + ๐— ๐—ถ๐—ด๐—ฟ๐—ฎ๐˜๐—ถ๐—ผ๐—ป ๐—ง๐—ผ๐—ผ๐—น๐˜€</DIV><DIV>&nbsp;</DIV><DIV>For you as a developer: It's just a licensing model. Your actual work doesn't change drastically unless your company chooses Public Cloud.</DIV><DIV>&nbsp;</DIV><DIV>๐Ÿฐ. ๐—ช๐—ต๐—ฎ๐˜ ๐—ถ๐˜€ ๐—•๐—ง๐—ฃ? ๐—ง๐—ต๐—ฒ ๐—ฆ๐—ถ๐—บ๐—ฝ๐—น๐—ฒ ๐—ง๐—ฟ๐˜‚๐˜๐—ต</DIV><DIV>&nbsp;</DIV><DIV>๐—•๐—ง๐—ฃ (๐—•๐˜‚๐˜€๐—ถ๐—ป๐—ฒ๐˜€๐˜€ ๐—ง๐—ฒ๐—ฐ๐—ต๐—ป๐—ผ๐—น๐—ผ๐—ด๐˜† ๐—ฃ๐—น๐—ฎ๐˜๐—ณ๐—ผ๐—ฟ๐—บ) is SAP's cloud platform where you build apps that extend S/4HANA without touching its core code.</DIV><DIV>&nbsp;</DIV><DIV>๐—ข๐—น๐—ฑ ๐—˜๐—–๐—– ๐—ช๐—ฎ๐˜† (๐—ฌ๐—ผ๐˜‚๐—ฟ ๐—–๐˜‚๐—ฟ๐—ฟ๐—ฒ๐—ป๐˜ ๐—ช๐—ผ๐—ฟ๐—น๐—ฑ):</DIV><DIV>" Customer asks: "We need a custom approval workflow for purchase orders"</DIV><DIV>&nbsp;</DIV><DIV>" ๐—ฌ๐—ผ๐˜‚ ๐—ฑ๐—ผ ๐˜๐—ต๐—ถ๐˜€:</DIV><DIV>1. Create Z-table (SE11)</DIV><DIV>2. Write custom ABAP program (SE38/SE80)</DIV><DIV>3. Modify standard SAP transaction (User Exit/BADI)</DIV><DIV>4. Add custom fields to EKKO table</DIV><DIV>&nbsp;</DIV><DIV>๐—ฅ๐—ฒ๐˜€๐˜‚๐—น๐˜: System becomes "dirty" โ†’ upgrades break your code</DIV><DIV>&nbsp;</DIV><DIV>๐—ฆ/๐Ÿฐ + ๐—•๐—ง๐—ฃ ๐—ช๐—ฎ๐˜† (๐—ก๐—ฒ๐˜„ ๐—”๐—ฝ๐—ฝ๐—ฟ๐—ผ๐—ฎ๐—ฐ๐—ต):</DIV><DIV>You do this:</DIV><DIV>1. Keep S/4HANA standard (no modifications)</DIV><DIV>2. Build approval app on BTP (separate system)</DIV><DIV>3. Connect to S/4 via APIs</DIV><DIV>4. Store custom data in BTP database</DIV><DIV>&nbsp;</DIV><DIV>๐—ฅ๐—ฒ๐˜€๐˜‚๐—น๐˜: S/4 stays "clean" โ†’ smooth upgrades</DIV><DIV>&nbsp;</DIV><DIV>๐Ÿฑ. ๐—ฅ๐—”๐—ฃ ๐˜ƒ๐˜€ ๐—–๐—”๐—ฃ</DIV><DIV>โœ” ๐—ฅ๐—”๐—ฃ = ๐—”๐—•๐—”๐—ฃ-๐—ฏ๐—ฎ๐˜€๐—ฒ๐—ฑ (๐—ฟ๐˜‚๐—ป๐˜€ ๐—œ๐—ก ๐—ฆ/๐Ÿฐ๐—›๐—”๐—ก๐—”)</DIV><DIV>&nbsp;</DIV><DIV>โ€ข RAP runs inside S/4HANA system - whether Public or Private Cloud.</DIV><DIV>&nbsp;</DIV><DIV>๐—ฅ๐—”๐—ฃ ๐—ถ๐—ป ๐—ฃ๐—ฟ๐—ถ๐˜ƒ๐—ฎ๐˜๐—ฒ ๐—–๐—น๐—ผ๐˜‚๐—ฑ&nbsp;</DIV><DIV>&nbsp;โ€ข&nbsp; Create custom database tables (Z-tables)</DIV><DIV><SPAN>โ€ข&nbsp; Access standard SAP tables directly</SPAN></DIV><DIV><SPAN>โ€ข&nbsp; Some custom ABAP classes (within clean core guidelines)</SPAN></DIV><DIV><SPAN>โ€ข&nbsp; Traditional debugging in ADT</SPAN></DIV><DIV><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="chandra_maverick1506_0-1770132190588.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368621iDF22FB3D887F13E5/image-size/medium?v=v2&amp;px=400" role="button" title="chandra_maverick1506_0-1770132190588.png" alt="chandra_maverick1506_0-1770132190588.png" /></span><P>&nbsp;</P></DIV><DIV>๐—ฅ๐—”๐—ฃ ๐—ถ๐—ป ๐—ฃ๐˜‚๐—ฏ๐—น๐—ถ๐—ฐ ๐—–๐—น๐—ผ๐˜‚๐—ฑ</DIV><DIV>โ€ข&nbsp; NO direct table access (VBAK, KNA1, etc.) - must use&nbsp; &nbsp;released CDS views (I_* views)</DIV><DIV><SPAN>โ€ข&nbsp; NO custom database tables in S/4</SPAN></DIV><DIV><SPAN>โ€ข&nbsp; Only released APIs/BAPIs allowed</SPAN></DIV><DIV><SPAN>โ€ข&nbsp; Cannot use SE11/SE80 - only Eclipse ADT</SPAN></DIV><DIV><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="chandra_maverick1506_1-1770132230812.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368622iF440DCBBED3D5840/image-size/medium?v=v2&amp;px=400" role="button" title="chandra_maverick1506_1-1770132230812.png" alt="chandra_maverick1506_1-1770132230812.png" /></span><P>&nbsp;</P></DIV><DIV>โœ” ๐—–๐—”๐—ฃ = ๐—ก๐—ผ๐—ฑ๐—ฒ.๐—ท๐˜€/๐—๐—ฎ๐˜ƒ๐—ฎ-๐—ฏ๐—ฎ๐˜€๐—ฒ๐—ฑ (๐—ฟ๐˜‚๐—ป๐˜€ ๐—ข๐—ก ๐—•๐—ง๐—ฃ - ๐˜€๐—ฒ๐—ฝ๐—ฎ๐—ฟ๐—ฎ๐˜๐—ฒ ๐—ณ๐—ฟ๐—ผ๐—บ ๐—ฆ/๐Ÿฐ)</DIV><DIV>&nbsp;</DIV><DIV>โ€ข CAP is completely separate from S/4HANA - runs on BTP only.</DIV><DIV><DIV><DIV><P>๐—–๐—”๐—ฃ ๐˜„๐—ถ๐˜๐—ต ๐—ฃ๐—ฟ๐—ถ๐˜ƒ๐—ฎ๐˜๐—ฒ ๐—–๐—น๐—ผ๐˜‚๐—ฑ ๐—ฆ/๐Ÿฐ<BR />๐—–๐—ผ๐—ป๐—ป๐—ฒ๐—ฐ๐˜๐—ถ๐˜ƒ๐—ถ๐˜๐˜†:<BR />โ€ข Uses SAP Cloud Connector (secure tunnel to on-premise/private)<BR />โ€ข Can call any OData service you expose from S/4<BR />โ€ข More flexible integration (can use custom RFCs if needed)</P><P>๐—–๐—”๐—ฃ ๐˜„๐—ถ๐˜๐—ต ๐—ฃ๐˜‚๐—ฏ๐—น๐—ถ๐—ฐ ๐—–๐—น๐—ผ๐˜‚๐—ฑ ๐—ฆ/๐Ÿฐ<BR />๐—ฅ๐—ฒ๐˜€๐˜๐—ฟ๐—ถ๐—ฐ๐˜๐—ถ๐—ผ๐—ป๐˜€:<BR />โ€ข Can only use SAP's released APIs (API Business Hub)<BR />โ€ข No custom OData services from S/4 (since you can't create custom code there)<BR />โ€ข Direct internet connectivity (no Cloud Connector)</P><P>&nbsp;</P><DIV>๐Ÿฒ. ๐—–๐—น๐—ฒ๐—ฎ๐—ป ๐—–๐—ผ๐—ฟ๐—ฒ</DIV><DIV>&nbsp;</DIV><DIV>๐—ช๐—ต๐—ฎ๐˜ ๐—ถ๐˜ ๐—ถ๐˜€: A principle that keeps your SAP system's standard code unchanged and upgrade-safe.</DIV><DIV>&nbsp;</DIV><DIV>Simple explanation: Don't modify SAP's delivered code directly. Keep the "core" clean.</DIV><DIV>&nbsp;</DIV><DIV>๐—˜๐˜…๐—ฎ๐—บ๐—ฝ๐—น๐—ฒ :</DIV><DIV>๐—ข๐—น๐—ฑ ๐—”๐—ฝ๐—ฝ๐—ฟ๐—ผ๐—ฎ๐—ฐ๐—ต :</DIV><DIV>&nbsp;</DIV><DIV>Third Party System โ†’ Inbound IDoc โ†’ BADI/Customer Exit ( Data Mapping for Idoc segments ) โ†’ SAP Standard Processing</DIV><DIV>&nbsp;</DIV><DIV>๐—–๐—น๐—ฒ๐—ฎ๐—ป ๐—ฐ๐—ผ๐—ฟ๐—ฒ :</DIV><DIV>Third Party System โ†’ IDoc โ†’ AIF Layer โ†’ Data Mapping โ†’ SAP Standard Processing</DIV><DIV>&nbsp;</DIV><DIV>&nbsp;๐—•๐—ฒ๐—ป๐—ฒ๐—ณ๐—ถ๐˜๐˜€ ๐—ผ๐—ณ ๐—”๐—œ๐—™ ๐—”๐—ฝ๐—ฝ๐—ฟ๐—ผ๐—ฎ๐—ฐ๐—ต:</DIV><DIV><span class="lia-unicode-emoji" title=":white_heavy_check_mark:">โœ…</span>๐—–๐—น๐—ฒ๐—ฎ๐—ป ๐—–๐—ผ๐—ฟ๐—ฒ ๐—–๐—ผ๐—บ๐—ฝ๐—น๐—ถ๐—ฎ๐—ป๐—ฐ๐—ฒ:</DIV><DIV>&nbsp;</DIV><DIV><SPAN>โ€ข&nbsp; No code in customer exits/BADIs</SPAN></DIV><DIV><SPAN>โ€ข&nbsp; Configuration-driven transformations</SPAN></DIV><DIV><SPAN>โ€ข&nbsp; Standard AIF framework handles processing</SPAN></DIV><DIV>&nbsp;</DIV><DIV>๐Ÿณ. ๐—•๐—ง๐—ฃ ๐—ฆ๐—ถ๐—ฑ๐—ฒ-๐—ฏ๐˜†-๐—ฆ๐—ถ๐—ฑ๐—ฒ ๐—˜๐˜…๐˜๐—ฒ๐—ป๐˜€๐—ถ๐—ฏ๐—ถ๐—น๐—ถ๐˜๐˜†</DIV><DIV>&nbsp;</DIV><DIV>๐—ช๐—ต๐—ฎ๐˜ ๐—ถ๐˜ ๐—ถ๐˜€: Building custom applications on SAP Business Technology Platform (BTP) that work alongside your SAP system.</DIV><DIV>&nbsp;</DIV><DIV>๐—ฆ๐—ถ๐—บ๐—ฝ๐—น๐—ฒ ๐—ฒ๐˜…๐—ฝ๐—น๐—ฎ๐—ป๐—ฎ๐˜๐—ถ๐—ผ๐—ป: Create new apps on the cloud that connect to SAP via APIs, without touching the core system.</DIV><DIV>&nbsp;</DIV><DIV>๐—•๐—ฒ๐—ป๐—ฒ๐—ณ๐—ถ๐˜๐˜€: Innovation without risking core stability, use modern cloud technologies</DIV><DIV>&nbsp;</DIV><DIV>๐Ÿด. ๐—–๐—™๐—Ÿ (๐—–๐˜‚๐˜€๐˜๐—ผ๐—บ ๐—™๐—ถ๐—ฒ๐—น๐—ฑ๐˜€ &amp; ๐—Ÿ๐—ผ๐—ด๐—ถ๐—ฐ)</DIV><DIV>&nbsp;</DIV><DIV>๐—ช๐—ต๐—ฎ๐˜ ๐—ถ๐˜ ๐—ถ๐˜€: SAP's embedded extensibility framework for adding custom fields and business logic without code modifications.</DIV><DIV>&nbsp;</DIV><DIV>๐—ฆ๐—ถ๐—บ๐—ฝ๐—น๐—ฒ ๐—ฒ๐˜…๐—ฝ๐—น๐—ฎ๐—ป๐—ฎ๐˜๐—ถ๐—ผ๐—ป: Point-and-click tool to add fields and simple logic to standard SAP objects.</DIV><DIV>&nbsp;</DIV><DIV>Add simple extensions inside SAP using key user tools.</DIV><P>&nbsp;</P><P>&nbsp;</P></DIV></DIV></DIV> 2026-02-19T10:03:58.866000+01:00 https://community.sap.com/t5/technology-blog-posts-by-sap/sap-btp-abap-environment-release-2602/ba-p/14329182 SAP BTP ABAP Environment - Release 2602 2026-02-19T10:47:10.350000+01:00 Nora_Klemp https://community.sap.com/t5/user/viewprofilepage/user-id/1641196 <DIV><H2 id="toc-hId-1789729972">SAP BTP ABAP Environment - Release 2602</H2><DIV>&nbsp;</DIV><DIV>On February 14, the new 2602 release was delivered as the successor to the 2511 release.&nbsp;<SPAN>In this blog post, we provide a detailed overview of the new features and enhancements included in this release, highlighting the key improvements and innovations introduced with 2602. Some highlights in the new release include the&nbsp;<STRONG>My Home</STRONG> as your new personalized entry page in SAP Fiori Launchpad, the <STRONG>CDS Embedded Analytics Star Schema Generator</STRONG> and the&nbsp;<STRONG>RAP recommendations for input assistance</STRONG> based on the user input and interaction history.&nbsp;</SPAN></DIV></DIV><P><SPAN>The list of all new features including more information can be found on the What's New for <A href="https://help.sap.com/whats-new/7a822d3bcaa74f31b98fa315601e9c96?Software_Lifecycle=General+Availability&amp;Version=ABAP+Environment+2602" target="_blank" rel="noopener noreferrer">SAP BTP ABAP environment page</A>. The new AI-related features are listed separately on the What's New for <A href="https://help.sap.com/whats-new/4d359a7f8e8248e18f98e85ea0b9d83e?Version=SAP+BTP+ABAP+environment+2602" target="_self" rel="noopener noreferrer">ABAP Generative AI in ABAP Cloud</A>.</SPAN></P><H4 id="toc-hId-1851381905"><SPAN>ABAP Development Tools (ADT)</SPAN></H4><UL><LI><SPAN><STRONG>New Grouping Option</STRONG> Effect on transports in ATC Problems View</SPAN></LI><LI><SPAN>ABAP Testability: <STRONG>Enhancements to Test Double Frameworks</STRONG> (<A href="https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/abap-cds-test-double-framework?version=sap_btp" target="_blank" rel="noopener noreferrer">details</A>)</SPAN></LI><LI><SPAN><STRONG>Global User ID</STRONG> for ATC Exemptions</SPAN></LI><LI><SPAN><STRONG>Displaying the Used Objects</STRONG> of CDS Service Definitions in the Relation Explorer</SPAN></LI></UL><H4 id="toc-hId-1406433835" id="toc-hId-1654868400">ABAP RESTful Application Programming Model (RAP)</H4><UL><LI><SPAN><STRONG>Collaborative Draft</STRONG>,&nbsp;&nbsp;now also works in cross-business object scenarios if both business objects are collaborative draft-enabled, and if the cross-business object scenario is fully draft scope-enabled (<A href="https://help.sap.com/docs/abap-cloud/abap-rap/collaborative-draft" target="_blank" rel="noopener noreferrer">details</A>)</SPAN></LI><LI><SPAN><SPAN><STRONG>Recommendations</STRONG>, p</SPAN></SPAN>reviously, business users had to fill out input fields manually and choose the right values. The new RAP recommendations standardize and ease this process: In RAP applications on an SAP Fiori user interface, RAP recommendations provide input assistance by proposing field values for input fields based on the user input and interaction history. RAP recommendations can be implemented using deterministic rules or using generative AI, which predicts the most likely values for each input field based on the context of the data. By integrating the ABAP AI SDK powered by Intelligent Scenario Lifecycle Management, you can embed AI capabilities into the application, enriching traditional value help with context-aware suggestions (<A href="https://help.sap.com/docs/abap-cloud/abap-rap/recommendations" target="_blank" rel="noopener noreferrer">details</A>)</LI><LI><SPAN><SPAN><STRONG>Embedded Analytics Star Schema Generator</STRONG>, the&nbsp;<SPAN class="">Star Schema Generator Wizard</SPAN>&nbsp;streamlines the creation of star schema models using ABAP Core Data Services. It empowers you to build comprehensive analytical models with ease. This tool guides you through the entire generation process, ensuring a consistent and efficient workflow. The wizard supports the following key components:&nbsp;</SPAN></SPAN>Transactional Scenario, Analytical Cube and Dimension Views (<A href="https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/star-schema-generator" target="_blank" rel="noopener noreferrer">details</A>)</LI></UL><H4 id="toc-hId-1458354895"><SPAN>Identity and Access Management</SPAN></H4><UL><LI><SPAN><STRONG>IAM App Assignment:</STRONG>&nbsp;So far, it was only possible to assign access to Fiori apps to business users indirectly via business catalogs. Now, it's also possible to directly create business roles based on IAM apps for SAP-delivered business catalogs</SPAN></LI><LI><SPAN><STRONG>Maintain Business Roles</STRONG>, you can now directly assign IAM apps in the&nbsp;<SPAN class="">Maintain Business Roles</SPAN>&nbsp;app. This supports you in handling authorizations more flexibly. You can also use the&nbsp;<SPAN class="">Mass Change Wizard</SPAN>&nbsp;if you need to add or remove multiple IAM apps at once (<A href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/maintain-business-roles?version=Cloud" target="_blank" rel="noopener noreferrer">details</A>)</SPAN></LI><LI><SPAN>App References, the <STRONG>following apps now contain references to IAM apps</STRONG>:&nbsp;</SPAN>Maintain Business Roles, Manage Business Role, Changes After Upgrade, Display Restriction Types, Business Catalogs, Business Role Templates, IAM Information System (<A href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/apps-identity-and-access-management?version=Cloud" target="_blank" rel="noopener noreferrer">details</A>)</LI><LI><SPAN><STRONG>Information System, the main entity&nbsp;<SPAN class="">Application</SPAN>&nbsp;is now deprecated</STRONG>. The successor will be the IAM app, which is now contained in the&nbsp;<SPAN class="">Main Entity</SPAN>&nbsp;dropdown list (<A href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/iam-information-system?version=Cloud" target="_blank" rel="noopener noreferrer">details</A>)</SPAN></LI><LI><SPAN><STRONG>App Authorization Variant,</STRONG> you can now use the IAM app of the<SPAN class="">&nbsp;App Authorization Variant</SPAN>&nbsp;type. This gives you more flexibility in managing restrictions because it allows you to activate or deactivate app authorization variants to define different access rights per business role (<A href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/work-with-iam-apps-app-authorization-variants?version=Cloud#loioe2b39fb01689420393931a9eb3f627ec" target="_blank" rel="noopener noreferrer">details</A>)</SPAN></LI></UL><H4 id="toc-hId-1261841390"><SPAN>Manage API Snapshots</SPAN></H4><UL><LI><SPAN>As a <STRONG>provider for released APIs</STRONG>, you can now <STRONG>download and upload API snapshots using the&nbsp;<SPAN class="">Manage API Snapshots</SPAN>&nbsp;app</STRONG>. This way, you can download API snapshots from the test system and upload them in the development system, thus preventing incompatible changes to your released objects early in the development process (<A href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/manage-api-snapshots?version=Cloud" target="_blank" rel="noopener noreferrer">details</A>)</SPAN></LI></UL><H4 id="toc-hId-1065327885"><SPAN>SAP Fiori Launchpad</SPAN></H4><UL><LI><SPAN><STRONG><SPAN class="">My Home</SPAN></STRONG>&nbsp;in SAP BTP ABAP environment&nbsp;</SPAN></LI><LI><SPAN><STRONG>Launching an App with a Transaction Code</STRONG> (<A href="https://help.sap.com/docs/btp/sap-fiori-launchpad-for-sap-btp-abap-environment/searching-for-business-objects-and-apps?version=Cloud" target="_blank" rel="noopener noreferrer">details</A>)</SPAN></LI><LI><SPAN><STRONG>Download and Upload of Spaces</STRONG>&nbsp;</SPAN></LI><LI><SPAN><STRONG>Removal of Business Groups</STRONG>&nbsp;</SPAN></LI></UL><H4 id="toc-hId-868814380"><SPAN>Landscape Portal</SPAN></H4><UL><LI><SPAN><STRONG>Publish Product</STRONG>: Publish up to Two Product Versions (<A href="https://help.sap.com/docs/sap-btp-abap-environment/landscape-portal/publish-product" target="_blank" rel="noopener noreferrer">details</A>)</SPAN></LI><LI><SPAN><STRONG>Deploy Product</STRONG>: System multi-select supported and performance improved (<A href="https://help.sap.com/docs/sap-btp-abap-environment/landscape-portal/deploy-product" target="_blank" rel="noopener noreferrer">details</A>)</SPAN></LI></UL><H4 id="toc-hId-672300875"><SPAN>Infrastructure</SPAN></H4><UL><LI><SPAN><STRONG>Optional Integration with SAP Key Management Service</STRONG>,&nbsp;SAP BTP ABAP environment provides an optional integration with the SAP Key Management Service (KMS). With this integration, it's possible to manage the SAP HANA Cloud database of an ABAP environment instance via SAP KMS (<A href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/integration-with-sap-key-management-service?version=Cloud" target="_blank" rel="noopener noreferrer">details</A>)</SPAN></LI></UL> 2026-02-19T10:47:10.350000+01:00