https://raw.githubusercontent.com/ajmaradiaga/feeds/main/scmt/topics/SAP-S4HANA-Cloud-Extensibility-blog-posts.xml SAP Community - SAP S/4HANA Cloud Extensibility 2024-05-20T17:01:40.661503+00:00 python-feedgen SAP S/4HANA Cloud Extensibility blog posts in SAP Community https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-s-4hana-cloud-abap%E5%BC%80%E5%8F%91%E6%A1%88%E4%BE%8B%E4%B9%8B%E4%B8%83-%E5%BA%93%E9%BE%84%E6%8A%A5%E8%A1%A8/ba-p/13633424 SAP S/4HANA Cloud ABAP开发案例之七:库龄报表 2024-03-11T08:40:07.661000+01:00 Vincent_Zhu https://community.sap.com/t5/user/viewprofilepage/user-id/131883 <P><SPAN>紧随这篇</SPAN><A href="https://blogs.sap.com/2023/12/01/s-4hana-cloud%e4%b8%89%e7%b3%bb%e7%bb%9fcloud-abap%e5%bc%80%e5%8f%91%e6%a1%88%e4%be%8b%e4%bb%8b%e7%bb%8d/" target="_blank" rel="noopener noreferrer">博客</A><SPAN>,今天我们将再次逐步详细地介绍一个利用SAP S/4HANA Cloud三系统来做开发扩展的案例。</SPAN></P><P>&nbsp;</P><H2 id="toc-hId-988861218"><SPAN>1. 案例背景</SPAN></H2><P><SPAN>库龄报表是大多数客户都会询问和想要的一张报表。它以逆时间顺序概述了一段时间内从选定的关键日期开始的可用物料库存的分布情况。但是,具体的需求可能因客户而异。例如,一些客户可能希望在计算物料库龄信息时只考虑某些移动类型。通过利用开发人员可扩展性,我们开发了一个定制的库龄报表,并嵌入到SAP S/4hana Cloud系统中。此外,客户可以完全灵活地定义哪些移动类型将包括在库龄报告的计算中。</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="aging8.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/78113iDD287BCFBFB97ED4/image-size/large?v=v2&amp;px=999" role="button" title="aging8.png" alt="aging8.png" /></span></SPAN></P><P>&nbsp;</P><P>同时,我们配置了一个Custom Business Configuration项目,我们可以把希望被统计在库龄报表里的移动类型维护在这个表格内,如下图。</P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="aging9.png" style="width: 862px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/78114iF98DE0F85856AEE8/image-size/large?v=v2&amp;px=999" role="button" title="aging9.png" alt="aging9.png" /></span></SPAN></P><P>&nbsp;</P><H2 id="toc-hId-792347713"><SPAN>2. 后台服务开发</SPAN></H2><H3 id="toc-hId-724916927">2.1 创建数据定义</H3><P>创建一个新的数据定义(Data Definition):<SPAN>Z_MATERIAL_STOCK_AGE</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="aging1.png" style="width: 510px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/78115iEB52CDADB95B7B99/image-size/large?v=v2&amp;px=999" role="button" title="aging1.png" alt="aging1.png" /></span></SPAN></P><P>&nbsp;</P><H3 id="toc-hId-528403422">2.2 创建查询实现类</H3><P>创建类<SPAN>ZCL_MATERIAL_STOCK_AGE,在这个类里包含了基于CDS视图的数据查询逻辑。</SPAN></P><P>&nbsp;</P><pre class="lia-code-sample language-abap"><code>CLASS zcl_material_stock_age DEFINITION PUBLIC FINAL CREATE PUBLIC . PUBLIC SECTION. INTERFACES if_rap_query_provider . PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. CLASS ZCL_MATERIAL_STOCK_AGE IMPLEMENTATION. METHOD if_rap_query_provider~select. IF io_request-&gt;is_data_requested( ). TYPES BEGIN OF ty_value. TYPES: quantity TYPE i_stockquantitycurrentvalue_2-matlwrhsstkqtyinmatlbaseunit, value TYPE i_stockquantitycurrentvalue_2-stockvalueindisplaycurrency. TYPES END OF ty_value. TYPES: BEGIN OF ty_range_option, sign TYPE c LENGTH 1, option TYPE c LENGTH 2, low TYPE string, high TYPE string, END OF ty_range_option. DATA: lt_response TYPE TABLE OF z_material_stock_age, ls_response LIKE LINE OF lt_response, lt_responseout LIKE lt_response, ls_responseout LIKE LINE OF lt_responseout, lt_response_period TYPE TABLE OF z_material_stock_age, ls_response_period LIKE LINE OF lt_response_period, lt_value TYPE TABLE OF ty_value, ls_value TYPE ty_value, lv_price TYPE p DECIMALS 2, lt_configr TYPE TABLE OF ty_range_option, ls_configr LIKE LINE OF lt_configr. DATA(lv_top) = io_request-&gt;get_paging( )-&gt;get_page_size( ). DATA(lv_skip) = io_request-&gt;get_paging( )-&gt;get_offset( ). DATA(lv_max_rows) = COND #( WHEN lv_top = if_rap_query_paging=&gt;page_size_unlimited THEN 0 ELSE lv_top ). DATA(lt_clause) = io_request-&gt;get_filter( )-&gt;get_as_ranges( ). DATA(lt_parameter) = io_request-&gt;get_parameters( ). DATA(lt_fields) = io_request-&gt;get_requested_elements( ). DATA(lt_sort) = io_request-&gt;get_sort_elements( ). TRY. DATA(lt_filter_cond) = io_request-&gt;get_filter( )-&gt;get_as_ranges( ). CATCH cx_rap_query_filter_no_range INTO DATA(lx_no_sel_option). ENDTRY. ****************************Data selection and business logics goes here********************************* LOOP AT lt_parameter ASSIGNING FIELD-SYMBOL(&lt;fs_p&gt;). CASE &lt;fs_p&gt;-parameter_name. WHEN 'P_KEYDATE'. DATA(p_keydate) = &lt;fs_p&gt;-value. ENDCASE. ENDLOOP. LOOP AT lt_filter_cond INTO DATA(ls_filter_cond). IF ls_filter_cond-name = 'STROAGELOCATION'. DATA(lt_storagelocation) = ls_filter_cond-range[]. ELSEIF ls_filter_cond-name = 'MATERIAL'. DATA(lt_material) = ls_filter_cond-range[]. ELSEIF ls_filter_cond-name = 'PLANT'. DATA(lt_plant) = ls_filter_cond-range[]. ELSEIF ls_filter_cond-name = 'COMPANYCODE'. DATA(lt_bukrs) = ls_filter_cond-range[]. ENDIF. ENDLOOP. *get configuration data SELECT * FROM zmovementtype WHERE bukrs IN <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1398638">@LT</a>_bukrs AND inuse = <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/2449">@abap_true</a> INTO TABLE <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1407137">@DATA</a>(lt_config). LOOP AT lt_config INTO DATA(ls_config). ls_configr-sign = 'I'. ls_configr-option = 'EQ'. ls_configr-low = ls_config-movementtype. APPEND ls_configr TO lt_configr. CLEAR ls_configr. ENDLOOP. *get inventory information based on date SELECT * FROM i_materialstock_2 WHERE storagelocation IN <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1398638">@LT</a>_storagelocation AND material IN <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1398638">@LT</a>_material AND matldoclatestpostgdate &lt;= @p_keydate AND plant IN <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1398638">@LT</a>_plant AND companycode IN <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1398638">@LT</a>_bukrs INTO TABLE <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1407137">@DATA</a>(lt_stock). LOOP AT lt_stock INTO DATA(ls_stock). ls_response-companycode = ls_stock-companycode. ls_response-plant = ls_stock-plant. ls_response-material = ls_stock-material. ls_response-stroagelocation = ls_stock-storagelocation. ls_response-currentstock = ls_stock-matlwrhsstkqtyinmatlbaseunit. COLLECT ls_response INTO lt_response. ENDLOOP. *period start date calculation DATA lv_30 TYPE d. DATA lv_60 TYPE d. DATA cd TYPE d. cd = p_keydate. lv_30 = cd - 30. lv_60 = cd - 60. *get material movement history SELECT * FROM i_materialdocumentitem_2 FOR ALL ENTRIES IN <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1398638">@LT</a>_response WHERE storagelocation = <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1398638">@LT</a>_response-stroagelocation AND postingdate &lt;= @p_keydate AND plant IN <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1398638">@LT</a>_plant AND companycode IN <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1398638">@LT</a>_bukrs AND material = <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1398638">@LT</a>_response-material AND goodsmovementtype in <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1398638">@LT</a>_configr AND goodsmovementiscancelled IS INITIAL INTO TABLE <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1407137">@DATA</a>(lt_movement). DATA(lt_movement_reverse) = lt_movement[]. LOOP AT lt_movement INTO DATA(ls_movement). READ TABLE lt_movement_reverse WITH KEY reversedmaterialdocumentyear = ls_movement-materialdocumentyear reversedmaterialdocument = ls_movement-materialdocument TRANSPORTING NO FIELDS. IF sy-subrc = 0. DELETE lt_movement FROM ls_movement. ENDIF. ENDLOOP. LOOP AT lt_movement INTO ls_movement WHERE reversedmaterialdocument IS INITIAL. ls_response_period-companycode = ls_movement-companycode. ls_response_period-plant = ls_movement-plant. ls_response_period-material = ls_movement-material. ls_response_period-stroagelocation = ls_movement-storagelocation. ls_response_period-meins = ls_movement-materialbaseunit. ls_response_period-waers = ls_movement-companycodecurrency. IF ls_movement-postingdate &gt; lv_30 AND ls_movement-postingdate &lt;= cd. ls_response_period-period1 = ls_movement-quantityinbaseunit. ELSEIF ls_movement-postingdate &gt; lv_60 AND ls_movement-postingdate &lt;= lv_30. ls_response_period-period2 = ls_movement-quantityinbaseunit. ELSEIF ls_movement-postingdate &lt;= lv_60. ls_response_period-period3 = ls_movement-quantityinbaseunit. ENDIF. COLLECT ls_response_period INTO lt_response_period. CLEAR ls_response_period. ENDLOOP. LOOP AT lt_response INTO ls_response. READ TABLE lt_response_period WITH KEY companycode = ls_response-companycode plant = ls_response-plant material = ls_response-material stroagelocation = ls_response-stroagelocation INTO ls_response_period. * ls_response-meins = ls_response_period-meins. * ls_response-waers = ls_response_period-waers. IF sy-subrc = 0. * period 1 calculation with 30 days. IF ls_response-currentstock &lt; ls_response_period-period1 AND ls_response_period-period1 &gt; 0. ls_response-period1 = ls_response-currentstock. ELSE. ls_response-period1 = ls_response_period-period1. ENDIF. * period 2 calculation between 30 days to 60 days. IF ( ls_response-currentstock - ls_response_period-period1 ) &lt; 0. ls_response-period2 = 0. ELSEIF ( ls_response-currentstock - ls_response_period-period1 ) &lt; ls_response_period-period2 AND ls_response_period-period2 &gt; 0. ls_response-period2 = ls_response-currentstock - ls_response_period-period1. ELSEIF ( ls_response-currentstock - ls_response_period-period1 ) &gt;= ls_response_period-period2. ls_response-period2 = ls_response_period-period2. ENDIF. * period 3 calculation more than 60 days IF ( ls_response-currentstock - ls_response_period-period1 - ls_response_period-period2 ) &lt; 0. ls_response-period3 = 0. ELSEIF ( ls_response-currentstock - ls_response_period-period1 - ls_response_period-period2 ) &lt; ls_response_period-period3 AND ls_response_period-period3 &gt; 0. ls_response-period3 = ls_response-currentstock - ls_response_period-period1 - ls_response_period-period2. ELSEIF ( ls_response-currentstock - ls_response_period-period1 - ls_response_period-period2 ) &gt;= ls_response_period-period3. ls_response-period3 = ls_response_period-period3. ENDIF. ELSEIF sy-subrc &gt; 0 AND ls_response-currentstock &gt; 0. ls_response-period3 = ls_response-currentstock. ENDIF. * getting price information SELECT SUM( matlwrhsstkqtyinmatlbaseunit ) AS quantity, SUM( stockvalueincccrcy ) AS value FROM i_stockquantitycurrentvalue_2( p_displaycurrency = 'CNY' ) WHERE product = <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1398583">@LieneS</a>_response-material AND plant = <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1398583">@LieneS</a>_response-plant AND storagelocation = <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1398583">@LieneS</a>_response-stroagelocation AND valuationareatype = 1 GROUP BY product,plant,storagelocation INTO TABLE <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1398638">@LT</a>_value. IF sy-subrc = 0. CLEAR: ls_value, lv_price. READ TABLE lt_value INTO ls_value INDEX 1. IF ls_value-quantity NE 0. lv_price = ls_value-value / ls_value-quantity. ENDIF. ENDIF. * calculate value information ls_response-currentvalue = ls_response-currentstock * lv_price. ls_response-period1_v = ls_response-period1 * lv_price. ls_response-period2_v = ls_response-period2 * lv_price. ls_response-period3_v = ls_response-period3 * lv_price. MODIFY lt_response FROM ls_response. CLEAR ls_response. ENDLOOP. *paging way to return huge amount of data SORT lt_response BY stroagelocation material. lv_max_rows = lv_skip + lv_top. IF lv_skip &gt; 0. lv_skip = lv_skip + 1. ENDIF. CLEAR lt_responseout. LOOP AT lt_response ASSIGNING FIELD-SYMBOL(&lt;lfs_out_line_item&gt;) FROM lv_skip TO lv_max_rows. ls_responseout = &lt;lfs_out_line_item&gt;. APPEND ls_responseout TO lt_responseout. ENDLOOP. io_response-&gt;set_total_number_of_records( lines( lt_response ) ). io_response-&gt;set_data( lt_responseout ). ENDIF. ENDMETHOD. ENDCLASS.</code></pre><P>&nbsp;</P><P>&nbsp;</P><H3 id="toc-hId-331889917">2.3 创建服务定义和服务绑定</H3><P>创建服务定义(Service Definition)</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="aging2.png" style="width: 586px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/78118i45EBDE37890DE1AC/image-size/large?v=v2&amp;px=999" role="button" title="aging2.png" alt="aging2.png" /></span></P><P>&nbsp;</P><P>创建服务绑定(Service Binding)</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="aging3.png" style="width: 535px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/78119iFDF446273B2911CC/image-size/large?v=v2&amp;px=999" role="button" title="aging3.png" alt="aging3.png" /></span></P><P>我们可以看到服务预览如下:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="aging4.png" style="width: 593px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/78120i6CEAC70DFEF8BF66/image-size/large?v=v2&amp;px=999" role="button" title="aging4.png" alt="aging4.png" /></span></P><P>&nbsp;</P><H2 id="toc-hId-6293693">3. 前台应用开发</H2><P>首先,在BTP上配置destination。</P><P>然后,打开SAP Business Application Studio服务。</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="aging5.png" style="width: 774px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/78121i0EA05F7F6BD2DB8E/image-size/large?v=v2&amp;px=999" role="button" title="aging5.png" alt="aging5.png" /></span></P><P>&nbsp;</P><P>从Application Generator里选取SAP Fiori Worklist Application模板。</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="aging6.png" style="width: 715px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/78122iCC12BFD076AE7867/image-size/large?v=v2&amp;px=999" role="button" title="aging6.png" alt="aging6.png" /></span></P><P>&nbsp;</P><P>把应用部署到SAP S/4HANA Public Cloud系统。</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="aging7.png" style="width: 331px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/78124iC752223B01F6C3B8/image-size/large?v=v2&amp;px=999" role="button" title="aging7.png" alt="aging7.png" /></span></P><P>&nbsp;</P><P><SPAN>以上是该案例——库龄报表自开发应用的步骤介绍。希望通过此案例的介绍能让您了解到三系统开发能实现的常见功能。</SPAN></P> 2024-03-11T08:40:07.661000+01:00 https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/what-s-new-overview-of-changes-in-extensibility-objects-in-sap-s-4hana/ba-p/13636206 What's New? Overview of Changes in Extensibility Objects in SAP S/4HANA Cloud Public Edition 2024-03-15T20:23:58.478000+01:00 andreas_doemel https://community.sap.com/t5/user/viewprofilepage/user-id/1410743 <P>Are you excited about the new releases and updates of SAP S/4HANA Cloud Public Edition? And do you want to understand which new extensibility capabilities you‘re getting right away? Do you want to know which new extensibility objects you can use to build your custom apps or extensions?</P><P>If you do, there's a URL you should bookmark and check out:</P><P><A class="" title="https://help.sap.com/S4_CE_CHANGES_EXT_OBJ" href="https://help.sap.com/S4_CE_CHANGES_EXT_OBJ" target="_blank" rel="noopener noreferrer">https://help.sap.com/S4_CE_CHANGES_EXT_OBJ</A></P><P>Starting with&nbsp;SAP S/4HANA Cloud Public Edition 2402.1., this is your central entry point for an overview of changes in extensibility objects in the current release/update. In this What's New document, you'll find a central table that&nbsp;informs you about changed, deleted, deprecated, or new extensibility objects, such as business object interfaces, CDS views, or remote APIs. With different filter options, you can drill down to the objects and changes you're interested in.</P><P>All three extensibility options in&nbsp;SAP S/4HANA Cloud Public Edition are covered:</P><UL><LI>Developer extensibility</LI><LI>Key user extensibility</LI><LI>Side-by-side extensibility</LI></UL><P>In previous releases, changes to extensibility objects were announced in individual What's New documents under different categories, such as&nbsp;API,&nbsp;CDS View, or&nbsp;Extensibility. Now, they’re available to you in this overview table in one single What’s New document.</P><P>For a brief overview of what you'll find in the central table, watch the following video:</P><P><A title="Video" href="https://sapvideo.cfapps.eu10-004.hana.ondemand.com/?entry_id=1_co7jo6xb" target="_blank" rel="noopener nofollow noreferrer"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="video_overview-of-changes-in-extensibility-objects.png" style="width: 971px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/80531i45E94ABF1A523DC7/image-size/large?v=v2&amp;px=999" role="button" title="video_overview-of-changes-in-extensibility-objects.png" alt="video_overview-of-changes-in-extensibility-objects.png" /></span></A></P><P>Changes to the following main object types relevant for extensibility are listed:</P><UL><LI>Authorization objects</LI><LI>BAdIs</LI><LI>Business object interfaces</LI><LI>Business events</LI><LI>CDS views</LI><LI>Classes</LI><LI>Data elements</LI><LI>Interfaces</LI><LI>OData V2 APIs</LI><LI>OData V4 APIs</LI><LI>SOAP APIs</LI></UL><P>We hope that this overview enables you to quickly explore new extensibility scenarios in SAP S/4HANA Cloud Public Edition - based on your individual business requirements.</P> 2024-03-15T20:23:58.478000+01:00 https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/start-extending-sap-s-4hana-cloud-public-edition-with-sapui5-adaptation/ba-p/13646907 Start extending SAP S/4HANA Cloud Public Edition with SAPUI5 adaptation projects 2024-03-22T18:40:55.511000+01:00 elisabeth_riemann https://community.sap.com/t5/user/viewprofilepage/user-id/250535 <P>See the simple and effective changes you'll learn how to make to your application variant:</P><P><STRONG><A href="https://sapvideo.cfapps.eu10-004.hana.ondemand.com/?entry_id=1_5r7r5h0n" target="_blank" rel="noopener nofollow noreferrer">https://sapvideo.cfapps.eu10-004.hana.ondemand.com/?entry_id=1_5r7r5h0n</A></STRONG></P><P>Start extending with SAPUI5 adaptation projects:</P><OL><LI><A href="https://developers.sap.com/tutorials/sapui5-adaptation-change-variant.html" target="_blank" rel="noopener noreferrer">Tutorial 1: Work with SAPUI5 adaptation projects to generate and make simple changes to an applicati...</A></LI><LI><SPAN><A href="https://developers.sap.com/tutorials/sapui5-adaptation-extend-variant.html" target="_blank" rel="noopener noreferrer">Tutorial 2: Work with SAPUI5 adaptation projects to extend the source code of an application variant...</A></SPAN></LI><LI><SPAN><A href="https://developers.sap.com/tutorials/sapui5-adaptation-application-publish.html" target="_blank" rel="noopener noreferrer">Tutorial 3: Make Your Application Variant (created in an SAPUI5 adaptation project) available to bus...</A></SPAN></LI></OL><P><SPAN>For more information, see&nbsp;</SPAN><SPAN><A href="https://help.sap.com/docs/bas/developing-sap-fiori-app-in-sap-business-application-studio/extending-sap-fiori-application-for-s-4hana-cloud" target="_blank" rel="noopener noreferrer">Extending an SAP Fiori Application for SAP S/4HANA Cloud Public Edition</A></SPAN><SPAN>&nbsp;&nbsp;</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>See my earlier post for more details:&nbsp;<A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/learn-how-to-work-with-sapui5-adaptation-projects-to-extend-sap-s-4hana/ba-p/13607922" target="_blank">https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/learn-how-to-work-with-sapui5-adaptation-projects-to-extend-sap-s-4hana/ba-p/13607922</A></SPAN></P> 2024-03-22T18:40:55.511000+01:00 https://community.sap.com/t5/technology-blogs-by-sap/announcing-general-availability-of-sap-build-code-speed-up-development-with/ba-p/13646073 Announcing General Availability of SAP Build Code: Speed up development with generative AI 2024-03-27T03:00:00.041000+01:00 bhagat_nainani https://community.sap.com/t5/user/viewprofilepage/user-id/730384 <P>SAP is dedicated to increasing developer productivity enabling rapid extension of SAP S/4HANA and other enterprise applications. To support this mission, we announced SAP Build Code at TechEd 2023 and today, I’m excited to announce that it is generally available to all developers. Get started with <A title="the Test Drive tutorial" href="https://developers.sap.com/mission.sap-build-code-test-drive.html" target="_blank" rel="noopener noreferrer">the Test Drive tutorial</A>!</P> <H2 id="toc-hId-989870422">What is SAP Build Code?</H2> <P>SAP Build Code provides <STRONG>AI-based code generation</STRONG> with Joule copilot, optimized for Java and JavaScript application development. It is a comprehensive, turn-key solution for coding, testing, integrations, and application lifecycle management. You can leverage Joule to efficiently generate application logic, data models, and test scripts. As an end-to-end integrated solution, SAP Build Code enhances the entire development process, from design time to runtime, significantly boosting your productivity.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Build Code and Joule.gif" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/86171i6084988F0A5FB17A/image-size/large?v=v2&amp;px=999" role="button" title="Build Code and Joule.gif" alt="Build Code and Joule.gif" /></span></P> <P style=" text-align: center; "><FONT size="2"><EM>Picture 1: Joule-powered code generation and visual representation of the code in SAP Build Code&nbsp;</EM></FONT></P> <P>SAP Build Code is <STRONG>tailored for SAP development</STRONG>, allowing you to utilize your favorite SAP programming models and frameworks and enabling you to connect seamlessly to S/4HANA and other applications with prebuilt integrations. It provides you with a guided development experience following best practices from SAP. The Service Center in SAP Build Code provides direct access to discovery and consumption of SAP APIs Including OData and Business Events from SAP and third-party systems. As an integral part of SAP Business Technology Platform (BTP), SAP Build inherits all the robust security and integration capabilities of BTP. This not only enhances security but also simplifies the development of extensions and applications for SAP S/4HANA and other enterprise applications following SAPs clean core strategy.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Build Code Service Center.gif" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/86175i16DA6E0B17F3533F/image-size/large?v=v2&amp;px=999" role="button" title="Build Code Service Center.gif" alt="Build Code Service Center.gif" /></span></P> <P style=" text-align: center; "><FONT size="2"><EM>&nbsp;Picture 2: Direct access to SAP applications and data in SAP Build Code through the Service Center</EM></FONT>&nbsp;</P> <P>But there's more – SAP Build Code&nbsp;encourages <STRONG>fusion development</STRONG>, an approach that uses a mix of traditional coding and low-code development. This is thanks to its support for app composability and the reuse of project components across SAP Build low-code solutions and ABAP environments. SAP Build Code makes your development process faster, more collaborative, and more integrated with the SAP ecosystem, perfect for those looking to streamline their development projects.</P> <H2 id="toc-hId-793356917">What developers are saying about SAP Build Code</H2> <P>Since announcing the solution, we’ve had 450 developers use SAP Build Code in our preview program. Here are a couple of my favorite quotes from the developers who have used SAP Build Code to build full-stack SAP Fiori applications so far:</P> <P>"<EM>SAP Build Code is yet another great offering within the SAP BTP ecosystem. I'm impressed by its maturity and developer-friendly features that quickly get you up and running. Gone are the days of wrestling with your application logic and data models. With a thoughtful prompt, Joule can get your application logic and data models created and fully functioning in just a few clicks.</EM>"<BR />– Mark Smith, Senior Full-Stack Developer, Mindset Consulting</P> <P>“<EM>SAP Build Code will enable rapid development and has all the features we require to build a full stack solution powered with generative AI, including pre-configured runtime and design time capabilities, enabling shorter lead time to market.</EM>”<BR />– Nilesh Mhatre, CIO Americas, IMEA and Global Technology Center, Henkel</P> <H2 id="toc-hId-596843412">Try it yourself – take SAP Build Code for a Test Drive!</H2> <P>You can&nbsp;<STRONG>experience SAP Build Code with</STRONG> <A title="the Test Drive tutorial" href="https://developers.sap.com/mission.sap-build-code-test-drive.html" target="_blank" rel="noopener noreferrer">the Test Drive tutorial</A>. This unique opportunity allows you to explore the full capabilities of SAP Build Code, including Joule-powered AI-based code generation, in the SAP BTP Trial, guided by the expertise of SAP Developer Advocates and the vibrant SAP Community.</P> <P>By participating, you will not only gain hands-on experience with SAP Build Code but also have the chance to earn an SAP Community badge, recognizing your efforts and learning. This is an excellent way to enhance your skills, connect with fellow developers, and get a head start with SAP Build Code.</P> <H2 id="toc-hId-400329907">Don’t miss out – our free AI offer for early adopters</H2> <P>We are offering a limited quantity of Joule generative AI within the trial version of SAP Build Code. This allows you to experience the power of AI-assisted code development for free. Furthermore, if you move to the SAP Build Code, standard plan, there is a significant increase in <STRONG>the amount of free AI quantity</STRONG> you will receive from now until September 1, 2024.</P> <P><span class="lia-unicode-emoji" title=":right_arrow:">➡️</span>&nbsp; Just another reason to get started early, <STRONG>so take the <A title="Test Drive" href="https://developers.sap.com/mission.sap-build-code-test-drive.html" target="_self" rel="noopener noreferrer">Test Drive</A></STRONG> and have fun!</P> 2024-03-27T03:00:00.041000+01:00 https://community.sap.com/t5/technology-blogs-by-sap/10-ways-to-reshape-your-sap-landscape-with-sap-business-technology-platform/ba-p/13652132 10+ ways to reshape your SAP landscape with SAP Business Technology Platform - Blog 3 2024-03-28T14:14:59.178000+01:00 hseubert https://community.sap.com/t5/user/viewprofilepage/user-id/237417 <H1 id="toc-hId-861592896"><SPAN><SPAN>How Clean Core can accelerate your SAP Business Transformation</SPAN></SPAN></H1><P>This blog is part of the “10+ ways to reshape your SAP landscape with SAP Business Technology Platform Blog Series”</P><P><STRONG><SPAN>Summary:<BR /></SPAN></STRONG><EM><SPAN>The SAP Clean Core strategy offers a straightforward way to simplify and improve the flexibility of managing SAP systems. It revolves around five key areas: Extensibility, Integrations, Data, Business Processes, and Operations. This approach lays out a clear plan for creating and keeping an IT environment that's quick to adapt and conducive to innovation. By adopting the Clean Core strategy's rules and recommendations, companies can make the most of new technologies from SAP and its partners, helping them thrive in the ever-changing business world.</SPAN></EM></P><P>&nbsp;</P><P><SPAN>In their book "Software Engineering at Google," authors Wright, Manshreck, and Winters share the idea that code should be regarded as a liability rather than an asset. They're getting at the fact that keeping code up and running isn't free—it needs constant care for maintenance, updates, and keeping it secure. As such, an abundance of complex code can significantly amplify operational costs due to the necessity for extensive maintenance.</SPAN></P><P><SPAN>The aspect of treating code as a liability can also be applied to your SAP landscape. Extending SAP systems is a common practice for many organizations. If it is not done in a reliable and responsible way, the systems end up in a complex state possibly carrying a lot of technical debt from the previous years. Such a state of high entropy is undesired, as it not only leaves the IT-landscape but also the complete organization in an inflexible state.</SPAN></P><P><SPAN>In the context of the current dynamic market landscape, it is imperative for organizations to possess the capability to swiftly adapt to evolving customer expectations, market dynamics, and industry trends. Given the pivotal role SAP systems play in implementing numerous business processes, this requires an agile approach to SAP system management, including the assimilation of recent SAP product advancements and promptly integrating the latest software releases.</SPAN><SPAN>&nbsp;</SPAN></P><P>The SAP Clean Core strategy is instrumental in realizing this vision. By advocating for a streamlined IT landscape centered around SAP S/4HANA as the digital core and augmenting it with cloud solutions tailored for specific business functions, organizations can diminish complexity, enhance adaptability, and effectively leverage the latest technological advancements from SAP and its partners. This strategic approach ensures a robust, agile, and innovation-friendly IT ecosystem conductive to sustained organisational&nbsp;success.</P><H3 id="toc-hId-923244829">The 5 Dimensions of a Clean Core strategy</H3><P><SPAN>The SAP Clean Core approach is based on five technical and procedural components that work together to build and maintain an adaptable SAP landscape.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Screenshot 2024-03-28 at 09.05.58.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87858iB90229D591DEF9BD/image-size/large?v=v2&amp;px=999" role="button" title="Screenshot 2024-03-28 at 09.05.58.png" alt="Screenshot 2024-03-28 at 09.05.58.png" /></span></SPAN></P><P>&nbsp;</P><H4 id="toc-hId-855814043"><SPAN>1. Extensibility</SPAN></H4><P><SPAN>SAP systems are crucial for the smooth operation of many companies, offering a wide range of software solutions to handle key business tasks. Despite the extensive functionality offered by SAP, businesses may find that the standard offerings don't fully meet their specific needs. Extending an SAP system is often required to adapt to the unique processes, requirements, and challenges of a business. The Clean Core strategy suggests such extensions should:</SPAN></P><UL><LI><SPAN>be upgrade-stable following a prescribed extensibility model, as outlined in the <A href="https://www.sap.com/documents/2022/10/52e0cd9b-497e-0010-bca6-c68f7e60039b.html" target="_blank" rel="noopener noreferrer">SAP S/4HANA Extensibility Guide</A>, using Key-User and On-Stack extensibility on SAP S/4HANA and Side-by-Side approaches on SAP Business Technology Platform.</SPAN></LI><LI><SPAN>use released APIs and events as defined in the <A href="https://api.sap.com/" target="_blank" rel="noopener noreferrer">SAP Business Accelerator Hub</A><SPAN>.</SPAN></SPAN></LI><LI><SPAN>be actively used and have detailed documentation.</SPAN></LI><LI><SPAN>follow high standards for coding quality and best practices, which could include mandatory approvals for classic extensions, for example.</SPAN></LI><LI><SPAN>not repeat something that SAP or its partners already offer.</SPAN></LI></UL><P><SPAN>By meeting these guidelines, you reduce the risk that custom extensions disrupt updates to SAP's standard offerings.</SPAN></P><P><SPAN>Implementing decoupled extensions on the SAP Business Technology Platform (SAP BTP) provides extra flexibility by offering an independently scalable environment. This setup supports project implementations that have their own software development lifecycle and technology stack. Moreover, development frameworks like the SAP Cloud Application Framework (CAP, for Java and JavaScript) and RESTful ABAP Programming Model (for SAP BTP ABAP environment), enhanced with <A href="https://www.sap.com/products/technology-platform/developer-tools.html" target="_blank" rel="noopener noreferrer">GenAI-based code assistance</A> (currently available for CAP, planned for SAP BTP ABAP environment), boost developer productivity and facilitate quick implementation cycles. To get started with creating side-by-side extensions using SAP BTP, the <A href="https://help.sap.com/docs/sap-btp-guidance-framework/guidance-framework/what-is-sap-btp-guidance-framework" target="_blank" rel="noopener noreferrer">SAP BTP Guidance Framework</A> is an excellent resource.</SPAN></P><H4 id="toc-hId-659300538"><SPAN>2. Integration</SPAN></H4><P><SPAN>For smooth end-to-end business process execution, integrating various IT solution components is a technical necessity. Using a Clean Core approach, these integrations use the standard integration scenarios that SAP provides. These scenarios are designed to map comprehensive business processes using pre-configured best practice content, leveraging modern integration technologies like OData, SOAP, or events. Opting for SAP's standard integrations brings several benefits to an organization:</SPAN><SPAN>&nbsp;</SPAN></P><UL><LI><SPAN>straightforward, out-of-the-box use of the integration, along with continuous updates and innovations.</SPAN></LI><LI><SPAN>simplified system upgrades within the integrated landscape, as standard integrations ensure compatibility and maintain consistency across systems.</SPAN></LI><LI><SPAN>reduced Total Cost of Ownership (TCO) for managing integrations.</SPAN></LI></UL><P><SPAN>Adopting a Clean Core strategy means organizations should base their custom integration needs on SAP's standard integration scenarios and APIs. Whether it's using SAP's standard integrations or creating custom integrations, the <A href="https://www.sap.com/products/technology-platform/integration-suite.html" target="_blank" rel="noopener noreferrer">SAP Integration Suite</A> Service on the SAP Business Technology Platform is the recommended tool. You can find documentation for all standard content for the SAP BTP Integration Suite in the <A href="https://api.sap.com/" target="_blank" rel="noopener noreferrer">SAP Business Accelerator Hub</A>. If organizations need help crafting a corporate integration strategy, the <A href="https://help.sap.com/docs/sap-btp-guidance-framework/sap-integration-solution-advisory-methodology/sap-integration-solution-advisory-methodology-overview?locale=en-US" target="_blank" rel="noopener noreferrer">SAP Integration Solution Advisory Method</A> (ISA-M) is there to assist.</SPAN></P><H4 id="toc-hId-462787033"><SPAN>3. Data</SPAN></H4><P><SPAN>In today's digital world, data stands as a crucial asset for companies, driving decision-making, strategic planning, and enhancing operational effectiveness. The value of data hinges on its quality, relevance, and semantic description in form of metadata. Here, the Clean Core strategy becomes vital, emphasizing Data Quality and Data Volume/ Data Relevance, which are key to smooth daily operations within the SAP system landscape. The aim of the Clean Core strategy is to ensure that all business and system-related data is consistently accurate, complete, relevant, and accessible. Tools like <A href="https://www.sap.com/products/technology-platform/master-data-governance.html" target="_blank" rel="noopener noreferrer">SAP Master Data Governance</A> can aid in creating a unified master data management approach across various domains to enhance data accuracy. Additionally, <A href="https://www.sap.com/products/technology-platform/datasphere.html" target="_blank" rel="noopener noreferrer">SAP Datasphere</A> plays a role in simplifying the data landscape, facilitating access to data across hybrid and cloud environments and utilizing existing SAP BW models. SAP Datasphere keeps the semantic and associations of SAP data intact, which shows the data in its business context. This is important because it makes sure the data is reliable and precise, which helps with making decisions and planning strategies. Integrated with <A href="https://www.sap.com/products/technology-platform/cloud-analytics.html" target="_blank" rel="noopener noreferrer">SAP Analytics Cloud</A>, this approach enables informed business decisions based on operational SAP data.</SPAN></P><H4 id="toc-hId-266273528"><SPAN>4. Business Processes</SPAN></H4><P><SPAN>Organizations depend on structured business processes for their daily operations, management, and strategic planning. These processes can intersect with various IT systems and sometimes require manual intervention. Streamlining these processes and boosting automation can help organizations reduce unnecessary steps and save resources, leading to improved efficiency and quality. The Clean Core approach focuses on maximizing the use of standard SAP functionalities to maintain consistency and simplicity. It sets out a number of principles for developing clean and effective process designs, such as:</SPAN></P><UL><LI><SPAN>Utilize SAP's standard solutions, Industry Cloud, and certified SAP Partner solutions to align closely with established standards.</SPAN></LI><LI><SPAN>Extend SAP's standard solutions for unique, differentiating processes to gain a competitive edge, using tools like <A href="https://www.sap.com/products/technology-platform/process-automation.html" target="_blank" rel="noopener noreferrer">SAP Build Process Automation</A> or SAP BTP side-by-side extensibility projects</SPAN></LI><LI><SPAN>Continuously evaluate the efficiency of business processes through Process Performance Indicators (PPIs), with tools like <A href="https://www.signavio.com/" target="_blank" rel="noopener nofollow noreferrer">SAP Signavio</A> for enhanced analysis which integrates with SAP Build Process Automation.</SPAN></LI><LI><SPAN>Automate manual process tasks and improve paper- or email-based, loosely organized processes using <A href="https://www.sap.com/products/technology-platform/process-automation.html" target="_blank" rel="noopener noreferrer">SAP Build Process Automation</A>.</SPAN></LI></UL><P><SPAN>In addition to these principles, adopting an Enterprise Architecture (EA) methodology is crucial for ensuring business processes align with an organization's goals and strategy. EA methodologies provide a systematic way to analyze and design business processes and their technology interactions, leading to improved operational efficiency by pinpointing and eliminating redundancies and better allocating resources. Tools such as <A href="https://www.leanix.net/en/" target="_blank" rel="noopener nofollow noreferrer">SAP LeanIX</A> and SAP Reference Business Architecture content, including Solution Value Flow Diagrams and Solution Component Diagrams available in the <A href="https://api.sap.com/allprocess" target="_blank" rel="noopener noreferrer">SAP Business Accelerator Hub</A>, are instrumental in this endeavor, offering valuable guidance for streamlined process design and implementation.</SPAN></P><H4 id="toc-hId-69760023"><SPAN>5. Operations</SPAN></H4><P><SPAN>In the context of Clean Core dimensions, operational management can be categorized into two primary objectives: "cleaning the core" and "maintaining the core’s cleanliness." When dealing with a brownfield implementation, "cleaning the core" entails a thorough review of custom code to decide whether it should be phased out, reworked, or updated. This initiative also includes revamping development guidelines and embracing industry-standard practices. Meanwhile, "maintaining the core’s cleanliness" in the aftermath of a successful migration, or when initiating a greenfield project, calls for embedding monitoring and alert systems into the daily operations framework to safeguard the integrity of the core. To accomplish this, a detailed understanding of all the critical performance indicators (KPIs) that influence the Clean Core is necessary, focusing on four key areas: Integration, Extensibility, Processes, and Data. For effective operational management, <A href="https://support.sap.com/en/alm/sap-cloud-alm.html" target="_blank" rel="noopener noreferrer">SAP Cloud ALM</A> serves as an ideal platform. It offers integrated monitoring and alerting capabilities, aligning with SAP’s recommended best practices for operations management.</SPAN></P><H3 id="toc-hId--255836201"><SPAN>Summary</SPAN></H3><P><SPAN><A href="https://sap-clean-core-5179.brandcast.io/sap-clean-core/" target="_blank" rel="noopener nofollow noreferrer">SAP Clean Core Strategy</A> is not a one-size-fits-all solution, but a tailored approach that depends on your specific business needs, challenges, and opportunities. The exact path to a Clean Core will vary depending on whether you're starting fresh (Greenfield) or upgrading existing systems (Brownfield), as well as whether you're aiming for a Private Cloud, Public Cloud, or a hybrid setup. However, there are some shared steps to consider for a smooth implementation:</SPAN><SPAN>&nbsp;</SPAN></P><OL><LI><STRONG><SPAN>Evaluate your current IT environment</SPAN></STRONG><SPAN> to pinpoint challenges and deficiencies: It's essential to gain a clear understanding of your existing IT framework, encompassing systems, processes, data, and integration points. Recognize the issues and deficiencies that are obstacles to your business's transformation, such as complexity, inefficiency, inconsistency, fragmentation, and outdated technology.</SPAN></LI><LI><STRONG><SPAN>Set out your business transformation goals</SPAN></STRONG><SPAN> and determine what takes precedence: Clarify your vision for business transformation, including the objectives and desired outcomes, which should reflect your overall business strategy and customer expectations. Determine which initiatives should be tackled first, considering their potential business impact and urgency, and make sure your stakeholders and sponsors agree with your transformation plan.</SPAN></LI><LI><STRONG><SPAN>Craft your desired IT architecture</SPAN></STRONG><SPAN> and plan, focusing on SAP S/4HANA and cloud-based solutions: Design a future IT architecture with SAP S/4HANA as the digital core, supplemented by cloud solutions for specific business functionalities. Develop a roadmap that transitions from your current to your desired IT architecture, detailing the project's scope, schedule, and required resources. For this, the <A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-enterprise-support-highlights-resources-to-achieve-a-clean-core/ba-p/13651582" target="_blank">SAP Enterprise Support Value Maps</A> can help.</SPAN></LI><LI><STRONG><SPAN>Carry out your transformation project</SPAN></STRONG><SPAN> with support from SAP and its partners, utilizing the best practices and methodologies they provide. Manage the change and associated risks carefully, ensuring the quality and security of your IT solutions throughout the process.</SPAN></LI><LI><STRONG>Keep track of your transformation's results and benefits</STRONG><SPAN>: Monitor the outcomes and benefits of your transformation, using the key performance indicators and metrics established in your objectives. Continuously review and refine your IT solutions based on feedback and the insights gained, striving for ongoing enhancement of business efficiency and customer satisfaction.</SPAN></LI></OL><P><STRONG>Previous Blogs:</STRONG></P><UL><LI><SPAN>Blog 1: <A href="https://community.sap.com/t5/technology-blogs-by-sap/10-ways-to-reshape-your-sap-landscape-with-sap-business-technology-platform/ba-p/13637444" target="_self">The Central Role of Clean Core and A</A>I</SPAN></LI><LI><SPAN>Blog 2: <A href="https://community.sap.com/t5/technology-blogs-by-sap/10-ways-to-reshape-your-sap-landscape-with-sap-business-technology-platform/ba-p/13643927" target="_self">The Role of BTP as Extention and Innovation Platform</A></SPAN></LI></UL><P><STRONG>Additional Videos:</STRONG></P><UL><LI>Unleash your Digital Transformation with Clean Core : <A href="https://youtu.be/i7Ms4WciM9Y" target="_blank" rel="noopener nofollow noreferrer">https://youtu.be/i7Ms4WciM9Y</A></LI><LI>Clean Core in Detail: <A href="https://youtu.be/JaSQbFypIkQ" target="_blank" rel="noopener nofollow noreferrer">https://youtu.be/JaSQbFypIkQ</A></LI></UL><P>&nbsp;</P> 2024-03-28T14:14:59.178000+01:00 https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/deep-dive-into-sap-build-process-automation-with-sap-s-4hana-cloud-public/ba-p/13652021 Deep Dive into SAP Build Process Automation with SAP S/4HANA Cloud Public Edition - Retail 2024-03-28T14:19:12.526000+01:00 Hardeep_Tulsi https://community.sap.com/t5/user/viewprofilepage/user-id/132334 <H1 id="toc-hId-861591903"><FONT size="4">This blog is intended to complement my previous blogs on automation and augment Retail scenario with&nbsp;SAP S/4HANA Cloud Public Edition as described with available <A href="https://me.sap.com/processnavigator/globalSearch/Retail" target="_blank" rel="noopener noreferrer">scope items</A> for Retail and <A href="https://help.sap.com/docs/SAP_S4HANA_CLOUD/64609d0ecac54654b0837cba34555b82/7c444c57a10f0b22e10000000a44147b.html?version=2402.500" target="_blank" rel="noopener noreferrer">SAP Help documentation</A>.</FONT></H1><P>Customers are eager to take charge and explore potential avenues for innovation, aiming to streamline enterprise automation across diverse landscapes. This proactive approach empowers companies to address the challenges of disjointed processes, ensuring they focus their automation efforts where they're most needed.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="FINALEENTAUTO.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87777iC2A6D4F3E09DAB86/image-size/large?v=v2&amp;px=999" role="button" title="FINALEENTAUTO.png" alt="FINALEENTAUTO.png" /></span></P><P>A Retail company striving to revolutionize its operations, particularly in managing the intricate logistics of end-to-end retail processes. They seek to seamlessly integrate sales from both backyard distribution channels and physical storefronts, even when inventory might not be stored on-site. This pursuit of efficiency reflects their commitment to enhancing customer experience and staying ahead in a competitive market.</P><P>Let's explore a typical business situation where sales happen in stores using cash registers (POS systems). These sales involve things like selling items, customers paying for orders, and handling money transactions. To keep track of all this, we need to automatically create documents showing when goods leave the store, including steps like gathering items, putting them in packages, and officially marking them as sold and out of the store.&nbsp;</P><P>Real-time stock levels are monitored within <A href="https://help.sap.com/docs/SAP_CUSTOMER_CHECKOUT/8f711df7d2aa4f1aa29f88c86cef2081/80d32d80ceac4efd98d55140c7d64a24.html" target="_blank" rel="noopener noreferrer">SAP Customer Checkout Manager</A> for immediate visibility. Data is moved from S/4HANA Public Cloud Retail to SAP Customer Checkout Manager, focusing on master data replication. Financial and sales transactions flow from SAP Customer Checkout Manager back to S/4HANA Public Cloud Retail. Learn more about <A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/integration-of-sap-customer-checkout-manager-with-s-4-public-cloud-retail/ba-p/13551240" target="_blank">Integration of SAP Customer Checkout Manager with S/4 Public Cloud Retail</A> with <A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/integration-of-sap-customer-checkout-manager-with-s-4-public-cloud-retail/ba-p/13551240" target="_blank">documentation</A>.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RETAILHL.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87778i9D83A7AB54A4F0E0/image-size/large?v=v2&amp;px=999" role="button" title="RETAILHL.png" alt="RETAILHL.png" /></span></P><P>Executing enterprise automation with SAP Build Process Automation / SAP Integration Suite Middleware using SAP Event Mesh with business events, help trigger fully automated process. Customer can set up their custom enterprise automation bots and workflows by leveraging and extending the available best practices content on SAP <A href="https://hub.sap.com/build?pub=SAP,SAP%20S%2F4HANA&amp;app=SAP%20S%2F4HANA%20Cloud" target="_blank" rel="noopener noreferrer">Bot Store</A>. Ex. documents for goods movements such as outbound delivery, Picking, Packing and Post Goods Issue need to be automatically accomplished. You can learn more with <A href="https://community.sap.com/t5/technology-blogs-by-sap/business-event-triggers-in-sap-build-process-automation-for-sap-s-4hana/ba-p/13572223" target="_blank">documentation</A>. &nbsp;</P><P>SAP Event Mesh is a fully managed cloud service running on SAP BTP for enabling applications, integrations, and extensions to communicate asynchronously through events. It is part of SAP’s event driven ecosystem and powers end-to-end event driven architectures. SAP Event Mesh allows applications to communicate through asynchronous events.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="event.png" style="width: 675px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87779i3D651597A5990089/image-size/large?v=v2&amp;px=999" role="button" title="event.png" alt="event.png" /></span></P><P>Experience greater agility and scalability when you create responsive applications that work independently and participate in event-driven business processes across your business ecosystem. Learn more with SAP Help | <A href="https://help.sap.com/docs/event-mesh/event-mesh/what-is-sap-event-mesh" target="_self" rel="noopener noreferrer">Documentation</A>&nbsp;</P><P>Currently all public business events for SAP S/4HANA Cloud listed on&nbsp;<A href="https://api.sap.com/" target="_blank" rel="noopener noreferrer">Business Accelerator Hub</A>&nbsp;are supported and can be used to streamline the process with automation.</P><P>Customers envision to have AI-powered SAP Build Process Automation solution to integrate applications such as SAP S/4HANA Cloud Public Edition with their point-of-sale (POS) system, discover process inefficiencies and automate business processes.​</P><P>SAP Build Process Automation provide the flexibility for the customer to automate across the enterprise to improve efficiency and reduce errors, along with Event Mesh set up. Event-Broker-as-a-Service decouples communication between event sources and event consumers in a plug-and-play fashion.</P><P><STRONG>Streamline Goods Movement and Posting Billing Document</STRONG><BR /><STRONG>Extend pre-build Template packages to customize and perform automation using Business Events</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Automation Flow.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87780i5431C707696AA07E/image-size/large?v=v2&amp;px=999" role="button" title="Automation Flow.png" alt="Automation Flow.png" /></span></P><P>Customer vision is to have real time business updates on significant changes in business applications for their logistics and Retail sales process, throughout their business ecosystem and increase flexibility and scalability by loosely coupling business applications and infrastructure.</P><P><STRONG>Automated Goods Movement and Posting Updated Billing Document using SAP Build Process Automation</STRONG></P><P><STRONG><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SBPA Automation.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87786iE9A340EC4E3C18E4/image-size/large?v=v2&amp;px=999" role="button" title="SBPA Automation.png" alt="SBPA Automation.png" /></span></STRONG></P><P>Utilizing automation through the API <A href="https://api.sap.com/api/API_MATERIAL_DOCUMENT_SRV/overview" target="_blank" rel="noopener noreferrer">API_MATERIAL_DOCUMENT</A>, the system orchestrates the creation of postings to maintain a seamless availability of articles on the storefront. Additionally, it initiates the generation of material documents following a trigger event at the Event Mesh, occurring subsequent after the creation of a point-of-sale (POS) receipt.</P><P>Within the Event Mesh framework, occurrences related to material documents are captured. These events manifest when a material document is generated (MaterialDocument.Created.v1) or when an item within a material document is canceled (MaterialDocument.Canceled.v1). Further insights into Material Document Events can be obtained for deeper understanding with SAP Help | <A href="https://help.sap.com/docs/SAP_S4HANA_CLOUD/3f57e7df4a114edabffe8b2d581a59ed/40783449115e4b53a9da6e513caf8f50.html?version=2402.501" target="_blank" rel="noopener noreferrer">Documentation</A></P><P>Furthermore, the allocation of specific delivery groups to outbound deliveries is imperative using SAP Build Process Automation BOT. This ensures that the requisite shipment resources are appropriately assigned to undertake subsequent outbound delivery tasks. The assignment of outbound delivery groups is managed externally to the cloud ERP system, documented within a spreadsheet, and synchronized with the SAP S/4HANA Cloud, Public Edition for updates and maintenance.</P><P>SAP Build Process Automation helps automatic creation of Picking and Packing, goods issue and monitor process using process visibility.&nbsp; Notification events or data events can be sent from the event source to inform of the change.&nbsp; Message holding the event description in an encoded format is sent through an event broker, where event consumers have registered with the event broker and are informed of the event.</P><H5 id="toc-hId-1181409274">SAP Build Process Automation best practices content extended to update the delivery group for outbound deliveries assignment.</H5><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Change outbound delivery.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87795iFAC55A5203B1C037/image-size/large?v=v2&amp;px=999" role="button" title="Change outbound delivery.png" alt="Change outbound delivery.png" /></span></P><P>&nbsp;</P><H5 id="toc-hId-984895769">SAP Build Process Automation perform automated goods movement tasks such as Picking, Packing and Goods Issue.</H5><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="OB Delivery.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87794i2C026C6F54D54C73/image-size/large?v=v2&amp;px=999" role="button" title="OB Delivery.png" alt="OB Delivery.png" /></span></P><P>&nbsp;</P><P>SAP Build Process Automation helps updating the billing document for sales for with specific attributes, Proof of Delivery, reference point-of-sale (POS) number, as well as the respective financial postings in SAP S/4HANA Cloud.</P><P>For Retail business scenario, solution leverage Store Connectivity POS Outbound (<A href="https://me.sap.com/processnavigator/SolS/EARL_SolS-013/2402/SolP/3I2?region=US" target="_blank" rel="noopener noreferrer">3I2</A>) to send the (Articles, B2C prices etc.) information from SAP S/4HANA Cloud system to point-of-sale (POS) system.</P><P>POS outbound service operation enables you to send product master data, sales price information, and additional information, such as purchase price information and bills of material, to point-of-sale (POS) systems. You can learn more with &nbsp;<A href="https://help.sap.com/docs/SAP_S4HANA_CLOUD/867f44bbab0e43c99b62a4d60630e4de/089fa77326cd4dcab06f9dfb8599c50d.html?version=2402.500" target="_blank" rel="noopener noreferrer">Documentation | SAP Help Portal</A> and <A href="https://api.sap.com/api/CE_CO_WART_PRMRCHV_REPLBLKRQ_OUT/overview" target="_blank" rel="noopener noreferrer">API Documentation</A></P><P>For Retail business inbound scenario, solution leverage POS Inbound (<A href="https://me.sap.com/processnavigator/SolS/EARL_SolS-013/2402/SolP/3HV?region=US" target="_blank" rel="noopener noreferrer">3HV</A>)&nbsp;functionality to transfer information from POS Sales receipt and means of payment for articles available at Store front and backyard distribution channel.</P><P>In addition, configuration set up can be done to transfers aggregated sales, aggregated payment list, sales per receipt and returns, and customer order payment information by creating material and billing documents in SAP S/4HANA Cloud system.</P><P>"<A href="https://api.sap.com/api/CE_POS_SALES_TRANS_CREATE_REQ_IN/overview" target="_blank" rel="noopener noreferrer">POS Sales Transactions - Create</A>" inbound asynchronous service to replicate POS sales transactions in SAP S/4HANA Cloud system. You can learn more with SAP Help Finance Transactions. <A href="https://help.sap.com/docs/SAP_S4HANA_CLOUD/867f44bbab0e43c99b62a4d60630e4de/729ad95981a54ef692eb3ba777e6eab6.html?version=2402.500" target="_blank" rel="noopener noreferrer">Documentation | SAP Help Portal</A></P><P>POS Sales Transaction - Receive Confirmation outbound service enables you to receive a confirmation as soon as you successfully posted a POS sales transaction in the&nbsp;SAP S/4HANA Cloud&nbsp;system. <A href="https://help.sap.com/docs/SAP_S4HANA_CLOUD/867f44bbab0e43c99b62a4d60630e4de/1d656c80d4034c07b3e1f2e7496aaf1d.html?version=2402.500" target="_blank" rel="noopener noreferrer">Documentation | SAP Help Portal</A></P><P>"<A href="https://api.sap.com/api/CE_POS_FINANCIAL_TRANS_CREATE_REQ_IN/overview" target="_blank" rel="noopener noreferrer">POS Financial Transactions - Create</A>" inbound asynchronous service enables you to replicate point-of-sale (POS) financial transactional data to SAP S/4HANA Cloud system. You can learn more with SAP Help Finance Transactions <A href="https://help.sap.com/docs/SAP_S4HANA_CLOUD/867f44bbab0e43c99b62a4d60630e4de/903cbce8433741ae9c9952e4040aeb08.html?version=2402.500" target="_blank" rel="noopener noreferrer">Documentation | SAP Help Portal</A></P><P><A href="https://help.sap.com/docs/SAP_S4HANA_CLOUD/867f44bbab0e43c99b62a4d60630e4de/f26a35e30d1b49a6a06b0ea8702bf059.html?version=2402.500" target="_blank" rel="noopener noreferrer">POS Financial Transaction - Receive Confirmation </A>outbound service enables you to receive a SOAP confirmation as soon as you successfully posted a POS financial transaction in the&nbsp;SAP S/4HANA Cloud. <A href="https://help.sap.com/docs/SAP_S4HANA_CLOUD/867f44bbab0e43c99b62a4d60630e4de/f26a35e30d1b49a6a06b0ea8702bf059.html?version=2402.500" target="_blank" rel="noopener noreferrer">Documentation | SAP Help Portal</A></P><P>POS Inbound (<A href="https://me.sap.com/processnavigator/SolS/EARL_SolS-013/2402/SolP/3HV?region=US" target="_blank" rel="noopener noreferrer">3HV</A>)&nbsp;create billing Document for sales and means of payment. Billing Document <A href="https://api.sap.com/event/CE_BILLINGDOCUMENTEVENTS/overview" target="_blank" rel="noopener noreferrer">Events</A> are triggered and received by Event Mesh that informs a external system about created, changed, and canceled billing documents in an SAP S/4HANA Cloud. Event mesh will have automated&nbsp;execution for SAP Build process automation bot that reads the billing information via API based bot (<A href="https://api.sap.com/api/API_BILLING_DOCUMENT_SRV/overview" target="_blank" rel="noopener noreferrer">https://api.sap.com/api/API_BILLING_DOCUMENT_SRV/overview</A>) and send it to POS system.</P><P>In general, SAP recommend using the <A href="https://www.sap.com/products/crm/omnichannel-sales-transfer-and-audit.html" target="_blank" rel="noopener noreferrer">SAP Omnichannel Sales Transfer and Audit solution</A> which can be further evaluated in the given scenario. &nbsp;This solution will further optimize by having aggregated transactions (and, in specific use cases, nonaggregate (receipt-level) transactions) are periodically pushed to the back end for further processing.</P><P>Let’s take a deeper look at technical configuration steps using Event Mesh with SAP S/4HANA Cloud, Public Edition with 10 simple steps that can get your event driven automation up and running.</P><OL><LI>Setup Connectivity and Extensibility</LI></OL><P>You can set up the connectivity between Event Mesh and the SAP S/4HANA Cloud Public Edition Tenant that enable the exchange of credentials between the two systems.&nbsp; Administrator should first create an SAP S/4HANA Cloud Extensibility service instance with service plan messaging.&nbsp; Learn more with <A href="https://help.sap.com/docs/btp/sap-business-technology-platform/set-up-connectivity-between-event-mesh-and-sap-s-4hana-cloud-tenant" target="_blank" rel="noopener noreferrer">documentation</A>.</P><OL class="lia-list-style-type-lower-alpha"><LI>Maintain Extensions on SAP BTP - To build extension applications for your SAP S/4HANA Cloud system, you need to connect your SAP S/4HANA Cloud system to your SAP Business Technology Platform global account. SAP Business Technology Platform Cockpit, open your global account and choose&nbsp;<EM>Systems</EM> - <EM>Add System. &nbsp;Learn more with <A href="https://help.sap.com/docs/btp/sap-business-technology-platform/register-sap-s-4hana-cloud-system-in-global-account-in-sap-btp" target="_blank" rel="noopener noreferrer">Documentation | SAP Help Portal </A></EM><EM>&nbsp;</EM></LI><LI>Set Up Entitlements for Your Subaccount &nbsp;<EM><A href="https://help.sap.com/docs/btp/sap-business-technology-platform/create-subaccount" target="_blank" rel="noopener noreferrer">Documentation | SAP Help Portal</A>&nbsp; &nbsp;</EM><EM>&nbsp;</EM></LI><LI>Set up your subaccount entitlement for SAP Event Mesh - Click on Configure Entitlements and then on Add Service Plan.&nbsp; In the Subaccount Entitlements dialog box, select the service Event Mesh. In the Service Details: Event Mesh screen area, check both options the default service plan and the Standard (Application) and then click on Add Service Plans.&nbsp;</LI></OL><P>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Hardeep_Tulsi_1-1711606706561.png" style="width: 975px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87804i7B83D5A6E4FD914C/image-size/large?v=v2&amp;px=999" role="button" title="Hardeep_Tulsi_1-1711606706561.png" alt="Hardeep_Tulsi_1-1711606706561.png" /></span></P><P>&nbsp;</P><P>&nbsp; &nbsp; &nbsp;</P><P>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Hardeep_Tulsi_2-1711606720945.png" style="width: 975px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87805iB08193F11504AA23/image-size/large?v=v2&amp;px=999" role="button" title="Hardeep_Tulsi_2-1711606720945.png" alt="Hardeep_Tulsi_2-1711606720945.png" /></span></P><P>&nbsp;</P><OL class="lia-list-style-type-lower-alpha"><LI>Messaging to consume SAP S/4HANA Cloud events and create event-based extensions using the event bus from SAP Event Mesh and api-access for generic access to SAP S/4HANA Cloud APIs.</LI></OL><OL><LI>&nbsp;Navigate to&nbsp;SAP S/4HANA Cloud Public Edition Home -&gt; Communication Management&nbsp;tab and choose the tile&nbsp;Maintain Extensions on SAP BTP.&nbsp;<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Hardeep_Tulsi_3-1711606758774.png" style="width: 975px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87806i9F5F10B762D6C603/image-size/large?v=v2&amp;px=999" role="button" title="Hardeep_Tulsi_3-1711606758774.png" alt="Hardeep_Tulsi_3-1711606758774.png" /></span><P>&nbsp;</P></LI></OL><P>On the&nbsp;Maintain Extensions on SAP BTP&nbsp;screen in the Integration section, choose&nbsp;New.&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Hardeep_Tulsi_4-1711606790458.png" style="width: 975px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87807i2CF909433707EED0/image-size/large?v=v2&amp;px=999" role="button" title="Hardeep_Tulsi_4-1711606790458.png" alt="Hardeep_Tulsi_4-1711606790458.png" /></span></P><P>&nbsp;</P><P>In the Integration Token field, paste in the integration token generated and copied from the SAP Business Technology Platform. Enter a description for your system integration token and save it.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Hardeep_Tulsi_5-1711606819125.png" style="width: 975px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87808i470FF6874F02AC5B/image-size/large?v=v2&amp;px=999" role="button" title="Hardeep_Tulsi_5-1711606819125.png" alt="Hardeep_Tulsi_5-1711606819125.png" /></span></P><P>&nbsp;</P><P>Both Services will be displayed in the list of entity assignments.</P><P>3. Navigate to your BTP subaccount and allow SAP Business Technology Platform applications to consume events and APIs from SAP S/4HANA Cloud, you need to create the relevant service instances of SAP S/4HANA Cloud Extensibility for the service plans api-access and messaging.</P><P>Inside the subaccount. Select in the left menu Services -&gt; Instances and Subscriptions. Then Click on the button “Create”.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="INSTCR.jpg" style="width: 780px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87810i5143BD16A3848B28/image-size/large?v=v2&amp;px=999" role="button" title="INSTCR.jpg" alt="INSTCR.jpg" /></span></P><P>&nbsp;</P><P>&nbsp;</P><P>4.&nbsp; In the screen for create wizard the available Services will be displayed in the Plan dropdown list, select the service SAP S/4HANA Cloud Extensibility with plan messaging.</P><P>5. In Runtime select Cloud Foundry. Then choose the space created, for this example “dev”, then the systems linked to the BTP are displayed in the list, here choose the S4HANA Cloud to be extended “XXX”. Choose a CLI name "XXX-SBPAEvents" for your instance (e.g. XXX-SBPAEvents). And click Next.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="NEWINST.jpg" style="width: 870px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87811iA9FB4347000C2EE4/image-size/large?v=v2&amp;px=999" role="button" title="NEWINST.jpg" alt="NEWINST.jpg" /></span></P><P>&nbsp;</P><P>The next screen for parameters request the Client Id with 4 chars and the system name. then click Next</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="JSON.jpg" style="width: 936px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87812iAAD96776D4085ABD/image-size/large?v=v2&amp;px=999" role="button" title="JSON.jpg" alt="JSON.jpg" /></span></P><P>&nbsp;</P><P>6. Create a new service. Inside the subaccount. Select in the left menu Services -&gt; Instances and Subscriptions. Then Click on the button “Create”.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="SUBACT.jpg" style="width: 780px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87814i8A4DB7F693C3078C/image-size/large?v=v2&amp;px=999" role="button" title="SUBACT.jpg" alt="SUBACT.jpg" /></span></P><P>&nbsp;</P><P>&nbsp;</P><P>7. In the Create wizard in the Service dropdown list, select the service SAP S/4HANA Cloud Extensibility. Select the Service Plan api-access, ex. "XXX-SBPAEventAPI" which you use for generic access to APIs in your SAP S/4HANA Cloud system. The communication arrangement A2X_OD_0106 is created in SAP S/4HANA Cloud, Public Edition using scenario SAP_COM_0106</P><P>After the creation of the service, you can check the automatic creation of the communication arrangement in SAP S/4HANA Cloud, Public Edition system. Navigate to Communication Arrangements and look for A2X_OD_0106.</P><P>8. Navigate to&nbsp;SAP S/4HANA Cloud Public Edition - Enterprise Event Enablement - Configure Channel Binding, Select your event channel from the list SAP_CP_XF_XXX</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="ENTENABL.jpg" style="width: 343px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87816i932A8188AD6B19B1/image-size/large?v=v2&amp;px=999" role="button" title="ENTENABL.jpg" alt="ENTENABL.jpg" /></span></P><P>&nbsp;</P><P>In the new screen, click Create over “Outbound Topic Bindings” section. Select the Topic that will be used for the event. Then you can create the topic. The topics will appear in the list.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="OBTPBING.jpg" style="width: 760px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87818i58537BB4C8FC7942/image-size/large?v=v2&amp;px=999" role="button" title="OBTPBING.jpg" alt="OBTPBING.jpg" /></span></P><P>&nbsp;</P><P>&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="OUTBOUNDTOPIC.jpg" style="width: 624px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87819iB3E5CAE9F94A8378/image-size/large?v=v2&amp;px=999" role="button" title="OUTBOUNDTOPIC.jpg" alt="OUTBOUNDTOPIC.jpg" /></span></P><P>&nbsp;</P><P>&nbsp;<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="TPIC.jpg" style="width: 624px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87820iEB456EEA4C009D8C/image-size/large?v=v2&amp;px=999" role="button" title="TPIC.jpg" alt="TPIC.jpg" /></span></P><P>&nbsp;</P><P>9. Navigate to&nbsp;SAP BTP Tenant. Create a new service (Event Mesh).</P><P>Inside the subaccount. Select in the left menu Services -&gt; Instances and Subscriptions. Then Click on the button “Create”.</P><P>Search for Service “Event Mesh”, Plan “default”, Run Environment “Cloud Foundry”, choose the space in Cloud Foundry, and the name for the instanceSBPAEventMesh and click , Create Event Mesh Instance&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="EVNTMEH.jpg" style="width: 913px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87821i7A6F5BC8B7DDFC4D/image-size/large?v=v2&amp;px=999" role="button" title="EVNTMEH.jpg" alt="EVNTMEH.jpg" /></span></P><P>&nbsp;</P><P>To manage the Event Mesh Instance, create a new service for Event Mesh now for Standard Plan. Inside the subaccount. Select in the left menu Services -&gt; Instances and Subscriptions. Then Click on the button “Create”.</P><P>Search for Service “Event Mesh”, Plan “Standard” and click Next</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="STND.jpg" style="width: 624px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87822iBDF682D796F06C98/image-size/large?v=v2&amp;px=999" role="button" title="STND.jpg" alt="STND.jpg" /></span></P><P>&nbsp;</P><P>10. Navigate to BTP Sub Account and access the Event Mesh Cockpit, you need to subscribe to SAP Event Mesh and assign several roles to your user. Go to option Security -&gt; Roles. Now create the role ex. &nbsp;"Event Custom Roles".</P><P>Now your " Event Mesh" Application is ready to be executed that will capture events triggered from SAP S/4HANA Cloud, Public Edition System.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="WEBHOOK.jpg" style="width: 936px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87823i334D07AD0223C6E0/image-size/large?v=v2&amp;px=999" role="button" title="WEBHOOK.jpg" alt="WEBHOOK.jpg" /></span></P><P>&nbsp;</P><P>You can jumpstart automation projects with hundreds process content packages available in <A href="https://hub.sap.com/build?pub=SAP,SAP%20S%2F4HANA&amp;app=SAP%20S%2F4HANA%20Cloud" target="_self" rel="noopener noreferrer">public bot store</A>, SAP Build Process Automation bots and connectors designed specifically to enhance the capabilities of your SAP applications.</P><P>SAP Build process automation connectors, create Actions to communicate with external systems or leverage Automation SDK providing different activities for an automation.</P><P>Stay tuned for more updates in the next quarters!</P><P>Follow us via <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1387241">@Sap</a> and #S4HANA, or myself via@har1234 (Hardeep Tulsi)</P><P>Stay tuned for more updates in the next quarters!</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Hardeep_Tulsi_0-1711609730649.png" style="width: 52px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87834i34504FFAE6C59DF0/image-dimensions/52x52?v=v2" width="52" height="52" role="button" title="Hardeep_Tulsi_0-1711609730649.png" alt="Hardeep_Tulsi_0-1711609730649.png" /></span>&nbsp;<STRONG>Where to Find More Information:</STRONG></P><UL><LI>Watch the replays of our exclusive SAP S/4HANA Cloud Public Edition 2402 Early Release Series here:&nbsp;<A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/watch-the-replays-of-our-exclusive-sap-s-4hana-cloud-public-edition-2402/ba-p/13587019" target="_blank">https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/watch-the-replays-of-our-excl...</A>&nbsp;</LI><LI>Explore the ready-to-run cloud ERP here:&nbsp;<A href="https://www.sap.com/products/erp/s4hana.html" target="_blank" rel="noopener noreferrer">https://www.sap.com/products/erp/s4hana.html</A></LI><LI>Watch our SAP S/4HANA Cloud product update videos on YouTube:&nbsp;<A href="https://www.youtube.com/playlist?list=PLWV533hWWvDnnyN2j-CcUheNN-GaNCb3H" target="_blank" rel="noopener nofollow noreferrer">https://www.youtube.com/playlist?list=PLWV533hWWvDnnyN2j-CcUheNN-GaNCb3H</A></LI><LI>Check out our digital enablement wheel here:&nbsp;<A href="https://chart-bdmaicr0au.dispatcher.eu2.hana.ondemand.com/index.html?hc_reset" target="_blank" rel="noopener nofollow noreferrer">https://chart-bdmaicr0au.dispatcher.eu2.hana.ondemand.com/index.html?hc_reset</A></LI><LI>Find out how to switch from groups to spaces and pages here:&nbsp;<A href="https://blogs.sap.com/2023/11/06/deactivation-of-groups-in-the-sap-fiori-launchpad-in-sap-s-4hana-cloud-public-edition-2402-switching-to-spaces-and-pages-mandatory/" target="_blank" rel="noopener noreferrer">https://blogs.sap.com/2023/11/06/deactivation-of-groups-in-the-sap-fiori-launchpad-in-sap-s-4hana-cl...</A></LI><LI>Become an early adopter for Joule in SAP S/4HANA Cloud Public Edition here:&nbsp;<A href="https://influence.sap.com/sap/ino/#campaign/3612" target="_blank" rel="noopener noreferrer">https://influence.sap.com/sap/ino/#campaign/3612</A></LI><LI>Check out the SAP Activate Roadmap for early adopters here:&nbsp;<A href="https://go.support.sap.com/roadmapviewer/#/group/658F507A-D6F5-4B78-9EE1-0300C5F1E40F/roadmapOverviewPage/0894b61141a74a65b8da92db32685da5" target="_blank" rel="noopener noreferrer">https://go.support.sap.com/roadmapviewer/#/group/658F507A-D6F5-4B78-9EE1-0300C5F1E40F/roadmapOvervie...</A></LI><LI>Review the PPL content here:&nbsp;<A href="https://go.support.sap.com/roadmapviewer/#/group/658F507A-D6F5-4B78-9EE1-0300C5F1E40F/roadmapContentPage/0894b61141a74a65b8da92db32685da5:t8" target="_blank" rel="noopener noreferrer">https://go.support.sap.com/roadmapviewer/#/group/658F507A-D6F5-4B78-9EE1-0300C5F1E40F/roadmapContent...</A></LI><LI>Listen to our podcast here:&nbsp;<A href="https://podcast.opensap.info/inside-sap/" target="_blank" rel="noopener nofollow noreferrer">https://podcast.opensap.info/inside-sap/</A></LI><LI>Watch our openSAP microlearnings to learn about SAP S/4HANA Cloud topics at your own pace here:&nbsp;<A href="https://microlearning.opensap.com/" target="_blank" rel="noopener noreferrer">https://microlearning.opensap.com/</A></LI><LI>Find best practices on SAP S/4HANA Cloud Public Edition here:&nbsp;<A href="https://me.sap.com/processnavigator/SolS/EARL_SolS-013/latest?region=DE" target="_blank" rel="noopener noreferrer">https://me.sap.com/processnavigator/SolS/EARL_SolS-013/latest?region=DE</A></LI><LI>Check out what’s new here:&nbsp;<A href="https://help.sap.com/doc/ce01d82756b947a1a043a5d5a3204226" target="_blank" rel="noopener noreferrer">https://help.sap.com/doc/ce01d82756b947a1a043a5d5a3204226</A>&nbsp;&nbsp;</LI><LI>Find help here:&nbsp;<A href="https://help.sap.com/docs/SAP_S4HANA_CLOUD" target="_blank" rel="noopener noreferrer">https://help.sap.com/docs/SAP_S4HANA_CLOUD</A></LI><LI>Read the feature scope description here:&nbsp;<A href="https://help.sap.com/doc/7c9e0bbbd1664c2581b2038a1c7ae4b3" target="_blank" rel="noopener noreferrer">https://help.sap.com/doc/7c9e0bbbd1664c2581b2038a1c7ae4b3</A></LI></UL> 2024-03-28T14:19:12.526000+01:00 https://community.sap.com/t5/technology-blogs-by-sap/exploring-sap-extensibility-types-of-extensibilities/ba-p/13656258 Exploring SAP Extensibility - Types of Extensibilities 2024-04-02T22:28:55.301000+02:00 filipebst https://community.sap.com/t5/user/viewprofilepage/user-id/6881 <P><SPAN>In this blog post, I will give a brief explanation of the types of extensibilities offered by SAP: Key User (In-App) Extensibility, Developer (On-Stack) Extensibility, and Side-by-Side Extensibility on SAP Business Technology Platform (BTP). The intention is to provide just a brief summary for each type of extensibility available.</SPAN></P><DIV class=""><DIV class=""><DIV class=""><DIV><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class=""><P><STRONG>Firstly, why is extensibility necessary?</STRONG> Despite SAP offering numerous standard solutions, there are instances where these solutions fail to align with the unique requirements of a client's business logic. Consequently, there is the necessity to customize the standard solutions provided by SAP to fulfill these specific requirements.</P></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV><P><STRONG>Key User (In-App) Extensibility:</STRONG></P><UL><LI><STRONG>Functionality:</STRONG> This extensibility type allows the customization of SAP Fiori apps, add application logic, create custom fields, expose data, develop custom forms, email templates, analytics, and business objects mostly without a single line of code.</LI><LI><STRONG>Targets:</STRONG> It is aimed at business users responsible for configuring and customizing SAP systems.</LI><LI><STRONG>Development Tools:</STRONG> SAP Fiori apps, Business Add-Ins (BAdIs), Core Data Services (CDS), SAP BAS, and SAP BTP.</LI><LI><STRONG>Technical Implementation:</STRONG>&nbsp;Key users can modify existing Fiori apps, integrate custom logic through BAdIs, extend standard business objects, generate custom CDS views and APIs, customize forms and email templates and develop custom analytics using CDS views.</LI></UL><P>Here's a video showing some examples of In-App Extensions: <A href="https://www.youtube.com/watch?v=pOOORn7fIR0" target="_blank" rel="noopener nofollow noreferrer">https://www.youtube.com/watch?v=pOOORn7fIR0</A></P><P>Here’s a scenario example of a Key User Extensibility:&nbsp;<A href="https://extensibilityexplorer.cfapps.eu10.hana.ondemand.com/ExtensibilityExplorer/#/ExtScenario/351" target="_blank" rel="noopener nofollow noreferrer">https://extensibilityexplorer.cfapps.eu10.hana.ondemand.com/ExtensibilityExplorer/#/ExtScenario/351</A></P><P>If you would like to implement this scenario you can follow this setup guide:&nbsp;<A href="https://help.sap.com/docs/SAP_EXTENSIBILITY_EXPLORER/397bf26514884cc8a5ece65970e8e3e6/3f898d6f59254ef497f00c78423cec7a.html" target="_blank" rel="noopener noreferrer">https://help.sap.com/docs/SAP_EXTENSIBILITY_EXPLORER/397bf26514884cc8a5ece65970e8e3e6/3f898d6f59254ef497f00c78423cec7a.html</A></P><P><STRONG>Developer (On-Stack) Extensibility:</STRONG></P><UL><LI><STRONG>Functionality:</STRONG> This extensibility provides flexibility to extend standard processes, develop custom OData services, and build custom APIs while isolating custom code from the digital core.</LI><LI><STRONG>Targets:</STRONG> It is aimed at ABAP developers.</LI><LI><STRONG>Development Tools:</STRONG> ABAP Development Tools in Eclipse and SAP Business Application Studio (BAS).</LI><LI><STRONG>Technical Implementation:</STRONG> Developers can utilize ABAP RESTful application programming model, CDS views, released DDIC objects, and local APIs to extend standard processes and develop custom services.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="filipebst_0-1712141932196.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/90396i0268A1204F0D74BA/image-size/medium?v=v2&amp;px=400" role="button" title="filipebst_0-1712141932196.png" alt="filipebst_0-1712141932196.png" /></span><BR /><FONT size="1 2 3 4 5 6 7">Image Source:&nbsp;<A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-s-4hana-extensibility-simplified-guide-for-beginners/ba-p/13548988" target="_blank">https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-s-4hana-extensibility-simplified-guide-for-beginners/ba-p/13548988</A></FONT></P><P>Here’s a scenario example of a Developer Extensibility: <A href="https://extensibilityexplorer.cfapps.eu10.hana.ondemand.com/ExtensibilityExplorer/#/ExtScenario/2851" target="_blank" rel="noopener nofollow noreferrer">https://extensibilityexplorer.cfapps.eu10.hana.ondemand.com/ExtensibilityExplorer/#/ExtScenario/2851</A></P><P>If you would like to implement this scenario you can follow this setup guide: <A href="https://help.sap.com/docs/SAP_EXTENSIBILITY_EXPLORER/c87ef8f108e147d6b7143fd3c0fb1459/5d131ae128ed4b4fae521dc3bf798c88.html" target="_blank" rel="noopener noreferrer">https://help.sap.com/docs/SAP_EXTENSIBILITY_EXPLORER/c87ef8f108e147d6b7143fd3c0fb1459/5d131ae128ed4b4fae521dc3bf798c88.html</A></P><P>Here’s a quick explanation and examples of RAP Extensibility: <A href="https://www.youtube.com/watch?v=YNOa1c0BxR0" target="_blank" rel="noopener nofollow noreferrer">https://www.youtube.com/watch?v=YNOa1c0BxR0</A></P><P><STRONG>Side-by-Side Extensibility on SAP BTP:</STRONG></P><UL><LI><STRONG>Functionality:</STRONG> SAP BTP serves as a unified platform for extending both cloud-based and on-premises SAP solutions, offering integration capabilities at various levels.</LI><LI><STRONG>Targets:</STRONG> It is suitable for JavaScript, Java developers with cloud-native expertise, and ABAP developers.</LI><LI><STRONG>Development Tools:</STRONG> Cloud-native tools and services provided by SAP BTP, such as SAP CAP, SAP Fiori tools, and SAP BAS.</LI><LI><STRONG>Technical Implementation:</STRONG> Implemented using cloud-native technologies and services within SAP BTP.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="filipebst_1-1712142022109.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/90398i498587CB4EF107A4/image-size/medium?v=v2&amp;px=400" role="button" title="filipebst_1-1712142022109.png" alt="filipebst_1-1712142022109.png" /></span><BR /><FONT size="1 2 3 4 5 6 7">Image Source:&nbsp;<A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-s-4hana-extensibility-simplified-guide-for-beginners/ba-p/13548988" target="_blank">https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-s-4hana-extensibility-simplified-guide-for-beginners/ba-p/13548988</A></FONT></P><P>Here’s a scenario example of a side-by-side extensibility: <A href="https://extensibilityexplorer.cfapps.eu10.hana.ondemand.com/ExtensibilityExplorer/#/ExtScenario/310" target="_blank" rel="noopener nofollow noreferrer">https://extensibilityexplorer.cfapps.eu10.hana.ondemand.com/ExtensibilityExplorer/#/ExtScenario/310</A></P><P>If you would like to implement this scenario you can follow this setup guide: <A href="https://help.sap.com/docs/SAP_EXTENSIBILITY_EXPLORER/b0e8d558ba2f47f5b02a3fc0ac9edc34/c9520e9b67dc4d04bdae124f46c23bff.html" target="_blank" rel="noopener noreferrer">https://help.sap.com/docs/SAP_EXTENSIBILITY_EXPLORER/b0e8d558ba2f47f5b02a3fc0ac9edc34/c9520e9b67dc4d04bdae124f46c23bff.html</A></P><P><STRONG>Developer (On-Stack) Extensibility VS Side-by-Side Extensibility on SAP BTP:</STRONG></P><P>In summary the <STRONG>Developer (On-Stack) Extensibility</STRONG> is ideal for extending standard SAP processes and functionalities within SAP S/4HANA, maintaining tight integration with the digital core while the <STRONG>Side-by-Side Extensibility on SAP BTP</STRONG> is suited for developing independent applications or extensions that enhance and extend the capabilities of SAP solutions, enabling agility and innovation in addressing specific business needs.</P><P><STRONG>Conclusion:</STRONG><SPAN> SAP's extensibility options provide organizations with the flexibility and scalability needed to adapt their ERP solutions to evolving business requirements. Whether it's extending standard SAP processes within SAP S/4HANA or developing standalone applications on SAP BTP, businesses can leverage these extensibility capabilities to drive agility, innovation, and growth in today's dynamic business landscape. I hope that with this blog you now have a more clear understanding of the different type of extensibilities there are and which ones your work assigns to.</SPAN></P><P><SPAN>If you want to have a more detailed vision of SAP Extensibility read this blog from&nbsp;<a href="https://community.sap.com/t5/user/viewprofilepage/user-id/10685">@Raja</a>&nbsp;-&nbsp;<A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-s-4hana-extensibility-simplified-guide-for-beginners/ba-p/13548988" target="_blank">https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-s-4hana-extensibility-simplified-guide-for-beginners/ba-p/13548988&nbsp;</A></SPAN><SPAN>(Thank you&nbsp;<a href="https://community.sap.com/t5/user/viewprofilepage/user-id/60019">@PedroLopes</a>&nbsp;for the share).</SPAN></P> 2024-04-02T22:28:55.301000+02:00 https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-s-4hana-cloud-extensions-with-sap-build-best-practices-an-expert/ba-p/13656552 SAP S/4HANA Cloud Extensions with SAP Build Best Practices: An Expert Roundtable 2024-04-03T01:57:48.422000+02:00 Terry_Penner https://community.sap.com/t5/user/viewprofilepage/user-id/100672 <P>In this blog adapted from the podcast “<A href="https://www.podbean.com/ew/pb-wk6sm-15cc309" target="_blank" rel="noopener nofollow noreferrer">SAP S/4HANA Cloud Extensions with SAP Build Best Practices: An Expert Roundtable</A>”, SAP experts discuss SAP S/4HANA extensibility best practises and SAP Build.</P><UL class="lia-list-style-type-disc"><LI>Vanessa Micelli-Schmidt, Chief Product Expert, SAP Build</LI><LI>Felix Wente, Chief Development Architect, SAP S/4HANA</LI><LI>Mark Wright, Director, Marketing and Solutions, SAP Build Code</LI><LI>Host: Terry Penner, Marketing and Solutions, SAP BTP</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Let's Talk Cloud ERP Podcast" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/90145i1AEC3CC366EE0A57/image-size/large?v=v2&amp;px=999" role="button" title="SAP S4HANA Cloud Extensions Podcast.png" alt="Let's Talk Cloud ERP Podcast" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Let's Talk Cloud ERP Podcast</span></span></P><P><STRONG>Key products covered:</STRONG></P><UL><LI>SAP Build Code at <A href="https://community.sap.com/sap.com/build-code" target="_blank" rel="noopener nofollow noreferrer">sap.com/build-code</A></LI><LI>SAP BTP for RISE at <A href="https://community.sap.com/sap.com/btp-for-s4hana" target="_blank" rel="noopener nofollow noreferrer">sap.com/btp-for-s4hana</A></LI><LI><SPAN><A href="https://www.sap.com/products/erp/rise.html" target="_blank" rel="noopener noreferrer">RISE with SAP</A></SPAN></LI></UL><P><STRONG>Topics discussed:<BR />Part 1: Introduction to S/4HANA Cloud Extensions Best Practises</STRONG></P><UL><LI>What is Clean Core</LI><LI>Extensibility Options and Best Practises for S/4HANA Cloud Private Edition customers</LI><LI>Advantages and disadvantages of on-stack vs using BTP tools</LI><LI>Extensibility changes for S/4HANA over the past few years.&nbsp;</LI><LI>Best practices for UI-focused applications and mobile services with SAP S/4HANA</LI></UL><P><STRONG>Part 2: SAP Build Code for SAP S/4HANA developers</STRONG></P><UL><LI>What is AI bringing to the table for S/4HANA implementers and developers</LI><LI>Build Code scenarios for developers who are using Business Application Studio right now</LI><LI>Build Code roadmap plans to help developers work more easily with S/4HANA</LI><LI>How S/4HANA developers can improve governance</LI><LI>Pragmatic recommendations for the type of extensions developers should create</LI></UL><H4 id="toc-hId-1248964123"><STRONG>Part 1: Introduction to S/4HANA Cloud Extensions Best Practises</STRONG></H4><H5 id="toc-hId-1181533337">Terry:&nbsp; To start our discussion, please describe what "Clean Core" means to you and why is it important to <A href="https://www.sap.com/products/erp/s4hana-private-edition.html" target="_blank" rel="noopener noreferrer">S/4HANA Cloud Private Edition</A> customers in particular.</H5><P><STRONG>Felix:</STRONG> &nbsp;I think it can be best explained if you look directly at each of the words. &nbsp;The term “core” in ERP systems primarily refers to extensibility, processes, data quality, integration, and operational capabilities.&nbsp;&nbsp; These features depend on the specific software stack implemented by the customer. The concept of "clean" refers to the quality of how this core is adapted by customers and partners, focusing on up-to-date extensions, transparency, an unmodified and consistent core, and efficient, cloud-compliant operations.</P><P>The main advantage is agility, which allows you to benefit from innovations in a quick, straightforward manner. This includes consuming updates and upgrades without being disrupted by large adaptation projects, which can be hard to plan especially if you have extensive modifications. Ultimately, you save effort in extensibility and testing, reducing the Total Cost of Ownership (TCO). Furthermore, when it comes to data quality, you can more easily turn your data into value, resulting in more reliable forecasts and precise predictions</P><H5 id="toc-hId-985019832">&nbsp;</H5><H5 id="toc-hId-788506327">Terry:&nbsp; What are some key customer challenges you’ve experienced around extensibility and <A href="https://www.sap.com/products/erp/rise/clean-core.html" target="_blank" rel="noopener noreferrer">clean core</A><SPAN>?</SPAN></H5><P><STRONG>Vanessa:</STRONG> Sometimes, customers are unaware of the full capabilities of SAP's developer portfolio. Depending on the skill level of their developers, ranging from professional coders to low coders or key users, fusion development scenarios can be utilized to create robust applications or process extensions, maintaining a clean core. This brings numerous benefits as mentioned earlier by Felix.</P><P>However, when discussing our extension development portfolio, customers can find it challenging to determine the appropriate tool for a specific use case. Despite the increasing integration among our tools, the use case might dictate the choice of tool. Therefore, I always recommend conducting a thorough use case evaluation.</P><P>Before starting to implement something, it's crucial to ask key questions: Is it a typical low-code use case? Are key users available who can reduce some of the burden from your IT by using <A href="https://community.sap.com/sap.com/build" target="_blank" rel="noopener nofollow noreferrer">SAP Build</A> tools? Or, do you want to quickly create template-based SAP Fiori applications and have someone who prefers working in a pro-code environment? Then use <A href="https://sap.com/Build-Code" target="_blank" rel="noopener noreferrer">SAP Build Code</A>. Determining the types of personas who will be available to work on the solution should be an integral part of the decision-making process on which tool to use while maintaining a clean core.</P><P><STRONG>Mark:</STRONG> Vanessa mentioned the importance of tooling. I'm from the app development side, so I hear a lot about extending beyond S/4HANA. Business acceleration is driven by making data available to end users. SAP is a leader in providing business-relevant data, but we can't rely solely on it. We see many customers wanting to run applications across various business networks. This presents a challenge for developers who need to interact with both SAP and third-party systems.</P><P>So, we're creating a landscape for side-by-side extensibility that encompasses both SAP and non-SAP systems. While we are leaders in SAP applications, it's crucial to also focus on integrating non-SAP systems. This is where tools like build apps, build code, and enterprise automation, which we provide in BTP, come in handy for our customers.</P><H5 id="toc-hId-591992822">&nbsp;</H5><H5 id="toc-hId-395479317">Terry:&nbsp; Can you share with us some examples of best practices for extending data tables or standard functionality.</H5><P><STRONG>Felix: </STRONG>If you're looking to extend S/4HANA on stack, which refers to directly integrating within the system where the software operates, we offer two tool infrastructures tailored for key users and developers.</P><P>For key users, the primary focus is on customizing user interfaces, which includes adding custom fields, implementing basic custom logic like checks or calculations, creating mini applications, designing custom views, and configuring analytical queries. This customization is managed within a wizard-like environment, launched directly from the S/4HANA applications. As a key user, you can navigate these features without needing a comprehensive understanding of the technical aspects of the data model.</P><P>With developer extensibility you can build complex extensions beyond what a key user can accomplish. You can also expose local software artifacts as remote APIs if you want to build on BTP. However, it's crucial to adhere to SAP's public APIs, both local and remote, that are explicitly labeled as public. By doing so, you maintain compliance with the clean core approach, and your software artifacts remain stable, ensuring that your code won't require adaptation after an upgrade in the private cloud. This means you can continue using your existing extensions.</P><P>In the private cloud, you can still use your existing extensions, we call this “classic extensibility”. This concept mainly applies to brown-field code that already operates within system landscapes. Despite this, it's possible to enhance compliance with the clean core, and we recommend using a set of stable legacy APIs, primarily <A href="https://help.sap.com/docs/SAP_ERP/c5a8d544836649a1af6eaef358d08e3f/4d64679f4ce518b5e10000000a42189e.html" target="_blank" rel="noopener noreferrer">BAPIs</A>. These can be wrapped in your custom code and adapted in the public cloud, similar to future APIs.</P><P>We refer to this as the "three tier approach." If you're interested in learning more, we'll provide links to <A href="https://www.sap.com/documents/2022/10/52e0cd9b-497e-0010-bca6-c68f7e60039b.html" target="_blank" rel="noopener noreferrer">guidance documents</A>, <A href="https://www.sap.com/documents/2023/05/74fc05e6-747e-0010-bca6-c68f7e60039b.html" target="_blank" rel="noopener noreferrer">papers</A>, and <A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-s-4hana-extensibility-options-for-clean-core-journey/ba-p/13568992#8" target="_blank">blogs</A>.&nbsp;</P><P>&nbsp;</P><H5 id="toc-hId-198965812">Terry: What are your most important best practices for working with SAP Build on SAP S/4HANA?</H5><P><STRONG>Mark:</STRONG> Felix discussed the on-stack and key user capabilities essential for maintaining a clean core. When I address best practices, it's usually about the use of side-by-side extensions to continue preserving your clean core by implementing solutions on a platform. We refer to our platform as the <A href="https://community.sap.com/sap.com/btp" target="_blank" rel="noopener nofollow noreferrer">Business Technology Platform (BTP),</A> a truly innovative differentiator within SAP.</P><P>We aim to build cloud-native applications and maximize productivity on this platform. We provide a variety of frameworks, languages, libraries, and tools. These are based on two different types of modeling capabilities: the <A href="https://cap.cloud.sap/" target="_blank" rel="noopener nofollow noreferrer">Cloud Application Programming (CAP)</A> model and <A href="https://pages.community.sap.com/topics/abap/rap" target="_blank" rel="noopener noreferrer">the Restful Application Programming (RAP)</A> model.</P><P>Our developers often use CAP when developing and extending data tables if they're Java or Node.js developers. SAP developers who prefer ABAP typically use RAP. Both can be used effectively to model domains, create service definitions, and extend standard functionality. These tools are solutions provided on BTP, which make it easier for developers to create CAP models using a graphic data modeler. We also offer data backend visual cloud functions and build apps. All these processes are driven through <A href="https://community.sap.com/sap.com/ai" target="_blank" rel="noopener nofollow noreferrer">AI</A> and <A href="https://sap.com/integration" target="_blank" rel="noopener noreferrer">integration</A>, forming our best practices. This allows us to leverage different programming models efficiently.</P><P>&nbsp;</P><H5 id="toc-hId-2452307">Terry:&nbsp; What would you say are the advantages and disadvantages of on-stack vs using BTP tools?</H5><P><STRONG>Felix: </STRONG>On-stack extensibility offers the advantage of a close connection between SAP applications and customer extensions, enabling extension of the business logic within a transactional context. This provides deep integration into our processes, allows for the enhancement of SAP data schemes, and offers benefits such as Data Neighborhood in analytical scenarios.</P><P>However, the same tight coupling is also a disadvantage. Even though On-Stack Extensions comply with the clean core, they don't scale beyond the user group of the ERP system in operation. For example, if you want to engage with third-party customers like contractors, you might not want to grant them access to your system, as the coupling could be too tight.</P><P>Furthermore, on-stack extensions are specifically for enhanced stacks and may not be the best option for larger, self-contained applications or hub scenarios. Finally, this approach might not align with your preferred software stack or programming language.</P><P><STRONG>Vanessa:</STRONG> As Felix pointed out, you might select side-by-side extensibility on BTP when you want to avoid tight coupling. This is when you prefer to separate your extensions from S/4HANA and BTP and loosely link them using methods like remote API calls or events.</P><P>You'd also choose this approach when your extension isn't available in the on-stack extensibility, as Felix stated, or when it's a hub scenario. In other words, when you wish to integrate with multiple S/4HANA systems, other SAP solutions, or cloud services. The SAP Build option also offers the potential to automate S/4HANA processes across different systems, providing another situation where side-by-side extensibility might be needed.</P><P>When discussing Build, it's worth noting the interoperability between low and pro-code tools. We see the use of tools in so called fusion teams in a fusion development setting. This allows more people with varied skillsets within your organization to contribute to the extensibility story. This way, you can leverage innovations from a wider range of enterprise employees and involve more experts in your enterprise's innovation process.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Terry_Penner_0-1712101189468.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/90146iDE6A75035BAC4E7B/image-size/large?v=v2&amp;px=999" role="button" title="Terry_Penner_0-1712101189468.png" alt="Terry_Penner_0-1712101189468.png" /></span></P><P>&nbsp;</P><P>Fig.1 SAP S/4HANA Extensions</P><H5 id="toc-hId--194061198">Terry: What has changed with extensibility for S/4HANA over the past few years?</H5><P><STRONG>Vanessa:</STRONG> I don't see a shift in the scenarios, and perhaps Mark and Felix could add their input. I do, however, observe a change in the workforce and the tools they want and can utilize. The industry-wide challenge we're seeing, which likely resonates with our listeners, is a talent gap coupled with growing demands on IT departments. Unfortunately, these departments are not growing at the same rate. The common solution sought is simplifying development processes and boosting developer productivity.</P><P>Our approach to this issue is reflected in our product design. We previously mentioned AI, which is one avenue for enhancement. For example, our tools can be augmented with AI, such as in the case of Build Code where data models can be created using natural language. AI also soon allows processes to be described in natural language for auto-creation or support in creating in SAP Build.</P><P>Another strategy is to expand the range of developers, allowing key users to share in the development burden. This integration of multidisciplinary teams into the development process can lead to powerful fusion development scenarios. Complex solutions can be created collectively, with IT professionals providing oversight or backend creation for specific extensions, following predefined guidelines.</P><P><STRONG>Felix: </STRONG>I want to emphasize that our goals of extensibility have remained consistent. From the outset, our primary aim has been to comply with a clean core, with a focus on extensibility. To this end, we've developed APIs and other software artifacts that we've maintained stably.</P><P>However, while our core principles have remained unchanged, our tools have continuously improved. With each release, you can expect to find new features, increased power, and more public APIs. We're also providing more stable points for extending business logic.</P><P>One new offering is our developer extensibility of the ABAP Cloud approach. This new feature enables a more complex form of extensibility.</P><P><STRONG>Mark: </STRONG>&nbsp;Building on what Felix and Vanessa mentioned, clean core is not a new concept. What we have done is simplify the process of achieving clean core. While we have been discussing it for over a year, we haven't always made the process easy.</P><P>In the past, not all APIs were available, and integrating with side-by-side extensibility solutions was challenging. Now, we're making it easier for SAP developers to stay within SAP. You don't need third-party tools to achieve a clean core.</P><P>We're offering solutions like <A href="https://www.sap.com/products/technology-platform/low-code-app-builder.html" target="_blank" rel="noopener noreferrer">BTP build apps</A>, <A href="https://community.sap.com/sap.com/build-code" target="_blank" rel="noopener nofollow noreferrer">build code</A>, and an <A href="https://community.sap.com/sap.com/integration" target="_blank" rel="noopener nofollow noreferrer">integration suite</A> to simplify the development of clean core with side-by-side extensions and even on stack. This makes it easier than ever to achieve clean core, and you can do it entirely with SAP.</P><P>&nbsp;</P><H5 id="toc-hId--390574703">Terry: What best practices do you recommend for UI-focused applications and mobile services with SAP S/4HANA?</H5><P><STRONG>Vanessa:</STRONG> &nbsp;My recommendation will vary based on the type of workforce you have. Let's assume you have business experts who not only have specific requirements but are also trained as citizen developers or key users. They could then create a pixel-perfect user interface (UI) in SAP Build Apps, be it a web app or a mobile UI, depending on their needs. Within this low-code environment, they could easily connect to a backend system provided by a developer, for example, in Build Code. &nbsp;I’ll hand over to Mark to share his recommendations for a workforce that prefers to operate solely in a professional development environment.</P><P><STRONG>Mark: </STRONG>Vanessa and I, along with our colleagues, discuss fusion development often. The focus is on creating applications that are, as Vanessa describes, picture perfect. We connect these apps to S/4, but the emphasis lies on adhering to best practices enabled by Build Code.</P><P>Internally, we refer to these application frameworks as the Golden Path. We strongly encourage our customers to follow these best practices to develop future-proof applications. Build Code offers design and runtime capabilities, allowing the creation of UI applications.</P><P>These applications can be developed with AI using Joule CoPilot and can include data models. They can integrate with SAP and third-party systems through the service center. &nbsp;Best practices for UI development involve UI5, Fiori elements and mobile services.</P><P>Fusion development is useful for backend consumption, while the frontend is built with Build apps. We sometimes integrate with enterprise automation flows to allow seamless creation of UI applications. This extends your S/4 environment not just to mobile, but also to web applications.</P><H4 id="toc-hId--1213888022"><STRONG>Part 2: SAP Build Code for SAP S/4HANA developers</STRONG></H4><H5 id="toc-hId--1703804534">Terry: AI is a hot topic right now, what is artificial intelligence bringing to the table for S/4HANA implementers and developers?</H5><P><STRONG>Felix: </STRONG>We have ongoing projects aimed at our user groups, such as developers, who we believe will benefit from AI-generated code. This could be particularly useful when programming against S/4HANA, or when building applications, as AI can efficiently create a running skeleton of code.</P><P>For key users, we're developing AI assistance in planning and development with the goal of enhancing extensibility. While key users can currently extend an SAP application directly from its user interface or UI, the application's data can also be used in a broader business process. This might involve follow-up activities like using extensions, creating print forms and email templates, and developing analytical reports.</P><P>If a key user doesn't easily anticipate all these possibilities, an AI assistant can help define their goals more precisely and streamline the process of creating key user extensions.</P><P><STRONG>Mark:</STRONG> We're truly excited about <A href="https://community.sap.com/sap.com/build-code" target="_blank" rel="noopener nofollow noreferrer">Build Code</A>. This solution incorporates generative AI through <A href="https://www.sap.com/products/artificial-intelligence/ai-assistant.html" target="_blank" rel="noopener noreferrer">SAP Joule CoPilot</A>. By providing natural language prompts to Joule, you gain the ability to create CAP-based applications. Adhering to best practices for extending your S/4 backend, the Build Code solution creates these applications, complete with data models, OData services, sample data, application logic, unit tests, and even UI extension through generative AI.</P><P>This essentially establishes a solid foundation for application extension, leading to increased developer productivity and faster time-to-market for applications. My expertise lies in using generative AI within Build Code.</P><P>Beyond Build Code, SAP offers a wealth of AI capabilities with our AI core or AI foundation and S4. Developers looking to extend S/4 can leverage these AI capabilities.</P><P>&nbsp;</P><H5 id="toc-hId--1900318039">Terry: Help me understand what Build Code means for developers who are using Business Application Studio right now to create applications.</H5><P><STRONG>Mark:</STRONG> Build Code is just an evolution. Business Application Studio, our web-based IDE for BTP development, offers guided templates and a service center for integration with your S/4 backend and other environments. It's designed to help developers follow SAP's best practices. We've now integrated Business Application Studio (BAS) into Build Code, SAP's development environment. Here, developers can experience embedded AI with Joule, and we'll keep innovating within Build Code.</P><P>Developers aren't losing anything by transitioning to Build Code. It's easy to use just the development environment without committing to all of Build Code's capabilities. By switching, developers can benefit more from Build Code's features like DevOps, lifecycle management, and design capabilities, all in a single solution.</P><P>Remember, Business Application Studio remains available for current users, but we'll be focusing on further innovations within Build Code moving forward.</P><P>&nbsp;</P><H5 id="toc-hId--2096831544">Terry:&nbsp; What is planned in the Build Code roadmap that will help me work more easily with S/4HANA</H5><P><STRONG>Mark:</STRONG> Build Code is tailored for our professional code developers, offering a turnkey development environment. We're excited about our contributions to both design time and runtime aspects. We plan to enhance and improve the generative AI capabilities, an area many customers are keen to see progress in. We aim to provide this through various capabilities for your OP developers and also by fostering more fusion development capabilities.</P><P>Fusion development, a topic Vanessa and I discuss often, is something we aim to expand so that any developer can utilize our build solutions effectively. We're excited about the support we can provide developers in extending the S4 applications. In addition, we want to emphasize that we're working towards seamless interoperability. Our goal is to enable SAP developers to easily develop extensions while maintaining the core integrity of S/4 and build code.</P><P>&nbsp;</P><H5 id="toc-hId-2001622247">Terry:&nbsp; What are some ways S/4HANA developers can improve governance?</H5><P><STRONG>Vanessa:</STRONG> When discussing SAP Build and local development, as well as empowering key users and enterprises, I receive two customer reactions. The first is excitement, as they believe they can now expedite their extension projects, which is indeed possible. However, I also encounter concern revolving around governance, as one customer once asked, "What if everyone in my enterprise starts building applications without control?" This is precisely what we aim to avoid with providing governance tools for low-code development. Additionally, to address this, we offer guardrails, documentation, and have a comprehensive roadmap ahead of us. These guardrails allow organizations, for instance, to determine who qualifies as a citizen developer. You can choose to be either strict or lenient in this regard. For example, you can specify that only individuals with a particular certification are allowed to start building assets. We recommend certifying your key users or citizen developers in order to make them aware of their obligations when they begin building. This is one way to determine who is authorized to build. We also offer ways to define environments, such as allowing key users to create assets with specific data they can access and use in their applications, and do that in a protected (non-productive) environment. We provide a comprehensive set of easy-to-use tools that help effective monitoring and governance. This ensures that people do not go against the rules when creating these extensions.</P><P>&nbsp;</P><H5 id="toc-hId-1805108742">Terry: Can you give us some pragmatic recommendations for the type of extensions developers should create</H5><P><STRONG>Felix: </STRONG>The most important thing to understand is that it's not a matter of either/or. In your system landscape, you will likely have a mix of clean and not-so-clean extensions. For example, in an existing private cloud installation, you may have a lot of existing code that doesn't align with clean core principles. In this case, it's important to be pragmatic and recognize that achieving a clean installation won't happen overnight. It's more of a journey.</P><P>During this journey, as you modernize your custom code, it's important to consider the purpose of your extensions and who they are intended for. Ultimately, the best approach may involve a combination of on-stack extensibility and side-by-side extensions for different tools. This will allow you to achieve the flexibility needed to meet your business needs.</P><P>[ Note:&nbsp; This blog was adapted from the podcast transcript by an SAP system using Azure OpenAI–gpt-4 ]</P><H4 id="toc-hId-1901998244"><STRONG>Explore other topics in this series:</STRONG></H4><UL><LI><A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/artificial-intelligence-for-sap-s-4hana-and-sap-btp-a-deep-dive/ba-p/13575469" target="_blank">Artificial Intelligence for SAP S/4HANA and SAP BTP: A deep dive</A></LI><LI><SPAN><A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-s-4hana-cloud-extensions-and-clean-core-with-sap-btp-a-best-practices/ba-p/13567239" target="_blank">SAP S/4HANA Cloud Extensions and Clean Core with SAP BTP – A Best Practices Conversation</A></SPAN></LI></UL><P>&nbsp;</P> 2024-04-03T01:57:48.422000+02:00 https://community.sap.com/t5/technology-blogs-by-sap/custom-data-as-table-cds-domain-business-object-and-all-that-jazz/ba-p/13660397 Custom data as table, CDS, Domain, Business object and all that jazz... 2024-04-05T13:51:06.478000+02:00 mlauber https://community.sap.com/t5/user/viewprofilepage/user-id/157846 <P>The need for custom data is nothing new. But these days we want to do it while keeping our core clean and thus we want to look at Key User and on-stack Developer Extensibility, which give a lot of options. Below I attempt to showcase each option relating to having your own "custom data" in S/4HANA, with some pros and cons and when to use which option. To illustrate the options, I'll be doing a bookshop scenario; my company is a bookshop, I have an S/4HANA system and now I need to extend it.</P><P>&nbsp;</P><H1 id="toc-hId-862458948">Custom transactional or master data</H1><P>If you have a need for custom transactional or master data, I would recommend to first look at <STRONG>Custom Business Objects</STRONG>&nbsp;(<A href="https://fioriappslibrary.hana.ondemand.com/sap/fix/externalViewer/#/detail/Apps('F1712')/S28OP" target="_self" rel="nofollow noopener noreferrer">App on SAP Fiori Apps Reference Library</A>) or <STRONG>Custom Business Configuration</STRONG> (<A href="https://fioriappslibrary.hana.ondemand.com/sap/fix/externalViewer/#/detail/Apps('F4579')/S28OP" target="_blank" rel="noopener nofollow noreferrer">App</A>&nbsp;). Meaning, if in the old ways you would have created z-table(s) and then generated SAP GUI sm30 maintenance dialog (or even your own ABAP report for maintenance), then you want to use this.</P><P>What's the difference? Custom Business Configuration are meant for customizing tables, rather than actual "objects". Simpler data that often has more simple maintenance. Custom Business Objects are meant to represent an actual object that does not yet exist in the system. In the end, both apps do something similar: generate a BO with CDS views and OData service.</P><P>Custom Business Configuration objects have the "advantage" that they don't need their own separate Fiori app (as I explain below) but the data maintenance happens in the Custom Business Configuration app, with a nice and simple Fiori UI, all generated for you. Here is a&nbsp;<A href="https://developers.sap.com/group.abap-env-factory.html" target="_self" rel="noopener noreferrer">tutorial</A>&nbsp;which explains such an example step-by-step, so I won't go further into it (the tutorial is for ABAP Environment on BTP but works as well on-stack in your S/4HANA ABAP environment).</P><P>Custom Business Objects, as said, lets us create our own "object": meaning data that has more than just 1 field. In the example of the bookshop, authors of books could be such a custom object. Custom Business Objects even lets us create hierarchical objects; say for example we even would like to be able to enter one or more family member of that author, we would not want to do it on the same "level" as the author, but we would have author and then 0 or more family members linked to that author. This is done very easily in Custom Business Objects, as all you need to do is add an extra "Node":</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="mlauber_0-1712307262790.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/91813iC636248524260228/image-size/large?v=v2&amp;px=999" role="button" title="mlauber_0-1712307262790.png" alt="mlauber_0-1712307262790.png" /></span></P><P>And under "Fields" we enter the needed fields for both nodes:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="mlauber_1-1712307319350.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/91814i090E59674C556975/image-size/large?v=v2&amp;px=999" role="button" title="mlauber_1-1712307319350.png" alt="mlauber_1-1712307319350.png" /></span></P><P>Important before we publish this, if this is data that needs a "maintenance dialog" or a Fiori app which allows us to create, update, and delete entries for this data, then you want to check under <STRONG>Features</STRONG> "<EM>User Interface</EM>" if you are on S/4HANA Public Cloud. If not, this option will not be available, and you instead manually check "<EM>Back End Service</EM>" (which is checked automatically after selecting User Interface for Public Cloud).</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="mlauber_2-1712307490672.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/91816iBAEFFA885A1D6C83/image-size/medium?v=v2&amp;px=400" role="button" title="mlauber_2-1712307490672.png" alt="mlauber_2-1712307490672.png" /></span></P><P>As seen above, if we need to add some logic before we want to save data (on update and before save), we can also check "Determination and Validation" (only if we need that).&nbsp;</P><P>After publishing, we can write the needed logic (if any at all), we can look at our generated Fiori app, and we can create a tile for it, so we can add it to the Fiori Launchpad of the users needing this app. On Private Cloud or On Premise we have a few extra steps to take; using the generated OData service (its name is listed underneath "Back End Service"), we can generate our own Fiori Elements Application on SAP BTP with <STRONG>Business Application Studio</STRONG>. The con here is of course that we need to do this as an extra step. The pro is that we can fully decide how the UI should look like. Once we are done with the UI, we can deploy the app to our system, generate tile and target mapping for it and assign to users, as per usual practice.</P><P>Hopefully you can see here that we get a lot of functionality "out of the box" while using Custom Business Object's simple user interface. We define our fields, have the possibility for hierarchical data and for public cloud we can even generate a whole Fiori app. This option should therefore be considered first, before you go and create your custom z-table(s) in the dictionary. If you do it that way, you are many steps away from a Fiori App and an <FONT color="#FF0000">old-school SM30 maintenance dialog is not clean core</FONT>.</P><P>Here a screenshot of the final app, which I generated via BAS on SAP BTP without needing to change anything on the UI (all done via Fiori Tools wizard):</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="mlauber_3-1712313185957.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/91867i9E97DC22CE6D9A1B/image-size/large?v=v2&amp;px=999" role="button" title="mlauber_3-1712313185957.png" alt="mlauber_3-1712313185957.png" /></span></P><H3 id="toc-hId-924110881">What if the data needs NO maintenance app?</H3><P>As I mentioned, Custom Business Object is perfect when we want to replace old z-tables with sm30. But what if we had z-tables that were filled differently? Maybe from an integration or through a BAdI? Well, the answer is "it depends"&nbsp;<span class="lia-unicode-emoji" title=":winking_face:">😉</span>. When we talk about integration, we can use the generated CDS to create a REST API service that could be used by the integration. If we create z-table(s), we have to do the CDS part manually. If a REST API won't do the trick, consider how you update the data? In the ABAP Cloud programming model, we don't want to MODIFY/UPDATE/INSERT directly into the database, not even z-tables. Instead we use EML or <STRONG>Entity Manipulation Language</STRONG>, for example:</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-abap"><code>DATA update_tab TYPE TABLE FOR UPDATE /DMO/R_AgencyTP. update_tab = VALUE #( ( agencyID = '070001' Name = 'MODIFIED Agency' ) ). MODIFY ENTITIES OF /DMO/R_AgencyTP " name of behavior definition ENTITY /DMO/Agency " name of entity to read UPDATE FIELDS ( name ) WITH update_tab. COMMIT ENTITIES.</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>So once again, having a CDS generated can actually save time here. But there are cases where we want to be in full control of the CDS RAP object, then we could start from z-tables and work our way all the way to CDS and behavior definitions and create everything manually; takes time but it's powerful and flexible.</P><P>&nbsp;</P><H1 id="toc-hId-469431938">Custom "Name-Value" data</H1><P>If you need a simple field where you have a couple of static values (which don't change often and don't need any maintenance app) with a descriptive text, then in the old days we would create a domain. Today we can still do it with a domain, or we can use "<STRONG>Code Lists</STRONG>" as they are called in the Key User apps. Code Lists are explained in the next chapter and can be created as "reusable", meaning those code lists are used on custom business object, or directly when adding a custom field to a business context. To showcase the example, I created a domain for the bookshop:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="mlauber_13-1712315825683.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/91906iC3B1690D301AF765/image-size/medium?v=v2&amp;px=400" role="button" title="mlauber_13-1712315825683.png" alt="mlauber_13-1712315825683.png" /></span></P><P>Further below I add a custom field "Book Genre" into Product General Data and book genre uses this domain. So, if the domain has no direct end user exposure, it is very fast and easy to keep using. However, if I would have added the field directly onto&nbsp;Product General Data, then a Code List would have been preferable, because the input will be managed with drop-down that can be typed in, rather than having to open a pop-up for search-help and finding the domain values.</P><P>&nbsp;</P><H1 id="toc-hId-272918433">Extend Standard Data with Custom Data</H1><P>Often just creating our custom data is not enough; we want to somehow combine it with SAP Standard. Here we have several options:</P><H2 id="toc-hId-205487647">Case 1: Single Fields to be saved on same level as standard</H2><P>If you have single, non-connected fields to add to a SAP Standard object, we want to use <STRONG>Custom Fields</STRONG>&nbsp;(<A href="https://fioriappslibrary.hana.ondemand.com/sap/fix/externalViewer/#/detail/Apps('F1481')/S28OP" target="_self" rel="nofollow noopener noreferrer">App on SAP Fiori Apps Reference Library</A>) app and just add field-by-field. Coming back to the bookshop example and the author; we would not want to create field "Author First Name", and another field, "Author Last Name" and then add both to the Product Master Data, for example. But, we could add a field called "Number of Pages of Book", numeric, to the product master data:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="mlauber_4-1712313745769.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/91871iBFEA7F66D4B99B7D/image-size/medium?v=v2&amp;px=400" role="button" title="mlauber_4-1712313745769.png" alt="mlauber_4-1712313745769.png" /></span></P><H2 id="toc-hId-8974142">Case 2: Single Field where only certain values (from a drop-down) should be selected</H2><P>When we have a field where we want to restrict what the user enters, we can again use <STRONG>Custom Fields</STRONG> app, and choose as field type "<STRONG>Code List</STRONG>". This lets us then maintain the possible values for users to enter directly in the Custom Fields app. In our example it could be the format of the book:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="mlauber_5-1712313946263.png" style="width: 712px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/91872i9EAF4AB1F6573042/image-dimensions/712x538?v=v2" width="712" height="538" role="button" title="mlauber_5-1712313946263.png" alt="mlauber_5-1712313946263.png" /></span></P><P>These values can of course be translated.</P><P>The 2nd option is to create a z-Domain/z-table with values in the dictionary, then create a CDS view as value help for those values, and then use that CDS view in Custom Fields, when selecting "<STRONG>Code List based on CDS View</STRONG>". I did this example for Book Genres:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="mlauber_7-1712314226184.png" style="width: 472px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/91874i9F0D73D5A8982A11/image-dimensions/472x250?v=v2" width="472" height="250" role="button" title="mlauber_7-1712314226184.png" alt="mlauber_7-1712314226184.png" /></span></P><P>This is in fact great as a "not so good" example. So we have a z-table but we won't create a maintenance dialog for sm30, because it is not clean core. Above I've set "<STRONG>@AbapCatalog.dataMaintenance</STRONG>" as&nbsp;<STRONG>#ALLOWED</STRONG>, meaning we can simply maintain the data in se16n, but also meaning we have no automatic transport of data and so on, and no regular user can do it, nor is it easy to control authorization for users who should be able to maintain this. So the book genre would have been better solved as Custom Business Object, but I wanted to show different options and also to highlight why a z-table maybe isn't the best solution. Next, I have to create CDS views that I can then use in Custom Fields and I need to 2, in order to follow the ABAP Cloud programming model:</P><OL><LI>Basic interface view for reading form the database table</LI><LI>Value help view using the basic interface view</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="mlauber_8-1712314529805.png" style="width: 598px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/91877i093599245ED1C758/image-dimensions/598x510?v=v2" width="598" height="510" role="button" title="mlauber_8-1712314529805.png" alt="mlauber_8-1712314529805.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="mlauber_9-1712314540416.png" style="width: 595px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/91878i2D3BE4414087A451/image-dimensions/595x393?v=v2" width="595" height="393" role="button" title="mlauber_9-1712314540416.png" alt="mlauber_9-1712314540416.png" /></span></P><P>Only now can I got to Custom Fields and add the Book Genre to Product master data:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="mlauber_10-1712314585444.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/91879iC6DEB356885789E7/image-size/medium?v=v2&amp;px=400" role="button" title="mlauber_10-1712314585444.png" alt="mlauber_10-1712314585444.png" /></span></P><H3 id="toc-hId--58456644">Wait: what about Custom Reusable Elements - Code List?</H3><P>If you are familiar with the key user apps you may know of&nbsp;<SPAN><STRONG>Custom Reusable Elements</STRONG> (<A href="https://fioriappslibrary.hana.ondemand.com/sap/fix/externalViewer/#/detail/Apps('F3248')/S28OP" target="_self" rel="nofollow noopener noreferrer">App on SAP Fiori Apps Reference Library</A>). We know this app has custom libraries, meaning ABAP code, but also Code Lists. Having talked about using Code Lists in custom fields, when would be use this one then? This is simply put for Custom Business Objects. If your custom business object has a field where you want the restricted values functionality, you would first create it in this app. For example we could have a "popularity" field on the Author custom business object and we would want only few possible values:</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="mlauber_11-1712314913609.png" style="width: 493px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/91882iD5FBD427F341EA8D/image-dimensions/493x340?v=v2" width="493" height="340" role="button" title="mlauber_11-1712314913609.png" alt="mlauber_11-1712314913609.png" /></span></P><P>When we add a field now in our custom business object (any custom business object), we select as type "Code List" and then pick one.</P><H2 id="toc-hId--384052868">Case 3: Link Custom Object with Standard</H2><P>If we have more than just single, disconnected fields, but instead we want to link a Standard object to our own data that has it's own table or even hierarchical tables (as in our author example), then we still use <STRONG>Custom Fields</STRONG> app. In Custom Fields as we add a new field, we can choose "Association to Business Object". If we do, we need to select the business object in the drop down, which includes all our Custom Business Object. For example:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="mlauber_12-1712315126188.png" style="width: 516px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/91884iE2C064FCA291CCC6/image-dimensions/516x255?v=v2" width="516" height="255" role="button" title="mlauber_12-1712315126188.png" alt="mlauber_12-1712315126188.png" /></span></P><H2 id="toc-hId--580566373">Case 4: Combining data for reports</H2><P>If our case is not to save master or transactional data, but instead use some custom data for reports, we have several options.</P><OL><LI>Use <STRONG>Custom CDS Views (Version 2)</STRONG> (<A href="https://fioriappslibrary.hana.ondemand.com/sap/fix/externalViewer/#/detail/Apps('F1866A')/S28OP" target="_self" rel="nofollow noopener noreferrer">App on SAP Fiori Apps Reference Library</A>) to combine <U>existing CDS views</U> together for reporting (if your custom data has no CDS view yet, which it will have if you used Custom Business Object, you can get a developer to create one for you, option 3)</LI><LI>Use <STRONG>Custom Analytical Queries</STRONG>&nbsp;(<A href="https://fioriappslibrary.hana.ondemand.com/sap/fix/externalViewer/#/detail/Apps('F1572')/S28OP" target="_self" rel="nofollow noopener noreferrer">App on SAP Fiori Apps Reference Library</A>) if you need analytical capabilities with measures, dimensions, calculations, and so on. This app needs an analytical cube or query CDS, which a developer can create for you if not yet existing - option 3</LI><LI>Use <STRONG>on-stack development to create your own custom CDS views</STRONG> (analytical or transactional) and create any report and combination of standard and custom CDS views. This option can be used together with the first 2 above, or can even be used to create a custom reporting Fiori app with BAS on SAP BTP. This is the most powerful of all the options and allows for a lot freedom on creating exactly what you need. This can also be used if the data needs to be exposed as API to integrations or other purposes</LI></OL><P>&nbsp;</P><H1 id="toc-hId--906162597">Summary</H1><P>I'm sure there are lots more cases for custom data and I doubt I can list them all. But the above show cases how to do it with key user apps and how they can help to do it faster, simpler, and have a nice user interface for the end user with input help. If you have a specific case you wonder about, just drop a comment and ask&nbsp;<span class="lia-unicode-emoji" title=":smiling_face_with_smiling_eyes:">😊</span> Hope this was helpful!</P> 2024-04-05T13:51:06.478000+02:00 https://community.sap.com/t5/technology-blogs-by-sap/release-assessment-and-scope-dependency-for-sap-s-4hana-cloud-public/ba-p/13648212 Release Assessment and Scope Dependency for SAP S/4HANA Cloud Public Edition: What is new in 2024 2024-04-07T13:03:42.624000+02:00 PrasanthM https://community.sap.com/t5/user/viewprofilepage/user-id/824 <H2 id="toc-hId-989931739"><STRONG>Introduction</STRONG></H2><P>To provide our customers of SAP S/4HANA Cloud Public Edition with disruption free upgrades and zero day 1 impact, we have been tirelessly improving <A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/release-assessment-and-scope-dependency-for-sap-s-4hana-cloud-public/ba-p/13652341" target="_blank">release assessment and scope dependency</A> tool to meet the latest customer demands.</P><P>We have made a few changes and improvements in the release assessment and scope dependency tool so that we can inform all Day 1 impacts, which are relevant to our customers proactively based on their usage.</P><H2 id="toc-hId-793418234"><STRONG>Extensibility Objects</STRONG></H2><P>With the release of 2402.1 version of SAP S/4HANA Cloud Public Edition, all c<SPAN><SPAN class="">hanges (Deletions/Deprecations/Changes)&nbsp;</SPAN></SPAN>related to extensibility objects have been moved to the page <A href="https://help.sap.com/docs/SAP_S4HANA_CLOUD/ee9ee0ca4c3942068ea584d2f929b5b1/1df8b8b1799a4d07899d9fb6c72835cf.html?parentHref=%2Fwhats-new%2F7d3d11840a6543329e72391cf4d48e2d%3FCategory%3DExtensibility%2520%2528incl.%2520API%2520and%2520CDS%2529%26Version%3DSAP%2520S%252F4HANA%2520Cloud%25202402.1%2520%2528HFC5%2529%26locale%3Den-US&amp;parentName=What%27s%20New%20Viewer%20-%20SAP%20S%2F4HANA%20Cloud" target="_blank" rel="noopener noreferrer">Overview of Extensibility Objects</A>. This now includes objects covering both Key User Extensibility and Developer Extensibility.</P><P>The tool release assessment and scope dependency is also updated and these are available under the tile ‘Extensibility Objects’ under the tab ‘Used Objects’</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="PrasanthM_0-1711355559829.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/85846i8D3545750DBA503B/image-size/large?v=v2&amp;px=999" role="button" title="PrasanthM_0-1711355559829.png" alt="PrasanthM_0-1711355559829.png" /></span></P><P>On clicking on the tile ‘Extensibility Objects’, the customer will be able to see a detailed view of the deletions/deprecations/changes</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="PrasanthM_1-1711352876530.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/85825i67486B03E87C495F/image-size/large?v=v2&amp;px=999" role="button" title="PrasanthM_1-1711352876530.png" alt="PrasanthM_1-1711352876530.png" /></span></P><P>This table contains the following columns. Type of object, extensibility type, technical name of the object, object description, type of change, change format and additional information regarding the deletion/deprecation/change. The customer will also be able to navigate to the what’s new viewer to view the changes in detail.</P><P>All <SPAN><SPAN class="">changes (Deletions/Deprecations/Changes)&nbsp;</SPAN></SPAN>related to extensibility objects in a specific release are available under the tab ‘Complete What’s New Information’. This is not filtered based on a customer’s usage, but rather, it provides an overall view on all changes based on a specific release.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="PrasanthM_2-1711352906785.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/85826iDAB0D07A406372D7/image-size/large?v=v2&amp;px=999" role="button" title="PrasanthM_2-1711352906785.png" alt="PrasanthM_2-1711352906785.png" /></span></P><P>With this change, the contents inside the tiles ‘Deleted/Deprecated Apps, APIs and CDS Views’, ‘Changed and Must Know Information’ and New Features have been moved to the new tiles.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="PrasanthM_1-1711355620932.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/85847i472517968906D163/image-size/large?v=v2&amp;px=999" role="button" title="PrasanthM_1-1711355620932.png" alt="PrasanthM_1-1711355620932.png" /></span></P><P>Deletions/Deprecations/Changes/New Feature related to Applications have now been moved under the tile ‘Apps’.</P><P>Deletions/Deprecation of the APIs and CDS views are now clubbed along with other extensibility objects under the tile ‘Extensibility Objects’</P><P>Please not that usage of Business Events are not considered here. This means that release information related to Business Events will be available only under the tab 'Complete What's New Information'</P><H2 id="toc-hId-596904729">Successor Companion</H2><P>Successor companion will be available as a new tab with the latest version of release assessment and scope dependency. This will be available as a new tab in the tool. As of initial release, this will be available only for the major releases, but we will be extending this for continuous deliveries as well, in the upcoming versions of the tool.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="PrasanthM_3-1711352942699.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/85828i289A04811D7D5DB2/image-size/large?v=v2&amp;px=999" role="button" title="PrasanthM_3-1711352942699.png" alt="PrasanthM_3-1711352942699.png" /></span></P><P>Successor companion consists of two tiles.</P><UL><LI>Scope Item Impact</LI><LI>Deprecation Coverage</LI></UL><H2 id="toc-hId-400391224"><STRONG>Scope Item Impact</STRONG></H2><P>Scope item impact provides you with a bird’s eye view on a customer’s scope item implementation statistics on their SAP S/4HANA Cloud Public Edition landscape across all tenants based on their usage.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="PrasanthM_4-1711352979427.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/85829iCD4B577464299C5C/image-size/medium?v=v2&amp;px=400" role="button" title="PrasanthM_4-1711352979427.png" alt="PrasanthM_4-1711352979427.png" /></span></P><P>If we take the data in the screenshot provided above as an example, we can understand that ~47% of all the activate scope items are being used by the customer. This means that there is an improvement scope of ~43% for the customer to derive the complete value based on the scope items activated by the customer to improve their business as envisioned by SAP.</P><H2 id="toc-hId-203877719"><STRONG>Deprecation Coverage</STRONG></H2><P>With ‘Deprecation Coverage’, we want to give you a proactive view on what are the deprecated (<A href="https://help.sap.com/docs/business-accelerator-hub/sap-business-accelerator-hub/sap-api-deprecation-policy" target="_blank" rel="noopener noreferrer">API Deprecation Policy</A>, <A href="https://help.sap.com/docs/business-accelerator-hub/sap-business-accelerator-hub/sap-cds-view-deprecation-policy" target="_blank" rel="noopener noreferrer">CDS view Deprecation policy</A>) objects and attributes that are currently being used by a customer and we also provide the name of the successors which are released for these deprecated objects/attributes, so that the customer can move to these successors by the time these deprecated objects/attributes are deleted.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="PrasanthM_5-1711353017839.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/85830i1A59773A4444C9D5/image-size/medium?v=v2&amp;px=400" role="button" title="PrasanthM_5-1711353017839.png" alt="PrasanthM_5-1711353017839.png" /></span></P><P>We derive this by looking at the past few month’s usage data of a customer to understand if the customer is using an object/attribute that was deprecated in the past releases and we proactively inform the customer that they are using a deprecated object/attribute.</P><P>As explained, this consists of two levels of information.</P><UL><LI>Deprecated Attributes&nbsp;</LI><LI>Deprecated Objects</LI></UL><H2 id="toc-hId-7364214"><STRONG>Deprecated Attributes</STRONG></H2><P>Deprecated attributes refer to fields of APIs or CDS views, that are deprecated/decommissioned. These attributes will have a successor attribute released for it, when they were deprecated.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="PrasanthM_6-1711353068758.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/85831i135BCC569167EAEC/image-size/large?v=v2&amp;px=999" role="button" title="PrasanthM_6-1711353068758.png" alt="PrasanthM_6-1711353068758.png" /></span></P><P>This will contain the list of objects with attributes that were deprecated in an older release, that are still being used by the customer along with its successor attribute. If I can take the example of a CDS view, the customer might have created custom CDS views using these objects and the deprecated attribute might have been added as a field in the custom CDS view. This will help the customer to readjust that custom CDS view with its successor.</P><H2 id="toc-hId--189149291"><STRONG>Deprecated Objects</STRONG></H2><P>Deprecated objects refer to Apps, APIs of CDS views that are deprecated.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="PrasanthM_7-1711353129353.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/85832i99ACB7BBDEA169DC/image-size/large?v=v2&amp;px=999" role="button" title="PrasanthM_7-1711353129353.png" alt="PrasanthM_7-1711353129353.png" /></span></P><P>This will contain the list of APIs, Apps or CDS views that are deprecated in an older release, that are still being used by the customer. We provide the name of object that was release as a successor for this deprecated object so that customer could adopt this to avoid any possible disruptions during upgrade. This also means that customer will be informed proactively about new objects. which will have better features compared to the deprecated objects.</P><H2 id="toc-hId--385662796"><STRONG>Conclusion</STRONG></H2><P>We are continuously trying to add more features to the tool so that upgrades are hassle free and our customer can derive more value out of their SAP S/4HANA Cloud Public Edition implementation. Keep watching this space for more updates on release assessment and scope dependency.</P><P>You can go thru our <A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/release-assessment-and-scope-dependency-rasd-2-0-your-questions-answered/ba-p/13550370" target="_blank">FAQ blog</A> if you have any questions regarding release assessment and scope dependency.</P> 2024-04-07T13:03:42.624000+02:00 https://community.sap.com/t5/technology-blogs-by-sap/cloud-badi-implementation-via-developer-extensibility/ba-p/13641155 Cloud BADI Implementation via Developer Extensibility 2024-04-12T19:31:23.877000+02:00 Bhavik_Patel https://community.sap.com/t5/user/viewprofilepage/user-id/1408119 <P><FONT size="5"><STRONG>Scenario</STRONG></FONT></P><P>The requirement is to update/add withholding tax code details of Suppliers for Country/Region Argentina in Vendor Master based on Tax Number of Suppliers.</P><P>For this demo, we will add new tax codes to be updated for existing withholding tax configuration in vendor master and also add new withholding tax configuration line.</P><P>To achieve the same, we will make use of available Badi.</P><P>&nbsp;</P><P><FONT size="5"><STRONG>Steps</STRONG></FONT></P><P><FONT size="4"><STRONG>Find the available cloud BADI for the requirement.</STRONG></FONT></P><P>All available cloud BADIs can be found on <A href="https://api.sap.com/" target="_blank" rel="noopener noreferrer">SAP Business Accelerator Hub</A>.</P><P>Follow Path: Business Accelerator Hub -&gt; S/4 Hana Cloud -&gt; Developer Extensibility -&gt; Business Add-Ins.</P><P>We will use BADI - <SPAN>ES_FIWTAR_UPDATE_TAXCODE for our scenario.</SPAN></P><P>&nbsp;</P><P><FONT size="4"><STRONG>Login to Cloud Project via ADT</STRONG></FONT></P><P>You will need development experience with ADT and ABAP objects to implement Badi.</P><P>Start ADT.</P><P>Select ADT menu File -&gt; New -&gt; ABAP Cloud Project.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Add new cloud project" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83596i0D451183DCE09D90/image-size/large?v=v2&amp;px=999" role="button" title="New ABAP cloud project.png" alt="Add new cloud project" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Add new cloud project</span></span></P><P>Enter the system URL of your system.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Enter Url" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83599i804B7FE83DE471E3/image-size/large?v=v2&amp;px=999" role="button" title="enter url.png" alt="Enter Url" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Enter Url</span></span></P><P>Press the button "Open Logon Page in Browser."</P><P data-unlink="true">Logon with your email address &lt;id&gt;@sap.com&nbsp;and your password.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Enter login credentials" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83600iC1D13F572F586FC6/image-size/large?v=v2&amp;px=999" role="button" title="enter id pass.png" alt="Enter login credentials" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Enter login credentials</span></span></P><P>&nbsp;</P><P><FONT size="4"><STRONG>Create Package</STRONG></FONT></P><P>After successful logon to the system, create your own package as below picture just like this is done in normal ABAP development systems. Take care of the super package and correct package type and that your package starts with Z.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Create Package" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83608iE46B17D80C796830/image-size/large?v=v2&amp;px=999" role="button" title="create package.png" alt="Create Package" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Create Package</span></span></P><P><SPAN>Then create a new transport request for it or select existing if it’s already present on your name and save it.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Select / Create Transport request" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83613iD873850622EBD1B1/image-size/large?v=v2&amp;px=999" role="button" title="create or select TR.png" alt="Select / Create Transport request" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Select / Create Transport request</span></span></SPAN></P><P><SPAN>Finally, verify that the correct language version is set for your package as shown below. This should happen automatically.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Verify language version" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83616iE8E9869C6A114D19/image-size/large?v=v2&amp;px=999" role="button" title="verify language version.png" alt="Verify language version" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Verify language version</span></span></P><P>&nbsp;</P><P><FONT size="4"><STRONG>Implement Badi</STRONG></FONT></P><P><SPAN>In order to create an own Badi implementation, first select New-&gt; Other ABAP Repository Object.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Create Object" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83657iB4C94527ACA72DCE/image-size/large?v=v2&amp;px=999" role="button" title="create object.png" alt="Create Object" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Create Object</span></span></SPAN></P><P><SPAN>And filter for “BAdI” to reduce the result list of objects to be created. Then select “BAdI Enhancement Implementation” and click on “Next”.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Select Badi Enhancement Implementation" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83659i3C05A7FB0C9F75DF/image-size/large?v=v2&amp;px=999" role="button" title="filter for Badi i object list.png" alt="Select Badi Enhancement Implementation" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Select Badi Enhancement Implementation</span></span></SPAN></P><P><SPAN>Enter a name (starting with Z) and if needed also your previously created package and find the Enhancement Spot that holds the released implementations you want to test.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Create Badi Enhancement Implementation" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83661iD6CE5634FC072DE6/image-size/large?v=v2&amp;px=999" role="button" title="new badi enhancement implementation.png" alt="Create Badi Enhancement Implementation" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Create Badi Enhancement Implementation</span></span></SPAN></P><P><SPAN>Finally Save it in transport request.</SPAN></P><P><SPAN>You will then see the screen for the BadI Enhancement Implementation as shown below. Now click the “Add BadI Implementation...” button.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Add Badi Implementation" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83672i11E1CF23CAEBECB9/image-size/large?v=v2&amp;px=999" role="button" title="add badi imp button.png" alt="Add Badi Implementation" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Add Badi Implementation</span></span></SPAN></P><P><SPAN>Browse for the Badi&nbsp;you would like to implement.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Browse Badi" style="width: 379px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83675iEC978FE63EDF02EB/image-size/large?v=v2&amp;px=999" role="button" title="browse badi.png" alt="Browse Badi" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Browse Badi</span></span></SPAN></P><P><SPAN>It will show only BAdIs available in the selected BAdI spot.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Select Badi" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83677i8FDE0DF508BD4BB9/image-size/large?v=v2&amp;px=999" role="button" title="select badi.png" alt="Select Badi" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Select Badi</span></span></SPAN></P><P><SPAN>Finally, provide a name for the implementation (starting with Z) and add it.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Add Badi Implementation" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83681i1AFB39E47F77ECCE/image-size/large?v=v2&amp;px=999" role="button" title="add zbadi imp name.png" alt="Add Badi Implementation" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Add Badi Implementation</span></span></SPAN></P><P><SPAN>The BAdI Enhancement Implementation will now complain about a missing implementation class. Just click on the highlighted link to get the creation wizard opened.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Click Implementing Class" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83697iA4EC43B25240C559/image-size/large?v=v2&amp;px=999" role="button" title="click on imp class.png" alt="Click Implementing Class" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Click Implementing Class</span></span></SPAN></P><P><SPAN>Provide a class name (starting with Z) and fill in your previously created package and click on “Next”.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ABAP Class" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83698iB32D04595C93D782/image-size/large?v=v2&amp;px=999" role="button" title="new abap class.png" alt="ABAP Class" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">ABAP Class</span></span></SPAN></P><P><SPAN>Select your existing transport and press “Finish”.</SPAN></P><P><SPAN>Now, empty Badi implementation class is created as shown below.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Empty Class" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83710i7E7C4CFA35613A3D/image-size/large?v=v2&amp;px=999" role="button" title="blank class code.png" alt="Empty Class" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Empty Class</span></span></SPAN></P><P><SPAN>Implement custom logic in class methods and active all objects.</SPAN></P><P><SPAN>Below is example code of one of the methods where updating new tax code for all existing tax codes as '00'&nbsp; and&nbsp;</SPAN><SPAN>new tax code details entry is added to be created in withholding tax configuration of a supplier.</SPAN></P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-abap"><code> METHOD if_fiwtar_update_taxcode~populate_new_tax_code. FIELD-SYMBOLS: &lt;ls_data&gt; TYPE if_fiwtar_update_taxcode~ty_vdmr_file. DATA: lt_data TYPE if_fiwtar_update_taxcode~tt_vdmr_file. DATA: ls_new TYPE if_fiwtar_update_taxcode~ty_vdmr_file. lt_data = it_vdmr_file. LOOP AT lt_data ASSIGNING &lt;ls_data&gt;. &lt;ls_data&gt;-withcd_new = '00'. ENDLOOP. ls_new = VALUE #( lifnr = '0000117375' stcd1 = '30123430014' name1 = '' witht = 'BA' wt_withcd = '' qsatz = '' withcd_new = '01' file_rate = '' ). APPEND ls_new TO lt_data. ct_output = lt_data. ENDMETHOD.</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>Badi is implemented and now we can test the same.</P><P>&nbsp;</P><P><FONT size="4"><STRONG>Test Badi Implementation</STRONG></FONT>&nbsp;</P><P>Open App - "Update Tax Code and Open items - Region" for Argentina Province.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="tile.png" style="width: 200px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87214iC44B4DC254679885/image-size/small?v=v2&amp;px=200" role="button" title="tile.png" alt="tile.png" /></span></P><P>Provide Inputs to the screen.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="input_screen_for_report.png" style="width: 903px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87216i0840BF13C33327AF/image-size/large?v=v2&amp;px=999" role="button" title="input_screen_for_report.png" alt="input_screen_for_report.png" /></span></P><P>Execute.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="report_output.png" style="width: 903px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/87222i7275015AB174FC8A/image-size/large?v=v2&amp;px=999" role="button" title="report_output.png" alt="report_output.png" /></span></P><P>As we can see, For one existing line New tax code is filled as '00' and new line is added from Badi implementation.</P><P>&nbsp;</P><P><FONT size="4"><STRONG>Summary</STRONG></FONT></P><P><FONT size="4"><STRONG><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="summary" style="width: 421px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/91791iBC0708BA3724ABD6/image-size/large?v=v2&amp;px=999" role="button" title="summary.png" alt="summary" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">summary</span></span></STRONG></FONT></P><P><FONT size="4">Thank you for reading!<BR /><BR />Drop a like or comment below if you found the above steps useful.</FONT></P><P>&nbsp;</P> 2024-04-12T19:31:23.877000+02:00 https://community.sap.com/t5/technology-blogs-by-members/consuming-capm-application-s-odata-service-into-sap-fiori-application-in/ba-p/13667392 Consuming CAPM Application's OData service into SAP Fiori Application in Business Application Studio 2024-04-16T12:50:31.978000+02:00 Chetan_Bhatt https://community.sap.com/t5/user/viewprofilepage/user-id/1429690 <P style=" text-align : justify; "><STRONG>OBJECTIVE-:</STRONG></P><P style=" text-align : justify; ">Consuming OData Service of CAPM Application into SAP Fiori Application in Business Application Studio.</P><P style=" text-align : justify; "><STRONG>CAPM (Cloud Application Programming Model)-:</STRONG></P><P style=" text-align : justify; ">It is an open-source framework that uses tools, libraries, and languages to create applications that can be used across multiple SAP products. CAPM is a multi-target application that runs at different times, with the persistence layer running in the HANA DB run time, the server layer running in the Node.js run time, and the UI/UX layer running in the browser run time.</P><P style=" text-align : justify; ">CAPM is one of the approaches to developing cloud applications using the BTP platform. CAPM offers a more structured and seamless framework for data modelling and enhancing integration with services.</P><P style=" text-align : justify; "><STRONG>Advantage of CAPM over other approaches-:</STRONG></P><UL style=" text-align : justify; "><LI>It enables full-stack development in the same environment. (BAS), eliminating the need to switch between different environments for the backend and frontend development.</LI><LI>It offers flexibility in language selection, allowing developers to work with multiple languages according to their needs. BAS provides easy connectivity to required extensions for this purpose.</LI><LI>Seamless integration with git and other applications via APIs facilitating extension or development of the application.</LI><LI>Automatically handling dependencies to a certain extent, reducing frustration, and improving development speed. For example, handling the OData after exposing all entities and making it easier to consume in the UI.</LI></UL><P style=" text-align : justify; "><STRONG>Prerequisites-:</STRONG></P><UL style=" text-align : justify; "><LI>Create a CAPM project.</LI><LI>Log in to Cloud Foundry Credentials.</LI><LI>Ensure the HANA Database is created and running (I Used it for storage and data creation).</LI></UL><P style=" text-align : justify; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_0-1712859475702.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95284iF96BE8EFB182149E/image-size/medium?v=v2&amp;px=400" role="button" title="Chetan_Bhatt_0-1712859475702.png" alt="Chetan_Bhatt_0-1712859475702.png" /></span></P><P style=" text-align : justify; ">&nbsp;</P><P style=" text-align : justify; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_1-1712859475728.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95285iC96312CDDC8F56E6/image-size/medium?v=v2&amp;px=400" role="button" title="Chetan_Bhatt_1-1712859475728.png" alt="Chetan_Bhatt_1-1712859475728.png" /></span></P><P style=" text-align : justify; ">&nbsp;</P><UL style=" text-align : justify; "><LI>Set up a Dev Space.</LI><LI>Create a SAP Build Work Zone instance to act as a Fiori Launchpad for the CAPM Application</LI></UL><P style=" text-align : justify; ">&nbsp;</P><P style=" text-align : justify; "><STRONG>You Have to create a new Destination in BTP (Connectivity -&gt; Destination)-:</STRONG></P><P style=" text-align : justify; ">&nbsp;</P><P style=" text-align : justify; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_2-1712859475732.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95283i2F37A3A4212C375A/image-size/medium?v=v2&amp;px=400" role="button" title="Chetan_Bhatt_2-1712859475732.png" alt="Chetan_Bhatt_2-1712859475732.png" /></span></P><P style=" text-align : justify; ">&nbsp;</P><P style=" text-align : justify; ">This destination will be used for passing system information when creating a Fiori Application.</P><P style=" text-align : justify; ">For the URL, DEPLOY YOUR APPLICATION IN CLOUD FOUNDRY (Cloud Foundry -&gt;Spaces -&gt;Dev (Space Name)-&gt;Your Service (here it is CAPMChetan-srv) and copy Application Routes).</P><P style=" text-align : justify; ">This URL will be shown only when you deploy your CAPM Application in Cloud Foundry-&gt; A new blog will be there to deploy the CAPM Application.</P><P style=" text-align : justify; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_3-1712859475740.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95288i831E1DE5FA2B9750/image-size/medium?v=v2&amp;px=400" role="button" title="Chetan_Bhatt_3-1712859475740.png" alt="Chetan_Bhatt_3-1712859475740.png" /></span></P><P style=" text-align : justify; ">&nbsp;</P><P style=" text-align : justify; ">For Authorization, use the same authorization as created in the package.json -&gt; a new blog will create a security configuration.</P><P style=" text-align : justify; ">&nbsp;</P><P style=" text-align : justify; ">Now that the destination for the service is configured, proceed to create a FIORI APP: -</P><UL style=" text-align : justify; "><LI>Open SAP BAS (Business Application Studio).</LI><LI>Open DEV Space where you want to create a Fiori Application.</LI><LI>Go to File -&gt; New Project From template.</LI><LI>Choose a project from the Template (SAP Fiori Application).</LI></UL><P style=" text-align : justify; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_4-1712859475749.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95287i3F3554B2250D61A3/image-size/medium?v=v2&amp;px=400" role="button" title="Chetan_Bhatt_4-1712859475749.png" alt="Chetan_Bhatt_4-1712859475749.png" /></span></P><P style=" text-align : justify; ">&nbsp;</P><UL style=" text-align : justify; "><LI>Choose any Template of your choice.</LI></UL><P style=" text-align : justify; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_5-1712859475756.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95286iD67EBDD9E6AB118C/image-size/medium?v=v2&amp;px=400" role="button" title="Chetan_Bhatt_5-1712859475756.png" alt="Chetan_Bhatt_5-1712859475756.png" /></span></P><P style=" text-align : justify; ">&nbsp;</P><UL style=" text-align : justify; "><LI>In Data Source choose to connect to a system.</LI></UL><P style=" text-align : justify; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_6-1712859475760.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95290iDCCA5D3A65D7000B/image-size/medium?v=v2&amp;px=400" role="button" title="Chetan_Bhatt_6-1712859475760.png" alt="Chetan_Bhatt_6-1712859475760.png" /></span></P><P style=" text-align : justify; ">&nbsp;</P><P style=" text-align : justify; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_7-1712859475765.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95289i29335856F2EFABAA/image-size/medium?v=v2&amp;px=400" role="button" title="Chetan_Bhatt_7-1712859475765.png" alt="Chetan_Bhatt_7-1712859475765.png" /></span></P><P style=" text-align : justify; ">&nbsp;</P><P style=" text-align : justify; ">&nbsp;</P><UL style=" text-align : justify; "><LI>Specify the Destination created earlier.</LI></UL><P style=" text-align : justify; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_8-1712859475769.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95291i0B4CF5E35759FC40/image-size/medium?v=v2&amp;px=400" role="button" title="Chetan_Bhatt_8-1712859475769.png" alt="Chetan_Bhatt_8-1712859475769.png" /></span></P><P style=" text-align : justify; ">&nbsp;</P><P style=" text-align : justify; ">&nbsp;</P><UL style=" text-align : justify; "><LI>In the service path, specify the service path of the OData service that can be obtained by running the command “cds watch –profile hybrid” in your CAPM Project.</LI></UL><P style=" text-align : justify; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_9-1712859475773.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95292i7F0BC76D1160938D/image-size/medium?v=v2&amp;px=400" role="button" title="Chetan_Bhatt_9-1712859475773.png" alt="Chetan_Bhatt_9-1712859475773.png" /></span></P><P style=" text-align : justify; ">&nbsp;</P><UL style=" text-align : justify; "><LI>Click on next.</LI></UL><P style=" text-align : justify; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_10-1712859475781.jpeg" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95293i7930C75401EC6C12/image-size/medium?v=v2&amp;px=400" role="button" title="Chetan_Bhatt_10-1712859475781.jpeg" alt="Chetan_Bhatt_10-1712859475781.jpeg" /></span></P><P style=" text-align : justify; ">&nbsp;</P><P style=" text-align : justify; ">&nbsp;</P><UL style=" text-align : justify; "><LI>Select any entity from the given list of entities &nbsp;you created in your project.</LI></UL><P style=" text-align : justify; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_11-1712859475788.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95294i28FD073ED8BABEB0/image-size/medium?v=v2&amp;px=400" role="button" title="Chetan_Bhatt_11-1712859475788.png" alt="Chetan_Bhatt_11-1712859475788.png" /></span></P><P style=" text-align : justify; ">&nbsp;</P><UL style=" text-align : justify; "><LI>Customize the project attributes.</LI></UL><P style=" text-align : justify; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_12-1712859475796.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95295i56DC0BF8208D9582/image-size/medium?v=v2&amp;px=400" role="button" title="Chetan_Bhatt_12-1712859475796.png" alt="Chetan_Bhatt_12-1712859475796.png" /></span></P><P style=" text-align : justify; ">&nbsp;</P><UL style=" text-align : justify; "><LI>Choose the target as Cloud Foundry and select the Destination name among the list of destination names (You can go with either Local CAPM Project API and the name of your destination too).</LI></UL><P style=" text-align : justify; ">&nbsp;</P><P style=" text-align : justify; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_13-1712859475804.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95297i448D5B4C126A031A/image-size/medium?v=v2&amp;px=400" role="button" title="Chetan_Bhatt_13-1712859475804.png" alt="Chetan_Bhatt_13-1712859475804.png" /></span></P><P style=" text-align : justify; ">&nbsp;</P><UL style=" text-align : justify; "><LI>Now, your FIORI project is created and is ready to use.</LI></UL><P style=" text-align : justify; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_14-1712859475814.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95296i4C2BAADDC20B1DDD/image-size/medium?v=v2&amp;px=400" role="button" title="Chetan_Bhatt_14-1712859475814.png" alt="Chetan_Bhatt_14-1712859475814.png" /></span></P><P style=" text-align : justify; ">&nbsp;</P><UL style=" text-align : justify; "><LI>Go to run configuration and start the project as usual.</LI></UL><P style=" text-align : justify; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_15-1712859475821.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95298i8507FAEBE3A69EB2/image-size/medium?v=v2&amp;px=400" role="button" title="Chetan_Bhatt_15-1712859475821.png" alt="Chetan_Bhatt_15-1712859475821.png" /></span></P><P style=" text-align : justify; ">&nbsp;</P><UL style=" text-align : justify; "><LI>You can now run this Fiori Application which is the result of an Application created from CAPM.</LI></UL><P style=" text-align : justify; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_16-1712859475830.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95299iEBFF2F273E03EB7A/image-size/medium?v=v2&amp;px=400" role="button" title="Chetan_Bhatt_16-1712859475830.png" alt="Chetan_Bhatt_16-1712859475830.png" /></span></P><P style=" text-align : justify; ">&nbsp;</P><P style=" text-align : justify; ">&nbsp;</P> 2024-04-16T12:50:31.978000+02:00 https://community.sap.com/t5/application-development-blog-posts/debug-application-job-on-s-4hana-public-cloud/ba-p/13666050 Debug Application Job on S/4HANA Public Cloud 2024-04-16T13:01:48.420000+02:00 Juwin https://community.sap.com/t5/user/viewprofilepage/user-id/169790 <P>As of today (Apr 10, 2024), SAP has not provided a method to debug application job on S/4HANA Public Cloud (related <A href="https://community.sap.com/t5/enterprise-resource-planning-q-a/how-to-debug-an-application-job-in-s-4hana-public-cloud-similar-to/qaq-p/13582870" target="_blank">Question</A>&nbsp;by <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/837548">@rammel</a>&nbsp;) or provided a method to pass parameters to the class via IF_OO_ADT_CLASSRUN (related <A href="https://community.sap.com/t5/application-development-discussions/get-parameters-with-if-oo-adt-classrun/m-p/12740178" target="_blank">Question</A>&nbsp;by <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/139499">@fabianlupa</a>&nbsp;answered by <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/181866">@horst_keller</a>&nbsp;). Below is a workaround method until SAP provides a way to do either of these options.</P><P>Every Class used in a Custom Job catalog uses interfaces IF_APJ_DT_EXEC_OBJECT and IF_APJ_RT_EXEC_OBJECT. IF_APJ_DT_EXEC_OBJECT~GET_PARAMETERS provides the parameter definition and IF_APJ_RT_EXEC_OBJECT~EXECUTE is responsible to receive the job parameters from the caller and execute the business logic.</P><P>The idea implemented here, is to create a wrapper to reuse this functionality to call the Execute method. The wrapper is created as a HTTP service so that it can be called from external parties to pass the required parameters.</P><P>So, first lets create a HTTP service. If you plan to use the plugin attached here, then please make sure to use the same name for HTTP service as&nbsp;<SPAN>ZSRV_ADT_PLUGIN_EXEC_JOBCLASS, since that name is used in the plugin.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="2024-04-11 03_48_08-Doc1 - Word.png" style="width: 868px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/94948iE29CEF5BBFF15359/image-size/large?v=v2&amp;px=999" role="button" title="2024-04-11 03_48_08-Doc1 - Word.png" alt="2024-04-11 03_48_08-Doc1 - Word.png" /></span></P><P>Below is the code I used in the handler class. Please feel free to improvise this class, to have better authorization checks or validations according to your needs.</P><P>&nbsp;</P><pre class="lia-code-sample language-abap"><code>class zcl_adt_plugin_exec_jobclass definition public create public . public section. interfaces if_http_service_extension . protected section. private section. endclass. class zcl_adt_plugin_exec_jobclass implementation. method if_http_service_extension~handle_request. types: lty_char type c length 100, ltyt_range type range of lty_char. data: lo_definition type ref to if_apj_dt_exec_object, lo_runtime type ref to if_apj_rt_exec_object, lt_values type if_apj_rt_exec_object=&gt;tt_templ_val, begin of ls_value, param type string, range type ltyt_range, end of ls_value, lv_params type string. data(lt_form) = request-&gt;get_form_fields( ). loop at lt_form reference into data(lo_form). translate lo_form-&gt;name to upper case. endloop. read table lt_form into data(ls_form) with key name = 'CLASSNAME'. if sy-subrc eq 0. try. translate ls_form-value to upper case. create object lo_definition type (ls_form-value). create object lo_runtime type (ls_form-value). lo_definition-&gt;get_parameters( importing et_parameter_def = data(lt_params) ). catch cx_root into data(lo_root). response-&gt;set_text( |Class { ls_form-value } is invalid| ). response-&gt;set_status( 400 ). return. endtry. case request-&gt;get_method( ). when 'GET'. loop at lt_params into data(ls_param). lv_params = lv_params &amp;&amp; cond #( when lv_params is not initial then ',' &amp;&amp; cl_abap_char_utilities=&gt;newline ) &amp;&amp; |"{ ls_param-selname }":| &amp;&amp; cond #( when ls_param-kind = 'S' then |[\{"SIGN":"I","OPTION":"EQ","LOW":"","HIGH":""\}]| else |""| ). endloop. lv_params = |\{{ cl_abap_char_utilities=&gt;newline }{ lv_params }{ cl_abap_char_utilities=&gt;newline }\}|. response-&gt;set_text( lv_params ). when 'POST'. try. data(lv_body) = request-&gt;get_text( ). loop at lt_params into ls_param. /ui2/cl_json=&gt;deserialize( exporting json = lv_body name_mappings = value #( ( abap = cond #( when ls_param-kind = 'S' then 'RANGE' else 'PARAM' ) json = ls_param-selname ) ) changing data = ls_value ). if ls_param-kind = 'S'. loop at ls_value-range into data(ls_rng). append value #( selname = ls_param-selname sign = ls_rng-sign option = ls_rng-option low = ls_rng-low high = ls_rng-high ) to lt_values. endloop. elseif ls_value-param is not initial. append value #( selname = ls_param-selname low = ls_value-param ) to lt_values. endif. clear ls_value. endloop. lo_runtime-&gt;execute( lt_values ). catch cx_root. response-&gt;set_status( 400 ). return. endtry. endcase. response-&gt;set_content_type( 'application/json' ). response-&gt;set_status( 200 ). endif. endmethod. endclass.</code></pre><P>&nbsp;</P><P>If you plan to use the custom plugin, then copy the plugin to the plugins folder of your Eclipse installation.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Juwin_1-1712762671534.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/94758i1951C0CA5E5E369C/image-size/large?v=v2&amp;px=999" role="button" title="Juwin_1-1712762671534.png" alt="Juwin_1-1712762671534.png" /></span></P><P>Close the eclipse application and re-open it from command line using command&nbsp;<STRONG>eclipse.exe -clean</STRONG>, so that it re-reads the plugin folder.</P><P>Now, logon to SAP system via eclipse. In order to activate debugging request from plugin, please activate the following checkbox, for the ABAP Cloud Project.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Juwin_2-1712762812471.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/94759i2DB6E1BADE66F659/image-size/large?v=v2&amp;px=999" role="button" title="Juwin_2-1712762812471.png" alt="Juwin_2-1712762812471.png" /></span></P><P>Open the custom Job Catalog related to the class that you would like to debug. Once you are the Job Catalog editor, open Run menu. If Eclipse found and installed the plugin correctly, then you should be able to see a new option saying "Run Job Class" as highlighted below. <EM>(This option will only be visible while on Job Catalog editor view)</EM></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Juwin_4-1712763000566.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/94762i455CF4893F32FEA6/image-size/large?v=v2&amp;px=999" role="button" title="Juwin_4-1712763000566.png" alt="Juwin_4-1712763000566.png" /></span></P><P>Now, open the related class and add a breakpoint in the Execute method of the Class.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Juwin_3-1712762921101.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/94760i39AE6DB3CC0A0938/image-size/large?v=v2&amp;px=999" role="button" title="Juwin_3-1712762921101.png" alt="Juwin_3-1712762921101.png" /></span></P><P>You can now go back to the Job Catalog Editor and select the option&nbsp;"Run Job Class". This will call the custom HTTP service that was created and which will internally create a JSON payload of the parameter list. It will then popup a dialog for you to edit the JSON.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Juwin_5-1712763138414.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/94763i3CA542BC91434C0D/image-size/medium?v=v2&amp;px=400" role="button" title="Juwin_5-1712763138414.png" alt="Juwin_5-1712763138414.png" /></span></P><P>Modify the payload to pass values to each of the provided parameters in the JSON and hit OK.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Juwin_6-1712763184673.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/94764i4DE315286624943E/image-size/medium?v=v2&amp;px=400" role="button" title="Juwin_6-1712763184673.png" alt="Juwin_6-1712763184673.png" /></span></P><P>If you have setup everything right, then a new Debugger session will start and break at the breakpoint that you have set earlier.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Juwin_7-1712763240136.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/94765i844FD2FA0A93778C/image-size/large?v=v2&amp;px=999" role="button" title="Juwin_7-1712763240136.png" alt="Juwin_7-1712763240136.png" /></span></P><P>If you do not plan to use the plugin, other options may be to use tools like Postman or Restman to GET or POST, JSON payloads to the custom HTTP service.</P><P>Plugin can be downloaded from <A href="https://github.com/tjuwin1/PublicFiles/raw/main/executeJobClass_1.0.0.202404100358.jar" target="_self" rel="nofollow noopener noreferrer">here</A>.</P><P>&nbsp;</P><P>&nbsp;</P> 2024-04-16T13:01:48.420000+02:00 https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/building-low-code-extensions-with-key-user-extensibility-in-sap-s-4hana-and/ba-p/13675437 Building Low Code Extensions with Key User Extensibility in SAP S/4HANA and SAP Build 2024-04-19T08:08:19.293000+02:00 ThomasSchneider https://community.sap.com/t5/user/viewprofilepage/user-id/139277 <P>More than one year ago, SAP announced SAP Build, a toolset for creating low code / now code (LCNC) extension on SAP BTP (<A href="https://www.sap.com/products/technology-platform/low-code.html" target="_blank" rel="noopener noreferrer">Low-Code App Development and Automation Solutions | SAP Build</A>). In this blog I want to share my ideas on how both tools can be combined to build powerful extensions.</P><P>&nbsp;</P><H1 id="toc-hId-863532199"><STRONG>Who Are Key Users?</STRONG></H1><P>Who are key users? An excellent answer to this question has been given by my colleague&nbsp;<a href="https://community.sap.com/t5/user/viewprofilepage/user-id/131660">@Jocelyn_Dart</a>&nbsp;&nbsp;in her blog <SPAN><A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-fiori-for-sap-s-4hana-what-is-key-user-extensibility-and-who-are-your/ba-p/13560372" target="_blank">SAP Fiori for SAP S/4HANA – What is Key User Exten... - SAP Community</A></SPAN>. I want to briefly summarize it here: key users are users who are authorized to make changes on behalf of other users, typically for the users of a special group or department. Examples are:</P><UL><LI><SPAN>During your project, you might designate your functional consultants as your key users to make some initial adjustments as they discuss business needs directly with your business stakeholders.</SPAN></LI><LI><SPAN>Some organizations have a central process governance group who might be designated as responsible for key user changes or for certain types of key user extensions.</SPAN> <SPAN>For example, you might want your central process governance group to control adding custom fields, so that you don't end up with several teams creating similar fields</SPAN>.</LI><LI><SPAN>You might give some key user capabilities to your IT team or even selected developers – as key user functions can be the most effective way to extend your apps and the essential way to add custom fields.</SPAN> <SPAN>For example, as you build your skills into intelligent technologies, you might want your IT team to make some initial settings for your pilot machine learning or situation handling use cases.</SPAN></LI></UL><P>K<SPAN>ey user extensibility uses a no-code/low-code approach </SPAN>so <SPAN>business users </SPAN>can make <SPAN>the changes themselves</SPAN>. Thus,<SPAN> you can <STRONG>minimize lost-in-translation errors and communication overhead between business and IT</STRONG>.</SPAN></P><P>&nbsp;</P><H1 id="toc-hId-667018694"><STRONG>What do key users expect? </STRONG></H1><P>Well, key users expect that they can create extensions:</P><UL><LI><SPAN>Simple – no-code/low-code (LCNC)</SPAN></LI><LI><SPAN>Cost-effective – </SPAN>with<SPAN> minimum cost/effort/skill</SPAN></LI><LI><SPAN>Upgrade-stable – </SPAN>extensions <SPAN>are automatically retained as you upgrade releases</SPAN></LI><LI><SPAN>Safe - changes </SPAN>can <SPAN>be </SPAN>tested in a draft mode, they can be <SPAN>undone or reset, if needed</SPAN></LI></UL><P>Example: You all know that business processes require governance processes and not all processes are handled by central IT systems. So, key users start creating excels or word templates and over time they will add more and more logic (calculations, validations, etc. to it). But in the end, the data in the excel or word files must be synchronized with the central IT systems. So the more key users can adapt the system itself, the less overhead for data synchronization is needed.</P><P>&nbsp;</P><H1 id="toc-hId-470505189"><STRONG>What are Key User Extensibility Tools and What is SAP Build?</STRONG></H1><P><STRONG>Key User Extensibility Tools</STRONG> are Fiori apps that are part of SAP S/4HANA ( <a href="https://community.sap.com/t5/c-khhcw49343/SAP+S%25252F4HANA/pd-p/73554900100800000266" class="lia-product-mention" data-product="799-1">SAP S/4HANA</a>&nbsp;) (or other products such as SAP IBP) and that can be used by key users to adapt SAP applications and services (e.g. adapt the UI, forms, add custom fields and logic) or to create small custom applications (e.g. create custom CDS views, custom business objects, …). In other words, it is the LCNC offering that is embedded in the prod</P><P><STRONG>SAP Build</STRONG>&nbsp;(&nbsp;<a href="https://community.sap.com/t5/c-khhcw49343/SAP+Build/pd-p/73555000100700001491" class="lia-product-mention" data-product="1181-1">SAP Build</a>&nbsp;) is a set of LCNC tools on SAP BTP:</P><UL><LI><STRONG>SAP Build Apps</STRONG> is a visual programming environment where citizen and professional developers can build enterprise-ready custom applications without writing any code. With hundreds of pre-built components and logic functions, you can jumpstart your application projects and reduce development time. Explore how you can develop web and native mobile cross-platform apps while integrating to other SAP systems with drag-and-drop ease.</LI><LI><STRONG>SAP Build Process Automation</STRONG> allows you to simplify automation of business processes with visual drag-and-drop tools. It enables both citizen and professional developers to easily digitize their workflows without writing code. There are hundreds of pre-built content packages and connectors you can use to jumpstart your automation projects and save on development time.</LI><LI><STRONG>SAP Build Work Zone</STRONG> enables you to bring together all types of content, UI tools, IT systems, content repositories, applications, and channels using drag-and-drop and customization tools to create portals, intranets, and workspaces.</LI></UL><P>The following picture shows the four options for building extensions for SAP S/4HANA in context.</P><UL><LI>Low code/no code options for key users (already explained).</LI><LI>Options for developers: &nbsp;<UL><LI>the on-stack SAP S/4HANA Cloud ABAP Environment</LI><LI>SAP Build Code or ABAP Environment as the side-by-side extensibility options on SAP BTP</LI></UL></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture1.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98537i7311397417B8E53A/image-size/medium?v=v2&amp;px=400" role="button" title="Picture1.png" alt="Picture1.png" /></span></P><P>&nbsp;</P><H1 id="toc-hId-273991684"><STRONG>Why Two Different Tools Sets? When Do I Use What?</STRONG></H1><P><STRONG>Key user tools are used for local extension.</STRONG> If you want to adapt a Fiori UI (e.g. hide or rename fields on the UI), or you want add a validation for a field, you have to do it locally in the app. And this is why you use the <STRONG>embedded key user tools</STRONG> for this case. Also, if you want to add a custom field or custom tables to the S/4HANA data model and you want to use the data closely together with the S/4HANA data, for example in analytics.</P><P><STRONG>But if you want to create a new UI or a new process</STRONG>, for example a workflow, not only one S/4HANA may be involved; it makes sense to create these extensions in a central “hub” on SAP BTP.</P><P>Let me explain this in two examples:</P><H1 id="toc-hId-77478179"><STRONG>Example 1: New UI for a Custom Business Object</STRONG></H1><P>With the Custom Business Object key user app, you can create new custom tables in SAP S/4HANA and on top of the tables CDS views and a business object with a generic maintenance UI without writing one line of code. The CDS views that are generated on top of the tables are available for other key user extensions, for example in custom logic or custom analytical applications. The generic maintenance UI that comes with the custom business object is sufficient for most cases.</P><P>But in some cases, you would expect a more elaborate UI for a broader audience. You might even need a UI for users that do not have direct access to the SAP S/4HANA system (= they have no business user in the SAP S/4HANA system). Here, SAP Build Apps is the ideal tool to create an elaborate UI without being a developer and writing code.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture2.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98538i46B8A40B6E476BCF/image-size/medium?v=v2&amp;px=400" role="button" title="Picture2.png" alt="Picture2.png" /></span></P><P>The following tutorial leads you through a typical use case:<BR /><SPAN><A href="https://learning.sap.com/learning-journeys/extending-sap-s-4hana-with-sap-build-apps-and-key-user-extensibility" target="_blank" rel="noopener noreferrer">Extending SAP S/4HANA with SAP Build Apps and Key User Extensibility | SAP Learning</A></SPAN></P><P>An app is created that helps users in goods inbound processing to check the incoming goods and perform specific checks on the goods (e.g. for chemical or other dangerous goods). The specific checks and check results are stored in custom business objects. An app created with SAP Build Apps uses the standard SAP services for products and purchase orders and the services generated for the custom business object to guide the user through the check process.</P><P>Another tutorial that you can use for a start is the following:<BR /><SPAN><A href="https://developers.sap.com/tutorials/build-apps-s4hana-crud.html" target="_blank" rel="noopener noreferrer">https://developers.sap.com/tutorials/build-apps-s4hana-crud.html</A></SPAN></P><P>The tutorial describes how to build a UI with SAP Build App on an S/4HANA OData service, namely the Business Partner. You can adapt the tutorial to custom business objects (CBO) in S/4. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Instead of the A_BusinessPartner entity in the tutorial, you would use the root entity of your custom business object, and instead of the A_BusinessPartnerAddress entity you would use a sub-node of your custom business object.</P><P>&nbsp;</P><H1 id="toc-hId--119035326"><STRONG>Example 2: New Process for a Custom Business Object</STRONG></H1><P>Key users typically define the processes for a specific department or user group, which includes workflow. To empower the key user to implement their processes themselves, it makes sense to combine the Custom Business Object key user app and the process automation on SAP BTP.</P><P>Thus, the custom business object is created locally in the SAP S/4HANA system (so that it can be used by other extensions). Conversely, the process is created centrally on SAP BTP, so that they can be combined with other processes and potentially other data sources that are available on SAP BTP.</P><P>A typical example is: A bonus plan application is developed as custom business object using key user extensibility in SAP S/4HANA. When a bonus plan is created, an approval is required. This process is created with SAP Build Process Automation and runs on SAP BTP. When the approval is finished, the BTP process calls the bonus plan service and creates the bonus plan SAP S/4HANA.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture3.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98539iC81D73F3C36E38B2/image-size/medium?v=v2&amp;px=400" role="button" title="Picture3.png" alt="Picture3.png" /></span></P><P>The following tutorials can be used to implement such a use case:</P><UL><LI>Create a custom business object:<UL><LI><SPAN><A href="https://developers.sap.com/group.abap-extensibiliy-cbo-cce-ccl.html" target="_blank" rel="noopener noreferrer">Create Custom Business Objects in S/4HANA Cloud | SAP Tutorials</A></SPAN></LI></UL></LI><LI>Create an approval process and trigger the creation of a business object instance from a process: with SAP Build Build Process Automation<UL><LI><SPAN><A href="https://developers.sap.com/mission.sap-process-automation.html" target="_blank" rel="noopener noreferrer">Build Your First Business Process with SAP Build Process Automation | SAP Tutorials</A></SPAN></LI><LI><SPAN><A href="https://developers.sap.com/group.connect-process-external-sap-bpa.html" target="_blank" rel="noopener noreferrer">https://developers.sap.com/group.connect-process-external-sap-bpa.html</A></SPAN></LI><LI>Note that these tutorials show you how to create an approval process and call a service on SAP S/4HANA for an SAP business object. But you can use these tutorials also to create a custom business object.</LI></UL></LI></UL><H1 id="toc-hId--315548831"><STRONG>Summary</STRONG></H1><P>In this blog post, I explain why it makes sense to combine the capabilities of the local key user extensibility tools with the capabilities of SAP Build to empower key users to create powerful extensions without any lines of code.</P><P>&nbsp;</P> 2024-04-19T08:08:19.293000+02:00 https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-s-4hana-cloud-abap%E5%BC%80%E5%8F%91%E6%A1%88%E4%BE%8B%E4%B9%8B%E5%85%AB-%E7%89%A9%E6%96%99%E4%B8%B4%E6%9C%9F%E7%AE%A1%E7%90%86app/ba-p/13675540 SAP S/4HANA Cloud ABAP开发案例之八:物料临期管理App 2024-04-19T09:11:36.318000+02:00 Vincent_Zhu https://community.sap.com/t5/user/viewprofilepage/user-id/131883 <P><SPAN>紧随这篇</SPAN><A href="https://blogs.sap.com/2023/12/01/s-4hana-cloud%e4%b8%89%e7%b3%bb%e7%bb%9fcloud-abap%e5%bc%80%e5%8f%91%e6%a1%88%e4%be%8b%e4%bb%8b%e7%bb%8d/" target="_blank" rel="noopener noreferrer">博客</A><SPAN>,今天我们将再次逐步详细地介绍一个利用SAP S/4HANA Cloud三系统来做开发扩展的案例。</SPAN></P><P>&nbsp;</P><H2 id="toc-hId-992615903"><SPAN>1. 案例背景</SPAN></H2><P><SPAN>我们经常听到启用批次管理的客户在问是否有对临近效期物料的提醒、是否有对临近效期物料的批量查询报表,在标准产品中要查询相关信息需要检索多张报表,比如库存报表、批次信息等。通过利用开发人员可扩展性,我们开发了一个定制的物料临期管理App,并嵌入到SAP S/4HANA Cloud系统中。旨在帮助企业智能化地管理物料效期,提高供应链管理效率。关于业务上该自开发案例的价值,可参考此<A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/%E6%8F%90%E5%8D%87%E4%BE%9B%E5%BA%94%E9%93%BE%E7%AE%A1%E7%90%86%E6%95%88%E7%8E%87-%E7%89%A9%E6%96%99%E4%B8%B4%E6%9C%9F%E7%AE%A1%E7%90%86app%E5%8A%A9%E5%8A%9B%E4%BC%81%E4%B8%9A%E6%99%BA%E8%83%BD%E5%86%B3%E7%AD%96/ba-p/13657161" target="_self">博客</A>。</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="shelf1.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98545iFAC23946F080DFF4/image-size/large?v=v2&amp;px=999" role="button" title="shelf1.png" alt="shelf1.png" /></span></SPAN></P><P>&nbsp;</P><P>每个企业由于不同业务管理需要,可能对临近效期的提醒范围定义不同,我们还开发了警示灯自定义阈值配置app,用户可以自定义设置效期多少范围需显示为红灯,多少范围需显示为黄灯,多少范围需显示为绿灯,自定义设置满足不同企业客制化效期管理需求。</P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="shelf2.png" style="width: 694px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98547iACB1A1F882FF0B71/image-size/large?v=v2&amp;px=999" role="button" title="shelf2.png" alt="shelf2.png" /></span></SPAN></P><P>&nbsp;</P><H2 id="toc-hId-796102398"><SPAN>2. 后台服务开发</SPAN></H2><H3 id="toc-hId-728671612"><SPAN>2.1 创建CDS数据模型</SPAN></H3><P><SPAN>创建数据定义YCDS_DUE_MAT_LIST</SPAN></P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-abap"><code>@AbapCatalog.sqlViewName: 'YDUEMATMANGE' @AbapCatalog.compiler.compareFilter: true //@AbapCatalog.preserveKey: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'Material Due Date List' define view YCDS_DUE_MAT_LIST as select from I_Batch inner join YCDS_SUM_STOCK_01 on YCDS_SUM_STOCK_01.Material = I_Batch.Material and YCDS_SUM_STOCK_01.Plant = I_Batch.Plant and YCDS_SUM_STOCK_01.Batch = I_Batch.Batch association [1..1] to I_Product on I_Product.Product = I_Batch.Material association [1..1] to I_ProductDescription on I_ProductDescription.Product = I_Batch.Material and I_ProductDescription.Language = $session.system_language association [1..1] to I_Plant on I_Plant.Plant = I_Batch.Plant and I_Plant.Language = $session.system_language association [1..1] to I_Supplier on I_Supplier.Supplier = I_Batch.Supplier { key I_Batch.Material, key I_Batch.Batch, key I_Batch.Plant, key I_Batch.Supplier, key I_Batch.BatchBySupplier, // key YCDS_SUM_STOCK_01.InventoryStockType, // key YCDS_SUM_STOCK_01.MatlDocLatestPostgDate, YCDS_SUM_STOCK_01.StorageLocation, YCDS_SUM_STOCK_01.MatlWrhsStkQtyInMatlBaseUnit, I_Batch.MatlBatchIsInRstrcdUseStock, I_Batch.ShelfLifeExpirationDate, I_Batch.ManufactureDate, I_Product.BaseUnit, I_ProductDescription.ProductDescription, I_Plant.PlantName, I_Supplier.SupplierName, case when I_Batch.MatlBatchIsInRstrcdUseStock = 'X' then 'Restricted' else 'Unrestricted' end as BatchStatus, $session.system_date as curr_date } where I_Batch.ShelfLifeExpirationDate is not initial and YCDS_SUM_STOCK_01.MatlWrhsStkQtyInMatlBaseUnit &lt;&gt; 0</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>创建数据定义<SPAN>YCDS_DUE_MAT_LIST2</SPAN></P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-abap"><code>@AbapCatalog.sqlViewName: 'YDUEMATMANGE2' @AbapCatalog.compiler.compareFilter: true @AbapCatalog.preserveKey: true @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'Material Due Date List' define view YCDS_DUE_MAT_LIST2 as select from YCDS_DUE_MAT_LIST association [1..1] to I_StorageLocation on I_StorageLocation.StorageLocation = YCDS_DUE_MAT_LIST.StorageLocation and I_StorageLocation.Plant = YCDS_DUE_MAT_LIST.Plant { key YCDS_DUE_MAT_LIST.Material, key YCDS_DUE_MAT_LIST.Plant, key YCDS_DUE_MAT_LIST.StorageLocation, key YCDS_DUE_MAT_LIST.Batch, key YCDS_DUE_MAT_LIST.Supplier, // key YCDS_DUE_MAT_LIST.InventoryStockType, // key YCDS_DUE_MAT_LIST.MatlDocLatestPostgDate, YCDS_DUE_MAT_LIST.ProductDescription, YCDS_DUE_MAT_LIST.PlantName, I_StorageLocation.StorageLocationName, YCDS_DUE_MAT_LIST.BatchBySupplier, YCDS_DUE_MAT_LIST.SupplierName, MatlWrhsStkQtyInMatlBaseUnit, YCDS_DUE_MAT_LIST.BaseUnit, YCDS_DUE_MAT_LIST.ShelfLifeExpirationDate, YCDS_DUE_MAT_LIST.ManufactureDate, YCDS_DUE_MAT_LIST.BatchStatus, dats_days_between(YCDS_DUE_MAT_LIST.curr_date,YCDS_DUE_MAT_LIST.ShelfLifeExpirationDate) as remaining_days } </code></pre><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>创建数据定义<SPAN>YCDS_SUM_STOCK_01</SPAN></P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-abap"><code>@AbapCatalog.viewEnhancementCategory: [#NONE] @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'Sum of Stock 01' @Metadata.ignorePropagatedAnnotations: true @ObjectModel.usageType:{ serviceQuality: #X, sizeCategory: #S, dataClass: #MIXED } define view entity YCDS_SUM_STOCK_01 as select from I_MaterialStock_2 { key Material, key Plant, key StorageLocation, key Batch, key MaterialBaseUnit, @Semantics.quantity.unitOfMeasure: 'MaterialBaseUnit' @Aggregation.default: #SUM sum( MatlWrhsStkQtyInMatlBaseUnit ) as MatlWrhsStkQtyInMatlBaseUnit } where InventoryStockType = '01' group by Material, Plant, StorageLocation, Batch, MaterialBaseUnit</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>2.2 创建Metadata Extensions</P><P>创建新的Metadata Extension:<SPAN>YC_DUE_MAT_LIST</SPAN></P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-abap"><code>@Metadata.layer: #CUSTOMER @UI.headerInfo.title.type: #STANDARD @UI.headerInfo.title.label: 'Material Shelf Life Management' @UI.headerInfo.description.type: #STANDARD @UI.headerInfo.typeName: 'Material Due List' @UI.headerInfo.typeNamePlural: 'Material Shelf Life Management' annotate view YC_DUE_MAT_LIST with { @UI.facet: [{ id: 'Material', purpose: #STANDARD, type: #IDENTIFICATION_REFERENCE, label: 'Material', position: 10} ] @UI:{ lineItem: [{ position: 10 }], lineItem: [{label: 'Material'}], identification: [{ position: 10 }], selectionField: [{ position: 20 }] } Material; @UI:{ lineItem: [{ position: 20 }], lineItem: [{label: 'Material Description'} ], identification: [{ position: 20 }] } @UI.lineItem: [{exclude: true}] ProductDescription; @UI:{ lineItem: [{ position: 30 }], lineItem: [{label: 'Plant'}], identification: [{ position: 30 }], selectionField: [{ position: 10 }] } Plant; @UI:{ lineItem: [{ position: 40 }], lineItem: [{label: 'Plant Name'}], identification: [{ position: 40 }] } @UI.lineItem: [{exclude: true}] PlantName; @UI.lineItem: [{ position: 50 }] @UI.lineItem: [{label: 'Storage Location'}] @UI.identification: [{ position: 50 }] @UI.selectionField: [{position: 50}] StorageLocation; @UI.lineItem: [{ position: 60 }] @UI.lineItem: [{label: 'Storage Location Name'}] @UI.identification: [{ position: 60 }] @UI.lineItem: [{exclude: true}] StorageLocationName; @UI.lineItem: [{ position: 70 }] @UI.lineItem: [{label: 'Batch'}] @UI.identification: [{ position: 70 }] @UI.selectionField: [{position: 70}] Batch; @UI.lineItem: [{ position: 80 }] @UI.lineItem: [{label: 'Supplier Batch'}] @UI.identification: [{ position: 80 }] @UI.selectionField: [{position: 80}] BatchBySupplier; @UI.lineItem: [{ position: 90 }] @UI.lineItem: [{label: 'Supplier'}] @UI.identification: [{ position: 90 }] Supplier; @UI.lineItem: [{ position: 100 }] @UI.lineItem: [{label: 'Supplier Name'}] @UI.identification: [{ position: 100 }] @UI.lineItem: [{exclude: true}] SupplierName; @UI.lineItem: [{ position: 110 }] @UI.lineItem: [{label: 'Unrestricted Inventory Qty'}] @UI.identification: [{ position: 110 }] MatlWrhsStkQtyInMatlBaseUnit; @UI.lineItem: [{ position: 120 }] @UI.lineItem: [{label: 'Unit'}] @UI.identification: [{ position: 120 }] // @UI.lineItem: [{exclude: true}] @UI.hidden: true BaseUnit; @UI.lineItem: [{ position: 130 }] @UI.lineItem: [{label: 'Expiration Date'}] @UI.identification: [{ position: 130 }] ShelfLifeExpirationDate; @UI.lineItem: [{ position: 140 }] @UI.lineItem: [{label: 'Manufacture Date'}] @UI.identification: [{ position: 140 }] @UI.lineItem: [{exclude: true}] ManufactureDate; @UI.lineItem: [{ position: 150 }] @UI.lineItem: [{label: 'Batch Status'}] @UI.identification: [{ position: 150 }] @UI.lineItem: [{exclude: true}] BatchStatus; @UI.lineItem: [{ position: 160, importance: #HIGH }] @UI.lineItem: [{label: 'Remaining Days'}] @UI.identification: [{ position: 160 }] remaining_days; @UI.lineItem: [{ position: 170, value: 'due_range', criticality: 'Criticality' }] @UI.lineItem: [{label: 'Due Date Range'}] @UI.identification: [{ position: 170 }] due_range; // @UI.hidden: true // InventoryStockType; // @UI.hidden: true // MatlDocLatestPostgDate; @UI.hidden: true Criticality; }</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><H3 id="toc-hId-532158107">2.3 创建Service Definition和Service Binding</H3><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="shelf3.png" style="width: 394px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98551i9701DCB711321236/image-size/large?v=v2&amp;px=999" role="button" title="shelf3.png" alt="shelf3.png" /></span></P><P>&nbsp;<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="shelf4.png" style="width: 655px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98552i037C4944C6AF399D/image-size/large?v=v2&amp;px=999" role="button" title="shelf4.png" alt="shelf4.png" /></span></P><P>&nbsp;我们可以通过预览的方式查看发布的服务:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="shelf5.png" style="width: 655px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98553i85222EE8D4831E85/image-size/large?v=v2&amp;px=999" role="button" title="shelf5.png" alt="shelf5.png" /></span></P><P>&nbsp;</P><H2 id="toc-hId-206561883">3. 前台应用开发</H2><P>首先在BTP创建Destination:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="shelf6.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98560iA19B05F411314D70/image-size/large?v=v2&amp;px=999" role="button" title="shelf6.png" alt="shelf6.png" /></span></P><P>&nbsp;</P><P>然后打开BAS服务,选择SAP Fiori Worklist Application:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="shelf7.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98561i6C41471EC722AEFA/image-size/large?v=v2&amp;px=999" role="button" title="shelf7.png" alt="shelf7.png" /></span></P><P>&nbsp;</P><P>发布完成,部署完权限之后,就可以看到App:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="shelf8.png" style="width: 664px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98563iC59F054604F5C417/image-size/large?v=v2&amp;px=999" role="button" title="shelf8.png" alt="shelf8.png" /></span></P><P>&nbsp;</P><P><SPAN>以上是该案例——物料临期管理自开发应用的步骤介绍。希望通过此案例的介绍能让您了解到三系统开发能实现的常见功能。</SPAN></P> 2024-04-19T09:11:36.318000+02:00 https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-s-4hana-cloud-public-edition-abap-environment-case-8-material-shelf/ba-p/13675904 SAP S/4HANA Cloud, public edition, ABAP Environment Case 8: Material Shelf Life Management 2024-04-19T13:16:11.809000+02:00 Vincent_Zhu https://community.sap.com/t5/user/viewprofilepage/user-id/131883 <P><SPAN>This is a detailed step-by-step technical guide document to introduce a Developer Extensibility case followed by this&nbsp;</SPAN><A href="https://blogs.sap.com/2023/04/06/sap-s-4hana-cloud-public-edition-abap-environment-case-introduction/" target="_blank" rel="noopener noreferrer">blog</A><SPAN>.</SPAN></P><P>&nbsp;</P><H2 id="toc-hId-992619627"><STRONG>1. Case Background:</STRONG></H2><P>We frequently hear inquiries from clients who have enabled batch management, asking whether there are reminders for nearing expiry materials and batch query reports for such materials. In standard products, retrieving relevant information often requires searching through multiple reports, such as inventory reports and batch details.&nbsp;<SPAN>To meet this demand, we have developed a Material Shelf Life Management App on S/4HANA public cloud through developer extensibility (also known as cloud ABAP development), aiming to help enterprises intelligently manage material Shelf Life and enhance supply chain management efficiency. Regarding the business value of this use case, you can refer to this <A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/boost-scm-efficiency-material-expiry-mgmt-app-empowers-intelligent-decision/ba-p/13657205" target="_self">blog</A> for details.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="shelf1.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98725iD322711C2641F69C/image-size/large?v=v2&amp;px=999" role="button" title="shelf1.png" alt="shelf1.png" /></span></SPAN></P><P>&nbsp;</P><P><SPAN>Due to varying business management needs, each company may define different ranges for nearing expiry reminders. The Customizable Warning Threshold Configuration App allows users to set customized ranges for when to display red, yellow, or green warning lights, meeting the diverse customization needs of different enterprises for expiry management.</SPAN></P><P><SPAN><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="shelf2.png" style="width: 694px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98726iE32116620B580139/image-size/large?v=v2&amp;px=999" role="button" title="shelf2.png" alt="shelf2.png" /></span></SPAN></SPAN></P><P>&nbsp;</P><H2 id="toc-hId-796106122"><STRONG>2. Backend Service Development:</STRONG></H2><H3 id="toc-hId-728675336"><STRONG>2.1 Create CDS Data Model</STRONG></H3><P>Create Data Definition: <SPAN>YCDS_DUE_MAT_LIST</SPAN></P><P>&nbsp;</P><pre class="lia-code-sample language-abap"><code>@AbapCatalog.sqlViewName: 'YDUEMATMANGE' @AbapCatalog.compiler.compareFilter: true //@AbapCatalog.preserveKey: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'Material Due Date List' define view YCDS_DUE_MAT_LIST as select from I_Batch inner join YCDS_SUM_STOCK_01 on YCDS_SUM_STOCK_01.Material = I_Batch.Material and YCDS_SUM_STOCK_01.Plant = I_Batch.Plant and YCDS_SUM_STOCK_01.Batch = I_Batch.Batch association [1..1] to I_Product on I_Product.Product = I_Batch.Material association [1..1] to I_ProductDescription on I_ProductDescription.Product = I_Batch.Material and I_ProductDescription.Language = $session.system_language association [1..1] to I_Plant on I_Plant.Plant = I_Batch.Plant and I_Plant.Language = $session.system_language association [1..1] to I_Supplier on I_Supplier.Supplier = I_Batch.Supplier { key I_Batch.Material, key I_Batch.Batch, key I_Batch.Plant, key I_Batch.Supplier, key I_Batch.BatchBySupplier, // key YCDS_SUM_STOCK_01.InventoryStockType, // key YCDS_SUM_STOCK_01.MatlDocLatestPostgDate, YCDS_SUM_STOCK_01.StorageLocation, YCDS_SUM_STOCK_01.MatlWrhsStkQtyInMatlBaseUnit, I_Batch.MatlBatchIsInRstrcdUseStock, I_Batch.ShelfLifeExpirationDate, I_Batch.ManufactureDate, I_Product.BaseUnit, I_ProductDescription.ProductDescription, I_Plant.PlantName, I_Supplier.SupplierName, case when I_Batch.MatlBatchIsInRstrcdUseStock = 'X' then 'Restricted' else 'Unrestricted' end as BatchStatus, $session.system_date as curr_date } where I_Batch.ShelfLifeExpirationDate is not initial and YCDS_SUM_STOCK_01.MatlWrhsStkQtyInMatlBaseUnit &lt;&gt; 0</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>Create Data Definition:&nbsp;<SPAN>YCDS_DUE_MAT_LIST2</SPAN></P><P>&nbsp;</P><pre class="lia-code-sample language-abap"><code>@AbapCatalog.sqlViewName: 'YDUEMATMANGE2' @AbapCatalog.compiler.compareFilter: true @AbapCatalog.preserveKey: true @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'Material Due Date List' define view YCDS_DUE_MAT_LIST2 as select from YCDS_DUE_MAT_LIST association [1..1] to I_StorageLocation on I_StorageLocation.StorageLocation = YCDS_DUE_MAT_LIST.StorageLocation and I_StorageLocation.Plant = YCDS_DUE_MAT_LIST.Plant { key YCDS_DUE_MAT_LIST.Material, key YCDS_DUE_MAT_LIST.Plant, key YCDS_DUE_MAT_LIST.StorageLocation, key YCDS_DUE_MAT_LIST.Batch, key YCDS_DUE_MAT_LIST.Supplier, // key YCDS_DUE_MAT_LIST.InventoryStockType, // key YCDS_DUE_MAT_LIST.MatlDocLatestPostgDate, YCDS_DUE_MAT_LIST.ProductDescription, YCDS_DUE_MAT_LIST.PlantName, I_StorageLocation.StorageLocationName, YCDS_DUE_MAT_LIST.BatchBySupplier, YCDS_DUE_MAT_LIST.SupplierName, MatlWrhsStkQtyInMatlBaseUnit, YCDS_DUE_MAT_LIST.BaseUnit, YCDS_DUE_MAT_LIST.ShelfLifeExpirationDate, YCDS_DUE_MAT_LIST.ManufactureDate, YCDS_DUE_MAT_LIST.BatchStatus, dats_days_between(YCDS_DUE_MAT_LIST.curr_date,YCDS_DUE_MAT_LIST.ShelfLifeExpirationDate) as remaining_days } </code></pre><P>&nbsp;</P><P>&nbsp;</P><P>Create Data Definition:&nbsp;<SPAN>YCDS_SUM_STOCK_01</SPAN></P><P>&nbsp;</P><pre class="lia-code-sample language-abap"><code>@AbapCatalog.viewEnhancementCategory: [#NONE] @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'Sum of Stock 01' @Metadata.ignorePropagatedAnnotations: true @ObjectModel.usageType:{ serviceQuality: #X, sizeCategory: #S, dataClass: #MIXED } define view entity YCDS_SUM_STOCK_01 as select from I_MaterialStock_2 { key Material, key Plant, key StorageLocation, key Batch, key MaterialBaseUnit, @Semantics.quantity.unitOfMeasure: 'MaterialBaseUnit' @Aggregation.default: #SUM sum( MatlWrhsStkQtyInMatlBaseUnit ) as MatlWrhsStkQtyInMatlBaseUnit } where InventoryStockType = '01' group by Material, Plant, StorageLocation, Batch, MaterialBaseUnit</code></pre><P>&nbsp;</P><P>&nbsp;</P><H2 id="toc-hId-403079112">2.2 Create Metadata Extensions</H2><P>Create new Metadata Extension:&nbsp;<SPAN>YC_DUE_MAT_LIST</SPAN></P><P>&nbsp;</P><pre class="lia-code-sample language-abap"><code>@Metadata.layer: #CUSTOMER @UI.headerInfo.title.type: #STANDARD @UI.headerInfo.title.label: 'Material Shelf Life Management' @UI.headerInfo.description.type: #STANDARD @UI.headerInfo.typeName: 'Material Due List' @UI.headerInfo.typeNamePlural: 'Material Shelf Life Management' annotate view YC_DUE_MAT_LIST with { @UI.facet: [{ id: 'Material', purpose: #STANDARD, type: #IDENTIFICATION_REFERENCE, label: 'Material', position: 10} ] @UI:{ lineItem: [{ position: 10 }], lineItem: [{label: 'Material'}], identification: [{ position: 10 }], selectionField: [{ position: 20 }] } Material; @UI:{ lineItem: [{ position: 20 }], lineItem: [{label: 'Material Description'} ], identification: [{ position: 20 }] } @UI.lineItem: [{exclude: true}] ProductDescription; @UI:{ lineItem: [{ position: 30 }], lineItem: [{label: 'Plant'}], identification: [{ position: 30 }], selectionField: [{ position: 10 }] } Plant; @UI:{ lineItem: [{ position: 40 }], lineItem: [{label: 'Plant Name'}], identification: [{ position: 40 }] } @UI.lineItem: [{exclude: true}] PlantName; @UI.lineItem: [{ position: 50 }] @UI.lineItem: [{label: 'Storage Location'}] @UI.identification: [{ position: 50 }] @UI.selectionField: [{position: 50}] StorageLocation; @UI.lineItem: [{ position: 60 }] @UI.lineItem: [{label: 'Storage Location Name'}] @UI.identification: [{ position: 60 }] @UI.lineItem: [{exclude: true}] StorageLocationName; @UI.lineItem: [{ position: 70 }] @UI.lineItem: [{label: 'Batch'}] @UI.identification: [{ position: 70 }] @UI.selectionField: [{position: 70}] Batch; @UI.lineItem: [{ position: 80 }] @UI.lineItem: [{label: 'Supplier Batch'}] @UI.identification: [{ position: 80 }] @UI.selectionField: [{position: 80}] BatchBySupplier; @UI.lineItem: [{ position: 90 }] @UI.lineItem: [{label: 'Supplier'}] @UI.identification: [{ position: 90 }] Supplier; @UI.lineItem: [{ position: 100 }] @UI.lineItem: [{label: 'Supplier Name'}] @UI.identification: [{ position: 100 }] @UI.lineItem: [{exclude: true}] SupplierName; @UI.lineItem: [{ position: 110 }] @UI.lineItem: [{label: 'Unrestricted Inventory Qty'}] @UI.identification: [{ position: 110 }] MatlWrhsStkQtyInMatlBaseUnit; @UI.lineItem: [{ position: 120 }] @UI.lineItem: [{label: 'Unit'}] @UI.identification: [{ position: 120 }] // @UI.lineItem: [{exclude: true}] @UI.hidden: true BaseUnit; @UI.lineItem: [{ position: 130 }] @UI.lineItem: [{label: 'Expiration Date'}] @UI.identification: [{ position: 130 }] ShelfLifeExpirationDate; @UI.lineItem: [{ position: 140 }] @UI.lineItem: [{label: 'Manufacture Date'}] @UI.identification: [{ position: 140 }] @UI.lineItem: [{exclude: true}] ManufactureDate; @UI.lineItem: [{ position: 150 }] @UI.lineItem: [{label: 'Batch Status'}] @UI.identification: [{ position: 150 }] @UI.lineItem: [{exclude: true}] BatchStatus; @UI.lineItem: [{ position: 160, importance: #HIGH }] @UI.lineItem: [{label: 'Remaining Days'}] @UI.identification: [{ position: 160 }] remaining_days; @UI.lineItem: [{ position: 170, value: 'due_range', criticality: 'Criticality' }] @UI.lineItem: [{label: 'Due Date Range'}] @UI.identification: [{ position: 170 }] due_range; // @UI.hidden: true // InventoryStockType; // @UI.hidden: true // MatlDocLatestPostgDate; @UI.hidden: true Criticality; }</code></pre><P>&nbsp;</P><P>&nbsp;</P><H2 id="toc-hId-206565607">2.3 Create Service Definition and Service Binding</H2><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="shelf3.png" style="width: 394px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98728iCD162A9C956A3C92/image-size/large?v=v2&amp;px=999" role="button" title="shelf3.png" alt="shelf3.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="shelf4.png" style="width: 655px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98729i22C9D0493C6324B8/image-size/large?v=v2&amp;px=999" role="button" title="shelf4.png" alt="shelf4.png" /></span></P><P>&nbsp;And then we can preview the published service:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="shelf5.png" style="width: 655px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98731i8B09CCF0DDB516B6/image-size/large?v=v2&amp;px=999" role="button" title="shelf5.png" alt="shelf5.png" /></span></P><P>&nbsp;</P><H2 id="toc-hId-10052102"><STRONG>3. Frontend App Development</STRONG></H2><P>First create destination on BTP:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="shelf6.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98732i100F91375D5B9B6D/image-size/large?v=v2&amp;px=999" role="button" title="shelf6.png" alt="shelf6.png" /></span></P><P>&nbsp;</P><P>Then open BAS service, and choose SAP Fiori Worklist Application:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="shelf7.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98733i037300034A6E42CE/image-size/large?v=v2&amp;px=999" role="button" title="shelf7.png" alt="shelf7.png" /></span></P><P>&nbsp;</P><P>After publish, and authorization setup, we can see the App like below:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="shelf8.png" style="width: 664px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98734i933550D898707A4E/image-size/large?v=v2&amp;px=999" role="button" title="shelf8.png" alt="shelf8.png" /></span></P><P>&nbsp;</P> 2024-04-19T13:16:11.809000+02:00 https://community.sap.com/t5/technology-blogs-by-sap/introducing-the-new-e-learning-clean-core-with-sap-business-technology/ba-p/13685976 Introducing the New E-learning ‘Clean Core with SAP Business Technology Platform’ 2024-04-29T15:06:39.391000+02:00 sudha_naik https://community.sap.com/t5/user/viewprofilepage/user-id/122459 <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Picture1.jpg" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/103278i871DC21C92A86B8B/image-size/medium?v=v2&amp;px=400" role="button" title="Picture1.jpg" alt="Picture1.jpg" /></span></P><P><SPAN>Clean Core is both a concept and an approach to achieve a modern, flexible, and cloud-compliant ERP system. Clean core is achieved by integration and extending the system in such a way that it is cloud-compliant, with optimal master data quality and perfected business process governance. Leveraging SAP Business Technology Platform enables you to attain clean core compliance, facilitating a smooth and effective digital transformation journey for your business.</SPAN></P><P>The upcoming e-learning course, "Clean Core with SAP Business Technology Platform," offers valuable insights to understand how SAP Business Technology Platform can help cultivate a cleaner and more sustainable core for SAP systems. It offers insights into how SAP BTP can support the fundamental pillars of Data, Integration, and Extensibility.</P><P>The e-learning explores the topic of extensibility in-depth and how the various components of SAP Business Technology Platform support the building of extensions in line with clean core principles. This aspect is crucial for businesses looking to adapt and customize their SAP systems without compromising the integrity of their core.</P><P>Additionally, the course will advise on the key offerings available to customers through their SAP Enterprise Support, cloud edition subscriptions. This will equip participants with the necessary resources and support to ensure they are using SAP BTP components in line with SAP's clean core strategy.</P><P>Please use this <A href="https://accounts.sap.com/saml2/idp/sso?sp=https://www.successfactors.eu/learninghub&amp;RelayState=%2Fsf%2Flearning%3FdestUrl%3Dhttps%253a%252f%252fsaplearninghub%252eplateau%252ecom%252flearning%252fuser%252fdeeplink%255fredirect%252ejsp%253flinkId%253dCATALOG%255fSEARCH%2526sbArSel%253d%2526keywords%253dSUP_ELE_6030_2404%2526selKeyWordHeader%253dSUP_ELE_6030_2404%2526catSel%253d%2526srcSel%253dESAC%2526delMthSel%253d%2526ILDateFrm%253d%2526ILDateTo%253d%2526ILBlend%253d%2526ILSchd%253d%2526fromSF%253dY%26company%3Dlearninghub" target="_self" rel="noopener noreferrer">link</A> to access the e-learning.</P><P>If you have issues accessing the above link, there may be an authorizations issue. Please note a one-time registration in SAP Learning Hub, edition for SAP Enterprise Support, is required. A detailed step-by step guide to registration can be found&nbsp;<A href="https://support.sap.com/en/offerings-programs/enterprise-support/enterprise-support-academy/learn.html" target="_blank" rel="noopener noreferrer">here</A>.</P><P>For internal colleagues, if you cannot access the e-learning, please use the following <A href="https://training.sap.com/content/LearningHubInternalEdition" target="_blank" rel="noopener noreferrer">link</A>, click on “Access” and use the above direct link once access has been granted.</P><P>Enroll now and join us as we explore the power of SAP Business Technology Platform in driving a clean core environment for businesses. Get ready to unlock new opportunities and drive innovation with SAP's clean core strategy.&nbsp;</P><P>Thanks and Regards,&nbsp;</P><P>Sudha Surendran /&nbsp;BTP Architect - SAP Enterprise Support</P> 2024-04-29T15:06:39.391000+02:00 https://community.sap.com/t5/technology-blogs-by-sap/10-ways-to-reshape-your-sap-landscape-with-sap-business-technology-platform/ba-p/13679673 10+ ways to reshape your SAP landscape with SAP Business Technology Platform - Blog 6 2024-04-30T07:20:00.026000+02:00 miroll https://community.sap.com/t5/user/viewprofilepage/user-id/161311 <H1 id="toc-hId-863653405">Clean Core Extensibility</H1><P>Here comes the next edition of our blog series “<SPAN>10+ ways to reshape your SAP landscape with SAP Business Technology Platform</SPAN>” – this time the main topic will be extensibility.</P><P><STRONG><SPAN>Summary:<BR /></SPAN></STRONG><EM><SPAN>The extensibility aspect of the SAP Clean Core strategy is one of the most important for many development organisations. To master this aspect knowledge of the technological building blocks, reference architectures and how to tie them together is required. Once an understanding of the possibilities is reached it is important to put this into governance and create a Clean Core Extension strategy. The Application Extension Methodology (AEM) is there to help you achieve this.</SPAN></EM></P><P>Extensibility as a topic is probably as old as SAP systems themselves. Since a standard SAP system represents standard processes and only provides configuration-based changes to those standard processes, the options for adaptation to specific processes are sometimes too limited to achieve the set goal. So far so good and not a problem from the architectural view – extensions have always been and will always be an important part of SAP systems. The problem – as outlined in the previous blog on “<A href="https://community.sap.com/t5/technology-blogs-by-sap/10-ways-to-reshape-your-sap-landscape-with-sap-business-technology-platform/ba-p/13652132" target="_blank">How Clean Core can accelerate your SAP Business Transformation</A>” – doesn’t come from wanting to extend the system but how this is done.&nbsp;Through the combination of In-App Extensibility – including Key-User-Tools as well as On-Stack Developer Extensibility – and Side-by-Side Extensibility a Clean Core can be sustained while still realizing business processes through extensions.</P><P>As the reasoning should be clear after the previously mentioned blog, this blog will focus on the more technical aspects of such a Clean Core compliant extension. We will look at reference architectures, technological building blocks, resources, where to find them and how to apply them.</P><H3 id="toc-hId-925305338">References</H3><P>A lot of software architecture best practices are based on <A href="https://discovery-center.cloud.sap/refarchhelp" target="_blank" rel="noopener nofollow noreferrer">reference architectures</A>. These usually provide a sample along with reasonings and outline options to continue from there. SAP provides a growing number of officially recommended reference architectures for BTP in its <A href="https://discovery-center.cloud.sap/refArchCatalog/" target="_blank" rel="noopener nofollow noreferrer">Discovery Center</A>. These are fully fledged reference architectures with all needed information. However, you can use other resources as well to find resources from SAP to get an orientation on what others might have implemented or what SAP recommends. In the missions section of the Discovery Center you can <A href="https://discovery-center.cloud.sap/missionCatalog/?search=clean-core" target="_blank" rel="noopener nofollow noreferrer">search for Clean Core</A> or just <A href="https://discovery-center.cloud.sap/missionCatalog/?focustags=4" target="_blank" rel="noopener nofollow noreferrer">browse by topic e.g. Extensibility</A>.</P><P>The mentioned resources are part of the <A href="https://help.sap.com/docs/sap-btp-guidance-framework/guidance-framework/what-is-sap-btp-guidance-framework" target="_blank" rel="noopener noreferrer">SAP BTP Guidance framework</A> which covers not only guidance for architects but also for developers and admins:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="miroll_0-1713881814612.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/100614i540B1A347258500E/image-size/medium?v=v2&amp;px=400" role="button" title="miroll_0-1713881814612.png" alt="miroll_0-1713881814612.png" /></span></P><H3 id="toc-hId-728791833">Technological Building Blocks</H3><P>For most cases there’s more than one way to extend a specific functionality in an SAP system. However, not all of them (e.g. a new Dynpro application) comply with the Clean Core paradigm but still it is important to know and find them. Finding them used to be a bigger challenge but fortunately the documentation and coverage in the <A href="https://api.sap.com/" target="_blank" rel="noopener noreferrer">SAP Business Accelerator Hub</A> has increased immensely and we can find a lot of the previously mentioned resources there. This includes APIs ranging from OData and plain REST all the way to CDS views as well as Events and Integrations. When building a Clean Core compliant extension this is especially useful since we can select our SAP system version and see all standard APIs for it. This works for S/4 systems as well as for all LoB solutions such as SAP SuccessFactors, SAP Concur, SAP Fieldglass, etc. The documented APIs and Events list their status and link to the business documentation, so you know which one to use.</P><P>Coming from the implementation side there are two more technical building blocks which make it easier to create Clean Core compliant solutions: <A href="https://cap.cloud.sap/docs/" target="_blank" rel="noopener nofollow noreferrer">CAP</A> and <A href="https://pages.community.sap.com/topics/abap/rap" target="_blank" rel="noopener noreferrer">RAP</A>. Both are programming models (Cloud Application Programming Model and RESTful ABAP Programming Model) built and curated by SAP. To cover both non-SAP-experienced and SAP-experienced developers ABAP (RAP) is covered as well as Java and Javascript, the two flavors of CAP. Both models make it a lot easier to create extensions for SAP system using state of the art mechanisms and providing you with the basics for your extension to perfectly integrate into your system landscape. Using the models lets your development focus shift from being able to work with your SAP systems to developing the extension need and business functionality.</P><P>An additional factor besides the pro-code-oriented approaches of CAP and RAP are the low-code and no-code tools offered on SAP BTP in the SAP Build Suite. With mostly visual approaches a new developer community can help to realize business functionality while maintain a Clean Core and including them in the process. This can release resources in the IT department and raise satisfaction of business functions since they are more involved.</P><H3 id="toc-hId-532278328">Tying it all together</H3><P>Now that we’ve looked at the general possibilities from a technical side (frameworks, tools, APIs, events, …) and an architectural side, it’s time to tie it together and answer the all-important question: When do I use what?</P><P>The short answer is that there is no one-size-fits-all solution for this question since it is always dependent on the context ranging from systems and business requirements all the way to existing development resources and personal preference. However, since we know that this is a challenge there’s a toolbox of guidance assets and methodologies to help you answer this question for your organization. Listed in the “Methodologies” section of the SAP BTP Guidance Framework overview you can see three methodologies covering three of the five Clean Core aspects. “Why not all five?” you may ask – the other two aspects also appear in each of the methodologies as a cross concern, so they are covered as well.</P><P>Since we’re looking at Extensibility the <A href="https://help.sap.com/docs/sap-btp-guidance-framework/sap-application-extension-methodology/sap-application-extension-methodology-overview?locale=en-US" target="_blank" rel="noopener noreferrer">Application Extension Methodology</A> is our main asset here. The SAP Application Extension Methodology can support and guide you by providing a structured, technology-agnostic approach for customers and partners to define an organization-specific extension strategy. Following this methodology will ensure that everyone in your project uses the same terminology and quickly arrives at a common understanding of the business use case and to-be solution. You’ll have an overview of possible technical extension building blocks and you’ll be able to make an informed decision about your organization’s future extension architecture. After an initial setup the resulting extension framework can be applied to current and future extension projects. This is especially important looking at the aspect of “keep the core clean vs. make the core clean” you read about in Holger’s blog. An extension strategy like this can help you tackle this problem by applying it to new developments and gradually using it with previous developments to bring them up to a Clean Core standard.</P><H3 id="toc-hId-335764823">Events</H3><P><SPAN>To get more insights, please also visit one of our BTP Innovation Days:</SPAN></P><UL><LI><SPAN>Innovation Day Switzerland:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Bern 14-May-24 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<A href="https://events.sap.com/ch/sap-btp-innovation-day-bern-2024/de/home?url_id=banner-ch-homepage-row6-pos2-BTPinnovationday-240229" target="_blank" rel="noopener noreferrer">SAP | SAP BTP Innovation Day Switzerland</A></SPAN></LI><LI><SPAN>Innovation Day Germany:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Essen 16-May-24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A href="https://events.sap.com/de/sap-btp-innovation-day/de/home" target="_blank" rel="noopener noreferrer">SAP | SAP BTP Innovation Day</A></SPAN></LI></UL> 2024-04-30T07:20:00.026000+02:00 https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-s-4hana-cloud-public-edition-%E5%A6%82%E4%BD%95%E5%8F%8A%E6%97%B6%E5%8F%91%E7%8E%B0%E5%8F%97%E5%BD%B1%E5%93%8D%E7%9A%84%E9%A1%B9%E7%9B%AE%E5%B9%B6%E9%87%87%E5%8F%96%E5%8D%87%E7%BA%A7%E8%A1%8C%E5%8A%A8/ba-p/13706437 SAP S/4HANA Cloud Public Edition : 如何及时发现受影响的项目并采取升级行动? 2024-05-20T09:00:12.130000+02:00 AngelaDai https://community.sap.com/t5/user/viewprofilepage/user-id/3008 <P>随着数字化转型的加速推进,为提供更多创新的功能和内容,S/4HANA Cloud公有云采取了半年一次的升级和持续功能交付模式。这些变更可能会对客户的自开发项目产生影响,特别是客制化的CDS视图。这意味着客户需要时刻关注系统的变化,并及时采取升级行动。这也给客户带来了挑战。</P><P>在本篇博客中,将会探讨一些实用的方法和工具,详细介绍如何帮助客户及时发现受影响的项目,并采取相应的升级行动。</P><P>&nbsp;</P><UL><LI><STRONG>自定义</STRONG><STRONG>CDS</STRONG><STRONG>视图</STRONG></LI></UL><P>&nbsp;</P><P>在应用自定义CDS视图内,客户可以创建客制化CDS视图,也可以快速地找到需要及时修改的CDS视图。</P><P>进入应用,将过滤器展开,找到“改写”过滤器。该标签为“是”的情况则说明CDS视图需要进行修改。客户还可以根据任务的优先级情况,及时对需要修改的视图采取行动。</P><P>打开需要修改的自定义 CDS 视图并进入编辑模式,客户可以获取有关任务以及解决此任务的操作的详细信息。</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AngelaDai_0-1716187939391.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112812i4EC1F25B0CC8B4ED/image-size/medium/is-moderation-mode/true?v=v2&amp;px=400" role="button" title="AngelaDai_0-1716187939391.png" alt="AngelaDai_0-1716187939391.png" /></span></P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><UL><LI><STRONG>RASD 2.0/ Release Assessment and Scope Dependency 2.0</STRONG></LI></UL><P>&nbsp;</P><P>Release Assessment and Scope Dependency Tool (RASD) 是一个简单的自学习工具,可帮助客户轻松使用和采用 SAP S/4HANA Cloud 中的影响、改进和创新。</P><P>&nbsp;</P><P>RASD 为客户提供了量身定制的针对每个 S/4HANA Cloud 版本和持续交付的已删除、已弃用、新对象和已更改对象(如应用、API 和 CDS 视图)的列表。 该清单根据客户使用和激活的范围进行筛选。客户可以在RASD中快速了解到与其系统/业务相关的变更信息,并做出及时响应。</P><P>&nbsp;</P><P>除了升级会受到的影响外,RASD 还会(根据其范围)向客户显示所有可为其业务或行业增加价值的新功能和改进功能。详细有关于RASD2.0的介绍,可以查看下方链接:</P><UL><LI>向客户发布的Release Assessment and Scope Dependency Tool (RASD 2.0)&nbsp;<A href="https://blogs.sap.com/2023/02/02/%e5%90%91%e5%ae%a2%e6%88%b7%e5%8f%91%e5%b8%83%e7%9a%84release-assessment-and-scope-dependency-tool-rasd-2.0/" target="_blank" rel="noopener noreferrer">查看</A></LI></UL><P>接下来介绍如何在RASD2.0中查找受影响的项目。</P><P>使用S-user ID登录RASD2.0,选择想要查看的版本,国家,以及租户等信息。</P><P>找到Where Used List 卡片。进入该卡片,可以查看到该版本下收到影响的业务目录以及CDS视图。</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AngelaDai_1-1716187939395.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112810i8F5EC760ED5A363F/image-size/medium/is-moderation-mode/true?v=v2&amp;px=400" role="button" title="AngelaDai_1-1716187939395.png" alt="AngelaDai_1-1716187939395.png" /></span></P><P>&nbsp;</P><P>尤其是客制化CDS视图,进入该标签,可以查看到系统内受影响的客制化CDS视图。客户可以通过该信息,快速找到受影响的开发项,并根据更改信息及时对开发内容进行修改。</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AngelaDai_2-1716187939403.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112811iDC77B2E903AF86CB/image-size/medium/is-moderation-mode/true?v=v2&amp;px=400" role="button" title="AngelaDai_2-1716187939403.png" alt="AngelaDai_2-1716187939403.png" /></span></P><P>&nbsp;</P><P>&nbsp;</P><P>另外值得注意的是,对于三系统架构,RASD2.0目前仅支持查看生产,测试,和开发(Dev100)租户使用情况,若想要查看Dev80的开发项情况,可以使用另外一个工具。</P><P>&nbsp;</P><UL><LI><STRONG>ABAP Test Cockpit</STRONG></LI></UL><P>ABAP Test Cockpit(ATC)是一个强大的工具,可以帮助开发人员自动化执行代码质量检查和单元测试,提高ABAP代码的质量和稳定性。ATC直接集成了ABAP Workbench和ADT,客户可以直接在开发环境中检查代码。</P><P>因此在开发过程或者升级期间,客户都可以使用 ATC 检查代码,对代码进行及时维护。更多关于ATC的信息,可以参考博文<A href="https://community.sap.com/t5/technology-blogs-by-sap/how-to-configure-abap-test-cockpit-atc-in-the-cloud/ba-p/13573962" target="_blank">How to configure ABAP Test Cockpit (ATC) in the cloud</A></P><P>接下来主要介绍一下如何在ADT中使用ATC。选中项目,选择Run As -&gt; ABAP Test Cockpit,即可执行对该项目的测试。</P><P>执行完后,客户可以在ADT中查看到该项目的执行结果,点击相关的条目可以查看到相关问题的详情。例如下图中可以查看到该项目中使用了已被弃用的CDS视图。客户可以根据提示及时做出响应。</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AngelaDai_3-1716187939410.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112813iBFF563F43CDF9D7B/image-size/medium/is-moderation-mode/true?v=v2&amp;px=400" role="button" title="AngelaDai_3-1716187939410.png" alt="AngelaDai_3-1716187939410.png" /></span></P><P>&nbsp;</P><P>另外在SAP S/4HANA Cloud Public Edition中客户也可以通过“自定义代码迁移”应用,使用ATC检查系统内创建的自定义ABAP代码。</P><P>首先需要登录到Development系统Tenant 80。(注意:该应用只有在DEV80中可以使用。) 找到并打开“自定义代码迁移”应用。</P><P>若之前未建立过项目,则需要先创建自定义代码分析项目。创建项目中需要维护项目名称,检查变式,以及需要分析的系统。在SAP S/4HANA Cloud Public edition中,待分析系统默认是本系统。</P><P>检查变式可选择ABAP_CLOUD_DEVELOPMENT_DEFAULT,该变式包含了SAP ATC建议的所有应执行的检查。</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AngelaDai_4-1716187939422.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112814i0D977E8351A7D3E0/image-size/medium/is-moderation-mode/true?v=v2&amp;px=400" role="button" title="AngelaDai_4-1716187939422.png" alt="AngelaDai_4-1716187939422.png" /></span></P><P>&nbsp;</P><P>创建完项目并保存后系统会执行代码分析。可以通过刷新,查看最新的分析的状态和进度。然后更改项目范围,可以添加需要检查的package。</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AngelaDai_5-1716187939439.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112815i793A92559A68946A/image-size/medium/is-moderation-mode/true?v=v2&amp;px=400" role="button" title="AngelaDai_5-1716187939439.png" alt="AngelaDai_5-1716187939439.png" /></span></P><P>&nbsp;</P><P>代码检查完后,可以切换到分析的板块,查看分析结果,例如可以查看代码中是否使用到了已弃用的对象或元素等。客户可以在升级后,在该应用中快速地对自定义代码进行分析检查,查看升级后代码是否需要维护。&nbsp;&nbsp;&nbsp;&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AngelaDai_6-1716187939461.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112816iDC2D78FA185483D7/image-size/medium/is-moderation-mode/true?v=v2&amp;px=400" role="button" title="AngelaDai_6-1716187939461.png" alt="AngelaDai_6-1716187939461.png" /></span></P><P>&nbsp;</P><P>&nbsp;</P> 2024-05-20T09:00:12.130000+02:00 https://community.sap.com/t5/application-development-blog-posts/sap-tech-bytes-sap-s-4hana-cloud-sap-integration-suite-aem-sap-build/ba-p/13706661 SAP Tech Bytes: SAP S/4HANA Cloud + SAP Integration Suite, AEM + SAP Build Process Automation 2024-05-20T13:25:58.571000+02:00 ajmaradiaga https://community.sap.com/t5/user/viewprofilepage/user-id/107 <P><EM>In this blog post, I share a couple of SAP Tech Bytes on how to enable eventing between SAP S/4HANA Cloud and SAP Build Process Automation via SAP Integration Suite, advanced event mesh. We will configure and trigger events from SAP S/4HANA Cloud, which will then be received by SAP Integration Suite, advanced event mesh, and finally forwarded to SAP Build Process Automation.</EM></P><P>Enabling the end-to-end event-driven integration scenario between SAP S/4HANA Cloud and SAP Build Process Automation involves many steps and requires extensive documentation. Sometimes, it might be best to process all that information in video format.</P><P><SPAN class="lia-unicode-emoji">If you're interested in learning how to enable the same scenario using SAP Event Mesh, check out this blog post: <A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-tech-bytes-deliver-events-from-sap-eventmesh-to-sap-build-process/ba-p/13574547" target="_blank">https://community.sap.com/t5/technology-blogs-by-sap/sap-tech-bytes-deliver-events-from-sap-eventmesh-to-sap-build-process/ba-p/13574547.</A></SPAN></P><H3 id="toc-hId-1143893941"><A href="https://www.youtube.com/watch?v=6hb9l0ss5ec" target="_self" rel="nofollow noopener noreferrer">SAP Tech Bytes: Configuring SAP S/4HANA Cloud and SAP Integration Suite, advanced event mesh</A></H3><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="asset.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112909iD02F34A923F682A7/image-size/medium/is-moderation-mode/true?v=v2&amp;px=400" role="button" title="asset.png" alt="asset.png" /></span></P><P>Steps shown in the video:</P><UL><LI><SPAN class=""><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=6hb9l0ss5ec&amp;t=4s" target="" rel="nofollow noopener noreferrer">00:04<SPAN class=""> Introduction</SPAN></A></SPAN></SPAN></LI><LI><SPAN class=""><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=6hb9l0ss5ec&amp;t=39s" target="" rel="nofollow noopener noreferrer">00:39<SPAN class=""> SAP Help documentation</SPAN></A></SPAN></SPAN></LI><LI><SPAN class=""><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=6hb9l0ss5ec&amp;t=103s" target="" rel="nofollow noopener noreferrer">01:43<SPAN class=""> Maintain Client Certificates in SAP S/4HANA Cloud</SPAN></A></SPAN></SPAN></LI><LI><SPAN class=""><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=6hb9l0ss5ec&amp;t=140s" target="" rel="nofollow noopener noreferrer">02:20<SPAN class=""> Import default client certificate in AEM</SPAN></A></SPAN></SPAN></LI><LI><SPAN class=""><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=6hb9l0ss5ec&amp;t=202s" target="" rel="nofollow noopener noreferrer">03:22<SPAN class=""> Download server root certificate</SPAN></A></SPAN></SPAN></LI><LI><SPAN class=""><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=6hb9l0ss5ec&amp;t=242s" target="" rel="nofollow noopener noreferrer">04:02<SPAN class=""> Create SAP S/4HANA Cloud client username in AEM</SPAN></A></SPAN></SPAN></LI><LI><SPAN class=""><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=6hb9l0ss5ec&amp;t=339s" target="" rel="nofollow noopener noreferrer">05:39<SPAN class=""> Create Communication system</SPAN></A></SPAN></SPAN></LI><LI><SPAN class=""><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=6hb9l0ss5ec&amp;t=420s" target="" rel="nofollow noopener noreferrer">07:00<SPAN class=""> Create Communication arrangement (AEM integration scenario - SAP_COM_0492)</SPAN></A></SPAN></SPAN></LI><LI><SPAN class=""><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=6hb9l0ss5ec&amp;t=687s" target="" rel="nofollow noopener noreferrer">11:27<SPAN class=""> Create Communication arrangement (AEM validation assessment - SAP_COM_0493)</SPAN></A></SPAN></SPAN></LI><LI><SPAN class=""><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=6hb9l0ss5ec&amp;t=733s" target="" rel="nofollow noopener noreferrer">12:13<SPAN class=""> Create AEM validation service instance in SAP BTP</SPAN></A></SPAN></SPAN></LI><LI><SPAN class=""><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=6hb9l0ss5ec&amp;t=815s" target="" rel="nofollow noopener noreferrer">13:35<SPAN class=""> Check connection between SAP S/4HANA Cloud and AEM</SPAN></A></SPAN></SPAN></LI><LI><SPAN class=""><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=6hb9l0ss5ec&amp;t=830s" target="" rel="nofollow noopener noreferrer">13:50<SPAN class=""> Enterprise Event Enablement - Communication channel binding</SPAN></A></SPAN></SPAN></LI><LI><SPAN class=""><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=6hb9l0ss5ec&amp;t=890s" target="" rel="nofollow noopener noreferrer">14:50<SPAN class=""> Enterprise Event Enablement - Event Monitor (Produce Test event)</SPAN></A></SPAN></SPAN></LI><LI><SPAN class=""><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=6hb9l0ss5ec&amp;t=912s" target="" rel="nofollow noopener noreferrer">15:12<SPAN class=""> Subscribe to topic in AEM</SPAN></A></SPAN></SPAN></LI><LI><SPAN class=""><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=6hb9l0ss5ec&amp;t=972s" target="" rel="nofollow noopener noreferrer">16:12<SPAN class=""> Update a Business Partner</SPAN></A></SPAN></SPAN></LI><LI><SPAN class=""><SPAN class=""><SPAN class=""><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=6hb9l0ss5ec&amp;t=1080s" target="" rel="nofollow noopener noreferrer">18:00<SPAN class=""> Outro</SPAN></A></SPAN></SPAN></SPAN></SPAN></LI></UL><P><SPAN class=""><SPAN class="">Now that we've configured the communication between SAP S/4HANA Cloud and SAP Integration Suite, advanced event mesh, we can proceed to configure the delivery of events to SAP Build Process Automation.</SPAN></SPAN></P><H3 id="toc-hId-947380436"><A href="https://www.youtube.com/watch?v=QfxI7ufCA24" target="_blank" rel="noopener nofollow noreferrer">SAP Tech Bytes: Delivering events from SAP S/4HANA Cloud to SAP Build Process Automation via AEM</A></H3><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="asset(3).png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112910i6690BACD7AC32B55/image-size/medium/is-moderation-mode/true?v=v2&amp;px=400" role="button" title="asset(3).png" alt="asset(3).png" /></span></P><P>Steps shown in the video:</P><UL><LI><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=QfxI7ufCA24&amp;t=4s" target="" rel="nofollow noopener noreferrer">00:04 Introduction</A></SPAN></LI><LI><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=QfxI7ufCA24&amp;t=47s" target="" rel="nofollow noopener noreferrer">00:47 SAP Help documentation</A></SPAN></LI><LI><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=QfxI7ufCA24&amp;t=121s" target="" rel="nofollow noopener noreferrer">02:01 Create queue in AEM</A></SPAN></LI><LI><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=QfxI7ufCA24&amp;t=199s" target="" rel="nofollow noopener noreferrer">03:19 Create REST Delivery Point (RDP)</A></SPAN></LI><LI><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=QfxI7ufCA24&amp;t=238s" target="" rel="nofollow noopener noreferrer">03:58 Create REST Consumer</A></SPAN></LI><LI><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=QfxI7ufCA24&amp;t=275s" target="" rel="nofollow noopener noreferrer">04:35 SAP Build Process Automation service key</A></SPAN></LI><LI><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=QfxI7ufCA24&amp;t=305s" target="" rel="nofollow noopener noreferrer">05:05 Configuring the REST Consumer</A></SPAN></LI><LI><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=QfxI7ufCA24&amp;t=384s" target="" rel="nofollow noopener noreferrer">06:24 Queue binding</A></SPAN></LI><LI><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=QfxI7ufCA24&amp;t=435s" target="" rel="nofollow noopener noreferrer">07:15 Request headers in queue binding</A></SPAN></LI><LI><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=QfxI7ufCA24&amp;t=495s" target="" rel="nofollow noopener noreferrer">08:15 RDP summary and enable components</A></SPAN></LI><LI><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=QfxI7ufCA24&amp;t=544s" target="" rel="nofollow noopener noreferrer">09:04 Process in SAP Build Process Automation</A></SPAN></LI><LI><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=QfxI7ufCA24&amp;t=585s" target="" rel="nofollow noopener noreferrer">09:45 Create Business Partner</A></SPAN></LI><LI><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=QfxI7ufCA24&amp;t=620s" target="" rel="nofollow noopener noreferrer">10:20 New task in My Inbox</A></SPAN></LI><LI><SPAN class=""><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=QfxI7ufCA24&amp;t=690s" target="" rel="nofollow noopener noreferrer">11:30 Outro</A></SPAN></SPAN></LI></UL><P>In this SAP Tech Bytes, we’ve seen what’s required to configure eventing between SAP S/4HANA Cloud and SAP Integration Suite, advanced event mesh. Also, we created and configured a REST Delivery Point in AEM in order to forward events to SAP Build Process Automation. The REST Delivery Point functionality is not limited to SAP Build Process Automation; you can also deliver events to other systems that expose an HTTP endpoint to receive them. I hope you enjoy this video on event-driven integration, as there is more to come on this topic in the near future….</P><P>Happy eventing!</P> 2024-05-20T13:25:58.571000+02:00