https://raw.githubusercontent.com/ajmaradiaga/feeds/main/scmt/topics/SAP-BTP-ABAP-environment-blog-posts.xml SAP Community - SAP BTP, ABAP environment 2026-04-16T08:00:23.278988+00:00 python-feedgen SAP BTP, ABAP environment blog posts in SAP Community https://community.sap.com/t5/technology-blog-posts-by-members/old-tile-still-appearing-in-sap-build-work-zone-after-complete-re-exposure/ba-p/14345826 Old Tile Still Appearing in SAP Build Work Zone After Complete Re‑Exposure from S/4HANA 2026-03-10T18:21:19.051000+01:00 OmPrakashJha https://community.sap.com/t5/user/viewprofilepage/user-id/5102 <DIV><P>Hello Experts,</P><P>I am facing an issue with federated content from an on‑premise S/4HANA system to <STRONG>SAP Build Work Zone (Standard Edition)</STRONG>.<BR />Our authorization team has <STRONG>removed the old tile</STRONG> and assigned a <STRONG>new tile</STRONG> to the correct <STRONG>custom role, custom catalog, and custom group</STRONG> in S/4HANA.</P><P>To ensure a clean setup, I deleted the previous exposure configuration and re‑created the full setup from scratch in:</P><UL><LI><CODE>/UI2/CDM3_EXP_SCOPE</CODE> (content exposure)</LI><LI>SAP BTP → Build Work Zone → Content Provider → Synchronize Content</LI></UL><P>Despite repeating the full process multiple times, <STRONG>the old tile continues to appear in Build Work Zone</STRONG> instead of the new one.<BR />The authorization consultant has verified both the new role and the tile assignments several times on the S/4HANA side, and everything looks correct there — but <STRONG>Build Work Zone keeps federating only the old tile</STRONG>.</P><H3 id="toc-hId-1920547114">Has anyone experienced something similar?</H3><P>I am trying to understand:</P><UL><LI>Why outdated tile information is still being federated</LI><LI>Whether additional cleanup is required on the CDM or content provider side</LI><LI>If there are any cache layers (S/4HANA, BTP, or Build Work Zone) that must be explicitly cleared</LI><LI>Whether Exposure Version 2 requires specific steps to refresh or replace previously published app IDs</LI></UL><P>Any advice, known issues, or guidance on how to force Build Work Zone to pick up the updated tile would be greatly appreciated.</P><P>Thank you!</P></DIV> 2026-03-10T18:21:19.051000+01:00 https://community.sap.com/t5/technology-blog-posts-by-members/custom-adobe-forms-in-sap-s-4-hana-public-cloud-using-developer/ba-p/14344179 Custom Adobe Forms in SAP S/4 HANA Public Cloud using Developer Extensibility 2026-03-12T06:27:10.315000+01:00 YogiPavan https://community.sap.com/t5/user/viewprofilepage/user-id/1402526 <H1 id="toc-hId-1662345316">Introduction</H1><UL><LI>Custom Adobe forms can be created in SAP S/4 HANA Public Cloud using Developer Extensibility using Form Objects.</LI><LI>OData Service can be created to get Form details.</LI></UL><H2 id="toc-hId-1594914530">Process to Develop Custom Adobe Forms in&nbsp;SAP S4HANA Public Cloud&nbsp;using Developer Extensibility</H2><H1 id="toc-hId-1269318306">Forms Objects</H1><UL><LI>Creating Forms Objects in the Form editor allows for the generation of print and interactive forms using Adobe Document Services.</LI><LI>Forms Objects can be created in the Form editor.</LI><LI>Print and interactive forms can be generated using Adobe Document Services (ADS) by the Forms Object.</LI><LI>The main part of Forms Object is layout form design file (XDP format by Adobe).</LI><LI>Adobe LiveCycle Designer is required for the development of XDP layout file.</LI></UL><H2 id="toc-hId-1201887520">Creating Form Objects</H2><UL><LI>A Form Object can be created in ABAP development tools for Eclipse (ADT) using the creation wizard</LI></UL><H1 id="toc-hId-876291296">Print Forms</H1><H2 id="toc-hId-808860510">ADS Rendering in&nbsp;ABAP environment</H2><UL><LI>In the ABAP environment with Adobe Document Services (ADS), rendering refers to the process of taking an Adobe XML Form (XFA) which is essentially a structured template containing layout, design, and data placeholders and producing a final output document.</LI><LI>The&nbsp;Adobe Document Services&nbsp;(ADS) can render Adobe XML Forms (XFA) to PDF documents and other print formats.</LI><LI>The application sends the data and the form template using a secure connection and the service returns the rendered document.</LI><LI>The rendered documents can be used by the applications for the screen output or for the output into the print queue.</LI></UL><H2 id="toc-hId-612347005">Retrieve Stored Form Templates</H2><P>Form templates designed with the Adobe LiveCycle Designer can be uploaded directly to the system using ABAP development tools for Eclipse.</P><P>The class&nbsp;CL_FP_FORM_READER&nbsp;enables the usage of uploaded form templates during runtime.</P><H3 id="toc-hId-544916219">Initiate the Form Template Reader</H3><P>Initiate the class by providing the name of the uploaded form template.</P><pre class="lia-code-sample language-abap"><code>data(lo_reader) = cl_fp_form_reader=&gt;create_form_reader( 'MY_FORM_NAME' ).</code></pre><H3 id="toc-hId-348402714">Read Layout Content to be Used by ADS Rendering Call</H3><P>The layout can also be retrieved by the reader class.</P><P>The&nbsp;GET_LAYOUT&nbsp;method has the returning parameter RV_LAYOUT, it returns XML as XSTRING</P><H2 id="toc-hId-22806490">RAP Data Services for Print Forms</H2><UL><LI>The XML data for print form rendering can be obtained from the RAP Business Services.</LI><LI>The data model can be defined just as well as the&nbsp;RAP Service Definition.</LI><LI>The&nbsp;CL_FP_FDP_SERVICES&nbsp;class provides the ABAP API to receive the data in xml format for the use in print forms.</LI><LI>XML Schema Definition (XSD) used for the design of print forms in the&nbsp;Adobe LiveCycle Designer.</LI></UL><H3 id="toc-hId--119855665">Initiate Business Data Reader</H3><P>To supply the rendering operation with business data, a reuse service can be applied.</P><P>Service definition needs to be created previously.</P><P>The service definition doesn't need a binding for RAP Data Services for print forms.</P><P>Initiate the reuse utility by specifying the service definition.</P><pre class="lia-code-sample language-abap"><code>DATA(lo_fdp_api) = cl_fp_fdp_services=&gt;get_instance( ‘FP_FDP_SERVICE_EX1’ ).</code></pre><P>Specify the key parameters.</P><P>This is required to read the data for a specific item.</P><P>The reuse utility offers the functionality to retrieve all key fields for the service definition.</P><pre class="lia-code-sample language-abap"><code>DATA(lt_keys) = lo_fdp_api-&gt;get_keys( ).</code></pre><P>Once the array with key values has been retrieved, the keys that fit are assigned to the document to be output.</P><pre class="lia-code-sample language-abap"><code>lt_keys[ name = 'UUID' ]-value = '4500000001'.</code></pre><H3 id="toc-hId--316369170">Retrieve XML Data from Service Definition</H3><P>The&nbsp;READ_TO_XML_V2&nbsp;method retrieves the data structure of the service definition for a specific item.</P><P>It has the Importing parameters IT_SELECT - Key parameters, IV_LANGUAGE&nbsp;(Optional).</P><P>It has the returning parameter RV_XML - Resulting XML as XSTRING.</P><pre class="lia-code-sample language-abap"><code>TRY. DATA(lv_data) = lo_fdp_api-&gt;read_to_xml_v2( lt_keys ). CATCH cx_fp_fdp_error INTO DATA(lo_exception). ENDTRY. </code></pre><H3 id="toc-hId--512882675">Retrieve XML Schema Definition from Service Definition</H3><P>The&nbsp;GET_XSD_V2&nbsp;method retrieves the XML Schema Definition (XSD) for the service definition.</P><P>It has the returning parameter RV_XML, it returns XSD as XSTRING.</P><pre class="lia-code-sample language-abap"><code>TRY. DATA(lv_xml) = lo_fdp_api-&gt;get_xsd_v2( ). CATCH cx_fp_fdp_error INTO DATA(lo_exception). ENDTRY</code></pre><H2 id="toc-hId--415993173">Runtime API for ADS Rendering Calls</H2><P>The&nbsp;CL_FP_ADS_UTIL&nbsp;class provides the ABAP Runtime API for&nbsp;Adobe Document Services&nbsp;(ADS) rendering calls.</P><P>It contains the public&nbsp;method RENDER_PDF to be used for the Rendering PDF.</P><P>The PDF rendering process on ADS creates the PDF file to be printed (or print output format) using both formats</P><UL><LI>XDP form template file</LI><LI>Data for the form filling in XML format, for example, data from the&nbsp;<A href="https://help.sap.com/docs/btp/sap-business-technology-platform/rap-data-services-for-print-forms?locale=en-US&amp;state=PRODUCTION&amp;version=Cloud" target="_blank" rel="noopener noreferrer">RAP Data Services for Print Forms</A>.</LI></UL><P>The XDP form template file is a description of the form layout design in Adobe XFA format.</P><P>The supported data binding type is an XML data schema.</P><P>The data XML file contains the data that corresponds to the used data schema in the XDP form template.</P><H3 id="toc-hId--905909685">Rendering PDF</H3><P>The&nbsp;RENDER_PDF&nbsp;method calls the ADS to render print PDF using the XDP form file and the XML data file.&nbsp;</P><pre class="lia-code-sample language-abap"><code>TRY. *Render PDF cl_fp_ads_util=&gt;render_pdf( EXPORTING iv_xml_data = lv_xml_data iv_xdp_layout = lv_xdp iv_locale = 'de_DE' is_options = ls_options IMPORTING ev_pdf = ev_pdf ev_pages = ev_pages ev_trace_string = ev_trace_string ). CATCH cx_fp_ads_util INTO lx_fp_ads_util. ENDTRY. </code></pre><P>Importing Parameters</P><P>IV_XML_DATA - XML data</P><P>IV_XDP_LAYOUT - Adobe XDP form template</P><P>IV_LOCALE - Locale for rendering the language language_COUNTRY, (en_US)</P><P>IS_OPTIONS - PDF rendering parameters (optional)</P><P>Exporting Parameters</P><P>EV_PDF - PDF rendering result</P><P>EV_PAGES - Pages</P><P>EV_TRACE_STRING - Trace string</P><H1 id="toc-hId--515617176">Creating Data Provider</H1><H2 id="toc-hId--1005533688">Create Data Model</H2><P>Create a data model, add the annotation to the CDS View to act a data provider for FORM Object.</P><P>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;@ObjectModel.supportedCapabilities: [ #OUTPUT_FORM_DATA_PROVIDER ]</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; supportedCapabilities defines which features or capabilities are supported by the CDS view or entity.</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #OUTPUT_FORM_DATA_PROVIDER is a specific capability flag that indicates the CDS entity can act as a data provider for output forms.</P><P>CDS View – ZI_FORM_PO_HD</P><pre class="lia-code-sample language-abap"><code>@AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'Form PO' @Metadata.ignorePropagatedAnnotations: true @ObjectModel.supportedCapabilities: [ #OUTPUT_FORM_DATA_PROVIDER ] define root view entity ZI_FORM_PO_HD as select from ZI_PO_HD_DT { key PoNum, Supplier, PurOrg, CompCod, PurGrp, CrDt, _its }</code></pre><P>Data Source CDS View – ZI_PO_HD_DT</P><pre class="lia-code-sample language-abap"><code>@AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'PO Header' @Metadata.ignorePropagatedAnnotations: true define root view entity ZI_PO_HD_DT as select from ztb_po_hdr association [0..*] to ZI_PO_ITS as _its on $projection.PoNum = _its.PoNum { key po_num as PoNum, supplier as Supplier, pur_org as PurOrg, comp_cod as CompCod, pur_grp as PurGrp, cr_dt as CrDt, _its }</code></pre><P>Custom Table</P><pre class="lia-code-sample language-abap"><code>@EndUserText.label : 'PO Header' @AbapCatalog.enhancement.category : #NOT_EXTENSIBLE @AbapCatalog.tableCategory : #TRANSPARENT @AbapCatalog.deliveryClass : #A @AbapCatalog.dataMaintenance : #ALLOWED define table ztb_po_hdr { key client : abap.clnt not null; key po_num : abap.char(10) not null; supplier : abap.char(10); pur_org : abap.char(5); comp_cod : abap.char(5); pur_grp : abap.char(5); cr_dt : abap.dats; }</code></pre><H2 id="toc-hId--1202047193">Create Service Definition</H2><P>For a service definition, a leading entity can be defined using annotation</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @ObjectModel.leadingEntity.name: ''</P><P>&nbsp; Add the CDS View as a leading entity.</P><pre class="lia-code-sample language-abap"><code>@EndUserText.label: 'Service Definition of PO Form' @ObjectModel.leadingEntity.name: 'ZI_FORM_PO_HD' define service ZSR_FORM_PO_HD { expose ZI_FORM_PO_HD; }</code></pre><P>Service Definition ZSR_FORM_PO_HD is a Data provider for Form Object.</P><H2 id="toc-hId--1398560698">Service Binding</H2><P>The service definition doesn't need a binding for RAP Data Services for print forms.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_4-1772951096266.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381088i7E63209267E44285/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_4-1772951096266.png" alt="YogiPavan_4-1772951096266.png" /></span></P><H1 id="toc-hId--1301671196">Creating Form Object</H1><P>Create a Form Object with creation wizard from the main menu, toolbar, Project Explorer, or using a shortcut.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_5-1772951096268.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381087iBCD039FE9ADDC637/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_5-1772951096268.png" alt="YogiPavan_5-1772951096268.png" /></span></P><P>Enter the name and description of a form.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_6-1772951096269.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381090i34672AE5430932F7/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_6-1772951096269.png" alt="YogiPavan_6-1772951096269.png" /></span></P><P>Select&nbsp;Next, assign a transport request, and select&nbsp;finish.</P><P>A new form is created and opened in the&nbsp;Form Editor.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_7-1772951096273.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381089i716798A3FD9D76FA/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_7-1772951096273.png" alt="YogiPavan_7-1772951096273.png" /></span></P><P>A Data Provider now needs to be specified, which is defined in the system as a service containing the business data for this form.</P><P>In the&nbsp;General Information&nbsp;section, define the properties of the form</P><UL><LI>In the&nbsp;Data provider&nbsp;field, specify the service definition that should be used for fetching the business data for a form.</LI><LI>The Embed Font field should be enabled if the fonts are to be embedded into the generated PDF.</LI><LI>The Reduce Data Volume field should be enabled if the generated business data is to be filtered to only contain fields bound by fields in the form layout.</LI></UL><P>Choose Browse option to view the list of Data Providers.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_8-1772951096276.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381091i1711E91F68E82556/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_8-1772951096276.png" alt="YogiPavan_8-1772951096276.png" /></span></P><P>Added the Data Provider ZSR_FORM_PO_HD to the Form</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_9-1772951096280.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381092i915D034F3DF6BE9A/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_9-1772951096280.png" alt="YogiPavan_9-1772951096280.png" /></span></P><P>In the action menu, three options</P><UL><LI>Download Schema: Download the schema of the linked Data provider as an xsd file which can be imported into Adobe LiveCycle Designer for SAP solutions.</LI><LI>Upload Layout: Upload a layout file (*.xdp) created by Adobe LiveCycle Designer for SAP solutions (make sure the form should save before uploading a layout file).</LI><LI>Download Layout: Download the current layout uploaded to the form.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_10-1772951096287.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381094i86C0CD6CE5CD67CE/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_10-1772951096287.png" alt="YogiPavan_10-1772951096287.png" /></span></P><P>Choose Download Schema to create a new layout for the form.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_11-1772951096291.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381093i6A84EF4CD4C9C79E/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_11-1772951096291.png" alt="YogiPavan_11-1772951096291.png" /></span></P><P>Export and save schema to local files.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_12-1772951096312.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381096iD9D976504BDB0F28/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_12-1772951096312.png" alt="YogiPavan_12-1772951096312.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_13-1772951096315.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381097i84AA6A03E1CC6B69/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_13-1772951096315.png" alt="YogiPavan_13-1772951096315.png" /></span></P><P>Open the Adobe Life Cycle Designer</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_14-1772951096319.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381095iDB056078D8E10D78/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_14-1772951096319.png" alt="YogiPavan_14-1772951096319.png" /></span></P><P>Create a new blank form</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_15-1772951096321.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381098i1C2363DB71E6EC5F/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_15-1772951096321.png" alt="YogiPavan_15-1772951096321.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_16-1772951096329.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381100i80C406AF4BD77D2C/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_16-1772951096329.png" alt="YogiPavan_16-1772951096329.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_17-1772951096335.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381099i2C1BB360EE8954A7/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_17-1772951096335.png" alt="YogiPavan_17-1772951096335.png" /></span></P><P>Blank Form is created</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_18-1772951096343.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381103i3646046EECB0549F/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_18-1772951096343.png" alt="YogiPavan_18-1772951096343.png" /></span></P><P>Choose File -&gt; New Data Connection</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_19-1772951096346.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381101i9A0D8AF7E02BE921/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_19-1772951096346.png" alt="YogiPavan_19-1772951096346.png" /></span></P><P>Choose XML Schema</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_20-1772951096354.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381102i84667DDC70C48CAD/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_20-1772951096354.png" alt="YogiPavan_20-1772951096354.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_21-1772951096362.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381106iFCDFD516214917BA/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_21-1772951096362.png" alt="YogiPavan_21-1772951096362.png" /></span></P><P>Import the XML Schema File</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_22-1772951096369.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381104iD1C20D2E3D7E8E3B/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_22-1772951096369.png" alt="YogiPavan_22-1772951096369.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_23-1772951096376.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381105i9311DDDC10EBAA95/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_23-1772951096376.png" alt="YogiPavan_23-1772951096376.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_24-1772951096383.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381109i86330689386BA0C2/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_24-1772951096383.png" alt="YogiPavan_24-1772951096383.png" /></span></P><P>Data Connection is added.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_25-1772951096389.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381108iD92B2003E85CE94D/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_25-1772951096389.png" alt="YogiPavan_25-1772951096389.png" /></span></P><P>Design the layout</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_26-1772951096394.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381107i14B3066828BF8666/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_26-1772951096394.png" alt="YogiPavan_26-1772951096394.png" /></span></P><P>Save the layout file (XDP file) to local files.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_27-1772951096404.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381112i3AF3581E49F7989A/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_27-1772951096404.png" alt="YogiPavan_27-1772951096404.png" /></span></P><P>Upload the Layout to the Form Object</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_28-1772951096405.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381110i999C512B0EAABE3C/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_28-1772951096405.png" alt="YogiPavan_28-1772951096405.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_29-1772951096409.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381111iB77D1BA907D567EB/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_29-1772951096409.png" alt="YogiPavan_29-1772951096409.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_30-1772951096415.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381115i2AACFF431B8CD898/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_30-1772951096415.png" alt="YogiPavan_30-1772951096415.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_31-1772951096418.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381114iBC63B4DFF856647E/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_31-1772951096418.png" alt="YogiPavan_31-1772951096418.png" /></span></P><P>Layout is uploaded, save the form object</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_32-1772951096420.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381113i32DF5C6FFAD5208E/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_32-1772951096420.png" alt="YogiPavan_32-1772951096420.png" /></span></P><P>Activate the Form Object</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_33-1772951096422.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381116i3B5242AB01BD36B4/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_33-1772951096422.png" alt="YogiPavan_33-1772951096422.png" /></span></P><P>Layout can be downloaded with Download Layout option</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_34-1772951096423.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381118iF42B2629EF9A63E5/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_34-1772951096423.png" alt="YogiPavan_34-1772951096423.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_35-1772951096428.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381117i07FFF18393EC6051/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_35-1772951096428.png" alt="YogiPavan_35-1772951096428.png" /></span></P><H1 id="toc-hId--1330001010">Consuming the Form using Custom Entity</H1><H3 id="toc-hId--2113320529">Custom Entity</H3><P>Create a custom entity, add the form related fields and add the annotation to make its content as attachment.</P><pre class="lia-code-sample language-abap"><code>@Semantics.largeObject:{ mimeType: 'MimyType', fileName: 'FileName', contentDispositionPreference: #ATTACHMENT }</code></pre><P>Add the ABAP Class to implement the form access.</P><pre class="lia-code-sample language-abap"><code>@EndUserText.label: 'PO Form' @Metadata.allowExtensions: true @ObjectModel.query.implementedBy: 'ABAP:ZCL_FORM_PO' define custom entity ZI_FORM_PO { key PO : ebeln; @Semantics.largeObject:{ mimeType: 'MimyType', fileName: 'FileName', contentDispositionPreference: #ATTACHMENT } Form : abap.rawstring( 0 ); FileName : abap.char( 30 ); MimyType : abap.char( 50 ); }</code></pre><P>Class- ZCL_FORM_PO</P><pre class="lia-code-sample language-abap"><code>CLASS zcl_form_po DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES if_rap_query_provider. PROTECTED SECTION. PRIVATE SECTION. ENDCLASS CLASS zcl_form_po IMPLEMENTATION. METHOD if_rep_query_provider~select DATA: 1s_form TYPE zi_form_po, it_form TYPE TABLE OF zi_form_po. TRY. DATA(it_filter_conds) = io_request-&gt;get_filter()-&gt;get_as_ranges(). LOOP AT it_filter_conds INTO DATA(1s_filter_conds). IF ls_filter_conds-name EQ 'PO'. READ TABLE ls_filter_conds-range INTO DATA(ls_rng) INDEX 1. IF sy-subrc EQ 0. DATA(lv_po) = ls_rng-low. ENDIF. ENDIF CLEAR: ls_rng. ENDLOOP. DATA(lv_paging) = io_request-&gt;get_paging( )-&gt;get_offset( ). DATA(lv_filters) = io_request-&gt;get_filter( )-&gt;get_as_sql_string( ). CATCH cx_rap_query_filter_no_range INTO DATA(cx_mg). IF 1v_po 15 INITIAL. lv_po = '4500000001'. ENDIF. TRY. "Initiate the Fore Template Reader DATA(lo_reader) = cl_fp_form_reader-&gt;create_form_reader( iv_formname = 'ZFORM_PO' ). "Read Layout Content to be Used by ADS Rendering Call DATA(lv_layout) = lo_reader-get_layout(). CATCH cx_fp_form_reader INTO DATA(ls_cx_fp_form_reader). ENDTRY. TRY. "Get instance of Form DATA(lo_fdp_api) = cl_fdp_services-&gt;get instance( iv service definition = 'ZSR_FORM_PO_HD' " iv root node = iv_max_depth = 1 ). "Retrieve x Data from Service Definition DATA(ls_keys) = lo_fdp_api-&gt;get_keys( ). it_keys[ name = 'PONUM' ]-&gt;value = lv_po. DATA(lv_data) = lo_fdp_api-&gt;read_to_xml_v2( it select = it_keys "it_select_add = "iv_language = SY-LANGU ). "Retrive XML Schema Definition from Definition DATA(lv_xml) = lo_fdp_api-&gt;get_xsd_v2( ). CATCH cx_fp_fdp_error INTO DATA(lo_exception). ENDTRY. TRY. "Rendering PDF cl_fp_ads_util=&gt;render_pdf( EXPORTING iv_xml_data = lv_data iv_xdp_layout = lv_layout iv_locale = 'en_US' " i_options = IMPORTING ev_pdf = DATA(ev_pdf) ev_pages = ev_trace_string = ). CATCH cx_fp_ads_util INTO DATA(lo_fp_ads_util). ENDTRY. ls_form-po = lv_po. ls_form-filename = 'Form_PO.pdf'. ls_form-mimytype = 'application/pdf'. ls_form-form = ev_pdf. APPEND ls_form TO it_form. io_response-&gt;set_data( it_form ). io_response-&gt;set_total_number_of_records( lines( it_form ) ). ENDMETHOD. ENDCLASS.</code></pre><H3 id="toc-hId-1985133262">Service Definition</H3><P>Create a Service Definition, expose the entity.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_40-1772951133796.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381122iBAA78EF0393BB445/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_40-1772951133796.png" alt="YogiPavan_40-1772951133796.png" /></span></P><pre class="lia-code-sample language-abap"><code>@EndUserText.label: 'FORM_PO' define service ZSD_FORM_PO { expose ZI_FORM_PO; }</code></pre><H3 id="toc-hId-1788619757">Service Binding – Web API</H3><P>Create a Service Binding with type OData V4 – Web API</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_41-1772951133801.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381123iF2BA910F9866F8EB/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_41-1772951133801.png" alt="YogiPavan_41-1772951133801.png" /></span></P><P>Click on Service URL to access it.</P><P>Service URL</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_42-1772951133803.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381126i89462A88A9D6912E/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_42-1772951133803.png" alt="YogiPavan_42-1772951133803.png" /></span></P><P>Access form details</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_43-1772951133807.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381125i1A63979963E941B1/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_43-1772951133807.png" alt="YogiPavan_43-1772951133807.png" /></span></P><H3 id="toc-hId-1592106252">Download Form with URL</H3><P>Download the Form with accessing the service URL by passing document number.</P><P>/sap/opu/odata4/sap/zsrb_form_po/srvd_a2x/sap/zsd_form_po/0001/ZI_FORM_PO('4500000001')/Form</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_44-1772951133808.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381127iF24D9163CFB7B0FC/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_44-1772951133808.png" alt="YogiPavan_44-1772951133808.png" /></span></P><P>Form is downloaded</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_45-1772951133811.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381129i6857C5087AFF3A25/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_45-1772951133811.png" alt="YogiPavan_45-1772951133811.png" /></span></P><H3 id="toc-hId-1395592747">Service Binding – UI</H3><P>Create a Service Binding with type OData V4 – UI</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_46-1772951133816.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381128i59ED8FEF7D3B0752/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_46-1772951133816.png" alt="YogiPavan_46-1772951133816.png" /></span></P><H3 id="toc-hId-1199079242">Download Form with UI</H3><P>Choose Preview in service binding to view UI</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_47-1772951133819.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381130i39B4CB0FAE333BD5/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_47-1772951133819.png" alt="YogiPavan_47-1772951133819.png" /></span></P><P>Click on Form to download the Form</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_48-1772951133821.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381131iD4C5B1206237CBC5/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_48-1772951133821.png" alt="YogiPavan_48-1772951133821.png" /></span></P><P>Form is downloaded</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_49-1772951133824.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381132i5CC082EC5C82A6D0/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_49-1772951133824.png" alt="YogiPavan_49-1772951133824.png" /></span></P><H3 id="toc-hId-1002565737">Debugging the Form Logic</H3><P>Toggle Breakpoint is set</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_50-1772951133828.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381133i4A6C8D570DAD1C05/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_50-1772951133828.png" alt="YogiPavan_50-1772951133828.png" /></span></P><P>Click on Form to trigger the breakpoint.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_51-1772951133830.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381134i7891840E0640C801/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_51-1772951133830.png" alt="YogiPavan_51-1772951133830.png" /></span></P><P>Debugger got triggered.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_52-1772951133840.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381136i82ABE90927AD8B14/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_52-1772951133840.png" alt="YogiPavan_52-1772951133840.png" /></span></P><P>Variables with values</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_53-1772951133845.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381135i7A3A8529270634A9/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_53-1772951133845.png" alt="YogiPavan_53-1772951133845.png" /></span></P><H2 id="toc-hId-1099455239">Using CDS Views</H2><H3 id="toc-hId-609538727">CDS View</H3><P>Create a CDS View with field having URL of Form</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_54-1772951133858.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381138i72E00963A23D4B4F/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_54-1772951133858.png" alt="YogiPavan_54-1772951133858.png" /></span></P><pre class="lia-code-sample language-abap"><code>@AbapCatalog.viewEnhancementCategory: [#NONE] @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'PO Header' @Metadata.ignorePropagatedAnnotations: true @Metadata.allowExtensions: true define root view entity ZI_PO_HD as select from ztb_po_hdr association [0..*] to ZI_PO_ITS as _its on $projection.PoNum = _its.PoNum { key po_num as PoNum, supplier as Supplier, pur_org as PurOrg, comp_cod as CompCod, pur_grp as PurGrp, cr_dt as CrDt, // cast( 'PO Form.pdf' as abap.char( 20 )) as FileName, // // cast( 'application/pdf' as abap.char( 30 )) as MimeType, concat( '/sap/opu/odata4/sap/zsb_form_po/srvd_a2x/sap/zsd_form_po/0001/ZI_FORM_PO(''', concat( po_num, ''')/Form' )) as FormURL, 'Print PDF' as Form, _its }</code></pre><H3 id="toc-hId-581208913">Metadata Extension</H3><P>Create metadata extension, add the fields with annotations and add the parameter type with #WITH_URL value, also url with value contains url field name</P><pre class="lia-code-sample language-abap"><code>@Metadata.layer: #CORE annotate entity ZI_PO_HD with { @UI.lineItem: [{ position: 10, label: 'PO' )] @UI.identification: [{ position: 10, label: 'PO' }] PoNum; @UI.lineItem: [{ position: 40, label: 'Form URL', type: WITH URL, url:'FormURL' }} @UI.identification: [{ position: 40, label: 'Form URL', type: WITH URL, url: 'FormURL' }] FormURL; @UI.lineItem: [{position: 30,type: WITH URL, url: 'FormURL' }] @UI.identification: [{ position: 30, type: #WITH URL, url: 'FormURL' }] Form; }</code></pre><H3 id="toc-hId-384695408">Service Definition</H3><P>Create a Service Definition, expose the entity.</P><pre class="lia-code-sample language-abap"><code>@EndUserText.label: 'PO Hdr' define service ZSR_POHDR_PR { expose ZI_PO_HD; }</code></pre><H3 id="toc-hId-188181903">Service Binding – UI</H3><P>Create a Service Binding with type OData V4 – UI</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_57-1772951133868.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381140iA52B341BE8833C71/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_57-1772951133868.png" alt="YogiPavan_57-1772951133868.png" /></span></P><H3 id="toc-hId--8331602">Download Form with UI</H3><P>Choose Preview in service binding to view UI</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_58-1772951133871.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381141iD2C39E48F8CFB279/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_58-1772951133871.png" alt="YogiPavan_58-1772951133871.png" /></span></P><P>Click on Print PDF to download the Form</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_59-1772951133874.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381142iEE5E216FA7707059/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_59-1772951133874.png" alt="YogiPavan_59-1772951133874.png" /></span></P><P>Form is downloaded</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_60-1772951133876.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381143i08A1571F7483F72C/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_60-1772951133876.png" alt="YogiPavan_60-1772951133876.png" /></span></P><P>Click on Form URL to download the Form</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_61-1772951133878.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381145iAFD38B0F3E3CE740/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_61-1772951133878.png" alt="YogiPavan_61-1772951133878.png" /></span></P><P>Form is downloaded</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_62-1772951133880.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381144iED36D470E81BDE4A/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_62-1772951133880.png" alt="YogiPavan_62-1772951133880.png" /></span></P><H1 id="toc-hId-381960907">References</H1><UL><LI><A href="https://help.sap.com/docs/btp/sap-business-technology-platform/print-forms" target="_blank" rel="noopener noreferrer">https://help.sap.com/docs/btp/sap-business-technology-platform/print-forms</A></LI><LI><A href="https://help.sap.com/docs/btp/sap-business-technology-platform/retrieve-stored-form-templates" target="_blank" rel="noopener noreferrer">https://help.sap.com/docs/btp/sap-business-technology-platform/retrieve-stored-form-templates</A></LI><LI><A href="https://help.sap.com/docs/btp/sap-business-technology-platform/runtime-api-for-ads-rendering-calls" target="_blank" rel="noopener noreferrer">https://help.sap.com/docs/btp/sap-business-technology-platform/runtime-api-for-ads-rendering-calls</A></LI><LI><A href="https://help.sap.com/docs/btp/sap-business-technology-platform/rap-data-services-for-print-forms" target="_blank" rel="noopener noreferrer">https://help.sap.com/docs/btp/sap-business-technology-platform/rap-data-services-for-print-forms</A></LI><LI><A href="https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/working-with-forms" target="_blank" rel="noopener noreferrer">https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/working-with-forms</A></LI><LI><A href="https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/creating-forms" target="_blank" rel="noopener noreferrer">https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/creating-forms</A></LI><LI><A href="https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/editing-forms" target="_blank" rel="noopener noreferrer">https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/editing-forms</A></LI></UL><H1 id="toc-hId-185447402">Conclusion</H1><P>Steps included to develop Custom Adobe Form in SAP S/4 HANA Public Cloud using Developer Extensibility</P><UL><LI>Creating Data Provider</LI><LI>Creating Form Objects</LI><LI>Consume the Form using Custom Entity</LI></UL><P>&nbsp;</P><P>&nbsp;</P> 2026-03-12T06:27:10.315000+01:00 https://community.sap.com/t5/technology-blog-posts-by-sap/build-partner-add-on-with-ide-action/ba-p/14346989 Build Partner Add-on with IDE Action 2026-03-12T09:36:28.552000+01:00 birupakshya_sahu https://community.sap.com/t5/user/viewprofilepage/user-id/347289 <P><SPAN><STRONG>Disclaimer:</STRONG> The namespace&nbsp;</SPAN><SPAN>/ITAPC3/</SPAN><SPAN>&nbsp;is used throughout this document as an example namespace only. Replace it with your own namespace in real implementations.&nbsp;The coding style/naming conventions used in this blog are not recommendations on&nbsp;naming/design</SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>&nbsp;</SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>This blog post covers a step-by-step guide to how partners implement IDE Actions as Partner Add-ons in the&nbsp;SAP BTP ABAP Environment.&nbsp;This&nbsp;enables SAP partners to deliver customized tools in the form of custom action in ABAP Development Tools that increase developer&nbsp;productivity. By combining IDE Actions with the installable add-on&nbsp;option&nbsp;of the BTP ABAP Environment, partners have a potentially monetizable&nbsp;option&nbsp;to extend the ABAP Developer tools. It covers the key concepts and technologies –&nbsp;</SPAN><SPAN>how to extend ABAP Development Tools with IDE Actions and how to&nbsp;leverage&nbsp;the SAP Business Technology Platform ABAP Environment alongside the Landscape Portal to deliver installable add-on products.</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>Here we will look into a partner persona, where they&nbsp;can&nbsp;provide the business solution to their consumer with an&nbsp;installable&nbsp;add-on&nbsp;by providing certain action in the&nbsp;ABAP development tools, and also look into the consumer side of how they can consume the solution which caters to the needs of&nbsp;their&nbsp;developer using ABAP development tools (ADT).</SPAN><SPAN>&nbsp;</SPAN></P><H1 id="toc-hId-1662412617"><STRONG>Why&nbsp;IDE actions and Installable add-ons?&nbsp;</STRONG></H1><P><SPAN>By combining IDE actions and installable add-ons, partners who have been extending software can now also extend the ABAP Development Tools (ADT).</SPAN><SPAN>&nbsp;</SPAN></P><UL><LI><SPAN>The </SPAN><STRONG><SPAN>IDE action</SPAN></STRONG><SPAN> framework&nbsp;allows&nbsp;extending the ABAP development tools (ADT) with custom server-driven context-aware actions.&nbsp;</SPAN><SPAN>IDE Actions allow partners to automate repetitive tasks, such as creating specialized development objects, enhancing code analysis, or&nbsp;automating some code generation&nbsp;within ABAP Development Tools (ADT) for Eclipse.&nbsp;The implementation is&nbsp;completely server-driven using ABAP only.</SPAN><SPAN>&nbsp;</SPAN><SPAN>You can also use these custom functionalities&nbsp;with&nbsp;AI integration&nbsp;and&nbsp;XCO libraries.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><STRONG><SPAN>Installable add-ons&nbsp;</SPAN></STRONG><SPAN>are a set of software components bundled together as an add-on by a partner with the intent&nbsp;of providing&nbsp;a solution&nbsp;to their customers.&nbsp;</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>The </SPAN><STRONG><SPAN>Landscape Portal</SPAN></STRONG><SPAN> acts as a central tool to allow service providers to perform administration tasks such as hibernating systems, creating test tenants and support users, selecting systems for a pre-upgrade, but also lifecycle management operations such as building, deploying and updating product versions, and even guides you through the configuration and deployment of multitenant SaaS solutions.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><H2 id="toc-hId-1594981831"><STRONG>&nbsp;Business scenario:&nbsp;</STRONG></H2><P><SPAN>The developer can document&nbsp;development objects in the Knowledge Transfer Document Editor using Markdown syntax. Here partner is offering a translation&nbsp;</SPAN><SPAN>action with&nbsp;the help of IDE Action as Add-on for the Knowledge Transfer Document and can use the ABAP AI SDK powered by Intelligent Scenario Lifecycle Management (ISLM) to translate the Markdown syntax and display the output of translated Knowledge Transfer Document.&nbsp;Consume</SPAN><SPAN>r&nbsp;(The partner's customer)&nbsp;</SPAN><SPAN>can consume this solution from the partner through&nbsp;landscape portal as&nbsp;</SPAN><SPAN>Installable</SPAN><SPAN>&nbsp;</SPAN><SPAN>add-on and can use customized action in&nbsp;ABAP Development Tools&nbsp;for their&nbsp;development scenario.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="birupakshya_sahu_0-1773301718243.png" style="width: 736px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/382432i22D199275484BF07/image-dimensions/736x351?v=v2" width="736" height="351" role="button" title="birupakshya_sahu_0-1773301718243.png" alt="birupakshya_sahu_0-1773301718243.png" /></span></P><H2 id="toc-hId-1398468326"><STRONG>Prerequisites:&nbsp;(Partner)&nbsp;</STRONG></H2><UL><LI><SPAN>You’ve&nbsp;purchased&nbsp;entitlements that are necessary for the account setup. See </SPAN><A href="https://help.sap.com/docs/BTP/65de2977205c403bbc107264b8eccf4b/3bf575a3dc5043f895f8bd411d2a86a1.html?locale=en-US&amp;version=Cloud#loio4338854e3133407abb47d3a281dbd1e1" target="_blank" rel="noopener noreferrer"><SPAN>Prepare</SPAN></A><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>You’ve&nbsp;registered a namespace at SAP, for example /NAMESPC/. See </SPAN><A href="https://help.sap.com/docs/sap-btp-abap-environment/landscape-portal/maintain-namespaces" target="_blank" rel="noopener noreferrer"><SPAN>Register a Namespace</SPAN></A><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>You’ve&nbsp;registered your add-on at SAP, for example /NAMESPC/PRODUCTX. See </SPAN><SPAN>Register a Product</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>You are subscribed to the Landscape Portal</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>You have a user with the Landscape Portal Admin role collection assigned</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>Install ABAP development tools for Eclipse (ADT) on your computer. If you already have ADT, make sure&nbsp;it's&nbsp;updated to the latest version. For more information, see </SPAN><A href="https://developers.sap.com/tutorials/abap-install-adt..html" target="_blank" rel="noopener noreferrer"><SPAN>ABAP Development Tools</SPAN></A><SPAN>.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>You need to have access to an&nbsp;SAP BTP ABAP&nbsp;Environment&nbsp;Instance</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>Business&nbsp;Catalog&nbsp;SAP_A4C_BC_DEV_AIA_PC&nbsp;required&nbsp;for creating and editing IDE actions</SPAN><SPAN>&nbsp;</SPAN></LI></UL><H2 id="toc-hId-1201954821"><STRONG>&nbsp;Prerequisites:&nbsp;(Consumer)</STRONG><SPAN>&nbsp;</SPAN></H2><UL><LI><SPAN>The Landscape Portal Application has been subscribed&nbsp;to&nbsp;and your user has the landscape portal admin role collection assigned</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>Install ABAP development tools for Eclipse (ADT) on your computer. If you already have ADT, make sure&nbsp;it's&nbsp;updated to the latest version. For more information,&nbsp;see </SPAN><A href="https://developers.sap.com/tutorials/abap-install-adt..html" target="_blank" rel="noopener noreferrer"><SPAN>ABAP Development Tools</SPAN></A><SPAN>.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><H1 id="toc-hId-876358597"><STRONG>&nbsp;Steps to Implement as a Partner&nbsp;</STRONG></H1><H2 id="toc-hId-808927811"><STRONG>1. Create Software Components&nbsp;</STRONG></H2><UL><LI><SPAN>To open the&nbsp;"Manage Software Components"&nbsp;application, log in to your SAP BTP ABAP Environment Fiori Launchpad&nbsp;as an administrator and Search for "Manage Software Components" in the search bar.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>use the “Create” button in the “Manage Software Components” app to open the dialog and fill in the information. We enter the name of the software&nbsp;component&nbsp;and a description.&nbsp;In the namespace dropdown you can use your reserved&nbsp;namespace. (Disclaimer: /ITAPC3/ being an example namespace used in this blog)</SPAN><SPAN>&nbsp;</SPAN></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="birupakshya_sahu_1-1773301769790.png" style="width: 597px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/382433i7351B472F441A4D2/image-dimensions/597x315?v=v2" width="597" height="315" role="button" title="birupakshya_sahu_1-1773301769790.png" alt="birupakshya_sahu_1-1773301769790.png" /></span></P><UL><LI><SPAN>You&nbsp;clone&nbsp;the software&nbsp;component&nbsp;into the development system. When cloning, the main branch is checked out for the system, a package is created in the system that has the same name as the software&nbsp;component&nbsp;and is also assigned to it. At the same time, you can also set&nbsp;how the clone of the repository behaves&nbsp;in the system (push/pull or just pull).</SPAN><SPAN>&nbsp;</SPAN></LI><LI><SPAN>The software&nbsp;component&nbsp;with the selected branch is now imported into your current system instance. The&nbsp;Clone&nbsp;button turns into a&nbsp;Pull&nbsp;button. From now on, you can use it to pull (remotely available) changes of your software&nbsp;component&nbsp;to your system. Now you can see package under the selected&nbsp;software&nbsp;component&nbsp;in your system.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><H2 id="toc-hId-612414306"><STRONG>2.&nbsp; Development (Intelligent Scenario)&nbsp;</STRONG></H2><P><SPAN>Here in this scenario, we would be&nbsp;using&nbsp;ABAP AI Capabilities is&nbsp;our IDE Action implementation class to translate the markdown content into the target language with the help of ABAP AI SDK powered by ISLM.&nbsp;To learn more about Developing AI Enabled Applications with ABAP AI SDK powered by ISLM, refer to the&nbsp;</SPAN><A href="https://community.sap.com/t5/artificial-intelligence-blogs-posts/developing-ai-enabled-applications-with-abap-ai-sdk-powered-by-islm/ba-p/14252514" target="_blank"><SPAN>blog post</SPAN></A><SPAN>.</SPAN><SPAN>&nbsp;</SPAN></P><H3 id="toc-hId-544983520"><STRONG>2.1&nbsp;Create ISLM Scenario:&nbsp;</STRONG></H3><UL><LI><SPAN>Select your package, right-click, </SPAN><STRONG><SPAN>New → Other → Intelligent Scenario →&nbsp;/ITAPC3/ADT_INT_SCE</SPAN></STRONG><SPAN>&nbsp;</SPAN></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="birupakshya_sahu_2-1773301823207.png" style="width: 650px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/382435i298353F3A70F91DB/image-dimensions/650x455?v=v2" width="650" height="455" role="button" title="birupakshya_sahu_2-1773301823207.png" alt="birupakshya_sahu_2-1773301823207.png" /></span></P><P><SPAN>Enter a name and description. Select </SPAN><I><SPAN>SIDEBYSIDE </SPAN></I><SPAN>for </SPAN><STRONG><SPAN>Scenario Technology</SPAN></STRONG><SPAN> field. Choose </SPAN><STRONG><SPAN>Next&nbsp;and&nbsp;</SPAN></STRONG><SPAN>then</SPAN><STRONG><SPAN>&nbsp;</SPAN></STRONG><SPAN>click</SPAN><STRONG><SPAN>&nbsp;Finish.</SPAN></STRONG><SPAN>&nbsp;</SPAN></P><H3 id="toc-hId-348470015"><STRONG>2.2&nbsp;Create ISLM Model:&nbsp;</STRONG></H3><UL><LI><SPAN>Select your package, right-click, New → Other → Intelligent Scenario Model</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>Fill the </SPAN><I><SPAN>Description </SPAN></I><SPAN>and </SPAN><I><SPAN>Model Name </SPAN></I><SPAN>fields. Assign the previously created scenario in </SPAN><I><SPAN>Intelligent Scenario Name.</SPAN></I><SPAN> Choose Next. </SPAN><SPAN>&nbsp;</SPAN></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="birupakshya_sahu_3-1773301823208.png" style="width: 655px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/382434i2C6F60DBC627630A/image-dimensions/655x412?v=v2" width="655" height="412" role="button" title="birupakshya_sahu_3-1773301823208.png" alt="birupakshya_sahu_3-1773301823208.png" /></span></P><UL><LI><SPAN>Enter the </SPAN><I><SPAN>ExecutableID </SPAN></I><SPAN>and </SPAN><I><SPAN>Large Language Model Name </SPAN></I><SPAN>and </SPAN><I><SPAN>Large Language Model Version&nbsp;and&nbsp;Activate the object.</SPAN></I><SPAN>&nbsp;</SPAN></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="birupakshya_sahu_4-1773301823209.png" style="width: 656px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/382436iAD11B9D6416C9E85/image-dimensions/656x425?v=v2" width="656" height="425" role="button" title="birupakshya_sahu_4-1773301823209.png" alt="birupakshya_sahu_4-1773301823209.png" /></span></P><H2 id="toc-hId-22873791"><STRONG>3.&nbsp; Development&nbsp;(IDE Action)&nbsp;</STRONG></H2><P><SPAN>In this&nbsp;section&nbsp;we will look at the IDE action&nbsp;which translates the markdown content into the&nbsp;selected&nbsp;language with the help of&nbsp;</SPAN><SPAN>intelligent</SPAN><SPAN>&nbsp;</SPAN><SPAN>scenario created in the&nbsp;previous&nbsp;step.</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>Partners can&nbsp;utilize&nbsp;the </SPAN><STRONG><SPAN>ABAP AI SDK</SPAN></STRONG><SPAN> powered by ISLM to embed Generative AI features in&nbsp;IDE action implementation class.</SPAN><SPAN>&nbsp;</SPAN></P><UL><LI><SPAN>From ABAP Development Tools,&nbsp;locate&nbsp;and add to the&nbsp;favorite&nbsp;package “/ITAPC3/IDE_ACTION_EXTENSIONS“ that&nbsp;was created during Create Software Components process.&nbsp;The package has the same name as the software&nbsp;component.</SPAN><SPAN>&nbsp;</SPAN></LI><LI><SPAN>Create a new IDE action either from the main menu, project explorer, or toolbar.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>In the main menu, choose&nbsp;File-&gt;New-&gt;Other... and select IDE Action. The creation wizard opens.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>In the creation wizard, enter the project and package details if they are not already filled. Also, provide a name and description for the IDE action.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>Choose Next, assign a transport request if needed&nbsp;and&nbsp;Choose Finish.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="birupakshya_sahu_5-1773301823211.png" style="width: 625px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/382438i4E8CCEC91894B0CE/image-dimensions/625x318?v=v2" width="625" height="318" role="button" title="birupakshya_sahu_5-1773301823211.png" alt="birupakshya_sahu_5-1773301823211.png" /></span></P><UL><LI><SPAN>After we have created the action in the system, we then fill the form with the relevant information to create the action and the&nbsp;Input UI Configuration Class.</SPAN><SPAN>&nbsp;</SPAN><SPAN>In the </SPAN><STRONG><SPAN>Filter: Cardinality</SPAN></STRONG><SPAN> section, decide the number of focused resources that can be selected when running an IDE action.</SPAN><SPAN>&nbsp;</SPAN><SPAN>If you want to use your IDE action for any object type, add </SPAN><STRONG><SPAN>*ALL</SPAN></STRONG><SPAN> as value for the object type.&nbsp;Save and activate your IDE action.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><P><SPAN>&nbsp;</SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="birupakshya_sahu_6-1773301823212.png" style="width: 659px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/382437i56D6164914893AAC/image-dimensions/659x506?v=v2" width="659" height="506" role="button" title="birupakshya_sahu_6-1773301823212.png" alt="birupakshya_sahu_6-1773301823212.png" /></span></P><H3 id="toc-hId--119788364"><STRONG>3.1&nbsp;Defining&nbsp;UI&nbsp;</STRONG></H3><UL><LI><SPAN>In the first step we need an action dialog to enable the user to enter data. To do this we can create a new class using the link in the IDE Action. This implements the interface IF_AIA_SD_ACTION_INPUT, but only the method CREATE_INPUT_CONFIG is defined here; the other three methods can be implemented optionally. We define a public type in the class as the structure for the input; we can give the fields certain properties using the ABAP Docs. A list of properties&nbsp;</SPAN><SPAN>can be found in the documentation, with certain properties being set via configuration.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><P>&nbsp;</P><pre class="lia-code-sample language-abap"><code>CLASS /itapc3/cl_trans_ui_info DEFINITION PUBLIC FINAL CREATE PUBLIC . PUBLIC SECTION. INTERFACES if_aia_sd_action_input. "! &lt;p class="shorttext"&gt;Simple Controls&lt;/p&gt; BEGIN OF ty_input, "! &lt;p class="shorttext"&gt;Select the language&lt;/p&gt; custom_value_help_text_field TYPE string, "! &lt;p class="shorttext"&gt;Enter the markdown source for the translation&lt;/p&gt; multiline_text_field TYPE string, END OF ty_input. PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. CLASS /ITAPC3/CL_TRANS_UI_INFO IMPLEMENTATION. METHOD if_aia_sd_action_input~create_input_config. " Create the input data with default values DATA(input_data) = VALUE ty_input( ) ##NO_TEXT. " Create the configuration via the factory DATA(configuration) = ui_information_factory&gt;get_configuration_factory( )-&gt;create_for_data( input_data ). " Set the layout configuration-&gt;set_layout( if_sd_config_element=&gt;layout-grid ). " Set configuration for elements “To enable a custom value help for an element, the corresponding configuration must be set via the API: configuration-&gt;get_element( 'custom_value_help_text_field' )-&gt;set_values( if_sd_config_element=&gt;values_kind-domain_specific_named_items ). configuration-&gt;get_element( 'multiline_text_field' )-&gt;set_multiline( if_sd_config_element=&gt;height-large ). " Create and return the UI information result = ui_information_factory-&gt;for_abap_type( abap_type = input_data configuration = configuration ). ENDMETHOD. METHOD if_aia_sd_action_input~get_value_help_provider. " Return a reference to your value help handler via the value help provider result = cl_sd_value_help_provider=&gt;create( NEW /ITAPC3/CL_TRAN_VALUE_HELP( ) ). ENDMETHOD. ENDCLASS. </code></pre><P>&nbsp;</P><H3 id="toc-hId--316301869"><STRONG>3.2&nbsp;Implement a Custom Value Help:&nbsp;</STRONG></H3><UL><LI><SPAN>To implement a custom value help that returns domain-specific named items, a handler class must be provided that implements the if_sd_value_help_dsni interface. The get_value_help_items method returns the values for the value help. The values to be returned are of type if_sd_value_help_dsni=&gt;ty_named_item_list.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><P>&nbsp;</P><pre class="lia-code-sample language-abap"><code>CLASS /itapc3/cl_trans_ide_action DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES if_aia_action. PROTECTED SECTION. PRIVATE SECTION. METHODS get_input_as_html IMPORTING ui_input TYPE /itapc3/cl_trans_ui_info=&gt;ty_input RETURNING VALUE(result) TYPE string. ENDCLASS. CLASS /ITAPC3/CL_TRANS_IDE_ACTION IMPLEMENTATION. METHOD get_input_as_html. FINAL(nl) = cl_abap_char_utilities=&gt;newline. TRY. DATA(completion_api) = cl_aic_islm_compl_api_factory=&gt;get( )-&gt;create_instance( '/ITAPC3/ADT_INT_SCE' ). DATA(prompt) = |You are a translator. Reject Hate Speech. Translate the given text into { ui_input-custom_value_help_text_field }:{ nl }{ ui_input-multiline_text_field }| ##NO_TEXT. DATA(translation) = completion_api-&gt;execute_for_string( prompt )-&gt;get_completion( ). CATCH cx_aic_api_factory INTO DATA(aic_api_factory_ex). RETURN. CATCH cx_aic_completion_api INTO DATA(aic_completion_api_ex). RETURN. ENDTRY. result = '&lt;h3 style="color:gray"&gt;Translate to (' &amp;&amp; ui_input-custom_value_help_text_field &amp;&amp; ')&lt;/h3&gt;' &amp;&amp; nl &amp;&amp; '&lt;pre&gt;' &amp;&amp; translation &amp;&amp; '&lt;/pre&gt;'. ENDMETHOD. METHOD if_aia_action~run. DATA(focused_resource) = context-&gt;get_focused_resource( ). TRY. DATA ui_input TYPE /itapc3/cl_trans_ui_info=&gt;ty_input. context-&gt;get_input_config_content( )-&gt;get_as_structure( IMPORTING result = ui_input ). CATCH cx_sd_invalid_data INTO DATA(exception). CLEAR ui_input. ENDTRY. DATA(popup_result) = cl_aia_result_factory=&gt;create_html_popup_result( ). popup_result-&gt;set_content( get_input_as_html( ui_input ) ). result = popup_result. ENDMETHOD. ENDCLASS. </code></pre><P>&nbsp;</P><P><SPAN>To start the action in Eclipse,&nbsp;we can&nbsp;copy the markdown source from any KTD Editor&nbsp;and use &nbsp;use&nbsp;the shortcut&nbsp;Ctrl&nbsp;+&nbsp;Alt&nbsp;+&nbsp;R&nbsp;for Windows or&nbsp;CMD&nbsp;+&nbsp;OPT&nbsp;+&nbsp;R&nbsp;for Mac or choose&nbsp;Run-&gt;ABAP IDE Action...&nbsp;from the main menu to start the Action Dialog, where our IDE Action should now be available.</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>Once all the required objects are created&nbsp;and the action is working as per our expectation, we&nbsp;have to&nbsp;release the Transport Request.</SPAN><SPAN>&nbsp;</SPAN></P><H2 id="toc-hId--219412367"><STRONG>4.&nbsp; Create&nbsp;Add-on Product using Landscape Portal&nbsp;</STRONG></H2><P><SPAN>The </SPAN><STRONG><SPAN>Landscape Portal</SPAN></STRONG><SPAN> acts as a central tool to allow service providers to perform administration tasks such as hibernating systems, creating test tenants and support users, selecting systems for a pre-upgrade, but also lifecycle management operations such as building, deploying and updating product versions, and even guides you through the configuration and deployment of multitenant SaaS solutions.</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>Here partner can create a&nbsp;new&nbsp;Add-on&nbsp;product,&nbsp;register your product,&nbsp;build a product version via&nbsp;pipelines&nbsp;and&nbsp;deploy a product version.</SPAN><SPAN>&nbsp;</SPAN></P><H3 id="toc-hId--709328879"><STRONG>4.1&nbsp;Register Product&nbsp;</STRONG></H3><P><SPAN>A product refers to an ABAP add-on that can be installed on SAP BTP, ABAP environment.</SPAN><SPAN>&nbsp;</SPAN></P><UL><LI><SPAN>Log into the </SPAN><STRONG><SPAN>Landscape Portal</SPAN></STRONG><SPAN>.</SPAN><SPAN>&nbsp;For more information, see&nbsp;</SPAN><A href="https://help.sap.com/docs/sap-btp-abap-environment/landscape-portal/accessing-landscape-portal" target="_blank" rel="noopener noreferrer"><STRONG><SPAN>Landscape Portal</SPAN></STRONG></A><SPAN>&nbsp;</SPAN><SPAN>&nbsp;</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>Click on the </SPAN><STRONG><SPAN>Register Product</SPAN></STRONG><SPAN> tile to open the app.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>A list of all your created products, including their product ID, namespace and registration status, is displayed. The registration status&nbsp;indicates&nbsp;whether a product has already been registered to the global account you are currently logged in to.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>Click the </SPAN><STRONG><SPAN>Create</SPAN></STRONG><SPAN> button in the top right corner.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>Enter the name of the product you want to create and confirm with </SPAN><STRONG><SPAN>Create</SPAN></STRONG><SPAN>. Your request for creation has been sent and the registration status of the product changes to “Pending…”.&nbsp;The namespace is automatically&nbsp;determined&nbsp;from the product name you entered, and the product ID is generated as part of the creation process.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="birupakshya_sahu_7-1773302190960.png" style="width: 673px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/382439iBB3E8BB1AC1CA9DB/image-dimensions/673x259?v=v2" width="673" height="259" role="button" title="birupakshya_sahu_7-1773302190960.png" alt="birupakshya_sahu_7-1773302190960.png" /></span></P><H3 id="toc-hId--905842384"><SPAN>&nbsp;</SPAN><STRONG>4.2&nbsp;Build Product Version&nbsp;</STRONG></H3><P><SPAN>You can use the </SPAN><STRONG><SPAN>Build Product Version</SPAN></STRONG><SPAN> app to easily trigger the build of new product versions via pipelines based on templates that you can configure for different use cases such as new (test or production) release deliveries, (test or production) support packages or (test or production) hotfixes/patch deliveries.</SPAN><SPAN>&nbsp;</SPAN></P><UL><LI><SPAN>Log in to the </SPAN><STRONG><SPAN>Landscape Portal</SPAN></STRONG><SPAN> and click on the tile </SPAN><STRONG><SPAN>Build Product Version</SPAN></STRONG><SPAN>.&nbsp;</SPAN><SPAN>For more information, see&nbsp;</SPAN><A href="https://help.sap.com/docs/sap-btp-abap-environment/landscape-portal/create-new-product-version" target="_blank" rel="noopener noreferrer"><STRONG><SPAN>Build Product Version</SPAN></STRONG></A><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>Select one of your products from the list. You will be&nbsp;forwarded&nbsp;to the </SPAN><STRONG><SPAN>Product Versions</SPAN></STRONG><SPAN> tab. Here, you can see a table listing all the existing versions of this product, their type, when they were created, as well as their delivery status.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>You also need to Configure a Pipeline Template&nbsp;for release build.&nbsp;</SPAN><SPAN>For more information, see&nbsp;</SPAN><A href="https://help.sap.com/docs/sap-btp-abap-environment/landscape-portal/configure-pipeline-template" target="_blank" rel="noopener noreferrer"><SPAN>Configure a Pipeline Template</SPAN></A><SPAN>&nbsp;and&nbsp;</SPAN><A href="https://developers.sap.com/tutorials/abap-environment-saas-addon-build..html#2d3f1efd-4231-4f6e-a418-e3015d8a9d95" target="_blank" rel="noopener noreferrer"><SPAN>Create a template for release build.</SPAN></A><SPAN>&nbsp;</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>To create a new product version, click the </SPAN><STRONG><SPAN>Create</SPAN></STRONG><SPAN> button, choose </SPAN><STRONG><SPAN>Release</SPAN></STRONG><SPAN>&nbsp;</SPAN><STRONG><SPAN>Delivery</SPAN></STRONG><SPAN> and select the desired type. The resulting product version will be calculated automatically.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>Select software components to be included in your new product version. To add&nbsp;additional&nbsp;software components, click the </SPAN><STRONG><SPAN>Add</SPAN></STRONG><SPAN> button on the right. For each software&nbsp;component, define a&nbsp;component&nbsp;version, enter the desired&nbsp;branch&nbsp;and commit ID as seen in the </SPAN><STRONG><SPAN>Manage Software Components</SPAN></STRONG><SPAN> app, and select in which languages your product version should be built. To get relevant&nbsp;commit ID&nbsp;for the software&nbsp;component&nbsp;involved in the build, you can refer&nbsp;the&nbsp;</SPAN><A href="https://help.sap.com/docs/btp/sap-business-technology-platform/how-to-display-commits-and-commit-objects?version=Cloud" target="_blank" rel="noopener noreferrer"><SPAN>help page</SPAN></A><SPAN>&nbsp;to get more details on this.</SPAN><SPAN>&nbsp;</SPAN><SPAN>Identify&nbsp;the commit based on which you wish to build your add-on product.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="birupakshya_sahu_8-1773302190961.png" style="width: 674px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/382441iFC50C68FF5C2E575/image-dimensions/674x301?v=v2" width="674" height="301" role="button" title="birupakshya_sahu_8-1773302190961.png" alt="birupakshya_sahu_8-1773302190961.png" /></span></P><UL><LI><SPAN>Click the </SPAN><STRONG><SPAN>Build Product Version</SPAN></STRONG><SPAN> button to trigger the build of the pipeline for your new product version.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>You will be redirected to the Pipeline Status screen, where you can track the progress of your build.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="birupakshya_sahu_9-1773302190962.png" style="width: 670px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/382440iE484999CFC8DC66E/image-dimensions/670x241?v=v2" width="670" height="241" role="button" title="birupakshya_sahu_9-1773302190962.png" alt="birupakshya_sahu_9-1773302190962.png" /></span></P><H3 id="toc-hId--1102355889"><STRONG>4.3&nbsp;Check Product Version&nbsp;</STRONG></H3><P><SPAN>The </SPAN><STRONG><SPAN>Check Product Version</SPAN></STRONG><SPAN> app lets you view the results of product version delivery infrastructure checks to see if your product version is ready for delivery. </SPAN><SPAN>&nbsp;</SPAN></P><UL><LI><SPAN>Click on the </SPAN><STRONG><SPAN>Check Product Version</SPAN></STRONG><SPAN> tile to open the&nbsp;app.&nbsp;</SPAN><SPAN>For&nbsp;more information, see&nbsp;</SPAN><A href="https://help.sap.com/docs/LANDSCAPEPORTAL_S4ABAP/bbef3473740144d38c8485d26871a1f0/4de24e56f52d4ca4ae8971aae6861f8e.html" target="_blank" rel="noopener noreferrer"><STRONG><SPAN>Check Product Version</SPAN></STRONG></A><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>A list of all your products is displayed. Select one of the products from the list.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>Ready for production (P): The product version is ready for production use.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="birupakshya_sahu_10-1773302190963.png" style="width: 686px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/382442i9815655FCE98E34F/image-dimensions/686x343?v=v2" width="686" height="343" role="button" title="birupakshya_sahu_10-1773302190963.png" alt="birupakshya_sahu_10-1773302190963.png" /></span></P><H3 id="toc-hId--1298869394"><STRONG>4.4&nbsp;Publish Product&nbsp;</STRONG></H3><P><SPAN>You, as a partner, have developed a product that you want to make available to your customers as an add-on that they can install into their system. You can use the Publish Product app to publish your product in a specific version for use&nbsp;by customers. Your customer can then use the </SPAN><A href="https://help.sap.com/docs/sap-btp-abap-environment/landscape-portal/discover-product?locale=en-US&amp;state=PRODUCTION&amp;version=Cloud" target="_blank" rel="noopener noreferrer"><SPAN>Discover Product</SPAN></A><SPAN> app to view all product versions that were published,&nbsp;i.e.&nbsp;made available, for them and can register a product, thus adding a product to their pool of product versions available for deployment.</SPAN><SPAN>&nbsp;</SPAN></P><OL><LI><SPAN>Log into the </SPAN><STRONG><SPAN>Landscape Portal</SPAN></STRONG><SPAN>.</SPAN><SPAN>&nbsp;</SPAN></LI></OL><OL><LI><SPAN>Click the </SPAN><STRONG><SPAN>Publish Product</SPAN></STRONG><SPAN> tile to open the app.&nbsp;</SPAN><SPAN>For more information, see&nbsp;</SPAN><A href="https://help.sap.com/docs/LANDSCAPEPORTAL_S4ABAP/bbef3473740144d38c8485d26871a1f0/900f8604d3ab41e38abfa990c68e429b.html" target="_blank" rel="noopener noreferrer"><STRONG><SPAN>Publish Product</SPAN></STRONG></A><SPAN>&nbsp;</SPAN></LI></OL><OL><LI><SPAN>Select the product from the list. You are&nbsp;forwarded&nbsp;to the configuration page. Click the </SPAN><STRONG><SPAN>Edit</SPAN></STRONG><SPAN> button.</SPAN><SPAN>&nbsp;</SPAN></LI></OL><OL><LI><SPAN>In the </SPAN><STRONG><SPAN>Product Configuration</SPAN></STRONG><SPAN> section, select the </SPAN><STRONG><SPAN>Product Version</SPAN></STRONG><SPAN> that you want to publish and choose </SPAN><STRONG><SPAN>SAP Store</SPAN></STRONG><SPAN> as the </SPAN><STRONG><SPAN>Distribution Channel</SPAN></STRONG><SPAN>.</SPAN><SPAN>&nbsp;</SPAN></LI></OL><OL><LI><SPAN>Click the </SPAN><STRONG><SPAN>Publish</SPAN></STRONG><SPAN> button to publish your product version</SPAN><SPAN>&nbsp;</SPAN></LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="birupakshya_sahu_11-1773302190963.png" style="width: 673px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/382443iBEFCFE00211F76E1/image-dimensions/673x318?v=v2" width="673" height="318" role="button" title="birupakshya_sahu_11-1773302190963.png" alt="birupakshya_sahu_11-1773302190963.png" /></span><SPAN>&nbsp;</SPAN></P><H1 id="toc-hId--908576885"><STRONG>Steps&nbsp;performed from the&nbsp;Consumer&nbsp;</STRONG></H1><H2 id="toc-hId--1398493397"><STRONG>1. Discover Product&nbsp;</STRONG></H2><UL><LI><SPAN>Once Partner has made their product available and has published a product version using the Publish Product app, customers can register the product via&nbsp;</SPAN><A href="https://help.sap.com/docs/LANDSCAPEPORTAL_S4ABAP/bbef3473740144d38c8485d26871a1f0/724f5b6f69634f5ab7a8d6236f327e5a.html" target="_blank" rel="noopener noreferrer"><SPAN>Discover Product app</SPAN></A><SPAN>.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>After registrations customers&nbsp;can&nbsp;deploy the product using Deploy Product.&nbsp;</SPAN><SPAN>&nbsp;</SPAN></LI></UL><H2 id="toc-hId--1595006902"><STRONG>2.&nbsp; Deploy Product&nbsp;</STRONG></H2><P><SPAN>You can use the </SPAN><A href="https://help.sap.com/docs/LANDSCAPEPORTAL_S4ABAP/bbef3473740144d38c8485d26871a1f0/c4da7bba8b5a46b9ae08986d9399046d.html" target="_blank" rel="noopener noreferrer"><SPAN>Deploy Product</SPAN></A><SPAN> app to deploy or update your product version in specific systems.</SPAN><SPAN>&nbsp;</SPAN></P><UL><LI><SPAN>Sign in to the Landscape Portal.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>Click on the Deploy Product tile to open the app.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>On the left side, under Product and Product Version Selection, select which product and version you want to deploy or update from the drop-down menu.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>In the Available Systems section, select at least one system in which you want to deploy or update the product version. You can also select multiple systems at once.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>Click the Deploy button. A dialog box will open. Fill in the remaining details:</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>Title: Choose a title for your update.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>From: Select the time the update can begin.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>To: The estimated time at which the product version update will be completed.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>Confirm with Schedule.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>Check the list under Product Version Update Status. Here, all update requests as well as their&nbsp;current status&nbsp;and progress are displayed. The update you just scheduled has been added to the list.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><UL><LI><SPAN>Once the product is deployed successfully then Customer can access the product in target system.</SPAN><SPAN>&nbsp;</SPAN></LI></UL><P><SPAN>SAP BTP automatically&nbsp;activates the software&nbsp;component&nbsp;provided from the partner in the ABAP environment, makes packages visible&nbsp;and registers IDE extensions.</SPAN><SPAN>&nbsp;</SPAN></P><H2 id="toc-hId--1623336716"><STRONG>3.&nbsp; Test IDE Action&nbsp;</STRONG></H2><P><SPAN>Create/Use ABAP Cloud project in the ABAP instance where you have deployed the&nbsp;product.This&nbsp;should be a development system.</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>Open any&nbsp;Knowledge Transfer Document&nbsp;in the editor and copy the content.</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>To open the </SPAN><STRONG><SPAN>Run ABAP IDE Action</SPAN></STRONG><SPAN> dialog, use the shortcut Ctrl + Alt + R for Windows or CMD + OPT + R for Mac or choose </SPAN><STRONG><SPAN>Run-&gt;ABAP IDE Action...</SPAN></STRONG><SPAN> from the main menu.</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>Select the IDE action&nbsp;“Translate markdown content”&nbsp;you would like to run Select </SPAN><STRONG><SPAN>Run</SPAN></STRONG><SPAN>.</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>It will open&nbsp;the action input dialog&nbsp;where you can select the target language you want to translate and in next text box area provide the&nbsp;Knowledge Transfer Document&nbsp;content.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="birupakshya_sahu_13-1773302190964.png" style="width: 673px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/382445i5CFA0D01A2E06FD3/image-dimensions/673x471?v=v2" width="673" height="471" role="button" title="birupakshya_sahu_13-1773302190964.png" alt="birupakshya_sahu_13-1773302190964.png" /></span></P><P><SPAN>Select </SPAN><STRONG><SPAN>Run.</SPAN></STRONG><SPAN>&nbsp;</SPAN></P><P><SPAN>The result dialog for the selected IDE action opens the result dialog&nbsp;where it translates the&nbsp;Knowledge Transfer Document&nbsp;to the selected language&nbsp;option&nbsp;from the input dialog.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="birupakshya_sahu_14-1773302190965.png" style="width: 677px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/382446i6E809A615D9DEDAC/image-dimensions/677x405?v=v2" width="677" height="405" role="button" title="birupakshya_sahu_14-1773302190965.png" alt="birupakshya_sahu_14-1773302190965.png" /></span></P><P>&nbsp;</P><P><SPAN>&nbsp;</SPAN></P> 2026-03-12T09:36:28.552000+01:00 https://community.sap.com/t5/technology-blog-posts-by-sap/sap-btp-abap-environment-pre-upgrade-option-for-release-2605/ba-p/14347147 SAP BTP ABAP Environment – Pre-Upgrade Option for Release 2605 2026-03-12T12:13:39.797000+01:00 FrankJentsch https://community.sap.com/t5/user/viewprofilepage/user-id/4296 <H1 id="toc-hId-1662434594">Overview</H1><P>Providing a significant number of new features is an important goal of release upgrades to deliver innovations to our customers and partners. There are four major release upgrades per year following a predefined schedule as described in this&nbsp;<A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-btp-abap-environment-maintenance-windows-and-major-upgrade-windows-in/ba-p/14257326" target="_blank">blog post</A>.<BR /><BR />An upgrade is intended as a “no event” for customers and partners. For example, only compatible changes of released objects (APIs) will be delivered. We recommend performing a test of the custom-built productive apps in a test environment for the new release. The complexity of the technical dependencies between the custom-built apps and the underlying environment cannot be tested isolated, only including the ABAP environment on SAP-side. Therefore, we offer you to pre-upgrade selected systems 29 days&nbsp;in advance to test the applications prior to the planned standard-upgrade.&nbsp; &nbsp;</P><P>&nbsp;</P><H1 id="toc-hId-1465921089">Purpose</H1><P>This option enables a customer or partner to test the applications they have already developed on top of the new release a couple of days before the standard-upgrade. With SAP BTP ABAP Environment (aka "Steampunk"), we follow the approach of keeping released objects stable and provide all enhancements in a compatible fashion. Early testing is an additional measure to ensure proper software quality and might be used to detect unforeseen regressions. However, this option is not intended to test new features or to consume new features earlier.</P><P>&nbsp;</P><H1 id="toc-hId-1269407584">Approach</H1><P>The standard-upgrade of all systems to release <STRONG>2605</STRONG>&nbsp;is planned for <STRONG>May 16/17</STRONG>.</P><P>A customer or partner can nominate one or more already existing systems for the pre-upgrade. A nominated system will be upgraded on <STRONG>April 17</STRONG>&nbsp;within a planned downtime&nbsp;<STRONG>from 8:00 to 16:00 CET</STRONG>. Depending on the system settings, the actual technical downtime might be only ~20 min within the mentioned timeframe. Please refer to this <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-btp-abap-environment-downtime-optimized-upgrades-and-hotfix-collection/ba-p/13986913" target="_self">blog post</A> about the downtime-optimized upgrade.&nbsp;</P><P>We recommend nominating a non-development system, such as a test system. The nomination of a development system is technically also possible, but fixes or other changes must not be imported into another system with a lower release. The nomination of a productive system doesn’t make sense because the purpose of the pre-upgrade is the re-test of the existing application before the productive system gets the new release.</P><P>According to the approach explained above, this offer is only relevant for customers or partners having at least two systems.</P><P>There might be situations where a correction of custom objects needs to be deployed. Such corrections are possible if the development / correction system is on the older release and is imported into the pre-upgraded system with the higher release.</P><P>Except potential fixes, the pre-upgrade is based on the same version as the standard-upgrade. It is planned to perform the pre-upgrade based on <STRONG>hotfix collection 1</STRONG>. The pre-upgrade systems will get the import of <STRONG>hotfix collection 2</STRONG>&nbsp;after 2 weeks in the middle of the entire pre-upgrade test phase.&nbsp;It is planned to perform the standard-upgrade based on <STRONG>hotfix collection 3</STRONG>&nbsp;and import this <STRONG>hotfix collection 3</STRONG> to the pre-upgrade systems prior to the upgrade weekend on&nbsp;<STRONG>May 15</STRONG>.</P><P>&nbsp;</P><H1 id="toc-hId-1072894079">Costs</H1><P>This offering is optional and free of any additional charges.</P><P>&nbsp;</P><H1 id="toc-hId-876380574">Planned New Features</H1><P data-unlink="true">The planned new features will be published on the <A href="https://help.sap.com/whats-new/7a822d3bcaa74f31b98fa315601e9c96?Version=ABAP+Environment+2605" target="_blank" rel="noopener noreferrer">What's New for SAP BTP ABAP Environment</A> on <STRONG>April 10</STRONG>.&nbsp;This list gives you an overview of potential areas for re-testing. The purpose of the pre-upgrade is not to consume these features before the standard-upgrade, because the documentation on help.sap.com will be delivered later before the standard-upgrade. It would also not be possible to transport code of such an adoption, because subsequent systems are not yet on the new release during the pre-upgrade phase.</P><P>Independent of the upgrades of the SAP BTP ABAP Environment, we recommend developing automated tests for the custom-built apps to detect regressions early on and without manual effort for re-testing. Such automated tests are perfectly suited to be run in the pre-upgrade test phase.</P><P>&nbsp;</P><H1 id="toc-hId-679867069">Time Schedule</H1><P>The following figure summarizes the general approach:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="2025-06-17_16-57-23.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/275499iE301A3CB2199AF89/image-size/large?v=v2&amp;px=999" role="button" title="2025-06-17_16-57-23.png" alt="2025-06-17_16-57-23.png" /></span></P><P>&nbsp;</P><P>Milestones for release <STRONG>2605</STRONG>:</P><UL><LI><STRONG>March 17</STRONG>: Nomination of system(s) is possible in the Landscape Portal</LI><LI><STRONG>April 10</STRONG>: Announcement of the planned new features</LI><LI><STRONG>April 13</STRONG>: Pre-upgrade systems are known</LI><LI><STRONG>April 17: Pre-upgrade (with hotfix collection 1)</STRONG></LI><LI><STRONG>April 30</STRONG>: Import of hotfix collection <STRONG>2</STRONG> into pre-upgrade systems</LI><LI><STRONG>May 13</STRONG>: Potential decision to postpone the upgrade</LI><LI><STRONG>May 15</STRONG>: Import of hotfix collection <STRONG>3</STRONG> into pre-upgrade systems</LI><LI><STRONG>May 16/17: Standard-upgrade&nbsp;(with hotfix collection 3)</STRONG></LI></UL><P>&nbsp;</P><H1 id="toc-hId-483353564">System Nomination</H1><P>To nominate a system, please register the system(s) by <STRONG>April 13</STRONG>&nbsp;(EOB) latest by using the <STRONG>Landscape Portal</STRONG>. You can find further information about <A href="https://help.sap.com/docs/sap-btp-abap-environment/landscape-portal/accessing-landscape-portal" target="_blank" rel="noopener noreferrer">Accessing the Landscape Portal</A> and about <A href="https://help.sap.com/docs/sap-btp-abap-environment/landscape-portal/register-systems-for-pre-upgrade" target="_blank" rel="noopener noreferrer">Register Systems for Pre-Upgrade</A>. Please do <STRONG>not</STRONG> create customer tickets for system nomination like in previous pre-upgrades.</P><P>With such a nomination, the customer agrees to an extraordinary planned maintenance on <STRONG>April </STRONG><STRONG>17</STRONG>&nbsp;for the pre-upgrade and on <STRONG>April 30</STRONG>&nbsp;and <STRONG>May 15</STRONG> for the import of hotfix collections (see above).</P><P>&nbsp;</P><H1 id="toc-hId-286840059">Report an Issue</H1><P>Issues should be reported as part of the regression test phase by <STRONG>Mai</STRONG><STRONG>&nbsp;1</STRONG>&nbsp;(EOB) to allow for a sufficient time frame for issue analysis and potential corrections on SAP-side.</P><P>Please create a customer ticket by using component&nbsp;<STRONG>BC-CP-ABA</STRONG>.</P><P>If a detected issue is likely to endanger the productive use after the standard-upgrade, you should use ticket priority&nbsp;<STRONG>very high</STRONG>&nbsp;despite the fact that the pre-upgrade system is not a productive system.</P><P>&nbsp;</P><H1 id="toc-hId-90326554">Exceptional Process in Case of Unresolved Priority Very High Issues</H1><P>In case of the aligned decision on Wednesday, <STRONG>May 13</STRONG>&nbsp;(based on unresolved priority very high tickets) to postpone the upgrade, a dedicated mitigation process needs to be started&nbsp;<SPAN>together with the respective customer or partner, with the following boundary conditions:</SPAN></P><UL><LI>Resolving the open priority very high issues remains the highest priority for both, SAP and the customer or partner, as it is also the prerequisite for the upgrade.</LI><LI>According to the estimated issue resolution, catching up the upgrade needs to be planned.</LI><LI>The upgrade leads to a business downtime of 6 – 8 hours.</LI><LI>The upgrade must be scheduled within 7 calendar days the latest after fixing all remaining open priority very high issues.</LI><LI>We will not provide any fixes for the old release after the original date of the standard-upgrade to the new release.</LI></UL><P>In case business-critical issues are detected after the upgrade:</P><UL><LI>Issues need to be reported as priority very high issues and will be processed accordingly.</LI><LI>Going back to the release before upgrade is not an option. Therefore, resolving the issues in the new release with the appropriate priority is the required approach.</LI></UL><P>&nbsp;</P><H1 id="toc-hId--106186951">Summary</H1><P>We recommend performing regression tests in pre-upgraded test systems to avoid day-1 impacts of productive custom apps after the standard-upgrade.</P> 2026-03-12T12:13:39.797000+01:00 https://community.sap.com/t5/technology-blog-posts-by-members/cds-custom-entities/ba-p/14344099 CDS Custom Entities 2026-03-13T06:56:29.491000+01:00 YogiPavan https://community.sap.com/t5/user/viewprofilepage/user-id/1402526 <H1 id="toc-hId-1662344417">Introduction</H1><P>A CDS custom entity is to implement own data retrieval using ABAP.</P><P>A CDS custom entity is linked with an ABAP class, and the data retrieval is executed on the application server.</P><P>Custom entities are used for data models whose runtime is implemented manually.</P><P>At the CDS level, only an interface is defined.</P><H2 id="toc-hId-1594913631">Runtime of a CDS Custom Entity</H2><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_0-1772949333165.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381044i7D6AB3C3A9F9D938/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_0-1772949333165.png" alt="YogiPavan_0-1772949333165.png" /></span></P><P>It shows that the data retrieval is implemented by an ABAP class and the data source does not have to be a database table.</P><P>CDS custom entities transient entities, which means they aren't created as a database object and can't be accessed using ABAP SQL.</P><P>In ABAP RESTful Application Programming Model&nbsp;(RAP), custom entities are used as a data model basis for&nbsp;RAP&nbsp;unmanaged queries, the ABAP query is executed by the&nbsp;RAP&nbsp;query engine.</P><P>A CDS custom entity cannot be used as a data source in other CDS entities or in ABAP SQL.</P><H2 id="toc-hId-1398400126">Syntax</H2><pre class="lia-code-sample language-abap"><code>// optional header annotations @ObjectModel.query.implementedBy : 'ClassName' define [root] custom entity EntityName [with parameters ...] { [field] [association] [annotation] }</code></pre><H2 id="toc-hId-1201886621">Creating a CDS Custom Entity</H2><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_1-1772949333169.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381045iF5BA067FC1071CE0/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_1-1772949333169.png" alt="YogiPavan_1-1772949333169.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_2-1772949333172.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381046iC787FC0264399453/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_2-1772949333172.png" alt="YogiPavan_2-1772949333172.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_3-1772949333177.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381049iD2E5B0C2B19C2BEF/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_3-1772949333177.png" alt="YogiPavan_3-1772949333177.png" /></span></P><H2 id="toc-hId-1005373116">Defining the Data Model in a CDS Custom Entity</H2><P>A custom entity defines an element list that can consist of elements or associations to other CDS entities.</P><P>It binds an ABAP class with annotation&nbsp;@ObjectModel.query.implementedBy.</P><P>Annotations and input parameters are optional.</P><P>The element list of a custom entity can contain single fields or CDS associations:</P><UL><LI>Individual fields have a name and a data type. The data type can be specified using a CDS built-in type, a CDS simple type, a CDS enumerated type, or a DDIC data element.</LI><LI>Associations can be regular associations or specialized associations, i.e. to-parent associations or to-child associations. They can be used to define a relationship to another table entity, thereby adding the association target as an additional data source.</LI><LI>Annotations at the element level can be used to add semantic information, such as text labels.</LI></UL><pre class="lia-code-sample language-abap"><code>@EndUserText.label: 'PO Header' define custom entity ZI_PO_HEAD with parameters parameter_name : parameter_type { key key_element_name : key_element_type; element_name : element_types; }</code></pre><P>Header Entity</P><pre class="lia-code-sample language-abap"><code>@EndUserText.label: 'PO Header' define custom entity ZI_PO_HEAD //with parameters parameter_name: parameter_type { key po_num : ebeln; doc_cat : bstyp; type : abap.char(2); org : ekorg; comp_code : bukrs; status : abap.char(1); vendor : Lifnrs plant : werks_d; }</code></pre><P>Item Entity</P><pre class="lia-code-sample language-abap"><code>@EndUserText.label: 'PO Items' define custom entity ZI_PO_ITS // with parameters parameter_name : parameter_type { key po num : ebeln; key po_item : ebelp; item_text : abap.char (40); material : abap.char(40); plant : werks_d; stor_loc : Lgort_d; @Semantics.quantity.unitOfMeasure: 'uom qty : abap.quan(13,3); uom : abap.unit (3); @Semantics.amount.currencyCode: 'price_unit' product_price : abap.curr(10,2); price_unit : abap.cuky; }</code></pre><P>Header Entity as Root Entity</P><pre class="lia-code-sample language-abap"><code>@EndUserText.label: 'PO Header' define root custom entity ZI_PO_HEAD //with parameters parameter_name: parameter_type { key po_num : ebeln; doc_cat : bstyp; type : abap.char(2); org : ekorg; comp_code : bukrs; status : abap.char(1); vendor : Lifnrs plant : werks_d; }</code></pre><H2 id="toc-hId-808859611">Relationships in CDS Custom Entity</H2><pre class="lia-code-sample language-abap"><code>@EndUserText.label: 'PO Header' define root custom entity ZI_PO_HEAD //with parameters parameter_name: parameter_type { key po_num : ebeln; doc_cat : bstyp; type : abap.char(2); org : ekorg; comp_code : bukrs; status : abap.char(1); vendor : Lifnrs plant : werks_d; _itms : composition [1..*] of ZI_PO_ITS; }</code></pre><pre class="lia-code-sample language-abap"><code>@EndUserText.label: 'PO Items' define custom entity ZI_PO_ITS // with parameters parameter_name : parameter_type { key po num : ebeln; key po_item : ebelp; item_text : abap.char (40); material : abap.char(40); plant : werks_d; stor_loc : Lgort_d; @Semantics.quantity.unitOfMeasure: 'uom qty : abap.quan(13,3); uom : abap.unit (3); @Semantics.amount.currencyCode: 'price_unit' product_price : abap.curr(10,2); price_unit : abap.cuky; _HD : association to parent ZI_PO_HEAD on $projection.po_num = _hd.po_num; }</code></pre><H2 id="toc-hId-612346106">Creating the Query Implementation Class</H2><P>The runtime of a CDS custom entity must be implemented manually.</P><P>It requires an ABAP class that implements the&nbsp;select&nbsp;method of the interface&nbsp;IF_RAP_QUERY_PROVIDER&nbsp;to handle query requests by the client.</P><P>This class is referenced by the custom entity and is dedicated to implementing the OData client data requests.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_10-1772949333192.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381055i76669D7994B8206F/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_10-1772949333192.png" alt="YogiPavan_10-1772949333192.png" /></span></P><pre class="lia-code-sample language-abap"><code>CLASS zcl_po_hd DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES if rap_query_provider. PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. CLASS zcl_po_hd IMPLEMENTATION. METHOD if_rap_query_provider~select. ENDMETHOD. ENDCLASS.</code></pre><P>Adding Query Implementation Class to the CDS Custom Entities- Header and Items</P><pre class="lia-code-sample language-abap"><code>@EndUserText.label: 'PO Header' @ObjectModel.query.implementedBy: 'ABAP:ZCL_PO_HD' define root custom entity ZI_PO_HEAD //with parameters parameter_name: parameter_type { key po_num : ebeln; doc_cat : bstyp; type : abap.char(2); org : ekorg; comp_code : bukrs; status : abap.char(1); vendor : Lifnrs plant : werks_d; _itms : composition [1..*] of ZI_PO_ITS; }</code></pre><pre class="lia-code-sample language-abap"><code>@EndUserText.label: 'PO Items' @ObjectModel.query.implementedBy: 'ABAP:ZCL_PO_HD define custom entity ZI_PO_ITS // with parameters parameter_name : parameter_type { key po num : ebeln; key po_item : ebelp; item_text : abap.char (40); material : abap.char(40); plant : werks_d; stor_loc : Lgort_d; @Semantics.quantity.unitOfMeasure: 'uom qty : abap.quan(13,3); uom : abap.unit (3); @Semantics.amount.currencyCode: 'price_unit' product_price : abap.curr(10,2); price_unit : abap.cuky; _HD : association to parent ZI_PO_HEAD on $projection.po_num = _hd.po_num; }</code></pre><H2 id="toc-hId-415832601">Implementation</H2><pre class="lia-code-sample language-abap"><code>CLASS zcl_po_hd DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES if rap_query_provider. PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. CLASS zcl_po_hd IMPLEMENTATION. METHOD if_rap_query_provider~select. DATA: it_hd TYPE TABLE OF zi_po_head, it_itms TYPE TABLE OF zi_po_its. CASE io_request-get_entity_id( ). WHEN 'ZI_PO_HEAD' DATA(lv_hd_fs) = io_request-get_filter( )-&gt;get_as_sql_string( ). DATA(lo_paging) = io_request-&gt;get_paging( ). DATA(lv_skip) = io_request-&gt;get_paging( )-&gt;get_offset( ). DATA(lv_top) = io_request-&gt;get_paging( )-&gt;get_page_size( ). If lv_top &lt; 0. lv_top = 1. ENDIF DATA(it_sort) = io_request-&gt;get_sort_elements( ). READ TABLE it_sort INTO DATA(ls_sort) INDEX 1. IF ls_sort-descending = abap_true. DATA(lv_order) = |'{ ls_sort-element_name } DESCENDING'|. ELSE. lv_order = |'{ ls_sort-element_name } ASCENDING'|. ENDIF. IF lv_order IS INITIAL. lv_order = 'po_num'. ENDIF. SELECT * FROM ztb_po_header WHERE (lv_hd_fs) ORDER BY (lv_order) INTO CORRESPONDING FIELDS OF TABLE _hd. io_response-&gt;set_total_number_of_records( lines( it_hd ) ). IF lv_hd_fs IS INITIAL. IF lv_skip EQ 0. DELETE it_hd FROM lv_top + 1. ELSE. DELETE it_hd FROM lv_top + lv_skip + 1 TO lines( it_hd ). DELETE it_hd FROM 1 TO lv_skip. ENDIF. ENDIF. io_response-&gt;set_data( it_hd ). WHEN 'ZI_PO_ITS' DATA(lv_item_fs) = io_request-get_filter( )-&gt;get_as_sql_string( ). DATA(lv_skips) = io_request-&gt;get_paging( )-&gt;get_offset( ). DATA(lv_tops) = io_request-&gt;get_paging( )-&gt;get_page_size( ). If lv_top &lt; 0. lv_top = 1. ENDIF SELECT * FROM ztb_po_item WHERE (lv_item_fs) ORDER BY po_num INTO CORRESPONDING FIELDS OF TABLE _itms. io_response-&gt;set_total_number_of_records( lines( it_itms ) ). io_response-&gt;set_data( it_itms ). ENDCASE. ENDMETHOD. ENDCLASS.</code></pre><H2 id="toc-hId-219319096">Metadata Extension</H2><P>Header</P><pre class="lia-code-sample language-abap"><code>@Metadata.layer: #CORE @UI:{ headerInfo: { typeName: 'Purchase Order', typeNamePlural: 'Purchase Orders', title: { type: #STANDARD, value: 'po_num' } } } annotate entity ZI_PO_HEAD with { @UI.facet: [[ id: 'po_num', purpose: #STANDARD, position: 10, type:#IDENTIFICATION REFERENCE, // type:#COLLECTION, label: 'Purchase Order Header' }, { id: 'POItems', purpose: #STANDARD, type:#LINEITEM_REFERENCE, position: 20, targetElement: '_itms', label: 'Purchase Order Items' } ] @UI.lineItem: [{position: 10, label: 'Purchase Order'}] @UI.selectionField: [{ position: 10 }] @UI.identification: [{ position: 10, label: 'Purchase Order' }] po_num; @UI.lineItem: [{position: 30,label: 'Order Type', importance: #HIGH }] @UI.identification: [{position: 30,label: 'Order Type' }] type; @UI.lineItem: [{position: 40, label: 'Company Code', importance: HIGH }] @UI.identification: [{ position: 40,label: 'Company Code' }] comp_code; @UI.lineItem: [{position: 50, label: 'Organization', importance: #HIGH }] @UI.identification: [{position: 50, label: 'Organization' }] org; @UI.lineItem: [{ position: 60, label: 'Vendor' }] @UI.identification: [{ position: 60, label: 'Vendor' }] vendor; @UI.lineItem: [{ position: 70, label: 'Plant' }] @UI.selectionfield: [{ position: 70 }] @UI.identification: [{ position: 70, label: 'Plant' }] plant; @UI.lineItem: [{ position: 80, label: 'Status' }] @UI.identification: [{ position: 80, label: 'Purchase Status' }] status; @UI.lineItem: [{ position: 90, label: 'Purchase Cat' }] @UI.identification: [{ position: 90, label: 'Purchase Cat' }] doc_cat; }</code></pre><P>Items</P><pre class="lia-code-sample language-abap"><code>@Metadata.layer: #CORE @UI:headerInfo: { title: { label: 'PurchaseItemInfo' type: #STANDARD, value: '_hd' } } } annotate entity ZI_PO_ITS with { @UI.facet: [[ id: 'ItemID', purpose: #STANDARD, position: 10, type:#IDENTIFICATION REFERENCE, label: 'Item Information' } ] @UI.lineItem: [{position: 10, label: 'Purchase Order'}] @UI.identification: [{ position: 10, label: 'Purchase Order' }] po_num; @UI.lineItem: [{position: 20,label: 'Item Number'}] @UI.identification: [{position: 20,label: 'Item Number' }] po_item; @UI.lineItem: [{position: 30,label: 'Short text' }] @UI.identification: [{position: 30,label: 'Short text' }] item_text; @UI.lineItem: [{position: 40, label: 'Material'}] @UI.identification: [{ position: 40,label: 'Material' }] material; @UI.lineItem: [{position: 50, label: 'Plant' }] @UI.identification: [{position: 50, label: 'Plant' }] plant; @UI.lineItem: [{ position: 60, label: 'Storage Location' }] @UI.identification: [{ position: 60, label: 'Storage Location' }] stor_loc; @UI.lineItem: [{ position: 70, label: 'Order Quantity' }] @UI.identification: [{ position: 70, label: 'Order Quantity' }] qty; @UI.lineItem: [{ position: 80, label: 'Product Price' }] @UI.identification: [{ position: 80, label: 'Product Price' }] product_price; }</code></pre><H2 id="toc-hId-22805591">Service Definition</H2><P>Expose the Custom Entities</P><pre class="lia-code-sample language-abap"><code>@EndUserText.label: 'PO' define service ZUI_PO_HO { expose ZI_PO_HEAD as PO; expose ZI_PO_ITS as Item; }</code></pre><H2 id="toc-hId-173546443">Service Binding</H2><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_22-1772949333238.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381066iA58DDC8BC85DA46D/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_22-1772949333238.png" alt="YogiPavan_22-1772949333238.png" /></span></P><H2 id="toc-hId--22967062">Preview the Application</H2><P>Choose Preview</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_23-1772949333243.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381065iA4A49EE1D1377827/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_23-1772949333243.png" alt="YogiPavan_23-1772949333243.png" /></span></P><P>Choose Go, then Implementation class is executed.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_24-1772949333250.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381068iD62B4B78993D0BD8/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_24-1772949333250.png" alt="YogiPavan_24-1772949333250.png" /></span></P><P>Navigate to items details.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogiPavan_25-1772949333254.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/381069i3C78AC921D79A3EA/image-size/medium?v=v2&amp;px=400" role="button" title="YogiPavan_25-1772949333254.png" alt="YogiPavan_25-1772949333254.png" /></span></P><H2 id="toc-hId--219480567">References</H2><UL><LI><A href="https://help.sap.com/docs/abap-cloud/abap-data-models/cds-custom-entities" target="_blank" rel="noopener noreferrer">Custom Entities | SAP Help Portal</A></LI><LI><A href="https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/abencds_f1_define_custom_entity.html" target="_blank" rel="noopener noreferrer">CDS DDL - DEFINE CUSTOM ENTITY | ABAP Keyword Documentation</A></LI><LI><A href="https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/ABENCDS_F1_CUSTOM_QUERY.html" target="_blank" rel="noopener noreferrer">CDS DDL - DEFINE CUSTOM ENTITY, ABAP Class | ABAP Keyword Documentation</A></LI><LI><A href="https://help.sap.com/docs/abap-cloud/abap-rap/using-cds-custom-entity-for-data-modeling" target="_blank" rel="noopener noreferrer">Using a CDS Custom Entity for Data Modeling | SAP Help Portal</A></LI></UL><H2 id="toc-hId--415994072">Conclusion</H2><P>A CDS custom entity is used to write the custom logic with an ABAP class, and the data retrieval logic is&nbsp; executed on the application server .</P><P>Service definition and Binding can be created for a custom entity with a Binding type Web API and UI.</P><P>&nbsp;</P> 2026-03-13T06:56:29.491000+01:00 https://community.sap.com/t5/abap-blog-posts/week-3-use-rap-business-logic-prediction-to-implement-validation/ba-p/14342759 Week 3 : Use RAP Business Logic Prediction to Implement Validation 2026-03-16T05:30:00.017000+01:00 sheenamk https://community.sap.com/t5/user/viewprofilepage/user-id/142394 <P>Last week we had created a RAP Application and added some entries in it. We also explored how to use Joule's 'Explain' feature to understand a simple code added in the CDS Data D<SPAN>efinition</SPAN>.&nbsp;</P><P>This week let us go one step further and explore another very interesting feature of Joule's ABAP AI capability -&nbsp; The <STRONG>RAP Business Logic Prediction</STRONG>.</P><P><FONT size="4"><STRONG>Quick Links</STRONG></FONT></P><P><SPAN>Please use&nbsp;</SPAN><A href="https://community.sap.com/t5/abap-forum/questions-march-2026-developer-challenge-joule-for-developers-in-abap/m-p/14342754#M686" target="_self">this separate thread to ask your questions and discuss issues</A>.&nbsp;</P><P><FONT size="4"><STRONG>Sample Scenario</STRONG></FONT></P><P>Here let us think about any simple scenario like changing a field to ‘Mandatory’ and then create a new entry without filling value for this field. Empty values should not be accepted for the mandatory field and we can use the <STRONG>‘validation’</STRONG> keyword to check if its kept empty. Here use Joule’s ‘<STRONG>RAP Predict Business Logic</STRONG>’ capability to suggest the code to raise an error message in the implementation method of the validation function. Let’s see the steps in detail.</P><P><STRONG><U>Task1:</U></STRONG> <STRONG>Create a validation and implement the corresponding method.</STRONG></P><OL><LI>Create a validation in the BDEF of the CDS view. Open your behavior definition and specify one of the fields as mandatory.<span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Define Mandatory Field" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/380225iF1D8068A92B37209/image-size/large?v=v2&amp;px=999" role="button" title="Mandatory Field.jpg" alt="Define Mandatory Field" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Define Mandatory Field</span></span></LI><LI>Define the Validation in same BDEF of the CDS view.<span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Validation Defenition" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/380226iAE7BE88A40809E7D/image-size/large?v=v2&amp;px=999" role="button" title="Validation Defenition.jpg" alt="Validation Defenition" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Validation Defenition</span></span></LI><LI>In order to have draft instances being checked by validations before they become active, they have to be specified for the&nbsp;<STRONG>draft determine action prepare</STRONG>&nbsp;in the behavior definition. Replace the code line&nbsp;<STRONG>draft determine action Prepare; </STRONG>in your BDEF&nbsp;with the following code snippet as shown on the screenshot below.<span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Prepare Action" style="width: 770px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/380227iFC934B9F2CDAD5B2/image-size/large?v=v2&amp;px=999" role="button" title="Prepare Action for Validation.jpg" alt="Prepare Action" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Prepare Action</span></span></LI><LI>Save and activate the changes.</LI><LI>Now you can notice a small icon to the left of the validation definition. Click on it to create the implementation method for adding validation logic in the local handler class&nbsp;of the behavior pool of your entity. Save and activate the changes. <STRONG>Hint:</STRONG> You can right click on the new method name and choose Quick Fix as well.<span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Implement Validation" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/380234i167B896BE86066ED/image-size/large?v=v2&amp;px=999" role="button" title="Implement Validation.jpg" alt="Implement Validation" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Implement Validation</span></span>For additional information on Validations and its syntax and use you can refer the BDEF ‘/DMO/R_Travel_D’. Alternatively you can also refer <A href="https://github.com/SAP-samples/abap-platform-rap100/tree/main/exercises/ex05" target="_blank" rel="noopener nofollow noreferrer">https://github.com/SAP-samples/abap-platform-rap100/tree/main/exercises/ex05</A></LI></OL><P><STRONG><U>Task2:</U> Enhance validation with RAP Predict Business Logic</STRONG></P><P>Use Joule's RAP Predict Business Logic to add the logic to check whether the mandatory field created in Task 1 is filled while creating a new entry. If it is left empty throw an error message.</P><P><FONT color="#FF0000">Note:- The logic and examples are mentioned just for your reference and to make the purpose of the challenge easy to understand. Please feel free to use your own logic and dataset.</FONT></P><P>To know how to use&nbsp;<STRONG>RAP Predict Business Logic&nbsp;</STRONG>follow this&nbsp;<A href="https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/rap-business-logic-prediction?locale=en-US#video-tutorial" target="_self" rel="noopener noreferrer">tutorial.&nbsp;</A><STRONG>Hint:</STRONG> You can right click on the new method name and choose Quick Fix as well.</P><P>Good luck and wait for the last challenge next week. Until then Stay Jouled !!!</P> 2026-03-16T05:30:00.017000+01:00 https://community.sap.com/t5/technology-blog-posts-by-members/rap-new-feature-generating-managed-rap-applications-with-table-entity/ba-p/14340055 RAP New Feature : Generating Managed RAP Applications With Table Entity 2026-03-16T12:19:37.144000+01:00 harsha_reddy24 https://community.sap.com/t5/user/viewprofilepage/user-id/2263071 <P>Traditionally, when developing a managed RAP application, we create multiple artifacts such as CDS view entities, behavior definitions, service definitions, and service bindings. However, with the introduction of <STRONG>Table Entity, SAP allows us to directly expose database tables in a RAP-compliant way, significantly reducing boilerplate development effort.</STRONG></P><P>This feature is especially useful when:</P><UL><LI><P>You want to quickly generate a managed RAP application</P></LI><LI><P>The table structure already satisfies your business requirements</P></LI><LI><P>You want to minimize intermediate CDS modeling layers</P></LI><LI><P>You are building internal or utility applications with simple transactional needs</P><P>In this blog, we will explore:</P><UL><LI><P>What a Table Entity is in RAP</P></LI><LI><P>How it differs from traditional CDS view entities</P></LI><LI><P>Step-by-step creation of a Managed RAP application using Table Entity</P></LI><LI><P>Service exposure and preview in Fiori Elements</P><P class="" align="left"><FONT color="#c9211e"><FONT face="Times New Roman, serif"><FONT size="4"><STRONG>Table Entity:</STRONG></FONT></FONT></FONT></P><UL><LI><P class="" align="left"><FONT face="Times New Roman, serif"><FONT size="4">Read and write access is possible using ABAP SQL SELECT, UPDATE, MODIFY, INSERT, and DELETE.</FONT></FONT></P></LI><LI><P class="" align="left"><FONT face="Times New Roman, serif"><FONT size="4">A table entity can be used as a data type in ABAP.</FONT></FONT></P><H3 id="toc-hId-1920390563"><STRONG><FONT color="#c9211e"><FONT face="Times New Roman, serif"><FONT size="4">Properties of Table Entities:</FONT></FONT></FONT></STRONG></H3><P class=""><STRONG><FONT color="#c9211e">Key Fields&nbsp;– You can define one or more elements as the primary key using the keyword KEY.&nbsp;However, unlike database tables, key fields are optional and it is also possible to have a table entity without a primary key.</FONT></STRONG></P><P class="">Note: The access pattern of a table entity without a primary key is that it is always read completely, which can result in longer processing times. Single record access is not provided.</P><P class=""><STRONG><FONT color="#c9211e">Client Dependency</FONT></STRONG></P><P class="">Client handling is defined using the header annotation&nbsp;@ClientHandling.type. The possible annotation values are&nbsp;#CLIENT_DEPENDENT&nbsp;or&nbsp;#CLIENT_INDEPENDENT.&nbsp;</P><P class=""><STRONG><FONT color="#c9211e">Flag for Null Values</FONT></STRONG></P><P class="">A null value on the database is an undefined value. Columns of table entities are by default created as&nbsp;NOT NULL&nbsp;on the&nbsp;SAP HANA database. It is possible to override this default behavior by using the optional addition&nbsp;NULL&nbsp;for a column.&nbsp;</P><P class=""><STRONG><FONT color="#c9211e">Delivery Class</FONT></STRONG></P><P class="">The delivery class of a table entity controls the transport of table data in installations, upgrades, or client copies, and in transports between customer systems. Annotation &nbsp;@AbapCatalog.deliveryClass is used to specify delivery class.<BR /><BR /></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="harsha_reddy24_0-1772513085968.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/378834iF40F0A292A8BBB93/image-size/medium?v=v2&amp;px=400" role="button" title="harsha_reddy24_0-1772513085968.png" alt="harsha_reddy24_0-1772513085968.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="harsha_reddy24_1-1772513147935.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/378836iE829FC6B96AC3FFF/image-size/large?v=v2&amp;px=999" role="button" title="harsha_reddy24_1-1772513147935.png" alt="harsha_reddy24_1-1772513147935.png" /></span></P><P>&nbsp;</P><UL><LI>select table entity template.<BR /><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="harsha_reddy24_2-1772513231009.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/378839i0E7CB744AE3BB673/image-size/large?v=v2&amp;px=999" role="button" title="harsha_reddy24_2-1772513231009.png" alt="harsha_reddy24_2-1772513231009.png" /></span></LI></UL></LI></UL></LI></UL></LI></UL><pre class="lia-code-sample language-abap"><code>@ClientHandling.type: #CLIENT_DEPENDENT @AbapCatalog.deliveryClass: #APPLICATION_DATA @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'travel information' define table entity ztb_travel { key travel_id : /dmo/travel_id; description : /dmo/description; status : /dmo/travel_status; lastchangedat : timestampl; ​</code></pre><P>&nbsp;</P><UL><LI>create report/class to insert entries.</LI></UL><P>&nbsp;</P><pre class="lia-code-sample language-abap"><code>select travel_id, description, status,lastchangedat FROM /dmo/travel into TABLE (lt_travel). if sy-subrc eq 0. insert ztb_travel FROM TABLE _TRAVEL. if sy-subrc eq 0. out-&gt;write( 'travel data inserted successfully' ). else. out-&gt;write( 'failed to insert' ). ENDIF. endif.</code></pre><P><BR /><BR /><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="harsha_reddy24_3-1772513497446.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/378845iE8922DE326F31E12/image-size/medium?v=v2&amp;px=400" role="button" title="harsha_reddy24_3-1772513497446.png" alt="harsha_reddy24_3-1772513497446.png" /></span></P><UL><LI><P class="" align="left">Lets make our table entity as root entity so that will create rap application as well</P><DIV class=""><DIV class="">&nbsp;</DIV></DIV></LI></UL><pre class="lia-code-sample language-abap"><code>@ClientHandling.type: #CLIENT_DEPENDENT @AbapCatalog.deliveryClass: #APPLICATION_DATA @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'travel information' define root table entity ztb_travel { key travel_id : /dmo/travel_id; description : /dmo/description; status : /dmo/travel_status; lastchangedat : timestampl; }</code></pre><P>&nbsp;</P><P><STRONG>Projection View:<BR /></STRONG></P><pre class="lia-code-sample language-abap"><code>@AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'consumption view for travel table entity' @Metadata.ignorePropagatedAnnotations: true define root view entity zcb_travel as projection on ztb_travel { @UI.facet: [{ label: 'Travel Info', type: #IDENTIFICATION_REFERENCE }] @UI.lineItem: [{ position: 10 }] @UI.identification: [{ position: 10 }] key travel_id, .lineItem: [{ position: 20 }] @UI.identification: [{ position: 20 }] description, .lineItem: [{ position: 30 }] @UI.identification: [{ position: 30 }] status }</code></pre><P>&nbsp;</P><P><STRONG>Interface Behavior Definition:</STRONG></P><pre class="lia-code-sample language-abap"><code>managed implementation in class zbp_tb_travel unique; strict ( 2 ); with draft; define behavior for ztb_travel alias tb_travel lock master total etag lastchangedat draft table zdtbtrav authorization master ( instance ) { create ( authorization : global ); update; delete; field ( readonly ) lastchangedat; draft action Activate optimized; draft action Discard; draft action Edit; draft action Resume; draft determine action Prepare; }</code></pre><P><BR /><STRONG>Projection Behavior Definition:</STRONG></P><pre class="lia-code-sample language-abap"><code>projection implementation in class zbp_cb_travel unique; strict ( 2 ); use draft; define behavior for zcb_travel alias tb_travel { use create; use update; use delete; use action Activate; use action Discard; use action Edit; use action Resume; use action Prepare; }</code></pre><P><BR /><STRONG>Service Definition:<BR /></STRONG></P><P>&nbsp;</P><pre class="lia-code-sample language-abap"><code>@EndUserText.label: 'sd for table entity travel' define service Zsd_tb_trav { expose zcb_travel as TableEntityTravel; }</code></pre><P>&nbsp;<BR /><STRONG>Service Binding:<BR /></STRONG></P><P>&nbsp;</P><pre class="lia-code-sample language-abap"><code>generate service binding and test,we generate managed rap application, CRUD operations will be handled by framework itself.</code></pre><P><STRONG>Conclusion:</STRONG><BR />the table entity in RAP provides a simple and effective way to expose database tables directly in RAP-based applications. It helps developers quickly build transactional services with minimal configuration while still benefiting from the RAP framework’s capabilities. By using table entities, developers can accelerate development and maintain consistency within modern SAP application architecture.<STRONG><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;<a href="https://community.sap.com/t5/c-khhcw49343/ABAP+RESTful+Application+Programming+Model/pd-p/7e44126e-7b27-471d-a379-df205a12b1ff" class="lia-product-mention" data-product="909-1">ABAP RESTful Application Programming Model</a>&nbsp;</STRONG></P> 2026-03-16T12:19:37.144000+01:00 https://community.sap.com/t5/technology-blog-posts-by-sap/sap-btp-abap-environment-customer-amp-partner-roundtable-april-07-2026/ba-p/14349703 SAP BTP ABAP Environment Customer & Partner Roundtable – April 07, 2026 2026-03-17T09:00:00.021000+01:00 Burcu_Karlidag https://community.sap.com/t5/user/viewprofilepage/user-id/151005 <P>Dear customers, partners, and SAP Community members,</P><P>Join us for the next session of our <STRONG>SAP BTP ABAP Environment Customer &amp; Partner Roundtable</STRONG>, taking place on <STRONG>April 07, 2026, from 10:00–11:00 CET</STRONG>.</P><P>Our roundtable is a monthly virtual meeting where we share the latest updates from the product team and showcase live demos from experts. It is a great opportunity to stay up to date with the latest capabilities of the <STRONG>SAP BTP ABAP Environment</STRONG>, ask questions, and engage with the community.</P><P><STRONG>Join the session</STRONG></P><P><span class="lia-unicode-emoji" title=":calendar:">📅</span><STRONG>Date:</STRONG> April 07, 2026<BR /><span class="lia-unicode-emoji" title=":alarm_clock:">⏰</span><STRONG>Time:</STRONG> 10:00–11:00 CET</P><P><STRONG>Agenda</STRONG></P><P><span class="lia-unicode-emoji" title=":small_blue_diamond:">🔹</span><STRONG>App as an Entity</STRONG> – <EM>Aron Leibfried</EM></P><P><span class="lia-unicode-emoji" title=":small_blue_diamond:">🔹</span><STRONG>Direct App Launch</STRONG> – <EM>Aparna Narayanaswamy</EM></P><P><EM><span class="lia-unicode-emoji" title=":small_blue_diamond:">🔹</span></EM><STRONG>Infrastructure Topics (Smaller Runtime &amp; Costs,&nbsp;Multi-Availability Zones)&nbsp;</STRONG>–&nbsp;<EM>Christian Lutter</EM></P><P><EM><span class="lia-unicode-emoji" title=":small_blue_diamond:">🔹</span><STRONG>Product Updates</STRONG> – Frank Jentsch</EM></P><P>The roundtable is a<SPAN>&nbsp;</SPAN><STRONG>monthly series</STRONG><SPAN>&nbsp;</SPAN>taking place on the<SPAN>&nbsp;</SPAN><STRONG>first Tuesday of every month (10:00–11:00 CET)</STRONG>.</P><P><SPAN class="lia-unicode-emoji"><SPAN class="lia-unicode-emoji"><span class="lia-unicode-emoji" title=":backhand_index_pointing_right:">👉</span>&nbsp;</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><SPAN>We’re looking forward to seeing you there!</SPAN></P><P><STRONG>SAP BTP ABAP Environment Team</STRONG></P> 2026-03-17T09:00:00.021000+01:00 https://community.sap.com/t5/abap-blog-posts/week-4-use-joule-predictive-code-completion-to-implement-determination/ba-p/14342788 Week 4 : Use Joule Predictive Code Completion to Implement Determination 2026-03-23T05:30:00.019000+01:00 sheenamk https://community.sap.com/t5/user/viewprofilepage/user-id/142394 <P>Congratulations to everyone who came along with us till the 4th week of the ABAP Developer Challenge. So far we have seen :</P><UL><LI>How to create a OData UI Service from Scratch using Joule Chat</LI><LI>How to use Joule - Explain feature to understand a block of code.</LI><LI>How to use Joule - RAP Predict Business Logic to create logic for specific tasks.</LI></UL><P>Let us wrap up with another interesting feature of Joule's ABAP AI Capability - The <STRONG>Joule&nbsp;Predictive Code Completion.</STRONG></P><P><FONT size="4"><STRONG>Quick Links</STRONG></FONT></P><P><SPAN>Please use&nbsp;</SPAN><A href="https://community.sap.com/t5/abap-forum/questions-march-2026-developer-challenge-joule-for-developers-in-abap/m-p/14342754#M686" target="_self">this separate thread to ask your questions and discuss issues</A>.&nbsp;</P><P><STRONG>Sample Scenario</STRONG></P><P>We had asked you to create a field of type 'Date' during the RAP application creation.</P><P>Now let us use <STRONG>Determination</STRONG>&nbsp;function to calculate the number of years since the value in Date field. You can implement it while creating a new record using the app.</P><P><STRONG><U>Task1: </U></STRONG><STRONG>Create a determination and implement the corresponding method.</STRONG></P><OL><LI>Define a determination in the BDEF of the CDS view.<span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Define Determination" style="width: 956px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/380373i6C6937570AEFC788/image-size/large?v=v2&amp;px=999" role="button" title="Define Determination.jpg" alt="Define Determination" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Define Determination</span></span></LI><LI>Now you can notice a small icon to the left of the determination definition. Click on it to create the implementation method for adding determination logic in the local handler class&nbsp;of the behavior pool of your entity. Save and activate the changes.<span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Implement Determination" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/380375i93CA4B6E534F8C1D/image-size/large?v=v2&amp;px=999" role="button" title="Implement Determination Method.jpg" alt="Implement Determination" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Implement Determination</span></span>For additional information on Determinations and its syntax and use you can refer the BDEF ‘/DMO/R_Travel_D’. Alternatively you can also refer <A href="https://github.com/SAP-samples/abap-platform-rap100/blob/main/exercises/ex04" target="_blank" rel="noopener nofollow noreferrer">https://github.com/SAP-samples/abap-platform-rap100/blob/main/exercises/ex04</A></LI></OL><P><STRONG><U>Task2:</U> Enhance determination with Joule Code Prediction Capability</STRONG></P><P>Use Joule's Predictive Code Completion feature to complete your code by providing simple prompts for each step in the logic.</P><P>Here please note that we should use the Toggle option to disable / enable&nbsp;Joule Code Prediction Capability by pressing&nbsp;<span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sheenamk_0-1772735109647.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/380379iD9968BF55E6106DD/image-size/medium?v=v2&amp;px=400" role="button" title="sheenamk_0-1772735109647.png" alt="sheenamk_0-1772735109647.png" /></span>&nbsp;button in the toolbar.</P><P><EM><FONT color="#000000">Hint: Disable the&nbsp;Joule Code Prediction Capability if you want to give prompts for new steps / once finished to stop Automatic Code Prediction.</FONT></EM></P><P><FONT color="#FF0000"><SPAN>Note:- The logic and examples are mentioned just for your reference and to make the purpose of the challenge easy to understand. Please feel free to use your own logic and dataset.</SPAN></FONT></P><P><FONT color="#FF0000"><SPAN><FONT color="#000000">To know how to use&nbsp;</FONT></SPAN></FONT>Predictive Code Completion f<SPAN>ollow this&nbsp;</SPAN><A href="https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/video-tutorials-for-predictive-code-completion?locale=en-US" target="_self" rel="noreferrer noopener">tutorial</A></P><P>Please note that the challenge will remain open for another week for anyone who is running late.&nbsp;</P><P>Before we close for this year we would like to thank everyone who participated. We hope all of you enjoyed the challenge. Let us continue to explore how&nbsp;<SPAN class="">SAP Joule for developers, ABAP AI capabilities</SPAN><SPAN>&nbsp;can support us with our day-to-day tasks when working with ABAP code, to increase our efficiency and to lower total cost of development.</SPAN></P><P><SPAN>Happy Jouling!!!</SPAN></P><P>&nbsp;</P> 2026-03-23T05:30:00.019000+01:00 https://community.sap.com/t5/technology-blog-posts-by-sap/custom-business-configurations-f4579-define-default-grouping-and-sorting/ba-p/14359823 Custom Business Configurations (F4579): Define default grouping and sorting 2026-03-27T13:50:03.260000+01:00 patrick_winkler https://community.sap.com/t5/user/viewprofilepage/user-id/729521 <H1 id="toc-hId-887480474" id="toc-hId-1663424358">Introduction</H1><P><SPAN>The&nbsp;</SPAN><A href="https://help.sap.com/docs/btp/sap-business-technology-platform/custom-business-configurations-app" target="_blank" rel="noopener noreferrer"><SPAN class="">Custom Business Configurations</SPAN></A><SPAN>&nbsp;(CUBCO) app serves as an entry point to the&nbsp;</SPAN><A class="" title="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/business-configuration-maintenance-object?version=Cloud" href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/business-configuration-maintenance-object?version=Cloud" target="_blank" rel="noopener noreferrer">Business Configuration Maintenance Object</A><SPAN>&nbsp;(SMBC) provided by custom applications or partners.<BR /><BR />This blog explains how to define the default grouping and sorting for the tables of the business configuration object.<BR />The basic procedure is already <A href="https://github.com/SAP-samples/abap-platform-fiori-feature-showcase/blob/main/06_object_page_content.md#presentation-variant---object-page" target="_self" rel="nofollow noopener noreferrer">explained here</A>,&nbsp;but we apply it directly to the result of the ADT wizard.<BR /></SPAN></P><P>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>&nbsp;</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>&nbsp;</LI><LI><a href="https://community.sap.com/t5/c-khhcw49343/SAP+S%25252F4HANA+Cloud+Private+Edition/pd-p/5c26062a-9855-4f39-8205-272938b6882f" class="lia-product-mention" data-product="1198-1">SAP S/4HANA Cloud Private Edition</a>&nbsp;</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><H1 id="toc-hId-1439888495" id="toc-hId-1466910853">Example scenario</H1><P>Company codes are defined in the configuration table ZDEMO_CC. In the CUBCO app, the rows are to be grouped and sorted by country.</P><pre class="lia-code-sample language-abap"><code>@EndUserText.label : 'Company Code' @AbapCatalog.enhancement.category : #NOT_EXTENSIBLE @AbapCatalog.tableCategory : #TRANSPARENT @AbapCatalog.deliveryClass : #C @AbapCatalog.dataMaintenance : #ALLOWED define table zdemo_cc { key client : abap.clnt not null; key company_code : abap.numc(4) not null; country : land1; last_changed_at : abp_lastchange_tstmpl; local_last_changed_at : abp_locinst_lastchange_tstmpl; }</code></pre><H1 id="toc-hId-1243374990" id="toc-hId-1270397348">Define presentation variant</H1><P>First you use the<SPAN>&nbsp;</SPAN><A href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/generating-business-configuration-maintenance-object-with-generate-abap-repository-objects-wizard" target="_blank" rel="noopener noreferrer">ADT wizard to generate a Business Configuration Maintenance Object</A><SPAN>&nbsp;</SPAN>for this table.</P><P>In the generated CDS view ZI_COMPANYCODE_S of the Singleton entity, you change the facet type from #LINEITEM_REFERENCE to #<SPAN>PRESENTATIONVARIANT_REFERENCE and add the targetQualifier attribute:</SPAN></P><pre class="lia-code-sample language-abap"><code> .facet: [ { id: 'ZI_CompanyCode', purpose: #STANDARD, type: #PRESENTATIONVARIANT_REFERENCE, targetQualifier: 'myVariant', label: 'Company Codes', position: 1 , targetElement: '_CompanyCode' } ] .lineItem: [ { position: 1 } ] key 1 as SingletonID,</code></pre><P>In the metadata extension ZI_COMPANYCODE of the company code entity, add the following presentation variant:</P><pre class="lia-code-sample language-abap"><code>.presentationVariant: [ { qualifier: 'myVariant', sortOrder: [ { by: 'Country', direction: #ASC } ], groupBy: [ 'Country' ], visualizations: [{type: #AS_LINEITEM}] } ] annotate view ZI_CompanyCode with</code></pre><P>Finally, open the generated SMBC object ZCOMPANYCODE in ADT and open the table settings section. Change the table type attribute from Grid Table to Responsive Table because&nbsp;<A href="https://help.sap.com/docs/ABAP_PLATFORM_NEW/468a97775123488ab3345a0c48cadd8f/d344c5aa5c81483482dbbed5b3abb142.html?version=202510.001" target="_self" rel="noopener noreferrer">grouping is not supported for grid tables</A>. If you only need the default sorting, you can continue to use the grid table.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="patrick_winkler_1-1774615697786.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/389766iEE96390108EFA388/image-size/medium?v=v2&amp;px=400" role="button" title="patrick_winkler_1-1774615697786.png" alt="patrick_winkler_1-1774615697786.png" /></span></P> 2026-03-27T13:50:03.260000+01:00 https://community.sap.com/t5/technology-blog-posts-by-sap/our-2026-roadmap-for-joule-for-developers-abap-ai-capabilities/ba-p/14360358 Our 2026 Roadmap for Joule for Developers ABAP AI capabilities 2026-03-28T20:13:48.908000+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"><BR /><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="J4D_Agentic.png" style="width: 200px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/390078iDD4D1E72EFCEDA09/image-size/small?v=v2&amp;px=200" role="button" title="J4D_Agentic.png" alt="J4D_Agentic.png" /></span></A><A href="https://www.sap.com/events/sapphire/orlando/flow/sap/so26/catalog/page/catalog?search=ABAP&amp;tab.sessionplanned=1692641568884001cZ9d" target="_blank" rel="noopener noreferrer"><STRONG>Sapphire 2026 </STRONG>is approaching quickly and as usual it will bring lots of new announcements.</A> So now is the right point in time to recap what has been announced already until Q2/2026 and prepare for the <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/joule-for-developers-abap-ai-sapphire-and-asug-2026-sessions/ba-p/14365782" target="_blank">ABAP AI sessions</A>.</P><P class="lia-indent-padding-left-30px" data-unlink="true" style="padding-left : 30px;">The <STRONG>ABAP Platform&nbsp;AI</STRONG> (covering both SAP BTP ABAP Environment and SAP S/4HANA) transitions from a set of independent AI skills to full-scale <STRONG>Agentic AI</STRONG>. <SPAN class="">The roadmap focuses heavily on increasing developer productivity via <STRONG>agents in Joule for Developers ABAP (J4D ABAP)</STRONG> and the modernization of ABAP development tools.<BR /><BR />The key benefits for customers and partners of the&nbsp;<STRONG>roadmap until Q2/2026 are:</STRONG></SPAN></P><OL><LI><SPAN class="">ABAP </SPAN><SPAN class="">development&nbsp;</SPAN><SPAN class="">tools with <STRONG>AI Agents</STRONG></SPAN><STRONG>&nbsp;<SPAN class="">in</SPAN><SPAN class="">&nbsp;VS Code with ABAP MCP Server.</SPAN></STRONG></LI><LI><SPAN class="">ABAP AI </SPAN><SPAN class="">f</SPAN><SPAN class="">or lower releases of </SPAN><STRONG><SPAN class="">SAP S/4HANA Cloud Private Edition (i.e. 2021, 2022, 2023 and 2025).</SPAN></STRONG></LI><LI><STRONG><SPAN class="">Simplified customer on-boarding of ABAP AI&nbsp;</SPAN></STRONG><SPAN class="">via SAP for Me and Central Business Configuration</SPAN><STRONG><SPAN class="">.</SPAN></STRONG></LI><LI><SPAN class=""><STRONG>Faster innovation with Side-by-Side consumption of SAP and 3rd party Agentic IDEs and LLMs</STRONG><BR />(e.g. Microsoft, Amazon, IBM, OpenAI, Anthropic, Google, Mistral…)</SPAN></LI></OL><DIV class="">&nbsp;</DIV><DIV class=""><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="J4D_Agentic_sbs.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/390119i0AFD64FE139637CA/image-size/large?v=v2&amp;px=999" role="button" title="J4D_Agentic_sbs.png" alt="J4D_Agentic_sbs.png" /></span></DIV><DIV class=""><P><SPAN class="">The biggest shift in 2026 will be the <STRONG>move toward Agentic AI</STRONG>, where the existing ABAP AI skills doesn't just explain, complete or generate code (e.g. RAP, CDS, Tests) <STRONG>independently but acts as an autonomous collaborator</STRONG>.&nbsp;</SPAN><SPAN class="">This includes built-in <STRONG>ABAP MCP (Model Context Protocol) server.</STRONG> The introduction of VS Code as IDE can only be a start as the depth and breath of Eclipse which we achieved in so many years cannot be reached with one or two steps in VS Code. It'll be a journey which starts with first providing&nbsp;End-to-end UI services development with agents.</SPAN></P><P><SPAN class="">The new ABAP AI side-by-side architecture is designed to provide a scalable and future‑proof foundation for <STRONG>ABAP AI capabilities across heterogeneous SAP landscapes</STRONG>. It enables customers to consume ABAP AI services side‑by‑side, independent of the underlying S/4HANA release, ensuring access even <STRONG>for lower‑release Private Edition systems</STRONG>.&nbsp;</SPAN></P><P><SPAN class="">A core benefit of the architecture is also its simplified enablement model through SAP for Me and Central Business Configuration, reducing on-boarding effort and ensuring consistent lifecycle management across environments.&nbsp;<BR />In addition, the architecture allows us to accelerate innovation speed by allowing to <STRONG>leverage SAP‑provided ABAP AI models alongside leading third‑party LLMs</STRONG> (e.g., Microsoft, Amazon, IBM, OpenAI, Anthropic, Google, Mistral) <STRONG>more independently from releases</STRONG>. This flexibility ensures rapid adoption of new capabilities without dependency on individual release cycles.</SPAN></P><P><SPAN class="">If you missed the <STRONG>highlights we delivered in Q1/2026</STRONG> have a look into what <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">Olga Dolinskaja shared about ABAP AI ATC finding explain and custom code explain and proposals</A>. Although this will be a focus also for our future roadmap we will also not stop investing into AI app generators like the&nbsp;<A href="https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/cds-analytical-model-generation-powered-by-ai" target="_blank" rel="noopener noreferrer">Embedded Analytics model generator</A>.&nbsp;</SPAN></P></DIV><DIV class="">&nbsp;</DIV><DIV class=""><STRONG>Here you can learn more:</STRONG></DIV><DIV class=""><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%2FaU3Eu2SlvxE%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DaU3Eu2SlvxE&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FaU3Eu2SlvxE%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="400" height="225" scrolling="no" title="ABAP AI Roadmap, CAP Jan 2026 Release, Brazil CodeJams, CAP Roundtable, DYK #3 | SAP Developer News" frameborder="0" allow="autoplay; fullscreen; encrypted-media; picture-in-picture;" allowfullscreen="true"></iframe></div></DIV><OL><LI><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></LI><LI><A href="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" target="_blank"><SPAN class="">Your Roadmap for getting started with ABAP AI</SPAN></A></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><SPAN class="">Help &amp; Guides</SPAN><OL><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></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-03-28T20:13:48.908000+01:00 https://community.sap.com/t5/abap-blog-posts/optional-task-use-joule-cds-unit-test-generation/ba-p/14358864 Optional Task: Use Joule CDS Unit Test Generation 2026-03-30T06:30:00.020000+02:00 Shilpa_Shankar https://community.sap.com/t5/user/viewprofilepage/user-id/141830 <P>Thank you to everyone who participated in the ABAP Developer Challenge over the past four weeks and successfully completed all four tasks focused on ABAP AI capabilities. We truly appreciate the enthusiasm and engagement shown throughout the challenge. As a follow-up, we are excited to introduce an additional bonus task.</P><P>In Week 2, you enhanced a CDS data definition by implementing simple logic. Building on that work, your next step is to create an ABAP test class to validate the logic within the CDS data definition. For this task, you will utilize another feature of Joule’s ABAP AI capabilities — <STRONG>CDS Test Generation</STRONG>.</P><P>Task:</P><UL><LI>Select the CDS data definition that you enhanced in Week 2.</LI><LI>Generate an ABAP test class using Joule’s CDS Test Generation feature.</LI><LI>Execute the test class and ensure that all generated test cases run successfully.</LI></UL><P>Please refer to the link below for detailed guidance on how to use this ABAP AI capability.</P><P><A href="https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/use-cds-test-class-generator?locale=en-US" target="_blank" rel="noopener noreferrer">https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/use-cds-test-class-generator?locale=en-US</A></P> 2026-03-30T06:30:00.020000+02:00 https://community.sap.com/t5/technology-blog-posts-by-sap/smaller-abap-runtime-size-now-available-in-sap-btp-abap-environment/ba-p/14350033 Smaller ABAP Runtime Size Now Available in SAP BTP ABAP Environment 2026-03-31T14:40:48.302000+02:00 Burcu_Karlidag https://community.sap.com/t5/user/viewprofilepage/user-id/151005 <P>Starting <STRONG>March 31, 2026</STRONG>, SAP BTP ABAP environment introduces a new runtime sizing option: <STRONG>0.5 ABAP Compute Units (ACU)</STRONG>&nbsp;which is<SPAN class=""><STRONG>&nbsp;8 GB of runtime memory</STRONG>.</SPAN></P><P><SPAN class="">With the introduction of 0.5 ACU, customers can now operate ABAP systems at<STRONG>&nbsp;50% lower ABAP runtime cost compared to the previous minimum size of 1 ACU</STRONG>&nbsp;making it significantly more cost-efficient to run development, test, and sandbox systems.</SPAN></P><P>This enhancement allows&nbsp;SAP BTP ABAP environment to run on <STRONG>smaller runtime units,&nbsp;</STRONG>&nbsp;lowering the entry barrier for development and test systems.</P><H2 id="toc-hId-1792231301"><STRONG>What is an ABAP Compute Unit (ACU)?</STRONG></H2><P>ABAP Compute Units (ACUs) define the runtime capacity of an SAP BTP ABAP environment system. One ACU corresponds to <STRONG>16 GB of memory</STRONG> allocated to the ABAP runtime. The total runtime size determines how much capacity is available across all ABAP application servers. For more information, see the documentation on <A href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/abap-compute-units" target="_self" rel="noopener noreferrer">ABAP Compute Units</A>.</P><H2 id="toc-hId-1595717796">What’s New?</H2><P>With this update&nbsp;<STRONG>SAP BTP ABAP environment</STRONG> now supports <STRONG>0.5 ABAP Compute Units (ACU)</STRONG>&nbsp;as the new minimum system configuration.</P><P>It allows to run smaller systems, enabling more granular runtime sizing compared to previous configurations. It creates an additional option to better match the actual workloads, particularly for smaller environments.</P><H2 id="toc-hId-1399204291"><STRONG>What are the Key Benefits?</STRONG></H2><UL><LI><STRONG>50% lower ABAP runtime cost</STRONG> compared to the previous minimum size (1 ACU)</LI><LI><STRONG>Improved resource utilization</STRONG> for smaller or variable workloads</LI><LI><STRONG>Lower entry barrier</STRONG> for new and existing customers</LI></UL><P>For a detailed breakdown of cost components, see my previous <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/optimize-your-sap-btp-abap-environment-budget-a-detailed-cost-analysis-for/ba-p/13574333" target="_self">blog post</A> on ABAP environment cost calculation.</P><H2 id="toc-hId-1202690786"><STRONG>How to Adjust Existing Systems?</STRONG></H2><P data-unlink="true">Adjusting the ABAP runtime size (ACUs) is handled via manual scaling and <STRONG>does not lead to a system downtime</STRONG>&nbsp;. You can use the SAP BTP Cockpit to update the service instance, for example, from 1 ACU to 0,5 ACU, see the documentation on <A href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/updating-abap-system" target="_self" rel="noopener noreferrer">Updating an ABAP System</A>.</P><H2 id="toc-hId-1006177281"><STRONG>What Needs to be Considered?</STRONG></H2><P>For systems with a runtime size of <STRONG>0.5 ACU</STRONG>, only one application server is used. This setup is suited for development and test, but <STRONG>not recommended for productive use</STRONG>, as it may increase the likelihood of short outages.</P><H3 id="toc-hId-938746495"><SPAN class="">Overview about typical use cases and recommend systems sizes</SPAN></H3><TABLE border="1"><TBODY><TR><TD width="409px" height="50px"><P><STRONG>Use Case</STRONG></P></TD><TD width="143px" height="50px"><P><STRONG>Size</STRONG></P></TD><TD width="198px" height="50px"><STRONG>Total Runtime Memory</STRONG></TD><TD width="178px" height="50px"><STRONG>Application Servers</STRONG></TD></TR><TR><TD width="409px" height="41px"><P>Development, test, sandbox systems for smaller projects</P></TD><TD width="143px" height="41px"><P><STRONG>0.5 ACU (new)</STRONG></P></TD><TD width="198px" height="41px">8 GB</TD><TD width="178px" height="41px">1 á 8 GB</TD></TR><TR><TD width="409px" height="57px">Development, test, sandbox systems for bigger projects;<BR />Productive systems for up to 1,000 active users per day</TD><TD width="143px" height="57px"><STRONG>1 ACU</STRONG></TD><TD width="198px" height="57px">16 GB</TD><TD width="178px" height="57px">2 á 8 GB</TD></TR><TR><TD width="409px" height="57px">Productive systems with higher concurrency or up to 100 tenants&nbsp;</TD><TD width="143px" height="57px"><STRONG>2 ACU</STRONG></TD><TD width="198px" height="57px">32 GB</TD><TD width="178px" height="57px">4 á 8 GB</TD></TR><TR><TD width="409px" height="30px">Productive systems with bigger max session size</TD><TD width="143px" height="30px"><STRONG>4 ACU</STRONG></TD><TD width="198px" height="30px">64 GB</TD><TD width="178px" height="30px">2 á 32 GB</TD></TR><TR><TD width="409px" height="57px">Productive systems with higher load in multitenant SaaS solution&nbsp;</TD><TD width="143px" height="57px"><STRONG>4 ACU</STRONG></TD><TD width="198px" height="57px">64 GB</TD><TD width="178px" height="57px">8 á 8 GB</TD></TR></TBODY></TABLE><P>&nbsp;</P><H2 id="toc-hId-613150271">Further References&nbsp;</H2><P>For more information about sizing options and configuration parameters in <STRONG>SAP BTP ABAP environment</STRONG>, see the documentation on&nbsp;<A href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/creating-abap-system?version=Cloud" target="_self" rel="noopener noreferrer">Creating an ABAP System</A>.</P> 2026-03-31T14:40:48.302000+02:00 https://community.sap.com/t5/technology-blog-posts-by-sap/joule-for-developers-abap-ai-sapphire-and-asug-2026-sessions/ba-p/14365782 Joule for Developers ABAP AI Sapphire and ASUG 2026 Sessions 2026-04-04T17:52:59.936000+02: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"><BR /><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="J4D_Agentic.png" style="width: 242px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/390078iDD4D1E72EFCEDA09/image-dimensions/242x242?v=v2" width="242" height="242" role="button" title="J4D_Agentic.png" alt="J4D_Agentic.png" /></span></A>In case you do not have planned your <STRONG>Sapphire Orlando and ASUG agenda</STRONG> here are my recommendations if you want to learn about the <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/our-2026-roadmap-for-joule-for-developers-abap-ai-capabilities/ba-p/14360358" target="_blank">latest innovations from ABAP Platform and Joule for developers (J4D) ABAP AI capabilities</A>:</P><P data-unlink="true"><A href="https://www.sap.com/events/sapphire/orlando/flow/sap/so26/catalog/page/catalog/session/1770220974077001eR0r" target="_blank" rel="noopener noreferrer"><STRONG>1.&nbsp;Introduction to ABAP Cloud supported by generative AI | BTP1429:&nbsp;</STRONG></A>Get an overview on&nbsp;ABAP Cloud and recent innovations, get insights on Clean Core and see how generative AI boosts your adoption of ABAP Cloud conducted&nbsp;<STRONG>by Alexander Rother</STRONG> (VP, Head of ABAP Platform Product Management).</P><P data-unlink="true"><A href="https://www.sap.com/events/sapphire/orlando/flow/sap/so26/catalog/page/catalog/session/1774374412394001bVsg" target="_blank" rel="noopener noreferrer"><STRONG>2.&nbsp;Build smarter: Agentic ABAP development tools for Visual Studio Code | BTP2573</STRONG></A>:&nbsp;<STRONG>Simona Marincei</STRONG> (Head of AI - SAP ABAP Platform) will show how ABAP agents orchestrate in VS Code via the ABAP MCP-server tasks, speed up coding, and boost productivity across orchestrators from various partners.</P><P data-unlink="true"><STRONG><A href="https://www.sap.com/events/sapphire/orlando/flow/sap/so26/catalog/page/catalog/session/1770220933562001wFEi" target="_blank" rel="noopener noreferrer">3.&nbsp;Agentic ABAP with SAP Joule for Developers: Build faster, migrate smarter | JOU1428:</A></STRONG>&nbsp;<STRONG>Simona Marincei</STRONG> (Head of AI - SAP ABAP Platform) and <STRONG>Nora Klemp</STRONG> (Senior Product Specialist) will explain how&nbsp;agentic ABAP accelerates SAP S/4HANA migrations and streamline ABAP Cloud development across modern and legacy environments.</P><P data-unlink="true"><A href="https://www.sap.com/events/sapphire/orlando/flow/sap/so26/catalog/page/catalog/session/1770745065449001Tvua" target="_blank" rel="noopener noreferrer"><STRONG>4.&nbsp;Customer Influence and feedback: The product road map for ABAP Cloud | BTP1603:</STRONG></A> Learn from&nbsp;<STRONG>Alexander Rother</STRONG> (VP, Head of ABAP Platform Product Management) how to give feedback to the ABAP product roadmap with the&nbsp;Customer Influence site which allows submitting, tracking, and prioritizing ideas.</P><P data-unlink="true"><A href="https://www.sap.com/events/sapphire/orlando/flow/sap/so26/catalog/page/catalog/session/1770220536294001LBuf" target="_blank" rel="noopener noreferrer"><STRONG>5.&nbsp;Modernize classic extensions for clean core in SAP Cloud ERP Private | BTP1426:</STRONG></A> <STRONG>Volker Drees</STRONG> (Product Expert, ABAP Cloud, SAP SE) will explain&nbsp;clean core extensibility practice in SAP S/4HANA Cloud Private Edition. Learn how to govern clean core development using the ABAP test cockpit and how to use the ABAP Cloud development model and clean core extensibility principles to modernize your custom on-stack extensions.</P><P>&nbsp;</P><DIV class=""><A href="https://www.sap.com/events/sapphire/orlando/flow/sap/so26/catalog/page/catalog?search=ABAP&amp;tab.sessionplanned=1692641568884001cZ9d" target="_blank" rel="noopener noreferrer"><STRONG>The full Sapphire Orlando and ASUG 2026 (11.05.2026 - 13.05.2026) agenda can be found here...</STRONG></A></DIV><DIV class=""><STRONG><A href="https://www.sap.com/events/sapphire/madrid/flow/sap/sm26/catalog/page/catalog?tab.sessionplanned=1692641568884001cZ9d&amp;search=Abap" target="_blank" rel="noopener noreferrer">...and here is the agenda for Sapphire Madrid (19.05.2026 - 21.05.26)</A>.</STRONG></DIV><DIV class="">&nbsp;</DIV><DIV class=""><STRONG>Here you can learn more:</STRONG></DIV><OL><LI><SPAN class=""><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/our-2026-roadmap-for-joule-for-developers-abap-ai-capabilities/ba-p/14360358" target="_blank">Our Roadmap for 2026 before Sapphire</A></SPAN></LI><LI><A href="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" target="_blank"><SPAN class="">Your Roadmap for getting started with ABAP AI</SPAN></A></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><SPAN class="">Help &amp; Guides</SPAN><OL><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></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-04-04T17:52:59.936000+02:00 https://community.sap.com/t5/technology-blog-posts-by-sap/new-multi-availability-zone-option-for-sap-btp-abap-environment/ba-p/14364691 New Multi-Availability Zone Option for SAP BTP ABAP Environment 2026-04-06T15:08:26.149000+02:00 Burcu_Karlidag https://community.sap.com/t5/user/viewprofilepage/user-id/151005 <P><SPAN>Starting&nbsp;</SPAN><STRONG>March 20, 2026</STRONG><SPAN>, SAP BTP ABAP environment </SPAN>introduces the&nbsp;<STRONG>multi-availability zone (multi-AZ) option</STRONG> for ABAP environment instances, further strengthening system resilience.</P><P>When enabled, the ABAP runtime components of an <STRONG>SAP BTP ABAP environment instance</STRONG> are distributed across multiple availability zones within a region. In parallel, the SAP HANA Cloud database is configured in a high-availability setup with a primary and a secondary instance in different availability zones, using synchronous replication. This ensures that, in case of infrastructure failures, workloads can continue running with minimal disruption.</P><P>Compared to the default single availability zone setup, the multi-AZ option provides:</P><UL><LI>Distribution of ABAP application servers across availability zones</LI><LI>Higher prioritization during recovery scenarios</LI><LI>Automatic failover to a secondary database instance</LI><LI>Improved resilience in case of availability zone outages</LI></UL><P>It is important to note that the multi-availability zone option does not affect ABAP runtime costs (ACUs). However, persistence layer costs increase, as the SAP HANA Cloud database is deployed with an additional secondary instance (HCUs).</P><P>The option is configured at <STRONG>SAP BTP ABAP environment instance level</STRONG> and is particularly relevant for scenarios with higher availability and resilience requirements.</P><P>For more details, see <A href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/resilience-of-abap-environment-system" target="_self" rel="noopener noreferrer">Resilience of an ABAP Environment System</A>.</P> 2026-04-06T15:08:26.149000+02:00 https://community.sap.com/t5/artificial-intelligence-blogs-posts/how-i-connected-claude-ai-to-my-sap-abap-system-using-mcp-a-complete/ba-p/14365831 How I Connected Claude AI to My SAP ABAP System Using MCP — A Complete Windows Guide 2026-04-07T12:35:07.976000+02:00 Ahmed_Mosbah https://community.sap.com/t5/user/viewprofilepage/user-id/2292286 <P class=""><STRONG>Introduction</STRONG></P><P>The SAP developer community has been buzzing about connecting Claude AI&nbsp;directly to live SAP ABAP systems using MCP (Model Context Protocol) — reading code, modifying objects, creating transports, and activating changes, all from a natural language chat interface.</P><P>I tried it myself on Windows, and it works. This blog walks you through exactly how to set it up.</P><HR /><P class=""><STRONG>What is MCP?</STRONG></P><P class="">MCP (Model Context Protocol) is an open standard that lets AI models like Claude connect to external tools and data sources. Think of it as a plugin system for AI — instead of just answering questions from training data, Claude can actually <EM>call tools</EM> that interact with real systems.</P><P class="">For SAP developers, this means Claude can:</P><UL class=""><LI>Read your actual ABAP code directly from your system</LI><LI>Write and modify objects</LI><LI>Run syntax checks</LI><LI>Create transport requests</LI><LI>Activate objects</LI></UL><P class="">All without you copy-pasting anything.</P><HR /><P class=""><STRONG>The Architecture</STRONG></P><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class="">&nbsp;</DIV><DIV class=""><DIV class="">&nbsp;</DIV></DIV></DIV></DIV></DIV><DIV class=""><PRE><CODE><SPAN>Claude Desktop / Claude Code CLI</SPAN><SPAN> ↕ MCP Protocol</SPAN><SPAN> ┌──────────────────────────┐</SPAN><SPAN> │ mcp-abap-adt │ ← Read-only (13 tools)</SPAN><SPAN> │ mcp-abap-abap-adt-api │ ← Full CRUD (30 tools)</SPAN><SPAN> └──────────────────────────┘</SPAN><SPAN> ↕ ADT REST API</SPAN><SPAN> Your SAP ABAP System</SPAN></CODE></PRE></DIV></DIV><P class="">Both MCP servers were built by Mario Andreschak and communicate with SAP via the same ADT (ABAP Development Tools) API that Eclipse uses under the hood.</P><HR /><P class=""><STRONG>Prerequisites</STRONG></P><P class="">Before starting, you need:</P><UL class=""><LI>Windows 10 or 11 (64-bit)</LI><LI>An SAP ABAP system with <CODE>/sap/bc/adt</CODE> active in SICF</LI><LI>A user with <CODE>SAP_ADT_DEVELOPER</CODE> role (or equivalent)</LI><LI>A Claude Pro/Max/Team subscription at claude.ai</LI><LI>Internet connection</LI></UL><HR /><P class=""><STRONG>Step 1 — Install Node.js</STRONG></P><P class="">Node.js is the runtime required by Claude Code CLI and the MCP servers.</P><OL class=""><LI>Go to <STRONG><A class="" href="https://nodejs.org" target="_blank" rel="noopener nofollow noreferrer">https://nodejs.org</A></STRONG> and download the LTS version</LI><LI>Install with all defaults</LI><LI>Verify in Command Prompt:</LI></OL><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class="">&nbsp;</DIV><DIV class=""><DIV class="">&nbsp;</DIV></DIV></DIV></DIV></DIV><DIV class=""><PRE><CODE><SPAN>node -v → v24.x.x</SPAN><SPAN>npm -v → 11.x.x</SPAN></CODE></PRE></DIV></DIV><HR /><P class=""><STRONG>Step 2 — Install Git for Windows</STRONG></P><P class="">Git provides the bash shell Claude Code requires on Windows.</P><OL class=""><LI>Go to <STRONG><A class="" href="https://git-scm.com/downloads/win" target="_blank" rel="noopener nofollow noreferrer">https://git-scm.com/downloads/win</A></STRONG> and download the installer</LI><LI>During setup, on the PATH screen select: <EM>"Git from the command line and also from 3rd-party software"</EM></LI><LI>Complete with all other defaults</LI></OL><HR /><P class=""><STRONG>Step 3 — Install Claude Code CLI</STRONG></P><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class="">&nbsp;</DIV><DIV class=""><DIV class="">&nbsp;</DIV></DIV></DIV></DIV></DIV><DIV class="">cmd</DIV><DIV class=""><PRE><CODE><SPAN>npm install -g @anthropic-ai/claude-code</SPAN><SPAN>claude --version</SPAN></CODE></PRE></DIV></DIV><P class="">Then log in:</P><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class="">&nbsp;</DIV><DIV class=""><DIV class="">&nbsp;</DIV></DIV></DIV></DIV></DIV><DIV class="">cmd</DIV><DIV class=""><PRE><CODE><SPAN>claude</SPAN></CODE></PRE></DIV></DIV><P class="">Select option 1 (Claude subscription), log in via browser, return to terminal.</P><HR /><P class=""><STRONG>Step 4 — Install mcp-abap-adt (Read-Only MCP Server)</STRONG></P><P class="">This server gives Claude read access to your SAP system with 13 tools including GetProgram, GetClass, GetFunction, GetTable, SearchObject, and more.</P><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class="">&nbsp;</DIV><DIV class=""><DIV class="">&nbsp;</DIV></DIV></DIV></DIV></DIV><DIV class="">cmd</DIV><DIV class=""><PRE><CODE><SPAN>mkdir C:\Tools</SPAN><SPAN>cd C:\Tools</SPAN><SPAN>git clone https://github.com/mario-andreschak/mcp-abap-adt</SPAN><SPAN>cd mcp-abap-adt</SPAN><SPAN>npm install</SPAN><SPAN>npm run build</SPAN></CODE></PRE></DIV></DIV><P class="">Create a <CODE>.env</CODE> file in the folder:</P><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class="">&nbsp;</DIV><DIV class=""><DIV class="">&nbsp;</DIV></DIV></DIV></DIV></DIV><DIV class=""><PRE><CODE><SPAN>SAP_URL=https://your-sap-system.com:44300</SPAN><SPAN>SAP_USERNAME=YOUR_USERNAME</SPAN><SPAN>SAP_PASSWORD=YOUR_PASSWORD</SPAN><SPAN>SAP_CLIENT=300</SPAN><SPAN>TLS_REJECT_UNAUTHORIZED=0</SPAN></CODE></PRE></DIV></DIV><P class="">Register with Claude Code:</P><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class="">&nbsp;</DIV><DIV class=""><DIV class="">&nbsp;</DIV></DIV></DIV></DIV></DIV><DIV class="">cmd</DIV><DIV class=""><PRE><CODE><SPAN>claude mcp add mcp-abap-adt node C:/Tools/mcp-abap-adt/dist/index.js</SPAN><SPAN>claude mcp list</SPAN></CODE></PRE></DIV></DIV><P class="">You should see: <CODE>mcp-abap-adt: ✓ Connected</CODE></P><HR /><P class=""><STRONG>Step 5 — Install mcp-abap-abap-adt-api (Full CRUD Server)</STRONG></P><P class="">This is the powerful one — 30 tools including read, write, syntax check, activate, lock/unlock, and transport management.</P><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class="">&nbsp;</DIV><DIV class=""><DIV class="">&nbsp;</DIV></DIV></DIV></DIV></DIV><DIV class="">cmd</DIV><DIV class=""><PRE><CODE><SPAN>cd C:\Tools</SPAN><SPAN>git clone https://github.com/mario-andreschak/mcp-abap-abap-adt-api.git</SPAN><SPAN>cd mcp-abap-abap-adt-api</SPAN><SPAN>npm install</SPAN><SPAN>npm run build</SPAN></CODE></PRE></DIV></DIV><P class="">Create <CODE>.env</CODE> (note: slightly different variable names):</P><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class="">&nbsp;</DIV><DIV class=""><DIV class="">&nbsp;</DIV></DIV></DIV></DIV></DIV><DIV class=""><PRE><CODE><SPAN>SAP_URL=https://your-sap-system.com:44300</SPAN><SPAN>SAP_USER=YOUR_USERNAME</SPAN><SPAN>SAP_PASSWORD=YOUR_PASSWORD</SPAN><SPAN>SAP_CLIENT=300</SPAN><SPAN>SAP_LANGUAGE=EN</SPAN><SPAN>NODE_TLS_REJECT_UNAUTHORIZED=0</SPAN></CODE></PRE></DIV></DIV><P class="">Register:</P><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class="">&nbsp;</DIV><DIV class=""><DIV class="">&nbsp;</DIV></DIV></DIV></DIV></DIV><DIV class="">cmd</DIV><DIV class=""><PRE><CODE><SPAN>claude mcp add mcp-abap-adt-api node C:/Tools/mcp-abap-abap-adt-api/dist/index.js</SPAN></CODE></PRE></DIV></DIV><HR /><P class=""><STRONG>Step 6 — Setup Claude Desktop (GUI Interface)</STRONG></P><P class="">Claude Desktop is where it really comes alive — a beautiful chat UI like the LinkedIn video.</P><OL class=""><LI>Download from <STRONG><A class="" href="https://claude.ai/download" target="_blank" rel="noopener nofollow noreferrer">https://claude.ai/download</A></STRONG></LI><LI>Install and log in</LI><LI>Go to <STRONG>☰ → Settings → Developer → Edit Config</STRONG></LI><LI>Replace the content with:</LI></OL><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class="">&nbsp;</DIV><DIV class=""><DIV class="">&nbsp;</DIV></DIV></DIV></DIV></DIV><DIV class="">json</DIV><DIV class=""><PRE><CODE><SPAN><SPAN class="">{</SPAN> </SPAN><SPAN> <SPAN class="">"mcpServers"</SPAN><SPAN class="">:</SPAN> <SPAN class="">{</SPAN> </SPAN><SPAN> <SPAN class="">"mcp-abap-adt"</SPAN><SPAN class="">:</SPAN> <SPAN class="">{</SPAN> </SPAN><SPAN> <SPAN class="">"command"</SPAN><SPAN class="">:</SPAN> <SPAN class="">"C:\\Program Files\\nodejs\\node.exe"</SPAN><SPAN class="">,</SPAN> </SPAN><SPAN> <SPAN class="">"args"</SPAN><SPAN class="">:</SPAN> <SPAN class="">[</SPAN><SPAN class="">"C:\\Tools\\mcp-abap-adt\\dist\\index.js"</SPAN><SPAN class="">]</SPAN><SPAN class="">,</SPAN> </SPAN><SPAN> <SPAN class="">"env"</SPAN><SPAN class="">:</SPAN> <SPAN class="">{</SPAN> </SPAN><SPAN> <SPAN class="">"SAP_URL"</SPAN><SPAN class="">:</SPAN> <SPAN class="">"https://your-sap-system.com:44300"</SPAN><SPAN class="">,</SPAN> </SPAN><SPAN> <SPAN class="">"SAP_USERNAME"</SPAN><SPAN class="">:</SPAN> <SPAN class="">"YOUR_USERNAME"</SPAN><SPAN class="">,</SPAN> </SPAN><SPAN> <SPAN class="">"SAP_PASSWORD"</SPAN><SPAN class="">:</SPAN> <SPAN class="">"YOUR_PASSWORD"</SPAN><SPAN class="">,</SPAN> </SPAN><SPAN> <SPAN class="">"SAP_CLIENT"</SPAN><SPAN class="">:</SPAN> <SPAN class="">"300"</SPAN><SPAN class="">,</SPAN> </SPAN><SPAN> <SPAN class="">"TLS_REJECT_UNAUTHORIZED"</SPAN><SPAN class="">:</SPAN> <SPAN class="">"0"</SPAN> </SPAN><SPAN> <SPAN class="">}</SPAN> </SPAN><SPAN> <SPAN class="">}</SPAN><SPAN class="">,</SPAN> </SPAN><SPAN> <SPAN class="">"mcp-abap-adt-api"</SPAN><SPAN class="">:</SPAN> <SPAN class="">{</SPAN> </SPAN><SPAN> <SPAN class="">"command"</SPAN><SPAN class="">:</SPAN> <SPAN class="">"C:\\Program Files\\nodejs\\node.exe"</SPAN><SPAN class="">,</SPAN> </SPAN><SPAN> <SPAN class="">"args"</SPAN><SPAN class="">:</SPAN> <SPAN class="">[</SPAN><SPAN class="">"C:\\Tools\\mcp-abap-abap-adt-api\\dist\\index.js"</SPAN><SPAN class="">]</SPAN><SPAN class="">,</SPAN> </SPAN><SPAN> <SPAN class="">"env"</SPAN><SPAN class="">:</SPAN> <SPAN class="">{</SPAN> </SPAN><SPAN> <SPAN class="">"SAP_URL"</SPAN><SPAN class="">:</SPAN> <SPAN class="">"https://your-sap-system.com:44300"</SPAN><SPAN class="">,</SPAN> </SPAN><SPAN> <SPAN class="">"SAP_USER"</SPAN><SPAN class="">:</SPAN> <SPAN class="">"YOUR_USERNAME"</SPAN><SPAN class="">,</SPAN> </SPAN><SPAN> <SPAN class="">"SAP_PASSWORD"</SPAN><SPAN class="">:</SPAN> <SPAN class="">"YOUR_PASSWORD"</SPAN><SPAN class="">,</SPAN> </SPAN><SPAN> <SPAN class="">"SAP_CLIENT"</SPAN><SPAN class="">:</SPAN> <SPAN class="">"300"</SPAN><SPAN class="">,</SPAN> </SPAN><SPAN> <SPAN class="">"SAP_LANGUAGE"</SPAN><SPAN class="">:</SPAN> <SPAN class="">"EN"</SPAN><SPAN class="">,</SPAN> </SPAN><SPAN> <SPAN class="">"NODE_TLS_REJECT_UNAUTHORIZED"</SPAN><SPAN class="">:</SPAN> <SPAN class="">"0"</SPAN> </SPAN><SPAN> <SPAN class="">}</SPAN> </SPAN><SPAN> <SPAN class="">}</SPAN> </SPAN><SPAN> <SPAN class="">}</SPAN> </SPAN><SPAN><SPAN class="">}</SPAN></SPAN></CODE></PRE></DIV></DIV><BLOCKQUOTE><P class=""><span class="lia-unicode-emoji" title=":warning:">⚠️</span> <STRONG>Windows-specific tip:</STRONG> You MUST use the full path <CODE>C:\\Program Files\\nodejs\\node.exe</CODE> — using just <CODE>"node"</CODE> does not work in Claude Desktop on Windows. Also note double backslashes <CODE>\\</CODE> in all paths.</P></BLOCKQUOTE><OL class=""><LI>Kill Claude in Task Manager and reopen</LI><LI>Go back to Settings → Developer — you should see both servers listed as <STRONG>running</STRONG> <span class="lia-unicode-emoji" title=":white_heavy_check_mark:">✅</span></LI></OL><HR /><P class=""><STRONG>Step 7 — Add Free Official SAP MCP Servers</STRONG></P><P class="">Bonus: Claude Desktop has a built-in directory of official SAP MCP servers. Click <EM>"Connect your tools to Claude"</EM> at the bottom of the chat, search for "SAP", and add:</P><UL class=""><LI><STRONG>SAPUI5 MCP Server</STRONG> — for UI5 development</LI><LI><STRONG>SAP CAP MCP Server</STRONG> — for CAP projects</LI><LI><STRONG>SAP Fiori MCP Server</STRONG> — for Fiori Elements apps</LI></UL><P class="">Also add these free hosted servers to Claude Code CLI (no installation needed):</P><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class="">&nbsp;</DIV><DIV class=""><DIV class="">&nbsp;</DIV></DIV></DIV></DIV></DIV><DIV class="">cmd</DIV><DIV class=""><PRE><CODE><SPAN>claude mcp add --transport http abap-docs https://mcp-abap.marianzeis.de/mcp</SPAN><SPAN>claude mcp add --transport http sap-docs https://mcp-sap-docs.marianzeis.de/mcp</SPAN></CODE></PRE></DIV></DIV><P class="">These give Claude access to the full ABAP keyword documentation across 8 SAP releases, ABAP cheat sheets, CAP docs, UI5 docs, and SAP Community posts.</P><HR /><P class=""><STRONG>Testing It</STRONG></P><P class="">Open Claude Desktop, create a New Chat, and type:</P><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class="">&nbsp;</DIV><DIV class=""><DIV class="">&nbsp;</DIV></DIV></DIV></DIV></DIV><DIV class=""><PRE><CODE><SPAN>Get the source code of program SAPMV45A</SPAN></CODE></PRE></DIV></DIV><P class="">Watch Claude automatically call your SAP system, retrieve the source code, and explain it — all in seconds.</P><P class="">For write operations (test on $TMP objects only!):</P><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class="">&nbsp;</DIV><DIV class=""><DIV class="">&nbsp;</DIV></DIV></DIV></DIV></DIV><DIV class=""><PRE><CODE><SPAN>Find a simple Z program in $TMP, add a comment at the top </SPAN><SPAN>saying "Modified by Claude", save and activate it</SPAN></CODE></PRE></DIV></DIV><P class="">For complex workflows like the LinkedIn video:</P><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class="">&nbsp;</DIV><DIV class=""><DIV class="">&nbsp;</DIV></DIV></DIV></DIV></DIV><DIV class=""><PRE><CODE><SPAN>Connect to my SAP system. Copy class ZCL_SOURCE from package </SPAN><SPAN>ZPKG_A into ZPKG_B, rename it to ZCL_TARGET, change the </SPAN><SPAN>carrier_id in the SELECT for /DMO/CONNECTION, create a </SPAN><SPAN>transport and activate.</SPAN></CODE></PRE></DIV></DIV><HR /><P class=""><STRONG>Security Notes</STRONG></P><UL class=""><LI>Never commit <CODE>.env</CODE> files to Git</LI><LI>Change your SAP password if shared in screenshots</LI><LI>Use dedicated service accounts with minimum required authorizations</LI><LI>Only test write operations in $TMP before moving to real packages</LI><LI>The <CODE>TLS_REJECT_UNAUTHORIZED=0</CODE> flag disables SSL validation — use only in dev environments</LI><LI>Check your company's AI policy before sending code to external APIs</LI></UL><HR /><P class=""><STRONG>My Experience</STRONG></P><P class="">What surprised me most is how Claude handles the entire workflow autonomously. It doesn't just write code — it searches for the object, reads the source, understands the structure, reads class includes, creates the transport, locks the object, writes the code, runs a syntax check, activates, and unlocks. All from one natural language request.</P><P class="">&nbsp;</P><P class=""><STRONG>Important Hint</STRONG></P><P class="">It can make ABAP-specific mistakes (like forgetting RAP locking fields, or using reserved DDIC words). Always review AI-generated code before activating in production. But as a development accelerator and code reviewer, it's genuinely powerful.</P><HR /><P class=""><STRONG>References</STRONG></P><UL class=""><LI>GitHub: <A class="" href="https://github.com/mario-andreschak/mcp-abap-adt" target="_blank" rel="noopener nofollow noreferrer">mcp-abap-adt</A> — Mario Andreschak</LI><LI>GitHub: <A class="" href="https://github.com/mario-andreschak/mcp-abap-abap-adt-api" target="_blank" rel="noopener nofollow noreferrer">mcp-abap-abap-adt-api</A> — Mario Andreschak</LI><LI>GitHub: <A class="" href="https://github.com/secondsky/sap-skills" target="_blank" rel="noopener nofollow noreferrer">sap-skills</A> — 35 Claude Code plugins for SAP</LI><LI>Blog: <A class="" href="https://community.sap.com/t5/technology-blog-posts-by-members/feed-sap-help-ui5-apis-amp-sap-community-content-into-your-ai-with-this/ba-p/14195007" target="_blank">SAP Docs MCP Server</A> — Marian Zeis</LI><LI>Blog: <A class="" href="https://community.sap.com/t5/artificial-intelligence-blogs-posts/claude-code-via-mcp-poor-man-s-joule-or-a-practical-tool/ba-p/14344261" target="_blank">Claude Code via MCP</A> — SAP Community</LI><LI>Blog: <A class="" href="https://community.sap.com/t5/artificial-intelligence-blogs-posts/installing-and-extending-an-abap-mcp-server-by-vibe-coding-with-claude-code/ba-p/14343600" target="_blank">Installing and Extending an ABAP MCP Server</A> — SAP Community</LI></UL><HR /><P class=""><EM>I hope this helps other ABAP developers get started. If you run into issues or have questions, feel free to comment below. Happy coding!</EM></P> 2026-04-07T12:35:07.976000+02:00 https://community.sap.com/t5/technology-blog-posts-by-sap/custom-business-configurations-f4579-collaborative-draft/ba-p/14368541 Custom Business Configurations (F4579): Collaborative draft 2026-04-08T10:55:35.536000+02:00 patrick_winkler https://community.sap.com/t5/user/viewprofilepage/user-id/729521 <H1 id="toc-hId-887480474" id="toc-hId-1664315265">Introduction</H1><P><SPAN>The&nbsp;</SPAN><A href="https://help.sap.com/docs/btp/sap-business-technology-platform/custom-business-configurations-app" target="_blank" rel="noopener noreferrer"><SPAN class="">Custom Business Configurations</SPAN></A><SPAN>&nbsp;(CUBCO) app serves as an entry point to the&nbsp;</SPAN><A class="" title="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/business-configuration-maintenance-object?version=Cloud" href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/business-configuration-maintenance-object?version=Cloud" target="_blank" rel="noopener noreferrer">Business Configuration Maintenance Object</A><SPAN>&nbsp;(SMBC) provided by custom applications or partners.<BR /><BR />When you use the&nbsp;<A href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/generating-business-configuration-maintenance-object-with-generate-abap-repository-objects-wizard" target="_blank" rel="noopener noreferrer">ADT wizard to generate a Business Configuration Maintenance Object</A></SPAN>, the singleton pattern is used when generating the draft enabled RAP BO. One <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/rap-transactional-app-performance-considerations-for-singleton-pattern-in/ba-p/14140680" target="_blank">characteristic of this pattern</A> is that all child entities are locked together, so it is not possible for multiple users to work with the same configuration at the same time.<BR /><BR />This blog describes how to avoid this restriction by using <A href="https://help.sap.com/docs/abap-cloud/abap-rap/collaborative-draft" target="_blank" rel="noopener noreferrer">collaborative draft</A>.</P><P>This blog is relevant for</P><UL><LI><a href="https://community.sap.com/t5/c-khhcw49343/SAP+S%25252F4HANA+Cloud+Private+Edition/pd-p/5c26062a-9855-4f39-8205-272938b6882f" class="lia-product-mention" data-product="1198-1">SAP S/4HANA Cloud Private Edition</a>&nbsp;(2025)</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>&nbsp;</LI><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>&nbsp;</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><H1 id="toc-hId-1439888495" id="toc-hId-1467801760">Example scenario</H1><P>In the configuration table ZDEMO_CC, the company codes are stored.</P><pre class="lia-code-sample language-abap"><code>@EndUserText.label : 'Company Code' @AbapCatalog.enhancement.category : #NOT_EXTENSIBLE @AbapCatalog.tableCategory : #TRANSPARENT @AbapCatalog.deliveryClass : #C @AbapCatalog.dataMaintenance : #ALLOWED define table zdemo_cc { key client : abap.clnt not null; key company_code : abap.numc(4) not null; country : land1; last_changed_at : abp_lastchange_tstmpl; local_last_changed_at : abp_locinst_lastchange_tstmpl; }</code></pre><H1 id="toc-hId-1271288255">Enable collaborative draft</H1><P>In the generated behavior definition, add "collaborative" to the draft annotation:</P><pre class="lia-code-sample language-abap"><code>managed with additional save implementation in class ZBP_I_COMPANYCODE_S unique; strict; with collaborative draft;</code></pre><P>Add the draft query annotation and the share action to the singleton entity definition:</P><pre class="lia-code-sample language-abap"><code>define behavior for ZI_CompanyCode_S alias CompanyCodeAll draft table ZDEMO_CC_D_S query ZR_DEMO_CC_CD [...] { draft action Share; [...] }</code></pre><P>&nbsp;<SPAN>Right-click the singleton draft table and choose New Data Definition to create the CDS view for the draft query:<BR /></SPAN></P><pre class="lia-code-sample language-abap"><code>@AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'Draft Query View' define view entity ZR_DEMO_CC_CD as select from zdemo_cc_d_s { key singletonid as Singletonid, lastchangedatmax as Lastchangedatmax, transportrequestid as Transportrequestid, draftentitycreationdatetime as Draftentitycreationdatetime, draftentitylastchangedatetime as Draftentitylastchangedatetime, draftadministrativedatauuid as Draftadministrativedatauuid, draftentityoperationcode as Draftentityoperationcode, hasactiveentity as Hasactiveentity, draftfieldchanges as Draftfieldchanges }</code></pre><P>You need to <A href="https://help.sap.com/docs/abap-cloud/abap-rap/adding-collaboration-capability-to-draft-enabled-managed-business-object?version=LATEST&amp;locale=en-US&amp;state=PRODUCTION#prerequisites" target="_self" rel="noopener noreferrer">enhance the authorization of the involved users</A>. In SAP BTP ABAP environment and SAP S/4HANA Public Cloud Edition you assign business catalog&nbsp;<SPAN>SAP_CORE_BC_RAP_DRAFT_PC to the user, in SAP S/4HANA Private Cloud Edition authorization object S_DRAFT.</SPAN></P><H1 id="toc-hId-1074774750"><SPAN>Collaboration</SPAN></H1><P><SPAN>User TB is creating a new company code 400 while at the same time user PW is editing company code 100. All changes are recorded on the same transport request.<BR /></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="patrick_winkler_0-1775638407159.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/394868i8F2BB89D6419285F/image-size/large?v=v2&amp;px=999" role="button" title="patrick_winkler_0-1775638407159.png" alt="patrick_winkler_0-1775638407159.png" /></span></P><P>Since the collaborative draft is enabled for the singleton root entity, the save and discard draft action are applied to all object changes. In this example, users PW and TB process two different company codes, which are logically different objects. Technically, however, they process the same singleton root entity. In practice, this means that discarding the draft or saving must be aligned between the users involved, as the save action persists the changes in all company codes.<BR />For completely independent editing of individual objects, you must develop a RAP BO without a singleton pattern.</P> 2026-04-08T10:55:35.536000+02:00 https://community.sap.com/t5/abap-blog-posts/how-to-translate-ktd-documents-for-sap-btp-abap-environment/ba-p/14372977 How to translate KTD documents for SAP BTP ABAP Environment? 2026-04-13T16:44:46.715000+02:00 Andre_Fischer https://community.sap.com/t5/user/viewprofilepage/user-id/55 <H1 id="toc-hId-1665063983">Introduction</H1><P>When you create a KTD document in SAP BTP ABAP Environment you will find out that there is no support for the translation of these documents.&nbsp;&nbsp;</P><P>In this blog post I will describe a workaround that can be used until a standard solution will be provided by SAP.</P><H1 id="toc-hId-1468550478">Workaround</H1><P>I managed to translate a KTD document “manually.”</P><OL><LI>I logged in with <EM>German</EM> and created a KTD document.</LI><LI>Then I exported the KTD document into a Git repository.</LI><LI>Then I created a new entry in the XML for the language key <STRONG>“E”</STRONG>&nbsp;, chose a new UUID as the key, and entered the new text <STRONG>Base64 encoded (!)</STRONG>.&nbsp;</LI><LI>Finally I imported the content of the Github repository again, thereby creating a translated version of the KTD document.&nbsp;</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Andre_Fischer_0-1776090870287.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/397421iE49A46719191F662/image-size/medium?v=v2&amp;px=400" role="button" title="Andre_Fischer_0-1776090870287.png" alt="Andre_Fischer_0-1776090870287.png" /></span></P><pre class="lia-code-sample language-markup"><code>&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;abapGit version="v1.0.0" serializer="LCL_OBJECT_SKTD" serializer_version="v1.0.0"&gt; &lt;asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"&gt; &lt;asx:values&gt; &lt;KTD_OBJECT&gt; &lt;NAME&gt;ZZ10R_CART&lt;/NAME&gt; &lt;TYPE&gt;GENERAL_TEXT&lt;/TYPE&gt; &lt;SOURCE_CONTENT_TYPE&gt;02&lt;/SOURCE_CONTENT_TYPE&gt; &lt;REF_OBJ_TYPE&gt;DDLS&lt;/REF_OBJ_TYPE&gt; &lt;REF_OBJ_NAME&gt;ZZ10R_CART&lt;/REF_OBJ_NAME&gt; &lt;ABAP_LANGUAGE_VERSION&gt;X&lt;/ABAP_LANGUAGE_VERSION&gt; &lt;CONTENT&gt; &lt;item&gt; &lt;NAME&gt;ZZ10R_CART&lt;/NAME&gt; &lt;LANGU&gt;D&lt;/LANGU&gt; &lt;COMPONENT_UUID&gt;1rDFSNW0H9Cq1O2Gk1jBBg==&lt;/COMPONENT_UUID&gt; &lt;SOURCE_CONTENT&gt;RG9rdSBpbiBEZXV0c2NoCgphbmQgbm93IGFkZCBzb21ldGhpbmcgbG9nZ2VkIG9uIGluIEVuZ2xp c2g=&lt;/SOURCE_CONTENT&gt; &lt;/item&gt; &lt;item&gt; &lt;NAME&gt;ZZ10R_CART&lt;/NAME&gt; &lt;LANGU&gt;E&lt;/LANGU&gt; &lt;COMPONENT_UUID&gt;9u8rknFsH+Cq1DFMgPUzaA==&lt;/COMPONENT_UUID&gt; &lt;SOURCE_CONTENT&gt;IyBub3cgb3JpZ25hbCBlbmdsaXNo&lt;/SOURCE_CONTENT&gt; &lt;/item&gt; &lt;/CONTENT&gt; &lt;/KTD_OBJECT&gt; &lt;/asx:values&gt; &lt;/asx:abap&gt; &lt;/abapGit&gt;</code></pre><P>As a result, I see different texts when I am logged in with English or German.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Andre_Fischer_1-1776091142650.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/397424i2D3BB4AF24275779/image-size/medium?v=v2&amp;px=400" role="button" title="Andre_Fischer_1-1776091142650.png" alt="Andre_Fischer_1-1776091142650.png" /></span></P><H1 id="toc-hId-1272036973">Known issues</H1><P>• If you edit a KTD document with ADT while being logged in in another language, you will “see” the version created in the other language. There is no error message.<BR />• In such a case, you can even edit the KTD document and the changes are visible for both login languages.<BR />• Only if, as described above, you export the KTD document via the “Github” detour and create a version in another language, will you have two texts.</P><P>&nbsp;</P> 2026-04-13T16:44:46.715000+02:00 https://community.sap.com/t5/technology-blog-posts-by-sap/custom-business-configurations-f4579-implementing-an-editable-tree-view/ba-p/14271624 Custom Business Configurations (F4579): Implementing an editable tree view (hierarchy) 2026-04-14T07:48:36.986000+02:00 patrick_winkler https://community.sap.com/t5/user/viewprofilepage/user-id/729521 <H1 id="toc-hId-887480474" id="toc-hId-1636402000">Introduction</H1><P><SPAN>The&nbsp;</SPAN><A href="https://help.sap.com/docs/btp/sap-business-technology-platform/custom-business-configurations-app" target="_blank" rel="noopener noreferrer"><SPAN class="">Custom Business Configurations</SPAN></A><SPAN>&nbsp;(CUBCO) app serves as an entry point to the&nbsp;</SPAN><A class="" title="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/business-configuration-maintenance-object?version=Cloud" href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/business-configuration-maintenance-object?version=Cloud" target="_blank" rel="noopener noreferrer">Business Configuration Maintenance Object</A><SPAN>&nbsp;(SMBC) provided by custom applications or partners.<BR />This blog explains how to expose the hierarchical structure of a CDS hierarchy as an <A href="https://help.sap.com/docs/abap-cloud/abap-rap/editable-treeviews-development-process-in-overview" target="_blank" rel="noopener noreferrer">editable tree view</A> in the CUBCO app.<BR />For this purpose the SMBC object now supports <A href="https://sapui5.hana.ondemand.com/sdk/#/topic/7cf7a31fd1ee490ab816ecd941bd2f1f" target="_blank" rel="noopener nofollow noreferrer">tree table</A> as table type.</SPAN></P><P>For more details on hierarchies and more detailed examples and explanations, see the links above. The purpose of this blog is to demonstrate the tree view capability of the CUBCO app using a simple example.</P><P>This blog is relevant for</P><UL><LI><a href="https://community.sap.com/t5/c-khhcw49343/SAP+S%25252F4HANA+Cloud+Private+Edition/pd-p/5c26062a-9855-4f39-8205-272938b6882f" class="lia-product-mention" data-product="1198-1">SAP S/4HANA Cloud Private Edition</a>&nbsp;(2025, SAP Note&nbsp;3687833, SAP UI5 1.136.12)</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>&nbsp;(2605)</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><H1 id="toc-hId-1439888495">Example scenario</H1><P>In the configuration table ZDEMO_CC, the company codes are stored in a parent-child relationship to organize the corporate structure in a recursive hierarchy.</P><pre class="lia-code-sample language-abap"><code>@EndUserText.label : 'Company Code' @AbapCatalog.enhancement.category : #NOT_EXTENSIBLE @AbapCatalog.tableCategory : #TRANSPARENT @AbapCatalog.deliveryClass : #C @AbapCatalog.dataMaintenance : #ALLOWED define table zdemo_cc { key client : abap.clnt not null; key company_code : abap.numc(4) not null; country : land1; parent_company : abap.numc(4); last_changed_at : abp_lastchange_tstmpl; local_last_changed_at : abp_locinst_lastchange_tstmpl; }</code></pre><H1 id="toc-hId-1243374990">Implement editable tree view</H1><P>First we use the <A href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/generating-business-configuration-maintenance-object-with-generate-abap-repository-objects-wizard" target="_blank" rel="noopener noreferrer">ADT wizard to generate a Business Configuration Maintenance Object</A> for this table. In the wizard, select the option "Create Projection Layer".&nbsp;Apart from this, leave settings as they are and complete the wizard.</P><H3 id="toc-hId-1305026923">Add recursive associations</H3><P>Add associations _ParentCompany and _Company to generated CDS view ZI_COMPANYCODE. Save and activate.</P><pre class="lia-code-sample language-abap"><code>@EndUserText.label: 'Company Code' @AccessControl.authorizationCheck: #MANDATORY define view entity ZI_CompanyCode as select from zdemo_cc association to parent ZI_CompanyCode_S as _CompanyCodeAll on $projection.SingletonID = _CompanyCodeAll.SingletonID association of many to one ZI_CompanyCode as _ParentCompany on $projection.ParentCompany = _ParentCompany.CompanyCode association of many to many ZI_CompanyCode as _Company on $projection.CompanyCode = _Company.ParentCompany { key company_code as CompanyCode, @Semantics.address.country: true country as Country, parent_company as ParentCompany, @Semantics.systemDateTime.lastChangedAt: true last_changed_at as LastChangedAt, @Semantics.systemDateTime.localInstanceLastChangedAt: true local_last_changed_at as LocalLastChangedAt, 1 as SingletonID, _CompanyCodeAll, _ParentCompany, _Company }</code></pre><H3 id="toc-hId-1108513418">Create CDS hierarchy</H3><P>Create a new CDS Data Definition ZI_COMPANYCODEHN. Save and activate.</P><pre class="lia-code-sample language-abap"><code>@AccessControl.authorizationCheck: #NOT_REQUIRED define hierarchy ZI_COMPANYCODEHN with parameters P_SingletonID : abap.int1 as parent child hierarchy( source ZI_CompanyCode child to parent association _ParentCompany directory _CompanyCodeAll filter by SingletonID = $parameters.P_SingletonID start where ParentCompany is initial siblings order by CompanyCode ascending ) { key CompanyCode, ParentCompany, SingletonID }</code></pre><H3 id="toc-hId-911999913">Add recursive hierarchy to CDS definition</H3><P>Add the recursive hierarchy and the redirections to the generated projection CDS view ZC_COMPANYCODE</P><pre class="lia-code-sample language-abap"><code>@EndUserText.label: 'Maintain Company Code' @AccessControl.authorizationCheck: #MANDATORY @Metadata.allowExtensions: true @OData.hierarchy.recursiveHierarchy:[{ entity.name: 'ZI_COMPANYCODEHN' }] define view entity ZC_CompanyCode as projection on ZI_CompanyCode { key CompanyCode, Country, ParentCompany, LastChangedAt, @Consumption.hidden: true LocalLastChangedAt, @Consumption.hidden: true SingletonID, _CompanyCodeAll : redirected to parent ZC_CompanyCode_S, _ParentCompany : redirected to ZC_CompanyCode, _Company : redirected to ZC_CompanyCode }</code></pre><H3 id="toc-hId-715486408">Adjust behavior definition</H3><P>Add the following to the definition of entity CompanyCode in the generated behavior definition ZI_COMPANYCODE_S. Save and activate.</P><pre class="lia-code-sample language-abap"><code> association _ParentCompany { with draft; link action linkCompany; unlink action unlinkCompany; } association _Company { with draft; } instance hierarchy ZI_COMPANYCODEHN { ascending association _ParentCompany; descending association _Company { with cascading delete; } }</code></pre><P>Extend the behavior projection ZC_COMPANYCODE_S accordingly. Save and activate.</P><pre class="lia-code-sample language-abap"><code>define behavior for ZC_CompanyCode alias CompanyCode use etag { use update; use delete; use association _CompanyCodeAll { with draft; } use association _ParentCompany { with draft; link action linkManager; unlink action unlinkManager; } use association _Company { with draft; } }</code></pre><H3 id="toc-hId-518972903">Set table type</H3><P>Open the generated SMBC object in ADT. Expand the Table Settings section, select the row for entity CompanyCode and click Edit.<BR />Change Table Type to Tree Table and Table Creation Mode to New Page . Save and activate.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="patrick_winkler_0-1763571429731.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/342772iF091E3039DFE4EF8/image-size/large?v=v2&amp;px=999" role="button" title="patrick_winkler_0-1763571429731.png" alt="patrick_winkler_0-1763571429731.png" /></span></P><H1 id="toc-hId-64293960">Result</H1><P>You can maintain your company structure while using the hierarchy features of SAP Fiori elements, such as: Collapse/expand tree, cut and paste nodes, or drag and drop nodes.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="patrick_winkler_1-1763572531000.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/342776iBF2259BBF63DDB64/image-size/large?v=v2&amp;px=999" role="button" title="patrick_winkler_1-1763572531000.png" alt="patrick_winkler_1-1763572531000.png" /></span></P><H1 id="toc-hId--132219545">Further considerations</H1><UL><LI>You can set the ParentCompany field as read-only. The user can still change the parent company, for example, using drag and drop functionality. However, you cannot modify the ParentCompany field with ABAP EML, only with ABAP SQL.</LI><LI>You can remove the ParentCompany field from the tree table by removing the corresponding UI.lineItem from the metadata extension. It should be sufficient to display the field on the object page as the parent is specified by the visible hierarchy structure.</LI><LI>If the ParentCompany field is enabled for editing, you can provide a value help and implement a validation for create and update to prevent an inconsistent hierarchy. However, a validation does not prevent the update of the draft version.&nbsp;When you reload the app, the entity with an invalid parent disappears. Deletion is configured as cascading, so no additional validation is required for the deletion process.&nbsp;</LI><LI>Instead, consider using a <A href="https://help.sap.com/docs/abap-cloud/abap-rap/operation-precheck?version=sap_btp" target="_self" rel="noopener noreferrer">precheck</A> to prevent inconsistent hierarchy changes.</LI></UL> 2026-04-14T07:48:36.986000+02:00 https://community.sap.com/t5/technology-blog-posts-by-sap/custom-business-configurations-f4579-enable-associated-entities-as-a-read/ba-p/14316041 Custom Business Configurations (F4579): Enable associated entities as a read-only navigation target 2026-04-14T10:59:47.811000+02:00 patrick_winkler https://community.sap.com/t5/user/viewprofilepage/user-id/729521 <H1 id="toc-hId-887480474" id="toc-hId-1659633273">Introduction</H1><P><SPAN>The&nbsp;</SPAN><A href="https://help.sap.com/docs/btp/sap-business-technology-platform/custom-business-configurations-app" target="_blank" rel="noopener noreferrer"><SPAN class="">Custom Business Configurations</SPAN></A><SPAN>&nbsp;(CUBCO) app serves as an entry point to the&nbsp;</SPAN><A class="" title="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/business-configuration-maintenance-object?version=Cloud" href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/business-configuration-maintenance-object?version=Cloud" target="_blank" rel="noopener noreferrer">Business Configuration Maintenance Object</A><SPAN>&nbsp;(SMBC) provided by custom applications or partners.</SPAN></P><P><SPAN>Business software is a tightly integrated network. Application data, configuration data and system data form a giant relational network.<BR />This blog explains how to enable associated entities as a read-only navigation target in the CUBCO app. This can be used, for example, to integrate a where-used list into the configuration app to visualize part of the relational network.</SPAN></P><P>This blog is relevant for</P><UL><LI><SPAN><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;</SPAN>(2605)</LI><LI><SPAN><a href="https://community.sap.com/t5/c-khhcw49343/SAP+S%25252F4HANA+Cloud+Private+Edition/pd-p/5c26062a-9855-4f39-8205-272938b6882f" class="lia-product-mention" data-product="1198-1">SAP S/4HANA Cloud Private Edition</a>&nbsp;</SPAN>(2025, SAP Note <A href="https://me.sap.com/notes/3694141" target="_blank" rel="noopener noreferrer">3694141</A>, SAP UI5 1.136.12)</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><H1 id="toc-hId-1439888495" id="toc-hId-1463119768">Example scenario</H1><P>In this simplified scenario, there is one configuration table for company codes and one configuration table for plants. Each plant is assigned to a company code. Our goal is to display on the object page of a company code all plants to which this company code is assigned. For both tables we <SPAN>use the&nbsp;</SPAN><A href="https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/generating-business-configuration-maintenance-object-with-generate-abap-repository-objects-wizard" target="_blank" rel="noopener noreferrer">ADT wizard to generate a Business Configuration Maintenance Object</A><SPAN>.</SPAN></P><pre class="lia-code-sample language-abap"><code>@EndUserText.label : 'Company Code' @AbapCatalog.enhancement.category : #NOT_EXTENSIBLE @AbapCatalog.tableCategory : #TRANSPARENT @AbapCatalog.deliveryClass : #C @AbapCatalog.dataMaintenance : #ALLOWED define table zdemo_cc { key client : abap.clnt not null; key company_code : zdemo_cc_id not null; last_changed_at : abp_lastchange_tstmpl; local_last_changed_at : abp_locinst_lastchange_tstmpl; }</code></pre><pre class="lia-code-sample language-abap"><code>@EndUserText.label : 'Plant' @AbapCatalog.enhancement.category : #NOT_EXTENSIBLE @AbapCatalog.tableCategory : #TRANSPARENT @AbapCatalog.deliveryClass : #C @AbapCatalog.dataMaintenance : #ALLOWED define table zdemo_plant { key client : abap.clnt not null; key plant_id : abap.numc(3) not null; @AbapCatalog.foreignKey.keyType : #KEY @AbapCatalog.foreignKey.screenCheck : true company_code : zdemo_cc_id with foreign key zdemo_cc where client = zdemo_plant.client and company_code = zdemo_plant.company_code; country : land1; last_changed_at : abp_lastchange_tstmpl; local_last_changed_at : abp_locinst_lastchange_tstmpl; }</code></pre><H1 id="toc-hId-1266606263">Create read-only navigation target</H1><P>Create a new projection view entity for entity plant without a behavior definition so the associated entities cannot be edited.&nbsp;<SPAN>Do not define associations to other editable RAP BOs to keep draft, transport, and concurrency handling separate and correct.</SPAN></P><pre class="lia-code-sample language-abap"><code>@AbapCatalog.viewEnhancementCategory: [#NONE] @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'Plant' @Metadata.ignorePropagatedAnnotations: true define view entity ZC_PLANT as select from ZI_Plant { .identification: [ { position: 1 } ] .lineItem: [ { position: 1 } ] .facet: [ { id: 'Plant', purpose: #STANDARD, type: #IDENTIFICATION_REFERENCE, label: 'Plant', position: 1 } ] key PlantId, CompanyCode, .identification: [ { position: 2 } ] .lineItem: [ { position: 2 } ] Country }</code></pre><P>Access Control:</P><pre class="lia-code-sample language-abap"><code>@EndUserText.label: 'Mapping Role for ZC_Plant' @MappingRole: true define role ZC_PLANT { grant select on ZC_PLANT where inheriting conditions from entity ZI_Plant; }</code></pre><P>Add the association to the company code entity:</P><pre class="lia-code-sample language-abap"><code>@EndUserText.label: 'Company Code' @AccessControl.authorizationCheck: #MANDATORY @Metadata.allowExtensions: true define view entity ZI_CompanyCode as select from zdemo_cc association to parent ZI_CompanyCode_S as _CompanyCodeAll on $projection.SingletonID = _CompanyCodeAll.SingletonID association of many to many ZC_PLANT as _Plant on $projection.CompanyCode = _Plant.CompanyCode { key company_code as CompanyCode, @Semantics.systemDateTime.lastChangedAt: true last_changed_at as LastChangedAt, @Semantics.systemDateTime.localInstanceLastChangedAt: true @Consumption.hidden: true local_last_changed_at as LocalLastChangedAt, @Consumption.hidden: true 1 as SingletonID, _CompanyCodeAll, _Plant }</code></pre><P>Add a new facet to the metadata extension of company code:</P><pre class="lia-code-sample language-abap"><code>@Metadata.layer: #CUSTOMER @UI: { headerInfo: { typeName: 'CompanyCode', typeNamePlural: 'CompanyCodes', title: { type: #STANDARD, label: 'Company Code', value: 'CompanyCode' } } } annotate view ZI_CompanyCode with { .identification: [ { position: 1 } ] .lineItem: [ { position: 1 } ] .facet: [ { id: 'CompanyCode', purpose: #STANDARD, type: #IDENTIFICATION_REFERENCE, label: 'Company Code', position: 1 }, { id: 'Plant', type: #LINEITEM_REFERENCE, label: 'Plant', position: 2 , targetElement: '_Plant' } ] CompanyCode; }</code></pre><P>Add the plant entity to the service definition of company code:</P><pre class="lia-code-sample language-abap"><code>@ObjectModel.leadingEntity.name: 'ZI_CompanyCode_S' define service ZUI_COMPANYCODE { expose ZI_CompanyCode_S as CompanyCodeAll; expose ZI_CompanyCode as CompanyCode; expose ZC_PLANT as Plant; }</code></pre><P>To enable the user to navigate from the object page of a company code to the object page of a plant, add a row for the plant entity in the "Table Settings" section of the BC maintenance object of the company code.</P><P>The company code object page now displays all plants that are assigned to this company code. While the user can edit the company code, the list of plants is not editable.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="patrick_winkler_0-1769680834557.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/366838iE6A3158C578633C8/image-size/medium?v=v2&amp;px=400" role="button" title="patrick_winkler_0-1769680834557.png" alt="patrick_winkler_0-1769680834557.png" /></span></P><H1 id="toc-hId-1070092758">Intent navigation</H1><P>The next step to improve the application is to annotate the Plant field with an <A href="https://help.sap.com/docs/btp/sap-business-technology-platform/custom-business-configurations-app?version=Cloud#intent-navigation" target="_blank" rel="noopener noreferrer">intent navigation</A> to the Custom Business Configurations app. This allows the user to navigate from the company code object page to the maintenance app of a specific plant.</P><P>Currently, this requires the creation of a custom navigation target as it is not possible to use a constant in the semanticObjectBinding annotation.&nbsp;</P><P>If you think this type of intent navigation is important to your application, you can vote and comment on this improvement request:&nbsp;<A href="https://influence.sap.com/sap/ino/#/idea/338756/?section=sectionDetails" target="_blank" rel="noopener noreferrer">https://influence.sap.com/sap/ino/#/idea/338756/?section=sectionDetails</A></P> 2026-04-14T10:59:47.811000+02:00