https://raw.githubusercontent.com/ajmaradiaga/feeds/main/scmt/topics/SAP-Integration-Suite-blog-posts.xml SAP Community - SAP Integration Suite 2024-05-20T17:01:24.743045+00:00 python-feedgen SAP Integration Suite blog posts in SAP Community https://community.sap.com/t5/technology-blogs-by-members/how-to-host-static-webpages-through-sap-cpi-iflow/ba-p/13678233 How to host static webpages through SAP CPI-Iflow 2024-04-22T15:26:00.691000+02:00 GopisettySai https://community.sap.com/t5/user/viewprofilepage/user-id/149967 <P>Before walking through the solution, We will glide through How it started.</P><P>Addressing the Integration community, We have a lot of systems to connect and indeed as an integration consultant we will be having POs and CPI systems to access them we will be using bookmarks and find it difficult to remember and open them at first glance.</P><P>As an enthusiastic integration consultant, I wanted to access the systems with in single click. I built a webpage with the help of Chat-GPT and wanted to host it but was not sure to host it on the internet and expose the domains.</P><P>Discussed the same with teammates and one of the teammates came up with a solution why can’t we do this with CPI, We will host it through CPI.</P><P>How to achieve this?</P><OL><LI>It is assumed that you have the HTML5 code in a single file already. You need to copy the HTML content and encode this to base64 (using an<A href="https://www.base64encode.org/" target="_blank" rel="noopener nofollow noreferrer">&nbsp;online tool) and copy the base64 encoded string to Notepad or any IDE of your choice.</A></LI><LI>Please save the Base64 code in a header as below.<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Content Modifier" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/99999i91E090187100CA57/image-size/medium?v=v2&amp;px=400" role="button" title="Content.png" alt="Content Modifier" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Content Modifier</span></span></LI><LI>COpy the below groovy script to decode the Base64 to HTML script.</LI></OL><P>&nbsp;</P><pre class="lia-code-sample language-javascript"><code>import com.sap.gateway.ip.core.customdev.util.Message import java.util.HashMap import java.text.SimpleDateFormat import java.util.Base64; def Message processData(Message message) { def staticContent = message.getProperties().get("HTML_CONTENT"); //Parse static content Base64.Decoder decoder = Base64.getDecoder(); staticContent = new String(decoder.decode(staticContent)); message.setBody(staticContent.getBytes("UTF-8")); message.setHeader("Content-Type", "text/html; charset=utf-8"); return message }​</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp; &nbsp; &nbsp; &nbsp; 4.Deploy the iflow, copy the HTTPS URL, and hit it from the browser, you can access your webpage.<span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Integration organizer webpage.png" style="width: 260px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/100026i8367FE411A1089B2/image-size/large?v=v2&amp;px=999" role="button" title="Integration organizer webpage.png" alt="Integration organizer webpage.png" /></span>&nbsp; &nbsp; &nbsp; &nbsp;5. In case you're getting a CORS error, Please use API management to surpass it.</P><P>&nbsp;<SPAN>Let me know if you have any queries and please share your interesting findings as well! You can contact me on&nbsp;</SPAN><A href="https://www.linkedin.com/in/gopisetty-sai-charan/" target="_blank" rel="nofollow noopener noreferrer">LinkedIn&nbsp;</A><SPAN>regarding the same! Until then stay tuned!</SPAN></P> 2024-04-22T15:26:00.691000+02:00 https://community.sap.com/t5/technology-blogs-by-sap/supporting-multiple-api-gateways-with-sap-api-management-using-azure-api/ba-p/13680433 Supporting Multiple API Gateways with SAP API Management – using Azure API Management as example 2024-04-25T17:02:14.909000+02:00 Chaim_Bendelac https://community.sap.com/t5/user/viewprofilepage/user-id/194397 <H2 id="toc-hId-993389480">Introduction</H2><P><SPAN>APIs are the cornerstone of modern business ecosystems and are crucial in today’s digital economy. The advent of action-based generative AI, which relies on accessible and well-defined APIs, underscores the importance of composable, API-centric software architectures.</SPAN></P><P><SPAN>Securing, governing, and managing APIs is essential. API Management has become a recognized discipline, supported by solutions from leading vendors such as SAP, Microsoft, Google, IBM, Salesforce, among others.&nbsp;</SPAN>API Management fosters an ecosystem where authorized developers can access and consume carefully curated and secured collections of APIs.</P><P><SPAN>The essence of API management solutions lies in their ability to regulate access, authenticate and validate API calls through an <EM>API Gateway</EM>,&nbsp;</SPAN>a proxy solution deployed between API consumers and the service endpoints themselves.</P><P>Traditional API Management solutions relied on a single, central API gateway, set up in proximity to the APIs they safeguard. However, this simple architecture is less common today, due to the distributed nature of cloud software applications; customers deploy a growing number of <EM>distributed</EM> API gateways.</P><P>For example, SAP’s API Management solution, a capability of the SAP Integration Suite, provides API gateway functionality as a service available in over twenty regions around the world, as well as self-hosted options for on-premise or private-cloud deployments. This offers customers more flexibility on where to deploy API gateways.</P><P>Customers of SAP API Management may, additionally, use API gateways from other vendors and cloud providers like Microsoft Azure. But this presents a new challenge: while there may be multiple API gateways, customers still want to present the managed API information in a unified and centralized API catalog.</P><P><SPAN>To address this, SAP and Microsoft have partnered, sharing programmatic interfaces to facilitate a cohesive API catalog.</SPAN></P><P>This blog <SPAN>targets SAP Integration Suite customers utilizing the SAP API catalog (API Business Hub Enterprise) as their <EM>central</EM> repository for all APIs, accessible through a developer portal or directly via SAP Build development tools (SAP Build Apps, SAP Build Code, SAP Build Process Automation)</SPAN></P><P>We introduce an extensible API import utility which streamlines and automates the process of importing, registering and publishing additional APIs into the central catalog, such as APIs managed by other vendors, or found in other external catalogs. Here, we focus on Microsoft’s Azure API Management as an information source, but the API import utility can be easily adapted to automate the import of APIs from any&nbsp;other source. <SPAN>For further details, please reach out to us.</SPAN></P><P>A <A title="govern sap apis in a single place" href="https://community.sap.com/t5/technology-blogs-by-members/govern-sap-apis-living-in-various-api-management-gateways-in-a-single-place/ba-p/13682483" target="_blank">companion blog</A>&nbsp;by our Microsoft friends details how APIs managed by the SAP API gateway can be imported to the Azure API Center, a new central catalog offering from Microsoft.</P><H2 id="toc-hId-796875975">Automated API import</H2><P>SAP API Management designates APIs that are not safeguarded by an SAP API gateway as&nbsp;“externally managed” or “unmanaged" APIs. Such APIs can be imported and listed in the API catalog and developer portal, and then optionally further enhanced or managed via API proxies, for instance to ensure that all APIs of the organization share the same security policies and common URL addressing.</P><P>While it is straightforward to manually specify a few individual unmanaged APIs and keep these specifications up to date, it becomes a daunting challenge for larger collections of APIs, especially those managed by a non-SAP API gateway.</P><P>This blog outlines an extensible API import utility that automates the process of importing, registering and publishing APIs into SAP API Management. <SPAN>The utility employs a “factory” design pattern implemented as an integration with Microsoft’s Azure API Management.</SPAN></P><P>Available as a stand-alone open-source portable Java application, the API import utility can be executed from a desktop, but it is more likely that you will want to incorporate it into a regular workflow or CI/CD pipeline, in order to ensure that the API catalog remains up to date.</P><H2 id="toc-hId-600362470">Accessing the API Import Utility</H2><P><SPAN>Essential tools for using the API Import Utility include:</SPAN></P><UL><LI>Git</LI><LI>Java 11+</LI><LI>Maven 3.9+</LI></UL><P><SPAN>The code is available&nbsp;</SPAN>here: <A href="https://github.com/SAP-samples/api-management-api-import-utility" target="_blank" rel="noopener nofollow noreferrer">https://github.com/SAP-samples/api-management-api-import-utility</A>.</P><H2 id="toc-hId-403848965">Overview</H2><P>The API import utility was developed by our SAP colleagues&nbsp;<A href="mailto:soumen.ghosh@sap.com" target="_blank" rel="noopener nofollow noreferrer">Soumen Gosh</A>&nbsp;and <A href="mailto:bibin.thomas@sap.com" target="_blank" rel="noopener nofollow noreferrer">Bibin Thomas</A>. It comprises two main components. The<FONT color="#3366FF"> <SPAN>api-import</SPAN> </FONT>code-tree contains the utility’s main class and entry point, in <FONT color="#3366FF"><SPAN>APIImportApplication.java</SPAN></FONT>, and the various functions for intefacing with the SAP API Management catalog.</P><P>The common interface (<FONT color="#3366FF"><SPAN>IRepositoryService</SPAN></FONT>) required by the “factory” in <FONT color="#3366FF"><SPAN>APIDiscoveryFactory.java</SPAN></FONT> is simple, and consists of three functions:</P><P style=" padding-left : 30px; "><FONT color="#3366FF">public <EM>List</EM>&lt;<EM>API</EM>&gt; getListOfApis()</FONT></P><P style=" padding-left : 30px; "><FONT color="#3366FF">public <EM>API</EM> getApi(<EM>String</EM> <EM>apiIdName</EM>)</FONT></P><P style=" padding-left : 30px; "><FONT color="#3366FF">public <EM>APIDefinition</EM> getApiDefinition(<EM>API</EM> <EM>api</EM>)</FONT></P><P>The implementation of these functions for Azure API Management is located in <FONT color="#3366FF"><SPAN>AAMApiRepository.java</SPAN></FONT>, in the <FONT color="#3366FF"><SPAN>AAM</SPAN></FONT> code-tree. The implementation adheres to the API service documented here: <A href="https://learn.microsoft.com/en-us/rest/api/apimanagement/api-management-service" target="_blank" rel="noopener nofollow noreferrer">https://learn.microsoft.com/en-us/rest/api/apimanagement/api-management-service</A>.</P><P>The following simplified illustration demonstrates the main flow:</P><P style=" padding-left : 30px; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="chaimbendelac_0-1713942707803.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/100952i0A069222311B8523/image-size/medium?v=v2&amp;px=400" role="button" title="chaimbendelac_0-1713942707803.png" alt="chaimbendelac_0-1713942707803.png" /></span></P><P><SPAN>The utility fetches the APIs from the Azure API Management and makes them available in SAP API Management as unmanaged APIs. In addition, by default, all imported APIs are added to a new <EM>product</EM> (a grouping of related APIs) called </SPAN><FONT color="#3366FF"><SPAN>AAMProduct</SPAN></FONT><SPAN> (you can change this default name in the </SPAN><FONT color="#3366FF"><SPAN>AAM_product_description.json</SPAN></FONT><SPAN> file in the </SPAN><FONT color="#3366FF"><SPAN>conf</SPAN></FONT><SPAN> folder). </SPAN></P><H2 id="toc-hId-207335460">Building the code</H2><OL><LI>At the root of the code-tree, execute: <SPAN><FONT color="#3366FF">mvn clean install</FONT><BR /><BR /></SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="chaimbendelac_1-1713942707804.png" style="width: 474px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/100950i1DA72EB9B5B3D156/image-dimensions/474x90?v=v2" width="474" height="90" role="button" title="chaimbendelac_1-1713942707804.png" alt="chaimbendelac_1-1713942707804.png" /></span><SPAN><BR /><BR /></SPAN></LI><LI>This creates a runtime folder: <FONT color="#3366FF"><SPAN>./target/app</SPAN></FONT> with two subfolders, <FONT color="#3366FF"><SPAN>lib</SPAN> </FONT>and <FONT color="#3366FF"><SPAN>conf</SPAN></FONT>.</LI></OL><P>&nbsp;</P><H2 id="toc-hId-10821955">Preparing Access to Azure API Management</H2><P><SPAN>Access to Azure API Management requires</SPAN> an Azure API Management account and the appropriate roles. You will need an Azure Entra ID (formerly known as Azure AD) service principal (for more information, see <A href="https://learn.microsoft.com/en-us/purview/create-service-principal-azure" target="_blank" rel="noopener nofollow noreferrer">https://learn.microsoft.com/en-us/purview/create-service-principal-azure</A>).</P><P>The command to create a service principal and configure its access to Azure resources is as follows:</P><P style=" padding-left : 30px; "><FONT color="#3366FF">az ad sp create-for-rbac --scopes /subscriptions/&lt;subscriptionId&gt; --role Contributor</FONT></P><P>For more information, see <A href="https://learn.microsoft.com/en-us/cli/azure/ad/sp?view=azure-cli-latest#az-ad-sp-create-for-rbac" target="_blank" rel="noopener nofollow noreferrer">https://learn.microsoft.com/en-us/cli/azure/ad/sp?view=azure-cli-latest#az-ad-sp-create-for-rbac</A></P><P>The command response will be something like this:</P><P style=" padding-left : 30px; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="chaimbendelac_4-1713943515861.png" style="width: 616px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/100961i035F0836F7DBB500/image-dimensions/616x196?v=v2" width="616" height="196" role="button" title="chaimbendelac_4-1713943515861.png" alt="chaimbendelac_4-1713943515861.png" /></span></P><P>Save this response in a file called <FONT color="#3366FF"><SPAN>AAM_connection_details.json</SPAN></FONT>, in the <FONT color="#3366FF"><SPAN>conf</SPAN></FONT> folder created in the build step above (replace the existing file placeholder).</P><P>&nbsp;</P><H2 id="toc-hId--185691550">Prepare access to the SAP API management catalog</H2><P>Accessing SAP API management requires access to an SAP Business Technology Platform (BTP) subaccount, with an installed tenant of the SAP Integration Suite with activated API Management. You will need to generate a service key, which provides trusted access to the public APIs of SAP’s API Management. This process is explained here: <A href="https://help.sap.com/docs/integration-suite/sap-integration-suite/api-access-plan-for-api-portal" target="_blank" rel="noopener noreferrer">https://help.sap.com/docs/integration-suite/sap-integration-suite/api-access-plan-for-api-portal</A> . The resulting service key looks like this:</P><P style=" padding-left : 30px; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="chaimbendelac_5-1713943655921.png" style="width: 450px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/100963iF363B5EC1B7EDE94/image-dimensions/450x108?v=v2" width="450" height="108" role="button" title="chaimbendelac_5-1713943655921.png" alt="chaimbendelac_5-1713943655921.png" /></span></P><P>Save this result as a file called <FONT color="#3366FF"><SPAN>SAP_service_key.json</SPAN></FONT>, in the same <FONT color="#3366FF"><SPAN>conf</SPAN> </FONT>folder created above (replace the existing file placeholder).<BR /><SPAN>&nbsp;</SPAN></P><H2 id="toc-hId--382205055"><SPAN>Running the API import utility</SPAN></H2><P><SPAN>From the </SPAN><SPAN>app</SPAN><SPAN> folder, execute:</SPAN></P><P style=" padding-left : 30px; "><FONT color="#3366FF"><SPAN>java -cp api-import.jar;lib/* com.apimgmt.gateway.APIImportApplication</SPAN></FONT></P><P><SPAN>The utility fetches the APIs and makes them available in SAP API Management as unmanaged APIs. In addition, by default, all imported APIs are added into a new product (a grouping of related APIs) called </SPAN><FONT color="#3366FF"><SPAN>AzureAPIs</SPAN></FONT><SPAN>. </SPAN></P><P style=" padding-left : 30px; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="chaimbendelac_2-1713942707809.png" style="width: 706px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/100951i7F2D6AF0643033D2/image-dimensions/706x83?v=v2" width="706" height="83" role="button" title="chaimbendelac_2-1713942707809.png" alt="chaimbendelac_2-1713942707809.png" /></span></P><P><SPAN>It is up to you to decide if you want to take additional steps, such as adding an API proxy for any of the imported APIs.</SPAN></P><P><SPAN>Developers browsing the SAP API Management API catalog will see a new product tile representing this product grouping:</SPAN></P><P style=" padding-left : 30px; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="chaimbendelac_3-1713942707820.png" style="width: 339px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/100953iD0F7EE1FAAE14884/image-dimensions/339x240?v=v2" width="339" height="240" role="button" title="chaimbendelac_3-1713942707820.png" alt="chaimbendelac_3-1713942707820.png" /></span></P><H2 id="toc-hId--578718560"><SPAN>Conclusion</SPAN></H2><P>The API catalog of SAP API Management serves as a centralized listing for APIs managed across distributed and private-cloud API Gateways. The blog demonstrates how to seamlessly list “externally managed” APIs from various sources, enhancing them to conform to organizational security and compliance standards, and providing a consistent URL schema for all APIs.</P><P>The integration of APIs from SAP API Management with those from other gateways or repositories allows for the creation of intricate, distributed application architectures while preserving the vital role of a centralized API catalog.</P><P>&nbsp;</P><H2 id="toc-hId--775232065">Contacts</H2><P><A href="mailto:soumen@sap.com" target="_blank" rel="noopener nofollow noreferrer">soumen.gosh@sap.com</A>, <A href="mailto:chaim@sap.com" target="_blank" rel="noopener nofollow noreferrer">chaim.bendelac@sap.com,&nbsp;</A><A href="mailto:martin@microsoft.com" target="_blank" rel="noopener nofollow noreferrer">mapankra@microsoft.com</A></P> 2024-04-25T17:02:14.909000+02:00 https://community.sap.com/t5/technology-blogs-by-members/govern-sap-apis-living-in-various-api-management-gateways-in-a-single-place/ba-p/13682483 Govern SAP APIs living in various API Management gateways in a single place with Azure API Center 2024-04-26T12:33:48.591000+02:00 Martin-Pankraz https://community.sap.com/t5/user/viewprofilepage/user-id/143781 <TABLE border="1" width="100%"><TBODY><TR><TD width="100%"><P><EM>Find the GitHub repos associated with this post on Azure API Center </EM><SPAN><A href="https://github.com/Azure-Samples/azd-apic-sap/" target="_blank" rel="noopener nofollow noreferrer"><EM>here</EM></A></SPAN><EM>.</EM></P><P><EM><SPAN>Our engineering friends from SAP Integration Suite– in particular <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/194397">@Chaim_Bendelac</a>&nbsp; – published a nice “sister blog” on supporting Azure API Management with the API Management capability of SAP Integration Suite </SPAN></EM><SPAN><A href="https://community.sap.com/t5/technology-blogs-by-sap/supporting-multiple-api-gateways-with-sap-api-management-using-azure-api/ba-p/13680433" target="_blank"><EM>here</EM></A><EM>.</EM></SPAN></P></TD></TR></TBODY></TABLE><P><SPAN>Dear community,</SPAN></P><P><SPAN>Many of you are heavily invested in APIs regarding your SAP ecosystem and the rest of your IT real estate. Given the integration specialization in the SAP space companies decide to use more than one integration tool to cater for SAP and non-SAP integrations. <A href="https://www.gartner.com/en/documents/3968032" target="_blank" rel="noopener nofollow noreferrer">Gartner</A> even says that 75% will use at least two different ones. For many of you that means SAP Integration Suite plus one for non-SAP.</SPAN></P><P><SPAN>Due to the fast-paced growth of APIs within organizations, inventory, governance, security, and management cannot keep up. The resulting fragmentation and inconsistency lead to adoption challenges, project delays, and security risks. Postman’s <A href="https://www.postman.com/state-of-api/executing-on-apis/#frequency-of-api-security-incidents" target="_blank" rel="noopener nofollow noreferrer">State of APIs report 2023</A> shows that API security incidents happen frequently.</SPAN></P><P><SPAN>These challenges are summed up under the term “API Sprawl” by the industry. Beware the API sprawl monster is upon you!</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="fig.1 Illustration of API Sprawl challenge" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/101890i296B6772C9A5260E/image-size/medium?v=v2&amp;px=400" role="button" title="_34e58609-ed75-4d35-b822-969302c0ed9c.jpg" alt="fig.1 Illustration of API Sprawl challenge" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">fig.1 Illustration of API Sprawl challenge</span></span></SPAN></P><P><STRONG>Key to survival is automatic discovery</STRONG><SPAN> of available APIs and a single place to enforce guidelines from, or at least know these unmanaged APIs exist in your estate. Forgotten APIs are low hanging fruit for attackers. To drive home that argument: “Improper Inventory Management” made the <A href="https://owasp.org/API-Security/editions/2023/en/0xa9-improper-inventory-management/" target="_blank" rel="noopener nofollow noreferrer">OWASP top 10 list for API Security</A> in 2023.</SPAN></P><P><SPAN>Besides that on the human side of things: Which developer likes to develop duplicate functionality just because of the lack of shared API inventory to discover existing stuff?</SPAN></P><P><SPAN>The API Sprawl monster</SPAN>🦖<SPAN> much hungry! “Nomnom nomnom more food, yes more food!”.</SPAN></P><P><SPAN>Azure API Center embarked on the journey of taming the monster.</SPAN></P><P>&nbsp;</P><H1 id="toc-hId-864366498">What API solutions can be registered to Azure API Center?</H1><P><SPAN>Azure API Center applies to any API and any API management solution out there. Always remember that API Center is not an API Gateway! It doesn’t expose the endpoints or apply policies to them. That stays with the API Management provider. API Center makes them discoverable and allows decorating APIs with additional info to improve governance.</SPAN></P><P><SPAN>Let that sink in.</SPAN></P><P><SPAN>My colleagues are building integrated experiences for the most interesting API and integration tool providers. However, API-based registration in API Center will always be possible.</SPAN></P><P><SPAN>Get it? APIs to register APIs to register APIs ... yah maybe to complicated for a joke.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="fig.2 Azure API Center solution coverage overview" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/101888i27D6FD5DB73C6530/image-size/large?v=v2&amp;px=999" role="button" title="apic-overview.png" alt="fig.2 Azure API Center solution coverage overview" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">fig.2 Azure API Center solution coverage overview</span></span></SPAN></P><P><SPAN>The focus of this blog post will be on inventorying APIs hosted by the API Management capability of SAP Integration Suite to mitigate SAP API sprawl. However, the approach described is applicable to all the other SAP APIs out there hosted on SAP Gateway, SAP Graph, SAP CAP, SAP RAP, CloudFoundry, Kyma, etc. too.</SPAN></P><P><SPAN>Another prominent SAP service would be SAP Cloud Integration (formerly CPI – Cloud Platform Integration). Many of you expose APIs internally or to business partners through SAP integration flows without fronting them with an API Management solution – you know who you are </SPAN><span class="lia-unicode-emoji" title=":winking_face:">😉</span><SPAN>.</SPAN><SPAN> Those can be registered too. Unfortunately, there is no built-in option to retrieve the definition of such an endpoint. You may generate an API definition for your http trigger using payload samples for instance. I found <A href="https://gist.github.com/0xdevalias/5fecf0db3bd9cc7465e42616061e1ab0" target="_blank" rel="noopener nofollow noreferrer">this repo</A> useful to get an overview on how to generate OpenAPI definitions from JSON payloads.</SPAN></P><P><SPAN>Even if you don’t, putting the available metadata on the Azure API Center inventory still improves discoverability and enterprise-wide governance by magnitudes.</SPAN></P><P>But now on to SAP API Management.</P><P>&nbsp;</P><H1 id="toc-hId-667852993">Automagically registering SAP API Management APIs on Azure API Center</H1><P>Our starting point is the SAP BTP service <STRONG>apimanagement-devportal</STRONG>. Check SAP’s docs on the setup process <SPAN><A href="https://help.sap.com/docs/integration-suite/sap-integration-suite/api-access-plan-for-api-business-hub-enterprise" target="_blank" rel="noopener noreferrer">here</A>. Make sure you don’t mistakenly choose apimanagement-apiportal.</SPAN></P><P>The API “<SPAN><A href="https://api.sap.com/api/DevPortal_DiscoveryService_CF/resource/APIs" target="_blank" rel="noopener noreferrer">API Business Hub Enterprise - Discovery Service (CF)</A>” enables querying all available APIs hosted on SAP API Management on that subaccount. It holds info about their OpenAPI definitions.</SPAN></P><P><SPAN>Authenticate on the service with any of the <A href="https://help.sap.com/docs/sap-api-management/sap-api-management/api-access-plan-for-api-business-hub-enterprise?version=Cloud#create-a-service-key" target="_blank" rel="noopener noreferrer">supported authentication mechanisms</A>. I chose OAuth2 client credentials grant (instance secret – without payload).</SPAN></P><P><SPAN>See below response from “/apidiscovery/v1/apis” from my SAP BTP sandbox environment. Pay attention to the attributes of “apiDefinitions” and values for “oas-json”.</SPAN></P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-json"><code>{ "@odata.context": "$metadata#apis", "value": [ { "name": "GWSAMPLE_BASIC", "title": "GWSAMPLE_BASIC", "version": "1", "lastUpdated": "2024-01-24", "releaseStatus": "PUBLIC", "protocol": "ODATAV2", "entryPoints": [ { "name": "GWSAMPLE_BASIC", "type": "PROD", "url": "https://msftapim.test.apimanagement.eu10.hana.ondemand.com:443/GWSAMPLE_BASIC" } ], "apiDefinitions": [ { "type": "oas-json", "url": "https://eu10devportal.cfapps.eu10.hana.ondemand.com/odata/1.0/data.svc/APIMgmt.APIResourceDocumentations('2797A5F5-E18A-4FCC-826A-C833845303F5')/content/$value" }, { "type": "edmx", "url": "https://msftapim.test.apimanagement.eu10.hana.ondemand.com:443/GWSAMPLE_BASIC/$metadata" } ] }</code></pre><P>&nbsp;</P><P>&nbsp;</P><P><SPAN>For your convenience we have provided a <A href="https://github.com/Azure-Samples/azd-apic-sap/" target="_blank" rel="noopener nofollow noreferrer">sample repo</A> that runs Infrastructure-as-Code scripting to register the SAP APIs using their OpenAPI definitions as highlighted above. On each SAP API definition we execute registration requests on Azure API Center.</SPAN></P><P><SPAN>You may also use Postman, or SAP Build Process Automation etc. to execute the REST API calls if you prefer. Find our collection <A href="https://github.com/Azure-Samples/azd-apic-sap/blob/main/sap-apim-scan.http" target="_blank" rel="noopener nofollow noreferrer">here</A>.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="fig.3 Flow of automated API registration in Azure API Center" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/101894i6B0E80481BFFF330/image-size/large?v=v2&amp;px=999" role="button" title="apic-register-flow.png" alt="fig.3 Flow of automated API registration in Azure API Center" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">fig.3 Flow of automated API registration in Azure API Center</span></span></SPAN></P><H1 id="toc-hId-471339488">Discover all your APIs where you code – see VS Code and GitHub Copilot in action</H1><P><SPAN>We developers like to stay within our flow. So, having the API inventory available at my fingertips in VSCode is a good step into that direction. Also generating http requests to poke around the service and API clients is nice </SPAN><span class="lia-unicode-emoji" title=":smiling_face_with_sunglasses:">😎</span><SPAN><A href="https://github.com/microsoft/kiota" target="_blank" rel="noopener nofollow noreferrer">Kiota</A></SPAN> supports a multitude of languages for SDK generation.</P><P><SPAN>To get that going install the <A href="https://learn.microsoft.com/azure/api-center/use-vscode-extension" target="_blank" rel="noopener nofollow noreferrer">Azure API Center portal VSCode extension</A>.</SPAN></P><P><SPAN><div class="video-embed-center video-embed"><iframe class="embedly-embed" src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F62X0NALedCc%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D62X0NALedCc&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F62X0NALedCc%2Fhqdefault.jpg&amp;key=b0d40caa4f094c68be7c29880b16f56e&amp;type=text%2Fhtml&amp;schema=youtube" width="400" height="225" scrolling="no" title="Introducing the VS Code extension for Azure API Center" frameborder="0" allow="autoplay; fullscreen; encrypted-media; picture-in-picture;" allowfullscreen="true"></iframe></div></SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="fig.4 Screenshot of VSCode extension with example OpenAPI definition" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/101895i0F90ED42F7A3F97B/image-size/large?v=v2&amp;px=999" role="button" title="apic-vsc-ext.png" alt="fig.4 Screenshot of VSCode extension with example OpenAPI definition" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">fig.4 Screenshot of VSCode extension with example OpenAPI definition</span></span></SPAN></P><P><SPAN>Please note that the authorize button (and respective authentication scheme) on the OpenAPI definition explorer is only available if present on the definition file. It looks like this for Basic Auth:</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="fig.5 Screenshot of auth definition in example OpenAPI spec for SAP OData service" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/101896i185F2B5F860C6AF7/image-size/medium?v=v2&amp;px=400" role="button" title="apic-vsc-ext1.png" alt="fig.5 Screenshot of auth definition in example OpenAPI spec for SAP OData service" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">fig.5 Screenshot of auth definition in example OpenAPI spec for SAP OData service</span></span></SPAN></P><P>W<SPAN>hen using the http file and the <A href="https://marketplace.visualstudio.com/items?itemName=humao.rest-client" target="_blank" rel="noopener nofollow noreferrer">REST client extension</A> of your choice, you may simply provide the authentication header with Bearer token etc.</SPAN></P><P><SPAN>Next to the Azure API Center extension view before, you can also use <A href="https://learn.microsoft.com/azure/api-center/use-vscode-extension-copilot" target="_blank" rel="noopener nofollow noreferrer">GitHub Copilot Chat</A> to query available APIs from API Center. See <A href="https://learn.microsoft.com/azure/api-center/use-vscode-extension-copilot#search-for-apis-using-github-copilot-chat" target="_blank" rel="noopener nofollow noreferrer">Microsoft Learn</A> for more samples. You may search for APIs by key words like so:</SPAN></P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-bash"><code>@apicenter /search business-partner</code></pre><P>&nbsp;</P><P>&nbsp;</P><P><SPAN>Cherry on the cake </SPAN><span class="lia-unicode-emoji" title=":shortcake:">🍰</span>is the <SPAN><A href="https://learn.microsoft.com/azure/api-center/enable-api-center-portal" target="_blank" rel="noopener nofollow noreferrer">API Center portal</A></SPAN> for the classic developer portal experience across your whole registered API inventory wherever that is.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="fig.6 Screenshot of Azure API Center portal API inventory view" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/101898iFEE25F515A582F66/image-size/large?v=v2&amp;px=999" role="button" title="apic-portal.png" alt="fig.6 Screenshot of Azure API Center portal API inventory view" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">fig.6 Screenshot of Azure API Center portal API inventory view</span></span></P><P><SPAN>So far so good on registering APIs and working off the info their definitions provide. But how about governance? I know how desperately everyone wants to plaster cost centers, line-of-business info, and security labels on your interfaces. </SPAN><span class="lia-unicode-emoji" title=":smirking_face:">😏</span></P><P>&nbsp;</P><H1 id="toc-hId-274825983">Enforced API metadata is your second line of defense against API sprawl</H1><P><SPAN>In addition to simply registering APIs you may add custom properties to the object on Azure API Center. So, even if the info is not present on the API itself you can still govern it from Azure. See below sample that I created from the <A href="https://learn.microsoft.com/azure/api-center/add-metadata-properties" target="_blank" rel="noopener nofollow noreferrer">Microsoft Learn tutorial</A>.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="fig.7 Screenshot of Azure API Center metadata maintenance view" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/101899i08A674038B335754/image-size/large?v=v2&amp;px=999" role="button" title="apic-custom-props.png" alt="fig.7 Screenshot of Azure API Center metadata maintenance view" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">fig.7 Screenshot of Azure API Center metadata maintenance view</span></span></P><P><SPAN>Knowing which APIs are public facing is useful, isn’t it?</SPAN></P><P><SPAN>For everyone looking for more sophisticated security with less human error surface, have a look at <A href="https://learn.microsoft.com/azure/defender-for-cloud/defender-for-apis-introduction" target="_blank" rel="noopener nofollow noreferrer">Defender for APIs</A>. I like the alert rule for “un-authenticated APIs” and disabling endpoints that were not used in the past 60 days most – wait what? Those exist out there in the wild west of SAP on the Internet? </SPAN><span class="lia-unicode-emoji" title=":astonished_face:">😲</span>See the open-source automatic remediations repos <SPAN><A href="https://github.com/Azure/Microsoft-Defender-for-Cloud/tree/main/Workflow%20automation/Defender%20for%20API" target="_blank" rel="noopener nofollow noreferrer">here</A></SPAN> to mitigate for Azure API Management.</P><P>Defender for API integration with <SPAN><A href="https://learn.microsoft.com/azure/defender-for-cloud/onboarding-guide-42crunch" target="_blank" rel="noopener nofollow noreferrer">42Crunch</A></SPAN> brings API security testing and hardening to your CI/CD pipeline.</P><P>&nbsp;</P><H1 id="toc-hId-78312478">API Linting gets you to the next level</H1><P><SPAN>OK, now let’s look at API style guide compliance. Is everyone playing by your rules? How do you make sure developers notice violations already during design phase rather than at later stages of deployment, release, or even months after the fact when audited?</SPAN></P><P><SPAN>Good automatic <A href="https://thenewstack.io/improve-the-quality-of-your-apis-with-spectral-linting/" target="_blank" rel="noopener nofollow noreferrer">API linting</A> creates much less hassle for everyone in the long run, less cost to fix API definitions after the fact, improved security posture, and a more rewarding experience for the people involved. See below video on the setup of the linting function for OpenAPI using <A href="https://github.com/stoplightio/spectral/blob/develop/docs/reference/openapi-rules.md" target="_blank" rel="noopener nofollow noreferrer">Spectral linting engine</A>.</SPAN></P><P><SPAN>Anyone aware of a great OData linter and would be curious to explore? Please share!</SPAN></P><P><div class="video-embed-center video-embed"><iframe class="embedly-embed" src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fm0XATQaVhxA%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dm0XATQaVhxA&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fm0XATQaVhxA%2Fhqdefault.jpg&amp;key=fad07bfa4bd747d3bdea27e17b533c0e&amp;type=text%2Fhtml&amp;schema=youtube" width="400" height="225" scrolling="no" title="Mastering API Governance with Azure API Center" frameborder="0" allow="autoplay; fullscreen; encrypted-media; picture-in-picture;" allowfullscreen="true"></iframe></div></P><P><SPAN>Get more details on API Linting for Azure API Center from <A href="https://learn.microsoft.com/azure/api-center/enable-api-analysis-linting?tabs=portal" target="_blank" rel="noopener nofollow noreferrer">this Microsoft Learn article</A>.</SPAN></P><P>&nbsp;</P><H1 id="toc-hId--118201027">Thoughts on production readiness</H1><P><SPAN>Azure API Center is in public preview but due for General Availability with the next wave of announcements, so completely ready for prime time. The same is true for the VS Code extensions and APIs used to orchestrate the integration between SAP API Management and Azure.</SPAN></P><P><SPAN>Intentionally registering APIs from SAP to Azure API Center improves API inventory management by magnitudes. However, shadow inventory thrives in places you don’t actively look. To mitigate even more effectively the team is building automated discovery from your GitHub org, Azure DevOps, and other popular sources.</SPAN></P><P><SPAN><A href="https://marketplace.visualstudio.com/items?itemName=SAPSE.sap-ux-fiori-tools-extension-pack" target="_blank" rel="noopener nofollow noreferrer">SAP Fiori tools</A> on VSCode provided by SAP SE enable usage of the approach described in this blog out of the box. The same is true for <A href="https://developers.sap.com/tutorials/btp-app-prepare-dev-environment-cap.html" target="_blank" rel="noopener noreferrer">SAP CAP development</A> in VSCode.</SPAN></P><P>&nbsp;</P><H1 id="toc-hId--314714532">Final words</H1><P><SPAN>That’s a wrap</SPAN><span class="lia-unicode-emoji" title=":burrito:">🌯</span>. You saw today how you can effectively <STRONG>counter API sprawl</STRONG> and its negative side effects that put your APIs and organizations at risk. A primary means to achieve that is <STRONG>creating a central API inventory </STRONG>hosted on all the different API Management solutions out there <STRONG>with Azure API Center</STRONG>.</P><P>This blog showed how to achieve that using the API Management capability of SAP Integration Suite as an example.</P><P>Furthermore, you learned about steps to improve API governance with custom properties and API linting. Eventually, you understood the difference between Azure API Center and an API Gateway.</P><P>Find the GitHub repos associated with this post <SPAN><A href="https://github.com/Azure-Samples/azd-apic-sap/" target="_blank" rel="noopener nofollow noreferrer">here</A></SPAN>. It gets you started in no time.</P><P>Big #Kudos to <SPAN><A href="https://www.linkedin.com/in/pascalvdheiden/" target="_blank" rel="noopener nofollow noreferrer">Pascal van der Heiden</A></SPAN> – my brother in crime on this effort. And of course, last but not least to&nbsp;<a href="https://community.sap.com/t5/user/viewprofilepage/user-id/8446">@UdoPaltzer</a>&nbsp;and <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/216068">@vinayak_adkoli</a>&nbsp;for the great collaboration! <span class="lia-unicode-emoji" title=":raising_hands:">🙌</span></P><P>Anyone curious to tap their toe into the waters where the API sprawl monster 🦖 lives, just reach out to me and Chaim or leave a comment.</P><P>Cheers</P><P>Martin</P> 2024-04-26T12:33:48.591000+02:00 https://community.sap.com/t5/technology-blogs-by-sap/api-management-unlocking-oauth-strategies/ba-p/13682686 API Management: Unlocking OAuth Strategies 2024-04-30T15:30:43.947000+02:00 Avinash_Vaidya https://community.sap.com/t5/user/viewprofilepage/user-id/120687 <H2 id="toc-hId-993451142">Introduction</H2><P><SPAN>In today's rapidly evolving enterprise landscape, the API-first approach has emerged as a cornerstone for organizations striving to stay competitive and relevant. At the heart of this approach lies API management, a central place for the orchestration, optimization, and security of APIs.</SPAN></P><P><SPAN>In this blog, I will elaborate the authorization considerations surrounding APIs, as well as the OAuth strategies I've investigated and encountered during my learning journey and professional experience.</SPAN></P><P>If you are new to API management I highly recommend going through the help doc to get basic knowledge of <A href="https://help.sap.com/docs/integration-suite/sap-integration-suite/api-management-capability" target="_self" rel="noopener noreferrer">API management</A> capability before diving into this blog.</P><P>Through out the blog, I have added links to some learning journeys / blogs which you can refer. I thought this is better instead of rewriting the same content which is already well written.</P><P><SPAN>I will structure the blog in below sections</SPAN></P><OL><LI><SPAN>Pre-requisites</SPAN></LI><LI><SPAN>Creating a simple integration flow</SPAN></LI><LI><SPAN>Securing integration flows</SPAN><OL><LI>Exploring API Management OAuth Policy</LI><LI>Extending OAuth Beyond API Management</LI></OL></LI><LI>Testing steps to test both solution approaches.</LI><LI>Conclusion</LI></OL><H3 id="toc-hId-926020356">Pre-requisites</H3><OL><LI>SAP BTP account or trail account</LI><LI>Integration Suite Tenant with below capabilities<OL><LI>Cloud Integration</LI><LI>API Management (ensure you have proper roles assigned)</LI></OL></LI><LI>Process Integration Runtime service</LI><LI>Insomnia or Postman client</LI></OL><H3 id="toc-hId-729506851"><SPAN>Creating simple integration flow</SPAN></H3><P><SPAN>I created a simple integration flow and deployed it as a REST API in the cloud integration tenant. This integration flow does following things</SPAN></P><P><SPAN>1. Logs the incoming message as attachment</SPAN></P><P><SPAN>2. Persists the message in JMS queue</SPAN></P><P><SPAN>Note - This is the basic integration flow. Consider it as a mock iflow which can be replaced by any other iflow based on the business use case.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Figure-1: Integration Flow" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/101983iC831FA2AFB7589BD/image-size/large?v=v2&amp;px=999" role="button" title="Screenshot 2024-04-25 at 13.49.55.png" alt="Figure-1: Integration Flow" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure-1: Integration Flow</span></span></P><H3 id="toc-hId-532993346"><SPAN>Securing integration flows&nbsp;</SPAN></H3><P><SPAN>In an enterprise landscape, you will always come across situations, that you have to expose your integration flows using API management. Ofcourse Integration suite provides API management capability which can seamlessly wrap the integration flows and create an API proxy.</SPAN></P><P><SPAN>One of the important question always comes up - How to secure your APIs/iflows? The obvious answer is OAuth 2.0 (Open Authorization 2.0)</SPAN><SPAN>.</SPAN></P><P><SPAN>Here I will showcase, 2 solution approaches to secure the API with OAuth 2.0.&nbsp;</SPAN></P><OL><LI><STRONG>Exploring API Management OAuth Policy: </STRONG>API Management provides security policies which can be used out of the box.<OL><LI>Create an API Proxy. Configure -- APIs -- <EM>OAuthService. </EM>This Service will be used to generate the token. Follow Step 1 (<STRONG>1 -&nbsp;Create the Token Endpoint</STRONG>) from this <A href="https://community.sap.com/t5/technology-blogs-by-sap/oauth-with-sap-api-management-hcp-part-1/ba-p/13308651" target="_self">blog</A></LI><LI>Create another API - LogMessageAPI as a proxy to the iflow. We will add token validation in this proxy.&nbsp;Define the API by referring the <A href="https://developers.sap.com/tutorials/cp-starter-isuite-api-management.html#e0dd55ad-6cc8-444e-ac59-18186bdae5c9" target="_self" rel="noopener noreferrer">Step 2: Define the API</A> from this learning journey.</LI><LI>In the LogMessageAPI:<BR /><OL><LI><SPAN><SPAN><SPAN><SPAN><SPAN>Add policy template to the LogMessageAPI as mentioned in Step 3, 4 and 5 of this <A href="https://developers.sap.com/tutorials/cp-starter-isuite-api-management.html#a363dcee-8544-44ca-b43b-cda9b363a9e3" target="_self" rel="noopener noreferrer">learning journey</A></SPAN></SPAN></SPAN></SPAN></SPAN></LI><LI><SPAN><SPAN><SPAN><SPAN><SPAN>Add VerifyAccessToken&nbsp;policy as the first policy in the pre-flow of the&nbsp;ProxyEndpoint using OAuthV2 in the LogMessageAPI proxy.</SPAN></SPAN></SPAN></SPAN></SPAN> <TABLE border="1" width="100%"><TBODY><TR><TD width="100%"><PRE>&lt;OAuthV2 async="false" continueOnError="false" enabled="true" xmlns="http://www.sap.com/apimgmt"&gt; &lt;!-- this flag has to be set when you want to work with third-party access tokens --&gt; &lt;ExternalAuthorization&gt;false&lt;/ExternalAuthorization&gt; &lt;!-- valid values are GenerateAccessToken, GenerateAccessTokenImplicitGrant, GenerateAuthorizationCode , RefreshAccessToken , VerifyAccessToken , InvalidateToken , ValidateToken --&gt; &lt;Operation&gt;VerifyAccessToken&lt;/Operation&gt; &lt;GenerateResponse enabled="true"/&gt;&lt;SupportedGrantTypes/&gt; &lt;Tokens/&gt; &lt;/OAuthV2&gt;</PRE></TD></TR></TBODY></TABLE></LI></OL></LI><LI>Once you deploy the OAuthService and LogMessageAPI and publish the product to <STRONG>API Business Hub Enterprise,&nbsp;</STRONG>you will get the application key and application secret which can be used as client id and client secret to get the token.</LI><LI>In this way, you can use the inbuilt OAuth policy to generate the OAuth token and to validate the token for other API proxies.</LI></OL></LI><LI><STRONG>Extending</STRONG><SPAN>&nbsp;</SPAN><STRONG>OAuth Beyond API Management:&nbsp;</STRONG>Let us dive deeper into another approach where we can use the process integration runtime OAuth server to generate the token through OAuthService API.&nbsp;<OL><LI>Create an API Proxy. Configure -- APIs -- <EM>OAuthService.</EM></LI><LI>Import the policy template in the&nbsp;pre-flow of the&nbsp;ProxyEndpoint. I have exported my policy template and is available in GitHub -&nbsp;<A href="https://github.com/avinashvaidya09/apimanagementpolicytemplate" target="_blank" rel="noopener nofollow noreferrer">https://github.com/avinashvaidya09/apimanagementpolicytemplate</A>&nbsp;</LI><LI>Each policy is listed and briefly described below -&nbsp;<OL><LI><STRONG>lookupOAuthToken</STRONG> - Using LookupCache policy, checks if access token is available in cache.</LI><LI><STRONG>extractRequestHeader</STRONG> - Using ExtractVariables policy, extracts the client id and client secret from the request headers.</LI><LI><STRONG>getBTPOAuthMetadata</STRONG> - Using KeyValueMapOperations policy, finds the BTP oauth token url saved in the key value map</LI><LI><STRONG>setAuthorization</STRONG> - Using BasicAuthentication policy, creates Authorization object.</LI><LI><STRONG>callBTPOAuthService</STRONG> - Using ServiceCallout policy, calls external BTP OAuth token url.</LI><LI><STRONG>raiseException</STRONG> - Using raiseException policy, raises exception if BTP OAuth token url returns exception.</LI><LI><STRONG>extractVariablesFromOAuthResponse</STRONG> - Using ExtractVariables policy, extracts token response.</LI><LI><STRONG>populateOAuthToken</STRONG> - Using PopulateCache policy, populates access token in cache which will be used by point 1.</LI></OL></LI><LI>Go to your BTP subaccount -- Create instance of Process Integration Runtime.</LI><LI>Create a service key and get the OAuth metadata<OL><LI>client id</LI><LI>client secret</LI><LI>token url</LI></OL></LI><LI>Add the token url in the key value map in API configuration to make it externalized. This token url will be used in the service call out policy - <STRONG>callBTPOAuthService</STRONG></LI><LI>Save and and deploy the OAuthService.</LI><LI>Ensure the integration flow is deployed. Get the endpoint URL.</LI><LI>Create another API - LogMessageAPI as a proxy to the iflow.&nbsp;Define the API by referring the <A href="https://developers.sap.com/tutorials/cp-starter-isuite-api-management.html#e0dd55ad-6cc8-444e-ac59-18186bdae5c9" target="_self" rel="noopener noreferrer">Step 2: Define the API</A> from this learning journey.</LI><LI>In this API, you do not have to define any access token validation policy, but the bearer token will be forwarded to the integration flow and will be validated directly by process integration runtime.</LI></OL></LI></OL><H3 id="toc-hId-336479841"><SPAN>Test your APIs</SPAN></H3><UL class="lia-list-style-type-square"><LI><SPAN>Download any REST client like - Insomnia or Postman.</SPAN></LI><LI><SPAN>Deploy the API proxies and get the endpoints</SPAN></LI></UL><OL><LI><STRONG>Testing approach - 1:</STRONG><BR /><OL><LI><SPAN>Go to&nbsp;<STRONG>API Business Hub Enterprise.&nbsp;</STRONG>Create Application and add the product containing both the API proxies.</SPAN></LI><LI><SPAN>Get the application secret and application key after the application is created.</SPAN></LI><LI><SPAN>Create new HTTP request for API proxy&nbsp;OAuthService endpoint.</SPAN></LI><LI><SPAN>Add client id - client id will be the application key from point 2.</SPAN></LI><LI><SPAN>Add client secret -&nbsp;client secret will be the application secret from point 2.&nbsp;</SPAN></LI><LI>Add grant type - client_credentials</LI><LI>Add Content-Type -&nbsp;application/x-www-form-urlencoded</LI><LI>Get the access token.</LI><LI><SPAN>Create new HTTP request with API management LogMessageAPI endpoint.&nbsp;</SPAN><OL><LI><SPAN>Add access token</SPAN></LI><LI><SPAN>Add sample JSON payload</SPAN></LI></OL></LI><LI><SPAN>Execute the request.</SPAN></LI><LI><SPAN>Go to integration suite - Monitor - Integration &amp; APIs. You should see a message in the queue. Click on the message id and you will land on the executed iflow with payload attached for reference.</SPAN></LI></OL></LI><LI><STRONG>Testing approach - 2:</STRONG><OL><LI><SPAN>Create new HTTP request with API management OAuthService endpoint.</SPAN></LI><LI><SPAN>Add client id - client id from process integration runtime service key.</SPAN></LI><LI><SPAN>Add client secret -&nbsp;client secret from process integration runtime service key.</SPAN></LI><LI><SPAN>Content-Type - application/x-www-form-urlencoded</SPAN></LI><LI><SPAN>Get the access token</SPAN></LI><LI><SPAN>Create new HTTP request with API management LogMessageAPI endpoint.&nbsp;</SPAN><OL><LI><SPAN>Add access token</SPAN></LI><LI><SPAN>Add sample JSON payload</SPAN></LI></OL></LI><LI><SPAN>Execute the request.</SPAN></LI><LI><SPAN>Go to integration suite - Monitor - Integration &amp; APIs - Message Queues. You should see a messages in the queue. Click on the message id and you will land on the executed iflow with payload attached for reference.</SPAN></LI></OL></LI></OL><H3 id="toc-hId-139966336"><SPAN>Conclusion</SPAN></H3><P><SPAN>Drawing from my experience, I must emphasize that these insights can serve as a starting point, though their applicability may vary based on specific scenarios.</SPAN></P><P><SPAN>This is just a glimpse of wide set of capabilities offered by SAP Integration Suite and API management. Stay curious! Keep learning!</SPAN></P><P><SPAN>To get more updates about this topic, please follow the below pages<BR /></SPAN></P><UL><LI><A href="https://help.sap.com/docs/integration-suite?locale=en-US" target="_blank" rel="noopener noreferrer">SAP Integration Suite</A></LI><LI><A href="https://help.sap.com/docs/integration-suite/sap-integration-suite/api-management-capability?q=API%20Management" target="_self" rel="noopener noreferrer">API Management</A></LI><LI><A href="https://community.sap.com/t5/c-khhcw49343/SAP+Integration+Suite/pd-p/73554900100800003241" target="_self">Blogs</A></LI></UL><P><STRONG>Feel free to “<EM>like</EM>“, “<EM>Share</EM>“, “<EM>Add a Comment</EM>” and to get more updates about my next blogs follow me –&nbsp;<SPAN class=""><A href="mailto:avinash.vaidya@sap.com" target="_blank" rel="noopener nofollow noreferrer">avinash.vaidya@sap.com</A>&nbsp;</SPAN></STRONG></P> 2024-04-30T15:30:43.947000+02:00 https://community.sap.com/t5/crm-and-cx-blogs-by-sap/sap-emarsys-customer-engagement-enhanced-lead-integration-to-sap-sales/ba-p/13605107 SAP Emarsys Customer Engagement - Enhanced Lead Integration to SAP Sales Cloud Version 1 2024-05-03T07:46:16.745000+02:00 philipp_eicker https://community.sap.com/t5/user/viewprofilepage/user-id/228091 <H1 id="toc-hId-857064576">Table of Contents</H1><UL><LI>Introduction</LI><LI>Background Information<BR /><UL><LI>Setup Steps in SAP Emarsys Customer Engagement<UL><LI>Create the Webhook Node Preset</LI><LI>Create the Automation Program</LI></UL></LI></UL></LI><LI>Integration Process<UL><LI>SAP Integration Suite<UL><LI>Purpose</LI><LI>Integration Flow</LI></UL></LI><LI>Connectivity Setup between Emarsys &amp; SAP Integration Suite<BR /><UL><LI>Endpoint URL</LI><LI>Authentication</LI></UL></LI></UL></LI><LI>Conclusion</LI></UL><P>&nbsp;</P><H1 id="toc-hId-660551071">Introduction</H1><P>The handover of marketing qualified leads to sales plays a crucial role in the marketing-driven lead process. It ensures that the sales team receives high-quality leads, which in turn improves sales efficiency and promotes collaboration between the marketing and sales departments.</P><P>This blog post describes how to built an integration between <STRONG>SAP Emarsys Customer Engagement</STRONG> (SAP Emarsys) and <STRONG>SAP Sales Cloud Version 1</STRONG>, leveraging the SAP Cloud Integration service included in <STRONG>SAP Integration Suite</STRONG>. This integration enables the <STRONG>creation of leads in SAP Sales Cloud with a broader range of information</STRONG>, exceeding the scope covered by the out-of-the box function.</P><P><STRONG>Note:</STRONG>&nbsp;The&nbsp;<A href="https://help.sap.com/docs/SAP_EMARSYS_ACCOUNT_ENGAGEMENT" target="_self" rel="noopener noreferrer">SAP Emarsys Account Engagement</A> (SAP Account Engagement) add-on enhances SAP Emarsys with B2B capabilities to run end-to-end processes being seamlessly integrated with SAP Sales Cloud. Our official SAP Account Engagement documentation highlights the <STRONG>out-of-the-box functionality</STRONG> of the SAP Emarsys Webhook which allows to&nbsp;<A title="create leads directly in SAP Sales Cloud" href="https://help.sap.com/docs/SAP_EMARSYS_ACCOUNT_ENGAGEMENT/821ff60590eb42b4adbe7df31a222488/01faf5b5e33c47cba5d31037776bbdd3.html" target="_blank" rel="noopener noreferrer">create leads directly in SAP Sales Cloud</A>. Creating leads directly in SAP Sales Cloud is <STRONG>limited to using a subset of fields represented in a flat structure</STRONG>.</P><P>The content described in this blog is custom-built and not part of any SAP pre-packaged integration. It can be used as a template for building a custom integration with SAP Emarsys Customer Engagement and SAP Sales Cloud Version 1. SAP Integration Suite is used for the message transformation for API-based data imports to SAP Sales Cloud Version 1.</P><P><STRONG>Example</STRONG><STRONG>:&nbsp;</STRONG></P><P>Let's assume we are organizing a trade fair for which contacts can register online on an external landing page. Part of this registration form is the option to indicate interest in an expert meeting at the booth. To do so, contacts are asked to enter their topic of interest and a suitable time slot into the form notes. In addition, they have the option to provide their email opt-in.</P><P>When the form is submitted, contacts that previously did not exist yet in SAP Emarsys are created using the SAP Emarsys API. The additional form notes are written to a dedicated custom field.<BR /><STRONG><BR /></STRONG>To demonstrate the technical integration, we execute the following simplified scenario: We handover newly created SAP Emarsys contacts who have submitted form notes to SAP Sales Cloud so that sales representatives can further validate the lead.&nbsp;(Note that we are intentionally simplifying at this point. In a real-life scenario, the business logic for determining when a contact is a marketing-qualified contact can of course vary.)</P><P>In the following we will take a closer look at the required setup steps.</P><P>&nbsp;</P><H1 id="toc-hId-464037566">Background Information</H1><P>To create the contacts gathered from the Web forms as leads in SAP Sales Cloud we need to use <STRONG>Webhooks as part of an SAP Emarsys Automation Program</STRONG>.</P><P>A <STRONG>Webhook</STRONG> is an event-based API endpoint responsible for triggering internal functions to look up information in real time when a specific event occurs. Webhooks are used to integrate different applications and third-party APIs, allowing for real-time communication between two applications without the need for additional coding or a complex setup. For more information, take a look at the SAP Emarsys help documentation under&nbsp;<A href="https://help.emarsys.com/hc/en-us/articles/4408457148177-Nodes-Webhook-node" target="_blank" rel="noopener nofollow noreferrer">Webhook Node</A>.</P><P>Note that the Webhook node is an advanced feature, for which you need some technical resources to integrate it into your application. It is your responsibility to make sure that the integrated service operates appropriately.</P><P>An <STRONG>Automation Program</STRONG> is a customer engagement journey that is automated and aims to lead your interaction with a customer towards a specific goal. It starts from a single entry point and can spread out to multiple branches of a decision tree until reaching an end point. For more information, take a look at the the SAP Emarsys help documentation under&nbsp;<A href="https://help.emarsys.com/hc/en-us/categories/115000594645-Automation" target="_blank" rel="noopener nofollow noreferrer">Automation.</A></P><P>&nbsp;</P><H1 id="toc-hId-267524061">Setup Steps in SAP Emarsys Customer Engagement</H1><H2 id="toc-hId-200093275">Create the Webhook Node Preset</H2><P>You first have to create a Webhook preset that can be used as input for the Webhook node in your automation program.</P><P>To do so, open the menu and choose <EM>Automation &gt; Webhook Node Presets &gt; Create Preset:</EM></P><P><EM><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Menu Path to &quot;Webhook Node Presets&quot;" style="width: 614px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/101149i24954F02DBE15C9E/image-size/large?v=v2&amp;px=999" role="button" title="Automation_Menu_Path.png" alt="Menu Path to &quot;Webhook Node Presets&quot;" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Menu Path to "Webhook Node Presets"</span></span></EM></P><H3 id="toc-hId-132662489"><STRONG>Appearance Settings</STRONG></H3><OL><LI>Define a preset name - this will help to identify the configuration preset in the Webhook node settings and will appear as the name of the node.</LI><LI>Select a node icon - this icon will appear on the node after the preset has been selected.</LI></OL><P style=" padding-left : 30px; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP Emarsys Customer Engagement | Webhook Node - Appearance Settings" style="width: 830px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/79881i5379286F89A17E64/image-size/large?v=v2&amp;px=999" role="button" title="philipp_eicker_0-1710330254000.png" alt="SAP Emarsys Customer Engagement | Webhook Node - Appearance Settings" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP Emarsys Customer Engagement | Webhook Node - Appearance Settings</span></span></P><P><STRONG>Connection Settings</STRONG></P><P>The connection settings are described as part of the <EM><STRONG>Integration Process</STRONG></EM>&nbsp;(see below).</P><P><STRONG>Data Settings</STRONG></P><P>The Webhook node can send data of the triggering event to the API endpoint, as well as values of contact data fields and additional data with static values.</P><P><EM>Event Data</EM></P><OL><LI>Select this checkbox if you would like to forward the event payload that triggers the program. In our case, we don’t need to enable the “send triggering event data” flag as we are only considering the contact data that is coming from the external landing page through the SAP Emarsys API.</LI></OL><P style=" padding-left : 30px; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP Emarsys Customer Engagement | Webhook Node - Data Settings / Event Data" style="width: 940px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/79882i529263E12F3242AF/image-size/large?v=v2&amp;px=999" role="button" title="philipp_eicker_1-1710330372083.png" alt="SAP Emarsys Customer Engagement | Webhook Node - Data Settings / Event Data" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP Emarsys Customer Engagement | Webhook Node - Data Settings / Event Data</span></span></P><P><EM>Contact Data</EM></P><OL><LI>Here you can define key-value pairs to send contact data field values. In our case, we need to define the data that should be replicated for the lead creation in SAP Sales Cloud. Besides the SAP Emarsys system fields (see <A title="Emarsys System Fields" href="https://help.emarsys.com/hc/en-us/articles/115004637665-Overview-The-Emarsys-system-fields" target="_blank" rel="noopener nofollow noreferrer">Emarsys System Fields</A>), you can also use your own custom fields (see <A title="Creating Custom Fields" href="https://help.emarsys.com/hc/en-us/articles/115004634689-End-user-guides-Creating-custom-fields" target="_blank" rel="noopener nofollow noreferrer">Creating Custom Fields</A>). In the example below, we created the 'Form Notes' as a custom field which contains additional information gathered through the registration form.<P><STRONG>Note:</STRONG> You can add maximum 20 contact fields when defining contact data key-value pairs.</P></LI><LI><STRONG>Important:</STRONG>&nbsp;You must ensure to handover the contact identifier that was initially defined for the SAP Emarsys tenant. Handing over the identifier will allow SAP Sales Cloud to update the SAP Emarsys contact at a later point in time.&nbsp;<SPAN><SPAN class="">For more details about contact matching with SAP Account Engagement, see <A href="https://help.sap.com/docs/SAP_EMARSYS_ACCOUNT_ENGAGEMENT/18984ac16eb047b1bc97ef670ba1f8ef/8ad590c921d34f8a800e20a976990108.html" target="_self" rel="noopener noreferrer">Specifying a Contact Matching Method</A>.&nbsp;</SPAN></SPAN></LI></OL><P style=" padding-left : 30px; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP Emarsys Customer Engagement |Webhook Node - Data Settings / Contact Data" style="width: 940px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/79883i87651BC942E73723/image-size/large?v=v2&amp;px=999" role="button" title="philipp_eicker_2-1710330483690.png" alt="SAP Emarsys Customer Engagement |Webhook Node - Data Settings / Contact Data" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP Emarsys Customer Engagement |Webhook Node - Data Settings / Contact Data</span></span></P><P><EM>Additional Data</EM></P><OL><LI>These fields can contain static values that are sent with the requests so that your external system can identify their source (for example, the journey or scenario the event came from) and purpose.</LI><LI>Here we are using the following data:<UL class="lia-list-style-type-lower-roman"><LI><STRONG>Name:</STRONG> No value defined - this allows the users that create the program to define the name</LI><LI><STRONG>Priority:</STRONG>&nbsp;Same values that are known in SAP Sales Cloud</LI><LI><STRONG>Origin Type:</STRONG>&nbsp;Same values that are known in SAP Sales Cloud (standard + custom fields)</LI><LI><STRONG>Qualification Level:</STRONG>&nbsp;Same values that are known in SAP Sales Cloud<span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP Emarsys Customer Engagement | Webhook Node - Data Settings / Additional Data" style="width: 940px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/79884i4C1BAC7181DCA75C/image-size/large?v=v2&amp;px=999" role="button" title="philipp_eicker_0-1710330641534.png" alt="SAP Emarsys Customer Engagement | Webhook Node - Data Settings / Additional Data" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP Emarsys Customer Engagement | Webhook Node - Data Settings / Additional Data</span></span></LI></UL></LI></OL><P><EM>Operational Data</EM></P><OL><LI>These fields are optional in the event data. You can also rename them. We recommend keeping the deduplication ID to make sure that the receiving system does not process duplicated messages. In our example, we don't map the 'ems_program_id', but it could be beneficial to map the programID where the Webhook nodes was triggered with a custom field in SAP Sales Cloud.&nbsp;</LI></OL><P style=" padding-left : 30px; "><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP Emarsys Customer Engagement | Webhook Node - Data Settings / Operational Data" style="width: 815px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/79885iBEB739EDC49842BB/image-size/large?v=v2&amp;px=999" role="button" title="philipp_eicker_1-1710330717802.png" alt="SAP Emarsys Customer Engagement | Webhook Node - Data Settings / Operational Data" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP Emarsys Customer Engagement | Webhook Node - Data Settings / Operational Data</span></span></P><H3 id="toc-hId--63851016">Create the Automation Program</H3><P>The example described above uses the transactional entry point "<A href="https://help.emarsys.com/hc/en-us/articles/115004550085-Entry-points-Transactional-entry-points#new-contact" target="_blank" rel="noopener nofollow noreferrer">New Contact</A>" to trigger the automation program. In addition to the new contact criteria, a segment filters on contacts that have submitted form notes as part of their fair trade registration.</P><P><STRONG>Note:</STRONG> There are various options to customize this process by using additional filters to make sure that only dedicated contacts are replicated. If you are using the "New Contact" entry node without any additional filter criteria, every new contact is considered. Customers using the SAP Account Engagement add-on can use the pre-built "Replicate New Marketing Contact" tactic (see&nbsp;<A href="https://help.sap.com/docs/SAP_EMARSYS_ACCOUNT_ENGAGEMENT/0137daa07bc34e0eab96718aaf3810e4/8731704fbb414824a580d49e2d8d3d15.html" target="_blank" rel="noopener noreferrer">Replicate New Marketing Contact</A>).</P><OL><LI>Create the Automation Program (Audience-focused journeys)&nbsp;<P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP Emarsys Customer Engagement | Automation Program Creation" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/101171i84B36C8708A37483/image-size/large?v=v2&amp;px=999" role="button" title="NewContactsWithFormNotes.png" alt="SAP Emarsys Customer Engagement | Automation Program Creation" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP Emarsys Customer Engagement | Automation Program Creation</span></span></P></LI><LI>Assign the Webhook Node&nbsp;<P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP Emarsys Customer Engagement | Automation Program - Webhook Node Assignment" style="width: 695px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/80668iCDF00B234012D2C7/image-size/large?v=v2&amp;px=999" role="button" title="philipp_eicker_1-1710415698867.png" alt="SAP Emarsys Customer Engagement | Automation Program - Webhook Node Assignment" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP Emarsys Customer Engagement | Automation Program - Webhook Node Assignment</span></span></P></LI><LI>Maintain 'Additional Data Settings'<P>As no value was defined for the 'Name' of the Webhook, the user creating the automation program can define the value.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP Emarsys Customer Engagement | Automation Program - Webhook Note Additional Data Settings" style="width: 620px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83622i77261F2A390C5E20/image-size/large?v=v2&amp;px=999" role="button" title="philipp_eicker_0-1710924097292.png" alt="SAP Emarsys Customer Engagement | Automation Program - Webhook Note Additional Data Settings" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP Emarsys Customer Engagement | Automation Program - Webhook Note Additional Data Settings</span></span></P></LI></OL><P>&nbsp;</P><P>In the next step we will take a look at the integration process.</P><P>&nbsp;</P><H1 id="toc-hId--518529959">Integration Process</H1><H2 id="toc-hId--585960745">SAP Integration Suite</H2><H3 id="toc-hId--653391531">Purpose</H3><P>SAP Integration Suite combines SAP Cloud Integration, API Management, Integration Advisor, Open Connectors, and other integration capabilities into a cohesive and simplified toolkit for enterprise integration.</P><P>The SAP Emarsys Webhook node only allows to pass flat structures to an API. For setting up the marketing permissions, the SAP Sales Cloud Lead-API requires sub-structures. Therefore, we use SAP Integration Suite to do this transformation.</P><H3 id="toc-hId--925136405">Integration Flow</H3><P>The integration flow was designed to make it easily transferable and adjustable. It consists of one Groovy-script step with the following functionality:</P><UL><LI>Mapping of field names and key values</LI><LI>Transformation to the required structure for the SAP Sales Cloud-Lead-API</LI><LI>Setting of the headers</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP Cloud Integration | Integration Flow" style="width: 816px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/82738iB5EA529D7028816D/image-size/large?v=v2&amp;px=999" role="button" title="philipp_eicker_0-1710834471564.png" alt="SAP Cloud Integration | Integration Flow" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP Cloud Integration | Integration Flow</span></span></P><H4 id="toc-hId--1415052917">Mapping</H4><P><SPAN>The mappings and transformations take place within the Groovy-script step. The entire code is provided at the end of this blog for reference. Within this script, the parsed JSON object from the Webhook payload is accessible via the Groovy Map '<EM>mapJson'</EM>. Field names within '<EM>mapJson'</EM> correspond to those in the Webhook within SAP Emarsys.<BR />The target structure for calling the LeadCollection OData service is included in the Groovy-Map '<EM>mapJson'</EM>.&nbsp;Here, it's crucial that the field names align precisely with those specified in the OData service definition. Upon completion of the mapping process, the '<EM>mapJson</EM>' is converted into a JSON object and incorporated into the payload body. Encapsulation of value mappings is handled within the '<EM>MapHelper</EM>' class, where static methods facilitate the mapping of field values.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP Cloud Integration | Groovy Script - Mapping" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83004i0A5AE606F03463BA/image-size/large?v=v2&amp;px=999" role="button" title="philipp_eicker_0-1710848338275.png" alt="SAP Cloud Integration | Groovy Script - Mapping" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP Cloud Integration | Groovy Script - Mapping</span></span></P><P><SPAN>To include extra mappings such as linking the SAP Emarsys field 'MyAdditionalEmarsysField' to the SAP Sales Cloud field 'MyAdditionalSalesCloudField_KUT', simply insert the following line into the code:</SPAN></P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-java"><code>mapJson.MyAdditionalSalesCloudField_KUT = inJson.MyAdditionalEmarsysField</code></pre><P>&nbsp;</P><P>&nbsp;</P><P><STRONG>Note: </STRONG>As mentioned above it is important to handover the contact identifier that was initially defined for the SAP Emarsys tenant. Handing over the identifier will allow SAP Sales Cloud to update the SAP Emarsys contact at a later point in time.&nbsp;<SPAN><SPAN class="">For more details about contact matching with SAP Account Engagement, see <A href="https://help.sap.com/docs/SAP_EMARSYS_ACCOUNT_ENGAGEMENT/18984ac16eb047b1bc97ef670ba1f8ef/8ad590c921d34f8a800e20a976990108.html" target="_self" rel="noopener noreferrer">Specifying a Contact Matching Method</A>.&nbsp;</SPAN></SPAN></P><P>In our example, we created the SAP Sales Cloud extension field 'Emarsys Contact UID' and therefore maintained the following mapping:</P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-json"><code>mapJson.EmarsysContactUID_KUT = inJson.EmarsysUID</code></pre><P>&nbsp;</P><P>&nbsp;</P><H4 id="toc-hId--1611566422">Inbound / Outbound Connectors</H4><P>For both inbound and outbound we are using the HTTP-connector (since we have a JSON payload, we cannot use the Odata adapter for calling SAP Sales Cloud).</P><P>The adapter settings are the following:</P><P><STRONG>Inbound</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP Cloud Integration | Integration Flow - Inbound Connection" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83008i555BEBDC724378AE/image-size/large?v=v2&amp;px=999" role="button" title="philipp_eicker_1-1710848401448.png" alt="SAP Cloud Integration | Integration Flow - Inbound Connection" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP Cloud Integration | Integration Flow - Inbound Connection</span></span></P><P><STRONG>Outbound</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP Cloud Integration | Integration Flow - Outbound Connection" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83009i98CE069BFA0A492A/image-size/large?v=v2&amp;px=999" role="button" title="philipp_eicker_2-1710848432691.png" alt="SAP Cloud Integration | Integration Flow - Outbound Connection" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP Cloud Integration | Integration Flow - Outbound Connection</span></span></P><H2 id="toc-hId--1221273913">Connectivity Setup between SAP Emarsys &amp; SAP Integration Suite</H2><H3 id="toc-hId--1711190425">Endpoint URL</H3><P>After deploying the integration flow, the endpoint can be copied from SAP Integration Suite/SAP Cloud Integration</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP Cloud Integration | Endpoint URL" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83010iEE0B3E248A7D1CAC/image-size/large?v=v2&amp;px=999" role="button" title="philipp_eicker_0-1710848517032.png" alt="SAP Cloud Integration | Endpoint URL" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP Cloud Integration | Endpoint URL</span></span></P><P>to the Webhook in SAP Emarsys:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP Emarsys Customer Engagement | Webhook Endpoint URL" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83012i52B89BFCC3D10A81/image-size/large?v=v2&amp;px=999" role="button" title="philipp_eicker_1-1710848558352.png" alt="SAP Emarsys Customer Engagement | Webhook Endpoint URL" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP Emarsys Customer Engagement | Webhook Endpoint URL</span></span></P><H3 id="toc-hId--1907703930">Authentication</H3><P>The easiest way to authenticate the Webhook call at the integration flow endpoint is via OAuth. In the SAP Business Technology Platform cockpit make sure that the instance of the&nbsp;<SPAN><EM>Process Integration Runtime</EM> contains the role&nbsp;<EM>ESBMessaging.send </EM>(see&nbsp;<A href="https://help.sap.com/docs/cloud-integration/sap-cloud-integration/setting-up-inbound-http-connections-integration-flow-processing" target="_self" rel="noopener noreferrer">Setting Up Inbound HTTP Connections</A>).&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP BTP Cockpit | Instances View Parameter" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83041i37B7AC17E83DA7E9/image-size/large?v=v2&amp;px=999" role="button" title="philipp_eicker_1-1710849682563.png" alt="SAP BTP Cockpit | Instances View Parameter" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP BTP Cockpit | Instances View Parameter</span></span></P><P>Then create a service key and copy the <EM>clientid</EM>, <EM>clientsecret</EM> and the <EM>tokenurl&nbsp;</EM></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP BTP Cockpit | Instance Credentials" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83039iBE0BBBD511342FF3/image-size/large?v=v2&amp;px=999" role="button" title="philipp_eicker_0-1710849556354.png" alt="SAP BTP Cockpit | Instance Credentials" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP BTP Cockpit | Instance Credentials</span></span></P><P>to the corresponding fields of the authentication settings of the Webhook in SAP Emarsys:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP Emarsys Customer Engagement | Webhook Authentication" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/83016i9DE73FA8FC9504E8/image-size/large?v=v2&amp;px=999" role="button" title="philipp_eicker_2-1710848645268.png" alt="SAP Emarsys Customer Engagement | Webhook Authentication" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP Emarsys Customer Engagement | Webhook Authentication</span></span></P><P>&nbsp;</P><H1 id="toc-hId--1517411421">Conclusion</H1><P>Now let’s shed some light on what we have achieved with the utilization of SAP Integration Suite with regard to the integration of SAP Emarsys Customer Engagement with SAP Sales Cloud Version 1.</P><P>While the out-of-the-box SAP Emarsys Webhook functionality for lead creation in SAP Sales Cloud is limited to using a subset of fields represented in a flat structure, the use of SAP Integration Cloud removes this restriction and allows the incorporation of advanced lead information.</P><P>On the one hand, information has been successfully replicated to nested lead attributes, including form text to notes and email opt-in status at subnode level to the marketing permission:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SAP Sales Cloud - Lead Includes Notes and Email Opt-in" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/101259i327F450D45AAD0F6/image-size/large?v=v2&amp;px=999" role="button" title="LeadCreatedinSAPSalesCloud.png" alt="SAP Sales Cloud - Lead Includes Notes and Email Opt-in" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SAP Sales Cloud - Lead Includes Notes and Email Opt-in</span></span></P><P>On the other hand, the “Additional data" including the priority, origin type, and qualification level of the lead was presented to the automation program creator in a descriptive format so that they do not have to rely solely on code values. Consequently, the process of selecting the appropriate values became noticeably more user-friendly.</P><P>In this way, the process of creating leads in SAP Sales Cloud has not only been enhanced by the use of SAP Integration Cloud, but has also been significantly simplified.</P> 2024-05-03T07:46:16.745000+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/13691498 10+ ways to reshape your SAP landscape with SAP Business Technology Platform – Blog 7 2024-05-06T09:21:24.167000+02:00 Philipp_Z https://community.sap.com/t5/user/viewprofilepage/user-id/5807 <H1 id="toc-hId-865260264">Blog 7: The Role of Automation for Transformation <SPAN>Projects</SPAN></H1><P>In times of constant change, quickly emerging demands for digitalization and competitive markets, companies are looking for ways to further optimize their processes. Consequently, many organizations have turned to automation technologies, such as RPA tools, to automate mundane and repetitive tasks. The benefits of automation are quite obvious: Automated processes are faster, less prone to error and people can concentrate on more complex, higher value-added activities.</P><P>Especially for activities with high volumes the benefits can be huge. Let me illustrate this with an example: A few weeks ago, I talked to a company from the consumer products industry. While a lot of transactions with its suppliers run fully digital via B2B integration, they still receive roughly 4.000 documents per month such as invoices and purchase orders via email. Let us assume you need on average 2 minutes for processing one document, that is: Extracting and verifying the data, collecting approvals, creating it in the ERP system and so on. In total, this sums up to over 130 hours of manual work per month. Applying RPA tooling and AI for document understanding can drastically speed up the processing of these tasks, thereby freeing people from tedious copy &amp; paste or data entry and export activities.</P><H2 id="toc-hId-797829478">Why looking at automation only is not enough</H2><P>To streamline their processes, many companies have also started looking into other technologies: Besides RPA, also workflow engines, integration middleware as well as tools for process mining and process analytics have risen. One big downside is that these technologies often are not well integrated and hence customers are struggling with setting up an aligned end-to-end approach.</P><P>With our <A href="https://www.sap.com/products/technology-platform/enterprise-automation.html" target="_blank" rel="noopener noreferrer">Enterprise Automation</A> offering we want to address this and provide a unified and interlinked approach. As described in the <A href="https://community.sap.com/t5/technology-blogs-by-sap/introducing-new-capabilities-for-enterprise-automation/ba-p/13557180" target="_blank">blog article</A> by Angela Harvey, this concept is based on the combination of 3 products:</P><UL><LI>SAP Integration Suite: You cannot automate what you can’t connect to. Our suite provides unparalleled connectivity and integration for a variety of scenarios. Be it SAP / Non-SAP, Cloud / on-Premise applications, B2B, B2G, API-led or event-driven scenarios.</LI><LI>SAP Signavio: Before you optimize, you might need to understand where to start and uncover inefficiencies first. With SAP Signavio you can analyze, model and govern your business processes to drive operational change.</LI><LI>SAP Build: Drive automation of long-running processes with capabilities for app development, process automation and portal sites. Low-Code/No-Code and visual design tooling also empower citizen developers and business experts to contribute to the development process in an agile fashion.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Philipp_Z_0-1714839473822.jpeg" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/105838i43D41F71CA3733F5/image-size/large?v=v2&amp;px=999" role="button" title="Philipp_Z_0-1714839473822.jpeg" alt="Philipp_Z_0-1714839473822.jpeg" /></span></P><P>It is important to note that Enterprise Automation is a flexible and modular concept. Hence, customers can start with whatever product they see fit. From a transformation perspective Enterprise Automation can provide significant benefits when modernizing your SAP ERP, so when moving from the classic SAP Business Suite to SAP S/4HANA. It can be applied at any stage, both before the migration as well as after the migration:</P><UL><LI>Before the move: Leverage Signavio’s “<A href="https://www.signavio.com/plug-and-gain-approach/" target="_blank" rel="noopener nofollow noreferrer">plug and gain</A>” approach and <A href="https://www.leanix.net/en/wiki/tech-transformation/sap-s4hana-transformation" target="_blank" rel="noopener nofollow noreferrer">LeanIX</A> to analyze and clean up processes in advance and gain immediate benefits from applying automation (e.g. via pre-built content packages). Use the <A href="https://www.sap.com/services-support/integration-solution-advisory-methodology.html" target="_blank" rel="noopener noreferrer">Integration Solution Advisory Methodology</A> of the SAP Integration Suite to design and prepare a future-proof integration strategy.</LI><LI>After the move: Bring process excellence to the next level by combining process mining, integration and automation and enable a continuous improvement cycle. Enable a governed approach to accelerate and scale the building of process automations based on Low-Code/No-Code techniques.</LI></UL><P>Another advantage in terms of transformation is the versatility – similar to a Swiss Army Knife. Enterprise Automation allows process optimization across the enterprise and line of businesses: Be it sales, procurement, HR, finance, production or logistics. A comprehensive collection of use cases and end-to-end scenarios has been put together by Manuel Namyslo in his blog article: <A href="https://community.sap.com/t5/sap-builders-blog-posts/how-to-get-started-with-enterprise-automation/ba-p/13582512" target="_blank">How to get started with Enterprise Automation.</A></P><H2 id="toc-hId-601315973">The role of AI in Enterprise Automation</H2><P>Let us take a closer look at the role of AI and how it fits into the picture of Enterprise Automation. When transforming business processes and modernizing enterprise applications, AI should be part of the agenda, due to the massive benefits it can provide. Within our Enterprise Automation offering, the AI capabilities are tightly embedded to make the consumption as easy, seamless and relevant as possible.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Philipp_Z_1-1714839473828.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/105839i87B9086731C043DB/image-size/large?v=v2&amp;px=999" role="button" title="Philipp_Z_1-1714839473828.png" alt="Philipp_Z_1-1714839473828.png" /></span></P><P>A few highlights of them include:</P><UL><LI>Use Document Information Extraction (DOX) within SAP Build Process Automation to grab data from documents like invoices, payment advices and purchase orders to automate their processing. We also plan to integrate the <A href="https://community.sap.com/t5/technology-blogs-by-sap/introducing-document-information-extraction-premium-edition-unleashing-the/ba-p/13574704" target="_blank">DOX premium edition</A> to make the processing of arbitrary documents with varying structure and layout even simpler.</LI><LI>We plan to use AI to provide recommendations for workflows as proposals based on historic data. This will support and speed up the decision making for approvals and workflow items (see <A href="https://roadmaps.sap.com/board?range=2024Q1-2024Q4&amp;PRODUCT=73554900100800003832#Q1%202024;INNO=F97566F157581EEEAFE9A21AF47EB3ED" target="_blank" rel="noopener noreferrer">roadmap item</A>).</LI><LI>Visual tools already cater towards ease-of-use and simplify the building of process automations by business experts. There are also plans to make the design process even more intuitive by leveraging Generative AI functions (see corresponding <A href="https://roadmaps.sap.com/board?PRODUCT=73554900100800003832&amp;range=CURRENT-LAST&amp;BC=000D3ABE772D1EECA2CFCDF4405525B3#Q3%202024" target="_blank" rel="noopener noreferrer">roadmap items</A>). As illustrated in this preview <A href="https://www.youtube.com/watch?v=0i9XMJ_HuFw" target="_blank" rel="noopener nofollow noreferrer">video</A>, users describe what they need or what they want to craft in natural language. This can be an entire process flow, but also single process steps such as a business rule. The system then automatically generates the respective building blocks. Apart from that the AI-based assistant will also help with the discovery of pre-built content by providing suitable proposals from the content catalog.</LI></UL><P>As you can see AI is a crucial factor in many ways. Not only for the automation of processes, but also to accelerate the design and development process in various aspects. In addition, Enterprise Automation can also help with infusing AI into the process layer, by providing the respective integration capabilities.</P><P>To conclude: Enterprise Automation should be considered as a strategic tool set in the light of any transformation initiative for ERP and enterprise application landscapes. Its modular style allows you to start small at any stage of your project: From simple workflow automation and high-level process modelling, up to a fully-fledged vehicle for continuous process excellence. While our offering is optimized for SAP applications and systems, we embrace openness and enable process excellence across heterogeneous IT landscapes.</P><P>Where to look next and where to start? I recommend checking out the blog article <A href="https://community.sap.com/t5/sap-builders-blog-posts/how-to-get-started-with-enterprise-automation/ba-p/13582512" target="_blank">How to get started with Enterprise Automation</A> to get further inspiration. In addition, Low-Code/No-Code tooling such as SAP Build is well suited for getting Hands-On experience. Therefore, feel free to reach out to your SAP account manager to experience the ease-of-use in a Hands-On workshop. Finally, start by looking into potential use cases and assess them with the help of SAP or partners on how to tackle them with Enterprise Automation.</P><P><STRONG>Previous Blogs:</STRONG></P><UL><LI>Blog 1:&nbsp;<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="_blank">The Central Role of Clean Core and AI</A></LI><LI>Blog 2:&nbsp;<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="_blank">The Role of BTP as Extension and Innovation Platform</A></LI><LI>Blog 3: <A href="https://community.sap.com/t5/technology-blogs-by-sap/how-sap-clean-core-strategy-can-accelerate-your-business-transformation/ba-p/13652132" target="_blank">How Clean Core can accelerate your <SPAN>SAP Business</SPAN> Transformation</A></LI><LI>Blog 4: <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/13614282" target="_blank">Mastering the Data Dance: The Potential of Clean Core and AI</A></LI><LI>Blog 5: <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/13673510" target="_blank">How hybrid Integration upholds the role of Clean Core</A></LI><LI>Blog 6: <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/13679673" target="_blank">Clean Core Extensibility</A></LI></UL> 2024-05-06T09:21:24.167000+02:00 https://community.sap.com/t5/technology-blogs-by-members/dynamically-creating-mpl-custom-headers-without-hardcoding-in-groovy-script/ba-p/13691202 Dynamically creating MPL custom headers without hardcoding in groovy script 2024-05-07T09:56:47.171000+02:00 ranchhod https://community.sap.com/t5/user/viewprofilepage/user-id/872697 <P>Hello Everyone,</P><P>In our work with CPI (Cloud Platform Integration) MPL (Message Processing Logs), we often encounter the need to log specific values such as IDoc Numbers, PO Numbers, and Invoice Numbers as key-value pairs in custom headers. These custom headers allow us to enhance monitoring capabilities.</P><P>Traditionally, we would create headers or properties in a content modifier and then read those headers or properties in a custom Groovy script. However, this approach requires us to hardcode the property names both in the custom header and the Groovy script. As new requirements arise, we find ourselves repeatedly adding properties to the Groovy script, which can become cumbersome and error-prone.</P><P>To break out of this endless loop, I propose a solution:</P><OL><LI><P><STRONG>Property Naming Convention:</STRONG></P><UL><LI>When creating properties for custom headers, start their names with “mpl-”. For example:<UL><LI>mpl-IDocNumber</LI><LI>mpl-PONumber</LI><LI>mpl-InvoiceNumber<BR /><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ranchhod_4-1714762208521.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/105721i2E5CA2885F60462D/image-size/medium?v=v2&amp;px=400" role="button" title="ranchhod_4-1714762208521.png" alt="ranchhod_4-1714762208521.png" /></span></LI></UL></LI></UL></LI><LI><P><STRONG>Dynamic Groovy Script:</STRONG></P><UL><LI>Instead of hardcoding property names in the Groovy script, create a script that dynamically reads all properties starting with “mpl-” from your integration.</LI><LI>After trimming the first 4 characters (i.e., “mpl-”), use the remaining part as the key for logging in the MPL custom header.</LI></UL></LI></OL><P><STRONG>import com.sap.gateway.ip.core.customdev.util.Message;</STRONG><BR /><STRONG>import java.util.HashMap;</STRONG></P><P><STRONG>def Message processData(Message message) {</STRONG><BR /><STRONG>def body = message.getBody(java.lang.String) as String;</STRONG><BR /><STRONG>def mProp = message.getProperties();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Read all the properies</STRONG><BR /><STRONG>def messageLog = messageLogFactory.getMessageLog(message);</STRONG><BR /><STRONG>if(messageLog != null)</STRONG><BR /><STRONG>{</STRONG><BR /><STRONG>&nbsp; &nbsp; &nbsp; &nbsp;mProp.each { key, value -&gt;</STRONG><BR /><STRONG>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (key.startsWith("mpl-")) </STRONG><BR /><STRONG>&nbsp; &nbsp; {</STRONG><BR /><STRONG>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</STRONG><BR /><STRONG>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;def customHeaderName = key.substring(4); // Remove "mpl-"&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Extract the part after "mpl-"</STRONG><BR /><BR /><STRONG>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;messageLog.addCustomHeaderProperty(customHeaderName, value)&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;// Set custom header property</STRONG><BR /><STRONG>}</STRONG><BR /><STRONG>}</STRONG></P><P>Output would be like:&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ranchhod_5-1714762598027.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/105723iA9E0BC832D1C3112/image-size/medium?v=v2&amp;px=400" role="button" title="ranchhod_5-1714762598027.png" alt="ranchhod_5-1714762598027.png" /></span></P><DIV class=""><DIV class=""><DIV class=""><P>Now, whenever you need to print something with custom header key-value pairs, you no longer have to hardcode any of the headers or properties within the Groovy code. Instead, you can use a single Groovy script for every interface in your tenant. <span class="lia-unicode-emoji" title=":thumbs_up:">👍</span></P></DIV></DIV></DIV><P>By following this approach, you can log additional information without modifying the Groovy script each time a new requirement arises. It provides flexibility and simplifies maintenance.</P> 2024-05-07T09:56:47.171000+02:00 https://community.sap.com/t5/enterprise-resource-planning-blogs-by-members/lets-send-multipart-form-data-to-external-receiver-cpi-to-ai-app/ba-p/13694334 Lets Send multipart/form-data to external Receiver: CPI to AI App 2024-05-08T17:41:14.873000+02:00 nirmalmehta1706 https://community.sap.com/t5/user/viewprofilepage/user-id/675571 <P>Let me start the story with the requirements I had then Ill come to the approach I opted and in the journey it is possible that I may have done some mistakes so I'll add a humble request to all my senior fellow to add there expertise in this blog, This will help everyone to get more insights.</P><P><FONT size="6"><STRONG>Scenario</STRONG>:</FONT></P><P>We had to integrate an application which had a requirement to connect to and External AI application that has exposed some API to us with some<STRONG> documentation</STRONG>.</P><P><FONT size="6"><STRONG>Challenge</STRONG>:</FONT></P><P>From the initial thoughts this looks easy, it just an API, as so as I thought , but as I mentioned above&nbsp; "<STRONG>documentation"&nbsp;</STRONG>gave us the real challenge. To complete all the call we had to send the <STRONG>multipart/form-data</STRONG>&nbsp;to this receiver.</P><P>Through the help of documentations we are able to successfully send the data from Postman. but when we tried to send it from CPI we faced challenges which lead us to the solution. So next I am sharing the steps we performed to send the form-data&nbsp;</P><P>Clearly, if such problem arrives instantly we come to SAP community and search for the answer, we found&nbsp;<A href="https://community.sap.com/t5/technology-q-a/sending-form-data-from-sap-cpi/qaq-p/12613755" target="_blank">https://community.sap.com/t5/technology-q-a/sending-form-data-from-sap-cpi/qaq-p/12613755</A>&nbsp;solution that gives us a way and describe what form-data is and how well it can be passed- but solution given here was to change the type of data itself which was not a choice for us.</P><P>At least we got half way on understanding the way&nbsp;<STRONG>multipart/form-data</STRONG> will be constructed. To understand more about&nbsp; terms and functionality please refer this wonderful article&nbsp;<A href="https://community.sap.com/t5/technology-blogs-by-sap/what-is-form-data-and-how-to-send-it-from-sap-cloud-platform-integration/ba-p/13443126" target="_blank">https://community.sap.com/t5/technology-blogs-by-sap/what-is-form-data-and-how-to-send-it-from-sap-cloud-platform-integration/ba-p/13443126</A>&nbsp;by&nbsp;<SPAN>mattisebastian this will help us to create the exact frame of data we need to post and in correct way and&nbsp; how much important the <STRONG>envelope</STRONG> is.</SPAN></P><P>&nbsp;</P><P><FONT size="6"><STRONG>Solution:</STRONG></FONT></P><P>To Solve this it is very important to understand the few terms like Content-type, Content Disposition, Accept, Boundary and all the fields that are required in Form data.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="nirmalmehta1706_0-1715115917415.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/107050i4BCA612D4E6017AB/image-size/medium?v=v2&amp;px=400" role="button" title="nirmalmehta1706_0-1715115917415.png" alt="nirmalmehta1706_0-1715115917415.png" /></span></P><P>To understand this format we had to mimic the Postman request we were directly send to API.</P><P>So we created a CPI Artifact to trace the look of the form data and we were able to get the exact same results as in screenshot , but we have to append an actual JSON which had a list of json data in format of <STRONG><SPAN class="">string</SPAN><SPAN class="">&nbsp;&lt;binary&gt;&nbsp;</SPAN><SPAN class="">(File)</SPAN></STRONG>. And that was actually a file upload (that we were doing from postman).</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="nirmalmehta1706_1-1715116249725.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/107052i9290B505C1D89377/image-size/medium?v=v2&amp;px=400" role="button" title="nirmalmehta1706_1-1715116249725.png" alt="nirmalmehta1706_1-1715116249725.png" /></span></P><P>till now if we send request without this JSON file, the AI app was accepting the request but with an error as no real data was found in envelope.&nbsp;&nbsp;</P><P>So now we had to find a way to send this file in Realtime to the receiver. and for that we tried various ways like to store the payload in data store and creating Tables and so on.</P><P>But issue persisted when we have to send it in Realtime. So to get a bit more Idea we again sent this request from Postman to CPI and traced it.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="nirmalmehta1706_2-1715116678371.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/107055i44885A7D64D376F9/image-size/medium?v=v2&amp;px=400" role="button" title="nirmalmehta1706_2-1715116678371.png" alt="nirmalmehta1706_2-1715116678371.png" /></span></P><P>To get these headers understanding we also put some effort to create Multipart/Form-data from MIME script&nbsp; from the blog&nbsp;<A href="https://community.sap.com/t5/technology-blogs-by-sap/part-6-simplify-integration-of-data-from-sap-s-4hana-cloud-to-third-party/ba-p/13386862" target="_blank">https://community.sap.com/t5/technology-blogs-by-sap/part-6-simplify-integration-of-data-from-sap-s-4hana-cloud-to-third-party/ba-p/13386862</A>&nbsp;from&nbsp;<SPAN>&nbsp;</SPAN><SPAN class=""><A class="" href="https://community.sap.com/t5/user/viewprofilepage/user-id/111463" target="_self"><SPAN class="">divyamary </SPAN></A></SPAN></P><P>and we created following results:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="nirmalmehta1706_3-1715117131718.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/107059iE81F8DAEA8785CE8/image-size/medium?v=v2&amp;px=400" role="button" title="nirmalmehta1706_3-1715117131718.png" alt="nirmalmehta1706_3-1715117131718.png" /></span></P><P>So now we know how the file data look like and what part in payload we are missing, as we had to send the binary data we changed the header&nbsp;<STRONG>Content-Transfer-Encoding: 7bit&nbsp;</STRONG>to&nbsp;</P><P><STRONG>Content-Transfer-Encoding: Binary&nbsp;</STRONG>and same goes for file name.</P><P>and that's it.. it worked! Just some correction on payload customization and headers and we created multipart/form-data in <STRONG>Content Modifier</STRONG> only.</P><P><FONT size="6"><STRONG>Briefs&nbsp; and Take-aways:</STRONG></FONT></P><UL><LI>Mimic Postman Hits in CPI by artifacts , hit to CPI and traces the payload.</LI><LI>Set the Headers correctly specially Content-type and Boundary(specially spaces <span class="lia-unicode-emoji" title=":slightly_smiling_face:">🙂</span> )</LI><LI>Check if there is any media type for the type of data you are trying to send to receiver and set it correctly.</LI><LI>You can also try the MIME multipart script to simulate the outcome, it will give you some correct data formats and header options.</LI><LI>Add those&nbsp; steps and create a right payload in Content modifier.</LI><LI>After creating the form data always try to create a right envelope with right boundary&nbsp; (that worked for us)</LI><LI>Send with right adaptor configurations and ... it will be success.</LI></UL><P>Following are some key blogs from experts which we referred. a big thank them .</P><UL><LI><A href="https://community.sap.com/t5/technology-q-a/sending-form-data-from-sap-cpi/qaq-p/12613755" target="_blank">https://community.sap.com/t5/technology-q-a/sending-form-data-from-sap-cpi/qaq-p/12613755</A></LI><LI><A href="https://community.sap.com/t5/technology-blogs-by-sap/what-is-form-data-and-how-to-send-it-from-sap-cloud-platform-integration/ba-p/13443126" target="_blank">https://community.sap.com/t5/technology-blogs-by-sap/what-is-form-data-and-how-to-send-it-from-sap-cloud-platform-integration/ba-p/13443126</A></LI><LI><A href="https://community.sap.com/t5/technology-blogs-by-sap/part-6-simplify-integration-of-data-from-sap-s-4hana-cloud-to-third-party/ba-p/13386862" target="_blank">https://community.sap.com/t5/technology-blogs-by-sap/part-6-simplify-integration-of-data-from-sap-s-4hana-cloud-to-third-party/ba-p/13386862</A></LI></UL><P>&nbsp;</P><P>It was just my first blog so it will definitely have some misses, please add you comments and feedback so that ill improve.&nbsp;</P><P>Sap community is a Big sea and its just a drop that I added.</P><P>&nbsp;</P><P>Thank you.</P><P>&nbsp;&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P> 2024-05-08T17:41:14.873000+02:00 https://community.sap.com/t5/technology-blogs-by-sap/sap-integration-suite-design-guidelines-in-the-integration-flow-editor-of/ba-p/13696362 SAP Integration Suite - Design Guidelines in the integration flow editor of SAP Cloud Integration 2024-05-09T14:14:31.763000+02:00 kamlesh_zanje https://community.sap.com/t5/user/viewprofilepage/user-id/320175 <H1 id="toc-hId-865408159"><STRONG>Introduction</STRONG></H1><P>Design guidelines feature is available in the integration flow editor of SAP Cloud Integration with the 5.59.x/6.51.x to help integration developers to design and develop enterprise-grade integration flows. To know, you can refer the help documentation <A href="https://help.sap.com/docs/integration-suite/sap-integration-suite/design-guidelines" target="_blank" rel="noopener noreferrer">Design Guidelines | SAP Help Portal</A> and <A href="https://help.sap.com/docs/integration-suite/sap-integration-suite/design-guidelines-view" target="_blank" rel="noopener noreferrer">Design Guidelines View | SAP Help Portal</A>.</P><P>In this community blog, I will give a short overview on the design guidelines. Let us understand the fundamentals of the design guidelines prior having a deep dive.</P><H2 id="toc-hId-797977373"><STRONG>What are Design Guidelines?</STRONG></H2><P>Integration flow design guidelines enable integration developers to design and develop integration flows, interfaces in a robust fashion to safeguard the company's mission critical business processes.</P><P>In the past, these design guidelines were recommendations that were published as product help and prepackaged content on&nbsp;<SPAN>SAP Business Accelerator Hub</SPAN>. You can find the guidelines in the&nbsp;<A href="https://help.sap.com/docs/integration-suite/sap-integration-suite/integration-flow-design-guidelines" target="_blank" rel="noopener noreferrer">Integration Flow Design Guidelines</A>&nbsp;section. Now, the same guidelines are incorporated within the software as rules that help integration developers for easy consumption.</P><H2 id="toc-hId-601463868"><STRONG>Why Design Guidelines?</STRONG></H2><P>Integration flow design guidelines help to improve the quality of the integration flows, interfaces by keeping them readable, easy to understand, avoid memory leaks, avoid performance overhead and helps handling error in a good way.</P><H2 id="toc-hId-404950363"><STRONG>Motivation</STRONG></H2><UL><LI>Design guidelines helps understand the basic capabilities for modeling integration flows.</LI><LI>Provides guidelines to implement the basic enterprise integration patterns.</LI><LI>It helps to improve the performance of integration flows and reduce the possibility of the outages related to OOM, memory consumption etc.</LI><LI>It applies highest security standards.</LI><LI>It enables the integration flows ready for the productive usage.</LI></UL><H2 id="toc-hId-208436858"><STRONG>Availability</STRONG></H2><P>Design guidelines are available in the SAP Cloud Integration across Standalone NEO, Cloud Foundry, and Integration suite.</P><H2 id="toc-hId-11923353"><STRONG>Personas</STRONG></H2><P>Broadly there are two personas involved in the design guidelines configuration and execution process. Please check their roles and responsibility.</P><TABLE width="1156"><TBODY><TR><TD width="377"><P><STRONG>Persona</STRONG></P></TD><TD width="779"><P><STRONG>Responsibility </STRONG></P></TD></TR><TR><TD width="377"><P><STRONG>Tenant administrator/Integration Lead/Solution Architect</STRONG></P></TD><TD width="779"><UL><LI>Configure the design guideline at the tenant level to make it available for all integration flows.</LI><LI>Review the design guidelines compliance report and take a decision for the Go-Live in the production environment.</LI></UL></TD></TR><TR><TD width="377"><P><STRONG>Integration Developer</STRONG></P></TD><TD width="779"><UL><LI>Execute the design guideline on the integration flow. Download the compliance report and share with tenant administrator/integration lead for the review.</LI></UL></TD></TR></TBODY></TABLE><H2 id="toc-hId--184590152"><STRONG>Workflow</STRONG></H2><P>Below diagram depicts the workflow that will benefit you in the usage of the design guidelines. Broadly there are two personas who will be involved in leveraging the benefit of design guidelines.</P><P>Tenant administrator, who will enable the design guidelines at the tenant level and integration developer who shall execute the guidelines on the integration flow to improve the quality.</P><P>Our recommendation is to impose the below process which will help to improve the quality of the integration flow and ensure the smooth transition for the go live in the production environment.</P><P>Let me try to explain the process by taking a following scenario into consideration.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="kamlesh_zanje_3-1715255870456.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/108016iCA98D17D5784694A/image-size/large?v=v2&amp;px=999" role="button" title="kamlesh_zanje_3-1715255870456.png" alt="kamlesh_zanje_3-1715255870456.png" /></span></P><P>&nbsp;</P><H3 id="toc-hId--252020938"><STRONG>Configure Design Guidelines</STRONG></H3><P>Configuring and enabling design guidelines is the responsibility of the Tenant Administrator/Integration Lead/Solution Architect.</P><P>We have a dedicated application role for the tenant administrator in NEO and Cloud Foundry. Please refer this documentation <A href="https://help.sap.com/docs/integration-suite/sap-integration-suite/persona-2937e5ca6ef448cfb21451a2461cc2a6" target="_blank" rel="noopener noreferrer">Persona | SAP Help Portal</A></P><P>However, tenant administrator can create a custom persona such as solution architect or Integration lead to manage and configure the design guidelines at the tenant level by using the role “WorkspaceDesignGuidelinesConfigure”.</P><P>User having a proper authorization will be able to see Design Guidelines tab in the integration settings page of the Integration Suite tenant. &nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="kamlesh_zanje_2-1715255842601.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/108015iF8043F538EC40B6A/image-size/large?v=v2&amp;px=999" role="button" title="kamlesh_zanje_2-1715255842601.png" alt="kamlesh_zanje_2-1715255842601.png" /></span></P><P>Before you enable/disable design guidelines, understand every design guideline and its implications. Consume the in-app help available for each design guideline to learn more.</P><P>You can enable the design guidelines that you think are appropriate for your organization's requirements. Similarly, disable the ones that you think aren't appropriate anymore.</P><P>The design guidelines are logically grouped. For example, all transaction handling related guidelines are grouped under a single category. Some of the logical groupings are&nbsp;<SPAN><STRONG>Handle errors gracefully</STRONG></SPAN>&nbsp;and&nbsp;<SPAN><STRONG>run an integration flow under well-defined boundary conditions</STRONG></SPAN>.</P><P>Severity decides the criticality and importance of the design guidelines. &nbsp;&nbsp;Severity of the design guidelines is categorized as High, Medium, and Low.</P><P>Design guidelines which are switched-on&nbsp;<span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="switched on.png" style="width: 31px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/108294i36EBE0E5C934A828/image-size/large?v=v2&amp;px=999" role="button" title="switched on.png" alt="switched on.png" /></span>will be applicable to the integration flows for the execution.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="kamlesh_zanje_6-1715255978232.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/108021i615A3DBDA1589B7F/image-size/large?v=v2&amp;px=999" role="button" title="kamlesh_zanje_6-1715255978232.png" alt="kamlesh_zanje_6-1715255978232.png" /></span></P><P>It is desirable that you like to follow the same design guidelines in your other development tenants, hence, to ease the work, we have offered export/import feature to export the design guidelines with the enabled/disabled status from one tenant and import the same in another tenant This way, you don't have to manually enable the same design guidelines in multiple tenants.</P><H3 id="toc-hId--448534443"><STRONG>Execute Design Guidelines<BR /></STRONG></H3><P>As we discussed, design guidelines are rules that help you design robust integration flows. Your tenant administrators or integration leads would have enabled all or a subset of available design guidelines that they think are appropriate for your organization's business needs.</P><P>Integration developer responsibility would be to execute the design guidelines after they have developed the integration flow.&nbsp;You can also run the guidelines on the already developed integration flows as well.</P><P>Guidelines which are mandated by the tenant administrator or Integration lead will participate in the execution of the design guidelines on the selected integration flow.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="kamlesh_zanje_7-1715256024186.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/108022i2745D5AC3D65508F/image-size/large?v=v2&amp;px=999" role="button" title="kamlesh_zanje_7-1715256024186.png" alt="kamlesh_zanje_7-1715256024186.png" /></span></P><P>Remember that not all enabled design guidelines are applicable for every integration flow that you create. The integration flow editor intelligently identifies the design guidelines that are applicable and validates the integration flow only against the applicable ones. Applicability – “Not Applicable” means the corresponding guidelines is not applicable to your integration flow.</P><P>Compliance status can be either “Compliant” or “Non-Compliant”. If the integration flow is not compliant to the guidelines, then analysis&nbsp;<span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="analysis.png" style="width: 32px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/108293i16C7319E0B352AFA/image-size/large?v=v2&amp;px=999" role="button" title="analysis.png" alt="analysis.png" /></span>report will be provided which will educate integration developer how to fix the failed guidelines and ensure the quality of your interface. Analysis will also cover the model step where the fix must be applied. Easy navigation to the problematic step of the integration flow is offered to ease the job of the integration developer.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="kamlesh_zanje_8-1715256055922.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/108024iC2AB2FC57C416B36/image-size/large?v=v2&amp;px=999" role="button" title="kamlesh_zanje_8-1715256055922.png" alt="kamlesh_zanje_8-1715256055922.png" /></span></P><P>Once the design guidelines are made compliant, our recommendation is to download the report and share with the integration lead/Tenant administrator/Solution Architect so they can review the guidelines report and take a decision for transport of the integration content to the production environment for the Go-Live.</P><H2 id="toc-hId--774130667"><STRONG>FAQs</STRONG></H2><UL><LI>In which product of SAP Cloud Integration, design guidelines feature is available?</LI></UL><P style=" padding-left : 30px; ">Design guidelines is available in Cloud Integration NEO, Cloud Foundry, and Integration Suite all editions.</P><UL><LI>Who can configure, enable/disable design guidelines at the tenant level in the integration settings page?</LI></UL><P style=" padding-left : 30px; ">Tenant administrator or the user having the application role – “WorkspaceDesignGuidelinesConfigure”.</P><UL><LI>Do the non-compliant design guidelines lead to integration flow deployment failure?</LI></UL><P style=" padding-left : 30px; ">No.</P><UL><LI>Do the non-compliant design guidelines lead to content transport failure?</LI></UL><P style=" padding-left : 30px; ">No.</P><UL><LI>Can I execute design guidelines on the standard pre-packaged integration content?</LI></UL><P style=" padding-left : 30px; ">Yes, you can execute design guidelines on standard and custom integration content.</P><UL><LI>Can I execute design guidelines on the read-only Integration flow?</LI></UL><P style=" padding-left : 30px; ">Yes.</P><UL><LI>Who can execute design guidelines on the integration flow?</LI></UL><P style=" padding-left : 30px; ">Integration developer can execute the guidelines on the integration flow.</P><UL><LI>Do the support users are allowed to download design guidelines compliance report?</LI></UL><P style=" padding-left : 30px; ">No, they cannot download the report. However, they can visualize the guidelines compliance result in the integration flow editor.</P><UL><LI>Can I know when the last time the design guidelines was executed on the integration flow?</LI></UL><P style=" padding-left : 30px; ">Yes, we show the datetime information in the design guidelines tab of the integration flow after the guidelines are executed.</P><UL><LI>Can I know on which version of integration flow the design guidelines was executed?</LI></UL><P style=" padding-left : 30px; ">Yes, we show the integration flow version in the design guidelines tab of the integration flow.</P><UL><LI>Can integration developer remove the design guidelines which are mandated by the tenant administrator?</LI></UL><P style=" padding-left : 30px; ">No, guidelines which are mandated cannot be removed by the integration developer from the execution.</P><UL><LI>In which format I can download the design guidelines compliance report</LI></UL><P style=" padding-left : 30px; ">Report is available in the xls format.</P><H2 id="toc-hId--623389815"><STRONG>What’s coming next?</STRONG></H2><P>We have the following increments planned in the succession.</P><OL><LI>Increase the coverage by adding more design guidelines for the integration flow.</LI><LI>Skip design guidelines – If the design guidelines fail (i.e., non-compliant), we want to offer a feature for the integration developer to skip the failed design guidelines with his/her consent mainly to block the false positive guidelines failure.</LI><LI>Public Remote APIs for enabling CI/CD requirements.</LI><LI>Restrict deployment and transport of the integration flow but via a proper governance and transparency.</LI><LI>Enable design guidelines in the Script Collection, Message Mapping, and other applicable artifacts.</LI><LI>Custom design guidelines for the customers to write their own custom rules.</LI></OL><P>I am also planning to write a developer tutorial with an example. Stay tuned !</P><P>Hope you will get benefited with this feature. Please experience the feature and provide your valuable feedback.</P> 2024-05-09T14:14:31.763000+02:00 https://community.sap.com/t5/technology-blogs-by-members/be-a-cockroach-a-simple-guide-to-ai-and-sap-full-stack-development-part-i/ba-p/13696633 Be a Cockroach: A Simple Guide to AI and SAP Full-Stack Development - Part I 2024-05-09T19:14:30.935000+02:00 karthikarjun https://community.sap.com/t5/user/viewprofilepage/user-id/123682 <P><STRONG><U>Disclaimer</U></STRONG>: This blog delves into SAP full-stack development, incorporating SAP RAP for both front-end and back-end functionalities, Integration Suite for middleware tasks, TensorFlow for AI/ML modeling, and crafting a personalized system dashboard. Geared towards simplifying complex business systems through engaging stories, it's for those wanting to understand these concepts. If you're already well-versed, feel free to just stop here and explore other content.</P><P><STRONG><U>I) Introduction (Story):</U></STRONG></P><P>Most people came here to see what he has to say about cockroaches and their connection to SAP development. Some might be curious to learn about it. Few of you could feel grossed out and think cockroaches are yucky and ugly! <STRONG>But after reading this section, I hope you'll respect these special creatures called “COCKROACH”.</STRONG></P><P>The world is more than 200,000 years old. Lots of animals have lived and expired over time. One of them was dinosaurs—they were huge and strong. Due to changes in the tectonic plates and environment, the Dinosaurs couldn't survive and disappeared. Now, you can see it in movies using computer-generated effects. However, cockroaches have been around for over 1,00,000 years and you can still come across them in your kitchen, living room, bathroom, trash can, and everywhere else. Cockroaches have adjusted to changes in their surroundings, which is why they still exist on the planet.</P><P>Even though companies produce items like HIT and Baygon to kill them, cockroaches survive by figuring out how to deal with those products. A study found that certain products cause some cockroaches to behave as if they're intoxicated. Their bodies adapt to these substances. This ability to change is known as adaptation.</P><P>There aren't any charities or groups dedicated to protecting cockroaches like there are for elephants and dolphins. Everyone wants to kill cockroach, yet these humble cockroaches keep on living and undefeated by human, and their existence is inevitable. Now that you understand, I trust you hold a greater appreciation for the modest cockroach. <EM><U>Similarly, Consultants must also adjust to shifts in market trends.</U></EM></P><P>The IT market is going through changes like <STRONG><U>"Artificial Intelligence"</U></STRONG> and a higher demand for <STRONG><U>“SAP Full-Stack developers”</U></STRONG> and so on. In this blog we are go-through about SAP Full-Stack development.</P><P><EM>(The story about cockroaches was inspired by a book called "11 Rules for Life" written by Chetan Bhagat)</EM></P><P><STRONG><U>II) Agenda:</U></STRONG></P><OL><LI>Getting to Know SAP FullStack: Understanding the Full Stack</LI><LI>Background Insights: Delving into the Story Behind</LI><LI>System Design Visualization: Seeing the Technical Architecture</LI><LI>Practical Implementation: Learning the Practical Details Step-by-Step</LI><LI>Wrapping Up: Summarizing Key Points and Looking Ahead</LI><LI>Further Reading: Offering Links to More Research Materials</LI></OL><P><STRONG><U>III) Getting to Know SAP Full-Stack: Understanding the SAP Full-Stack development</U></STRONG></P><P>Many of our consultants believe that full stack development involves only front-end and back-end development. However, when it comes to SAP development, there's a third component: middleware.</P><P>In today's market, relying on just one system isn't enough. Data comes from various sources, and we need to consolidate it to generate reports. So, if you're interested in becoming an SAP full-stack developer, this blog will help you understand the basics of all three elements: front-end, middleware, and back-end, and explain them practically.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="karthikarjun_7-1715273481121.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/108136i9CE213319E0DD8FE/image-size/large?v=v2&amp;px=999" role="button" title="karthikarjun_7-1715273481121.png" alt="karthikarjun_7-1715273481121.png" /></span></P><P style=" text-align: center; ">Fig1: Basic diagram for Full-Stack development</P><P><STRONG><U>IV) Background Insights: Delving into the Story Behind</U></STRONG></P><P>Sundhara Pandian is a big part of Kotravai Coffee Group in Queenstown, New Zealand. He makes really good coffee. His trick? He gets top-notch coffee beans by following a careful process.</P><P>Instead of just buying beans whenever he wants, Sundhara Pandian sends a request called a Purchase Order (PO) to a big coffee supplier in Bremen, Germany. But it's not as simple as filling out a form. The PO has to go through a smart system with AI and automation. This system checks the beans in the supplier's stock and confirms the order.</P><P>But Sundhara Pandian's job doesn't stop there. The results from the system are put into SAP S/4HANA Cloud. This helps keep track of orders and how much coffee is left.</P><P>Basically, Sundhara Pandian does more than just make coffee. He's good at handling &nbsp;complicated systems to make sure Queenstown always has enough beans for coffee lovers.</P><P><EM>Let's dive into SAP full-stack development through Sundara Pandian's story as we build the SAP RAP App for PO cockpit, iFlows and AI/ML model.</EM></P><P><STRONG><U>V) Technical Architecture Diagram: Visualizing the System Design</U></STRONG></P><P>&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="karthikarjun_8-1715273481135.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/108138iCC4BA4B4D3B68E02/image-size/large?v=v2&amp;px=999" role="button" title="karthikarjun_8-1715273481135.png" alt="karthikarjun_8-1715273481135.png" /></span></P><P style=" text-align: center; ">Fig2: Architecture diagram for E2E – Full Stack development with SAP applications</P><P><STRONG><U>VI) Technical Implementation: Step-by-Step Integration Details</U></STRONG></P><P><STRONG><EM><U>AIM: (Custom Cockpit and Integrated Goods Receipts):</U></EM></STRONG></P><OL><LI><EM>We're making a simple app for custom Purchase Orders (PO) with basic fields.</EM></LI><LI><EM>Obtaining the GR information electronically, then utilizing a machine learning algorithm to automatically update the GR within our application system (GR automation).</EM></LI><LI><EM>We're getting details about Goods Receipts (GR) from GR automation system and showing them in the custom PO form.</EM></LI></OL><P><STRONG><EM><U>Target Audience:</U></EM></STRONG></P><OL><LI><EM>Individuals with 0 to 4 years of experience in SAP.</EM></LI><LI><EM>Enthusiastic learners eager to explore new concepts and expand their knowledge base.</EM></LI></OL><P><STRONG><EM><U>Before proceeding, please ensure the following prerequisites are met:</U></EM></STRONG></P><OL><LI><EM>Familiarity with basic concepts of SAP S/4HANA Cloud and SAP RAP.</EM></LI><LI><EM>Activation of the ADT-Eclipse, Postman, Integration Suite API plan in your SAP BTP entitlement.</EM></LI><LI><EM>Understanding of fundamental AI and Automation concepts.</EM></LI><LI><EM>Knowledge related to Python, Javascript, System landscape and UI</EM></LI></OL><P><U>Step 1</U>: Install the ADT package in the Eclipse. You can refer the below link to download the ADT package in the eclipse.</P><P>ADT Link: <A href="https://tools.hana.ondemand.com/#abap" target="_blank" rel="noopener nofollow noreferrer">https://tools.hana.ondemand.com/#abap</A></P><P><U>Step 2:</U></P><P>Step two has been divided into two sections, each detailed below:</P><OL><LI><EM>Section-A: Connect to the S/4 HANA Cloud system.</EM></LI><LI><EM>Section-B: Create the modelling with SAP RAP</EM></LI></OL><P><EM>Go to help-&gt; About Eclipse IDE -&gt; Double check the below highlighted icon from your system.</EM></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="karthikarjun_9-1715273481145.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/108137i483B7FC72242E1C7/image-size/large?v=v2&amp;px=999" role="button" title="karthikarjun_9-1715273481145.png" alt="karthikarjun_9-1715273481145.png" /></span></P><P><STRONG><EM><U>Section-A: Connect to the S/4 HANA Cloud system</U></EM></STRONG></P><P>To connect the S/4 HANA Cloud system, please use the below steps.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="karthikarjun_10-1715273481153.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/108140i716A680E6765D0DC/image-size/large?v=v2&amp;px=999" role="button" title="karthikarjun_10-1715273481153.png" alt="karthikarjun_10-1715273481153.png" /></span></P><P>Type the S/4 HANA Cloud web address: https://&lt;Host&gt;.s4hana.cloud.sap. Remember, select client 80. This client is used for making changes to the system.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="karthikarjun_11-1715273481157.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/108141iF7626E6C217FCB12/image-size/large?v=v2&amp;px=999" role="button" title="karthikarjun_11-1715273481157.png" alt="karthikarjun_11-1715273481157.png" /></span></P><P>Click the "Copy Logon URL to Clipboard" button. Then, open your web browser and paste the URL there. Enter your login details and press enter. After successful login, you'll see the screen below.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="karthikarjun_12-1715273481162.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/108139i86458454809E8CF3/image-size/large?v=v2&amp;px=999" role="button" title="karthikarjun_12-1715273481162.png" alt="karthikarjun_12-1715273481162.png" /></span></P><P>Click "Finish" and create your own package name. I've used "ZDEMO" here.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="karthikarjun_13-1715273481167.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/108142i37579E5BD041F39B/image-size/large?v=v2&amp;px=999" role="button" title="karthikarjun_13-1715273481167.png" alt="karthikarjun_13-1715273481167.png" /></span></P><P><STRONG><U>Part 1: Key Takeaway:</U></STRONG></P><OL><LI>Gaining foundational knowledge of systems and landscapes through story-based learning.</LI><LI>Grasping the fundamentals of full-stack development with diagrams</LI><LI>Setting up Eclipse for SAP ADT and establishing a connection to the S/4 HANA Public Cloud system.</LI></OL><P><EM><U><STRONG>Part 2</STRONG></U>: Coming soon - Keep an eye out for an exciting story-based learning journey as we delve into creating SAP RAP applications.</EM></P><P><EM><U><STRONG>Part 3:</STRONG></U> Coming soon - Embark on an exploration of AI and ML with our forthcoming model, create system with a dashboard for ( GR Automation )&nbsp;</EM></P><P><EM><U><STRONG>Part 4:</STRONG></U> Coming soon - Learn how to connect the circuit using Integration Suite in our upcoming installment.</EM></P><P><EM>Author:&nbsp;<SPAN>If you find this information helpful, please consider clicking the "Like" button on this blog and sharing your thoughts in the comments section below. You can also connect with the author on their LinkedIn profile:&nbsp;</SPAN><A title="Author's LinkedIn Profile" href="https://www.linkedin.com/in/karthik-arjun-a5b4a258/" target="_self" rel="nofollow noopener noreferrer">[Author's LinkedIn Profile]</A></EM></P> 2024-05-09T19:14:30.935000+02:00 https://community.sap.com/t5/technology-blogs-by-sap/new-release-available-sap-cloud-connector-2-17-0/ba-p/13697681 New Release Available: SAP Cloud Connector 2.17.0 2024-05-10T14:33:54.505000+02:00 MarcoErtel https://community.sap.com/t5/user/viewprofilepage/user-id/6305 <P>We are happy to announce that the fresh version of the SAP Cloud Connector is now available for <SPAN><A href="https://tools.hana.ondemand.com/#cloud" target="_blank" rel="noopener nofollow noreferrer">download</A></SPAN>. It is (as usual) packed with a host of new features and improvements. From bug fixes to enhancements, we've worked diligently to deliver an updated connector that addresses critical issues while also enhancing usability and functionality, which you can find more detailed in the <SPAN><A href="https://help.sap.com/whats-new/cf0cb2cb149647329b5d02aa96303f56?Component=Connectivity&amp;locale=en-US&amp;version=Cloud&amp;Software_Lifecycle=General%20Availability&amp;Valid_as_Of=2024-05-01%3A2024-05-03" target="_blank" rel="noopener noreferrer">release notes</A></SPAN>.<SPAN><BR /></SPAN>Moving onto enhancements, we've made changes to the underlying architecture and features of the Cloud Connector. One of the major changes is the switch from JavaWeb 3.x runtime on Tomcat 8.5 to JavaWeb 4.x, which operates on Tomcat 9. This new runtime container facilitates better performance and stability.<SPAN><BR /></SPAN>In addition, Cloud Connector 2.17 now supports the use of SapMachine 21 as Java runtime. This change can provide increased efficiency and flexibility for your operations.<SPAN><BR /></SPAN>One of the significant enhancements in this release is the addition of support for up to 3 LDAP servers for authentication.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="MarcoErtel_0-1715343899539.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/108662i99117DCC49CE8FA5/image-size/medium?v=v2&amp;px=400" role="button" title="MarcoErtel_0-1715343899539.png" alt="MarcoErtel_0-1715343899539.png" /></span></P><P>This feature is essential for setups where the user base is spread across multiple LDAP user stores or multiple user bases in a single LDAP user store (find more in the <SPAN><A href="https://help.sap.com/docs/connectivity/sap-btp-connectivity-cf/use-ldap-for-authentication?version=Cloud" target="_blank" rel="noopener noreferrer">documentation</A></SPAN>).<BR />We've also introduced the option to configure a separate port for the HA-related communication between the master and shadow instances.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="MarcoErtel_1-1715343899540.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/108661i432E39BA1A67206C/image-size/medium?v=v2&amp;px=400" role="button" title="MarcoErtel_1-1715343899540.png" alt="MarcoErtel_1-1715343899540.png" /></span></P><P>This new feature enables you to use HA in conjunction with certificate-based authentication to overcome the limitation from 2.16 (find more <SPAN><A href="https://help.sap.com/docs/connectivity/sap-btp-connectivity-cf/install-failover-instance-for-high-availability?version=Cloud" target="_blank" rel="noopener noreferrer">here</A></SPAN>)<SPAN><BR /></SPAN>Additional hardware monitoring REST APIs have been provided for disk and CPU status, allowing for more comprehensive system insights. Plus, you can now use the hardware monitor on the shadow instance as well.<SPAN><BR /></SPAN>To improve your operations, we’ve introduced for the access control settings a creation timestamp, providing more detailed and useful information for your operations:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="MarcoErtel_2-1715343899541.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/108660i2C75337A93E41BD6/image-size/medium?v=v2&amp;px=400" role="button" title="MarcoErtel_2-1715343899541.png" alt="MarcoErtel_2-1715343899541.png" /></span></P><P>Finally, we've improved the Cloud Connector UI by adding a session expiration progress bar. This new addition helps you keep track of your active session and alerts you when you need to log in again.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="MarcoErtel_3-1715343899542.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/108663i3AADF3B061835890/image-size/medium?v=v2&amp;px=400" role="button" title="MarcoErtel_3-1715343899542.png" alt="MarcoErtel_3-1715343899542.png" /></span></P><P>In summary, with this release, we've not only ensured the highest security levels but also worked on improving the overall user experience and functionality. Don't hesitate to upgrade your Cloud Connector to version 2.17.0 today (by downloading it from <SPAN><A href="https://tools.hana.ondemand.com/#cloud" target="_blank" rel="noopener nofollow noreferrer">here</A></SPAN>) and explore these new features and improvements. For more detailed information, make sure to check out the <SPAN><A href="https://help.sap.com/whats-new/cf0cb2cb149647329b5d02aa96303f56?Component=Connectivity&amp;locale=en-US&amp;version=Cloud&amp;Software_Lifecycle=General%20Availability&amp;Valid_as_Of=2024-05-01%3A2024-05-03" target="_blank" rel="noopener noreferrer">official release notes</A></SPAN>. Enjoy the enhanced performance and functionality of the new SAP Cloud Connector!Happy Connecting!</P> 2024-05-10T14:33:54.505000+02:00 https://community.sap.com/t5/technology-blogs-by-members/installing-saprouter-on-linux-a-step-by-step-guide/ba-p/13698342 Installing SAPRouter on Linux: A Step-by-Step Guide 2024-05-11T15:55:48.753000+02:00 Muthumayandi https://community.sap.com/t5/user/viewprofilepage/user-id/10779 <P><STRONG>What is SAP Router ?</STRONG></P><P>SAPRouter is a software component used to secure communication between SAP systems and the internet. Installing SAPRouter on Linux is a crucial step in ensuring secure communication for your SAP landscape. This step-by-step guide will walk you through the installation process.</P><P><STRONG>Prerequisites</STRONG>:</P><P>- Linux server (e.g., CentOS, Ubuntu)</P><P>- Root access to the server</P><P>- SAPRouter software package downloaded from the SAP Support Portal</P><P><STRONG>Step 1: Download SAPRouter:</STRONG></P><P>Download the SAPRouter software package from the SAP Support Portal. Ensure that you download the correct version for your operating system.</P><P><STRONG>Step 2: Extract the SAPRouter Package:</STRONG></P><P>Transfer the downloaded SAPRouter package to your Linux server. Use the following command to extract the package:</P><P>tar -xvf saprouter_&lt;version&gt;_linux_x86_64.tar.gz</P><P><STRONG>Step 3: Create a Directory for SAPRouter:</STRONG></P><P>Create a directory to store the SAPRouter files. You can use the following command to create the directory:</P><P>mkdir /usr/sap/saprouter</P><P><STRONG>Step 4: Copy SAPRouter Files:</STRONG></P><P>Copy the extracted SAPRouter files to the newly created directory:</P><P>cp -R &lt;path_to_extracted_files&gt;/saprouter /usr/sap/saprouter</P><P><STRONG>Step 5: Create a Configuration File:</STRONG></P><P>Create a configuration file named `saprouter.ini` in the `/usr/sap/saprouter` directory. Here's a basic example of the configuration file:</P><P># SAProuter Configuration File</P><P>version = 39</P><P>httpport = 81</P><P>tracefile = /usr/sap/saprouter/saprouter.trc</P><P>authid = *</P><P>permit = *</P><P><STRONG>Step 6: Set Permissions:</STRONG></P><P>Ensure that the SAPRouter binary and configuration files have the correct permissions:</P><P>chmod 755 /usr/sap/saprouter/saprouter</P><P>chmod 644 /usr/sap/saprouter/saprouter.ini</P><P>&nbsp;</P><P><STRONG>Step 7: Start SAPRouter:</STRONG></P><P>Start the SAPRouter using the following command:</P><P>/usr/sap/saprouter/saprouter -r -R /usr/sap/saprouter/saprouter.ini</P><P><STRONG>Step 8: Verify SAPRouter Status:</STRONG></P><P>Verify that SAPRouter is running and listening on the specified port (e.g., 81):</P><P>netstat -tuln | grep 81</P><P><STRONG>Step 9: Configure Firewall:</STRONG></P><P>Configure your firewall to allow incoming and outgoing traffic on the SAPRouter port (e.g., 81) to ensure proper communication.</P><P><STRONG>Step 10: Configure SAP Systems:</STRONG></P><P>Update the `secinfo` file of your SAP systems to include the SAPRouter details for communication through the SAPRouter.</P><P><STRONG>Overall information</STRONG>:</P><P>By following these steps, you can successfully install SAPRouter on your Linux server. This will help secure communication between your SAP systems and the internet, ensuring the integrity and confidentiality of your SAP la<SPAN>ndscape.</SPAN></P><P>#SAP #SAPRouter #Linux #Installation <a href="https://community.sap.com/t5/c-khhcw49343/SAP+Young+Thinkers/pd-p/7491a8e4-2c34-4d6b-bf69-b91db9291a90" class="lia-product-mention" data-product="1159-1">SAP Young Thinkers</a>&nbsp;#<a href="https://community.sap.com/t5/c-khhcw49343/Red+Hat+Enterprise+Linux/pd-p/566117836046276697184412662459974" class="lia-product-mention" data-product="304-1">Red Hat Enterprise Linux</a>&nbsp;<a href="https://community.sap.com/t5/c-khhcw49343/SUSE+Linux+Enterprise+Server/pd-p/68020287236497694019600446793069" class="lia-product-mention" data-product="305-1">SUSE Linux Enterprise Server</a>&nbsp;<a href="https://community.sap.com/t5/c-khhcw49343/SAP+Women+in+Tech/pd-p/5e61e027-661e-4c66-91ef-4e6fa20c40f6" class="lia-product-mention" data-product="1164-1">SAP Women in Tech</a><SPAN>&nbsp;</SPAN><a href="https://community.sap.com/t5/c-khhcw49343/SAP+Integration+Suite/pd-p/73554900100800003241" class="lia-product-mention" data-product="23-1">SAP Integration Suite</a><SPAN>&nbsp;</SPAN><a href="https://community.sap.com/t5/c-khhcw49343/SAP+Business+Application+Studio/pd-p/67837800100800007077" class="lia-product-mention" data-product="13-1">SAP Business Application Studio</a><SPAN>&nbsp;</SPAN><a href="https://community.sap.com/t5/user/viewprofilepage/user-id/10779">@Muthumayandi</a><SPAN>&nbsp;</SPAN><a href="https://community.sap.com/t5/user/viewprofilepage/user-id/39302">@Subramanian</a><SPAN>&nbsp;</SPAN><a href="https://community.sap.com/t5/user/viewprofilepage/user-id/1387241">@Sap</a><SPAN>&nbsp;</SPAN><a href="https://community.sap.com/t5/user/viewprofilepage/user-id/121481">@sapsapsap</a><SPAN>&nbsp;</SPAN></P> 2024-05-11T15:55:48.753000+02:00 https://community.sap.com/t5/technology-blogs-by-sap/technovation-summit-2024-expand-your-ai-and-btp-horizons/ba-p/13697831 Technovation Summit 2024: Expand your AI and BTP Horizons 2024-05-13T15:21:27.786000+02:00 ChrisGrundy https://community.sap.com/t5/user/viewprofilepage/user-id/171629 <P>This week the SAPinsider <A href="https://reg.eventmobi.com/technovation-summit-barcelona-2024-ai-sap-btp" target="_blank" rel="noopener nofollow noreferrer">Technovation Summit</A> will commence its inaugural event, with the topics of <A href="https://www.sap.com/products/artificial-intelligence.html" target="_blank" rel="noopener noreferrer">Artificial Intelligence</A> (AI) and <A href="https://www.sap.com/products/technology-platform.html" target="_blank" rel="noopener noreferrer">SAP Business Technology Platform</A> (BTP) the stars of the show. And following on just a few short months from the last SAPinsider EMEA conference, it will be great to see if the buzz and excitement around these two topics is just as palpable in Barcelona as it was in <A href="https://community.sap.com/t5/technology-blogs-by-sap/wonderful-wonderful-sap-btp-your-conference-guide-to-sapinsider-copenhagen/ba-p/13576363" target="_blank">Copenhagen</A>.</P><P>Technovation Summit 2024 is a 1.5-day event designed for anyone interested in AI or SAP BTP and offers an agenda rich in informational sessions and learning opportunities for any technology enthusiast seeking to expand their knowledge and understanding of the development, application and best practices in these two hot topics. And in addition to hearing from a wide range of speakers at the event, there will also be ample opportunity to network and dive into deeper technology discussions with technology experts and industry peers.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="280278_GettyImages-500050785_medium.jpg" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/108736i77B471D5BA85A9E6/image-size/medium?v=v2&amp;px=400" role="button" title="280278_GettyImages-500050785_medium.jpg" alt="280278_GettyImages-500050785_medium.jpg" /></span>Barcelona of course is a wonderful city location for an event like this. After spending a long day inside, absorbing all the sessions that one can fit into a day, building your knowledge and expanding your horizons of the potential that AI and BTP has to offer your business, what better place could there be to then relax and reflect on the day by taking the time to visit the beach, enjoy a city walk, or unwind and eat Tapas in one of the many tavernas on Las Ramblas, while marveling at the diverse and unique architecture.</P><H3 id="toc-hId-1123608099">6 of the Best for Barcelona</H3><P>The trouble with attending any event, is selecting which sessions to see that will prove to be of most value to you, especially when there are so many opportunities to learn new things. My advice is simple, try and plan as much in advance, and create your personal agenda as early as possible, so that when you get to the event you can spend less time planning and more time networking and seeking answers to the burning questions that are most important to you and your business. &nbsp;</P><P>So why don’t I help a little and start you off with some suggestions for your agenda. Let’s simply assume that everyone will plan to attend the day-1 and day-2 keynotes, to be delivered by <STRONG><EM>Iver van de Zand (14 May, 9:30am)</EM></STRONG> and <STRONG><EM>Prof. Marek Kowalkiewicz</EM> <EM>(15 May, 9:30am)</EM> </STRONG>who will share their own insights and experiences of AI, and in the case of Iver BTP too, setting the scene and the tone for each day of the summit. But after the keynotes, what next? Here are my personal 6 picks for Barcelona:</P><OL><LI><EM>Generating the Future: SAP Business AI and the Generative AI Roadmap, 14 May, 10:45am to 11:30am</EM></LI><LI><EM>AI Ethics – A Primer to Guide your Organization on the Opportunities and Risks, 14 May, 11:45am to 12:30pm</EM></LI><LI><EM>How to Automate Document Streams using SAP BTP and Machine Learning, 14 May, 1:30pm to 2:30pm</EM></LI><LI><EM>Case Study: Moving From On-Premises to The Cloud with SAP Integration Suite, 14 May, 3:00pm to 4:00pm</EM></LI><LI><EM>What's on your Mind? Maximize the Potential of SAP BTP &amp; AI, 14 May, 4:15pm to 5:00pm</EM></LI><LI><EM>What's on your Mind? Unveiling the Magic of Digital Transformation, 15 May, 11:45am to 12:30pm</EM></LI></OL><P>And, if you don’t mind, I’ll take a liberty and add one more to see. This isn’t strictly a session, but it will cover many topics that are BTP and AI related, and this is delivered in the form of a <STRONG><EM>BTP: Technology News Update</EM></STRONG><EM>, </EM>which will take place at the SAP booth during the<EM> <STRONG>networking break at 10:15 on 14 May</STRONG>. </EM>Please head to the booth to hear from our presenter Carles, and then network with the SAP onsite team to ask them any questions that spring to mind. Don’t be afraid to challenge them – they’ll appreciate you spending the time to talk with them!</P><P>Of course, these are just a few suggestions, and there are many more sessions available for you to select from the agenda. Why not take a look at the SAPinsider Technovation Summit website and look at the event <A href="https://reg.eventmobi.com/technovation-summit-barcelona-2024-ai-sap-btp/pages/Sessions" target="_blank" rel="noopener nofollow noreferrer">sessions list</A>, or even better download the SAPinsider2024 event app to your smart device (available on the App Store and Google Play) and to see a full list of available sessions, and to create your own personal agenda.</P><H3 id="toc-hId-927094594">Continue Your Learning After the Event</H3><P>While I’m sure you’ll enjoy your experience and learning opportunities in Barcelona, I expect that you’ll also want to continue your own personal learning journey after the event too. In this case why not explore other learning opportunities from SAP. For example, find out how to build software applications, side-by-side extensions, and integrations to and from cloud applications by exploring <A href="https://learning.sap.com/learning-journeys/discover-sap-business-technology-platform?url_id=text-sapcommunity-prdteng-BTP" target="_blank" rel="noopener noreferrer">SAP’s free learning content on SAP BTP</A>. It is made for both integration designers and extension developers from all levels of expertise and will help you stay up to date with the latest <A href="https://learning.sap.com/learning-journey/discover-sap-business-technology-platform?url_id=text-sapcommunity-prdteng-BTP" target="_blank" rel="noopener noreferrer">SAP BTP</A> innovations. And check out even more role-based learning resources and opportunities to get certified in one place on <A href="https://learning.sap.com/?url_id=text-sapcommunity-prdteng" target="_blank" rel="noopener noreferrer">SAP Learning site</A>.</P><P>For those of you travelling to Barcelona this week, I do hope that you find the SAPinsider Technovation Summit to be an informative and stimulating experience. My best wishes for safe travels, and I hope that you enjoy the event!</P><P>Chris Grundy</P><P>Product Marketing, SAP BTP</P> 2024-05-13T15:21:27.786000+02:00 https://community.sap.com/t5/enterprise-resource-planning-blogs-by-members/sap-integration-with-successfactors-through-cpi-a-step-by-step-handbook-for/ba-p/13699051 SAP Integration with SuccessFactors Through CPI: A Step-by-Step Handbook for Seamless Connectivity 2024-05-14T10:33:22.921000+02:00 nimra_younus https://community.sap.com/t5/user/viewprofilepage/user-id/888129 <P><STRONG>Introduction:</STRONG></P><P>This blog focuses on integrating SAP ERP with SuccessFactors through CPI, particularly addressing the configurable or standard Integration-Flow. Whether setting up initial connectivity with SAP or updating connectivity to a new SAP server, the steps outlined in this blog remain consistent across different SAP landscapes.</P><P>This blog will cover building the two-way communication channels:</P><UL><LI><STRONG>SAP ERP to CPI Suite</STRONG></LI><LI><STRONG>CPI Suite to SAP ERP</STRONG></LI></UL><P><STRONG>Step :1</STRONG> – Navigate to the CPI Suite and Copy the Name of the Integration Flow (I-Flow).</P><P><STRONG>For Example:</STRONG> “Replicate Employee Master Data and Org. Assignments from SAP SuccessFactors Employee Central to SAP ERP or SAP S4HANA”</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="nimra_younus_0-1715587003829.png" style="width: 734px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109359i1443064543709495/image-dimensions/734x103?v=v2" width="734" height="103" role="button" title="nimra_younus_0-1715587003829.png" alt="nimra_younus_0-1715587003829.png" /></span></P><P><STRONG>Step:2</STRONG> – For all configurable Integration Flows (I-Flows), you can access the technical integration settings guide on the SAP Help Portal. Simply search on Google using the keyword "I-FlowName.pdf" to locate the relevant documentation.</P><P><STRONG>For Example:</STRONG> “Replicate Employee Master Data and Org. Assignments from SAP SuccessFactors Employee Central to SAP ERP or SAP S4HANA<STRONG>.PDF</STRONG>”</P><P><EM>This URL is applicable to the current situation </EM><A href="https://help.sap.com/doc/2b73e3be50474cdc8cce76c3ff4860b6/2311/en-US/SF_EC_S4_Org_Objects_HCI_en-US.pdf" target="_blank" rel="noopener noreferrer"><EM>https://help.sap.com/doc/2b73e3be50474cdc8cce76c3ff4860b6/2311/en-US/SF_EC_S4_Org_Objects_HCI_en-US.pdf</EM></A></P><P>Under the "How to find Endpoint" section, locate the <STRONG>"Search Service definition."</STRONG> There, you'll find two procedures outlined in the SAP guide. Follow the steps provided in the guide accordingly.</P><P><STRONG>1st Procedure - </STRONG><STRONG>SAP ERP Communication to CPI: </STRONG></P><P><STRONG>Tips:</STRONG> Search for "SOAMANAGER" or "SM59" within the PDF guide to find the relevant web service definitions.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="nimra_younus_1-1715587067110.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109360i612F7E81EFB939FB/image-size/medium?v=v2&amp;px=400" role="button" title="nimra_younus_1-1715587067110.png" alt="nimra_younus_1-1715587067110.png" /></span></P><P><STRONG>Step:3- </STRONG>Configure the URL in I-Flow Receivers</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="nimra_younus_3-1715587120871.png" style="width: 585px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109363i8B0756102EA1A67F/image-dimensions/585x209?v=v2" width="585" height="209" role="button" title="nimra_younus_3-1715587120871.png" alt="nimra_younus_3-1715587120871.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="nimra_younus_4-1715587135839.png" style="width: 588px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109364i22A5DFDAF9134858/image-dimensions/588x126?v=v2" width="588" height="126" role="button" title="nimra_younus_4-1715587135839.png" alt="nimra_younus_4-1715587135839.png" /></span></P><P><STRONG>Step:4- </STRONG>Paste the URL into the Address section of the relevant Receiver.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="nimra_younus_5-1715587168814.png" style="width: 609px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109365iFD7628DE865F12E9/image-dimensions/609x294?v=v2" width="609" height="294" role="button" title="nimra_younus_5-1715587168814.png" alt="nimra_younus_5-1715587168814.png" /></span></P><P><STRONG>2nd Procedure - SAP ERP Communication to CPI:</STRONG></P><P><STRONG>Tips:</STRONG> Look up "SOAMANAGER" or "SM59" in the PDF guide to find the relevant procedures.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="nimra_younus_6-1715587190541.png" style="width: 599px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109366iEEB920CDE6BFB308/image-dimensions/599x120?v=v2" width="599" height="120" role="button" title="nimra_younus_6-1715587190541.png" alt="nimra_younus_6-1715587190541.png" /></span></P><P><STRONG>Step:1 –</STRONG> Deploy the I-Flow</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="nimra_younus_7-1715587203706.png" style="width: 598px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109367iD1E946F53999018D/image-dimensions/598x217?v=v2" width="598" height="217" role="button" title="nimra_younus_7-1715587203706.png" alt="nimra_younus_7-1715587203706.png" /></span></P><P><STRONG>Step 2 -</STRONG> Copy the Endpoint URL or WSDL from <STRONG>Manage integration Content</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="nimra_younus_8-1715587218685.png" style="width: 627px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109368i4E977C81CF555783/image-dimensions/627x332?v=v2" width="627" height="332" role="button" title="nimra_younus_8-1715587218685.png" alt="nimra_younus_8-1715587218685.png" /></span></P><P><STRONG>Step 3 –</STRONG> Proceed to SOAMANAGER and Enter CPI SID in Username and Password</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="nimra_younus_9-1715587234138.png" style="width: 633px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109369iDD56B706FC4EB479/image-dimensions/633x302?v=v2" width="633" height="302" role="button" title="nimra_younus_9-1715587234138.png" alt="nimra_younus_9-1715587234138.png" /></span></P><P>Then, navigate to the Transport Settings tab and enter the CPI Endpoint WSDL/URL.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="nimra_younus_10-1715587255428.png" style="width: 603px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109370i8342897AD2E0D20F/image-dimensions/603x278?v=v2" width="603" height="278" role="button" title="nimra_younus_10-1715587255428.png" alt="nimra_younus_10-1715587255428.png" /></span></P><P><STRONG>Conclusion: </STRONG></P><P>In conclusion, establishing seamless integration between SAP ERP and SuccessFactors through SAP Cloud Platform Integration (CPI) is critical for optimizing business processes and ensuring data consistency across the organization.&nbsp;This blog aims to provide a standard and comprehensive guide for configuring two-way communication regardless of the specific Integration flow (I-Flow).</P> 2024-05-14T10:33:22.921000+02:00 https://community.sap.com/t5/technology-blogs-by-members/integrating-sap-s-4hana-with-kafka-via-sap-advanced-event-mesh-part1/ba-p/13698920 Integrating SAP S/4HANA with Kafka via SAP Advanced Event Mesh: Part1 – Outbound connection 2024-05-14T16:23:10.601000+02:00 snayak https://community.sap.com/t5/user/viewprofilepage/user-id/1420893 <P><U><FONT size="4"><STRONG>Introduction</STRONG></FONT></U></P><P>In today's fast-paced business world, the ability to seamlessly communicate and exchange data between different systems is crucial. SAP Advanced Event Mesh (AEM) offers a robust solution for real-time event-driven communication across various SAP systems and external services. In this blog post, we'll explore how to integrate S/4HANA with Kafka using SAP AEM for data streaming and event-driven architecture.</P><P>If you’re new to SAP AEM, I highly recommend checking out this <A href="https://community.sap.com/t5/technology-blogs-by-sap/advanced-event-mesh-create-your-first-event-broker/ba-p/13571945" target="_blank">blog series</A>&nbsp;to understand the fundamentals.</P><P><STRONG><U>Step-by-Step Guide</U></STRONG></P><P>Let's break down the connection process between S/4 HANA and Kafka using SAP AEM into 6 sections, each explaining a key part of the connection setup to help you easily understand and implement the process.</P><P><STRONG><EM><FONT face="arial,helvetica,sans-serif">1.&nbsp;Login and Setup SAP AEM Service</FONT></EM></STRONG></P><UL><LI>First, log in to your BTP subaccount and create a subscription for AEM ensuring your user has the required roles. Please note that I've skipped the steps on how to create an AEM subscription, but you may refer to this <A href="https://community.sap.com/t5/technology-blogs-by-sap/advanced-event-mesh-create-your-first-event-broker/ba-p/13571945#:~:text=First%20Step%3A%20Create%20an%20Advanced,Subaccount%20in%20the%20correct%20region.&amp;text=On%20BTP%2C%20create%20your%20subaccount,and%20with%20your%20preferred%20provider." target="_blank">blog</A> for detailed steps. Once subscribed, log in to your SAP AEM tenant and navigate to Cluster Manager to create an Event Broker service. This service enables applications to publish or consume events. Below is the start page of SAP AEM after logging in.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_12-1715616761766.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109721i29E8A841A29D07DB/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_12-1715616761766.png" alt="snayak_12-1715616761766.png" /></span></P><UL><LI>Create an Event Broker Service by clicking on ‘Create Service’.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_13-1715616800669.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109722i47F618932EBCCA3E/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_13-1715616800669.png" alt="snayak_13-1715616800669.png" /></span></P><UL><LI>Provide a meaningful name for the service e.g. – ‘AEM_SERVICE_DEV’, select the service type, and choose the region. Click on "Create Service".</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_14-1715616837508.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109723iF487B8DB0B3710E5/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_14-1715616837508.png" alt="snayak_14-1715616837508.png" /></span></P><UL><LI>After the service is activated, you'll see the page.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_15-1715616879619.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109724i7206609C3F2FBFB3/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_15-1715616879619.png" alt="snayak_15-1715616879619.png" /></span></P><UL><LI>Navigate to "Manage" and then "Authentication". Enable Client Certificate Authentication.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_16-1715616908113.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109725iF984F1C873D6CDAB/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_16-1715616908113.png" alt="snayak_16-1715616908113.png" /></span></P><P><EM><STRONG><FONT face="arial,helvetica,sans-serif">2. Establishing Trust between S/4 HANA and&nbsp;AEM</FONT></STRONG></EM></P><UL><LI>To implement client certificate-based authentication, you need to establish trust between S/4 HANA and the AEM service broker. In your S/4 HANA system, execute the STRUST transaction to open the Trust Manager. Export the certificates from SSL client (Standard) and upload them into AEM in the next step.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_17-1715617065413.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109726i9FCB7548A64CD6E4/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_17-1715617065413.png" alt="snayak_17-1715617065413.png" /></span></P><UL><LI>Go to "Manage" and then "Certificate Authorities". Upload the exported certificates by clicking on "Add Client Certificate Authority".</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_18-1715617153746.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109728i773DDEAD9CEC5B89/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_18-1715617153746.png" alt="snayak_18-1715617153746.png" /></span></P><UL><LI>Once done, all the certificates will be displayed as shown below.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_0-1715755203799.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110707iA72582785F26D373/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_0-1715755203799.png" alt="snayak_0-1715755203799.png" /></span></P><UL><LI>Now, import the certificate chain of the SAP AEM service broker host and BTP-IS Subaccount host in the SSL client (Standard) in the STRUST transaction code.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_1-1715755270521.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110708i91B0EBBE0C72E0EE/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_1-1715755270521.png" alt="snayak_1-1715755270521.png" /></span></P><P><STRONG><EM><FONT face="arial,helvetica,sans-serif">3. Broker Manager Configuration in AEM</FONT></EM></STRONG></P><UL><LI>Click on "Open Broker Manager" and log in using the "Management Editor Username" and "Management Editor Password". You can find these access details under the "Status" section of the broker service.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_21-1715617296870.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109731iED2396FF4E742085/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_21-1715617296870.png" alt="snayak_21-1715617296870.png" /></span></P><UL><LI>Once logged into Broker Manager, create a Queue which will serve as a storage mechanism for messages received by SAP AEM. When S/4HANA will generate any events or messages, they will be placed in the queue before being processed and forwarded to Kafka.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_22-1715617320622.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109732iC84D1CCED6690AAB/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_22-1715617320622.png" alt="snayak_22-1715617320622.png" /></span></P><UL><LI>Provide a meaningful name for the Queue e.g. – ‘AEM_DEV’.</LI><LI>Assign a Subscription to the Queue. By creating a subscription, we ensure that our SAP AEM instance is subscribed to the relevant topics or events generated by S/4 HANA.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_23-1715617406156.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109733iDBA02AB11D4F4214/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_23-1715617406156.png" alt="snayak_23-1715617406156.png" /></span></P><UL><LI>Go to "Access Control" and create a Client Username with the hostname from the leaf certificate maintained in SSL Client (Standard) in the STRUST.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_24-1715617449258.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109734i71A89CCA372C03FD/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_24-1715617449258.png" alt="snayak_24-1715617449258.png" /></span></P><P><STRONG><EM><FONT face="arial,helvetica,sans-serif">4. Configure AEM to Kafka connection through Kafka Sender Bridge</FONT></EM></STRONG></P><UL><LI>The Kafka Sender Bridge is required to facilitate communication between AEM and the target Kafka cluster by converting AEM messages into Kafka events and propagating them to the remote Kafka cluster.</LI><LI>To establish client certificate authentication between AEM and the Kafka cluster, you'll need .jks files of the Keystore and Truststore from your target Kafka broker.</LI><LI>Open the command prompt and use the command 'keytool' to convert the <STRONG>.jks</STRONG> files into <STRONG>.p12</STRONG> files. Here's how:</LI></UL><P><EM>keytool -importkeystore -srckeystore C:\OpenSSL\&lt;keystorefilename&gt;.jks -destkeystore C:\OpenSSL\keystore.p12 -srcstoretype jks -deststoretype pkcs12</EM></P><P><EM>keytool -importkeystore -srckeystore C:\OpenSSL\&lt;truststorefilename&gt;.jks -destkeystore C:\OpenSSL\truststore.p12 -srcstoretype jks -deststoretype pkcs12</EM></P><UL><LI>Once converted, copy these .p12 files to the OpenSSL -&gt; Bin folder.</LI><LI>Now, navigate to the 'OpenSSL' directory and convert these .p12 files to .pem files using the commands below:</LI></UL><P><EM>openssl pkcs12 -in keystore.p12 -out keystore.pem</EM></P><P><EM>openssl pkcs12 -in truststore.p12 -out truststore.pem</EM></P><UL><LI>You'll need to set a passphrase during this process. Note: Remember this passphrase, as you'll need it for client certificate authentication.</LI><LI>From the ‘truststore.pem’ file, copy the content of root and the leaf certificates and save it as .cer files. Add those in our service broker under "Manage" -&gt; "Certificate Authorities" -&gt; "Domain Certificate Authorities".</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_25-1715617589047.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109735i542365654012BEEF/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_25-1715617589047.png" alt="snayak_25-1715617589047.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_26-1715617618164.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109736i3E5D3ECAEC4A2651/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_26-1715617618164.png" alt="snayak_26-1715617618164.png" /></span></P><UL><LI>Now, navigate inside Broker Manager to "Kafka Bridges" and create a "Kafka Sender".</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_2-1715755348736.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110709iC08D8B21C11CA052/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_2-1715755348736.png" alt="snayak_2-1715755348736.png" /></span></P><UL><LI>Add the Kafka Broker Host and Port details in the ‘Bootstrap Address List’ and copy the contents of the 'keystore.pem' file and paste them under Client Certificate Authentication - &gt; Content as shown below. Additionally, include the passphrase that we entered while converting the .p12 file to .pem in the ‘Password’.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_28-1715617668712.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109738iBBE09B931E48D350/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_28-1715617668712.png" alt="snayak_28-1715617668712.png" /></span></P><UL><LI>Once the Kafka Sender is created, go inside, and click on "Queue Binding".</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_3-1715755390156.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110710i01F64AE5CF73CBFD/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_3-1715755390156.png" alt="snayak_3-1715755390156.png" /></span></P><UL><LI>Select our queue – ‘AEM_DEV’ created in section 3.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_30-1715617779309.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109742i980A0B9413212A96/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_30-1715617779309.png" alt="snayak_30-1715617779309.png" /></span></P><UL><LI>Go inside the Queue Binding created in earlier step and add the topic name of the target Kafka cluster in the "Remote Topic".</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_31-1715617812099.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109743iACAC870298CE2328/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_31-1715617812099.png" alt="snayak_31-1715617812099.png" /></span></P><UL><LI>Confirm whether the Kafka connection is up and running.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_32-1715617830904.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109744i5C921DB2D2F36E7B/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_32-1715617830904.png" alt="snayak_32-1715617830904.png" /></span></P><P><STRONG><EM><FONT face="arial,helvetica,sans-serif">5. Configure S/4 HANA to SAP AEM connection</FONT></EM></STRONG></P><UL><LI>Now to establish a connection from S/4 HANA to AEM go to transaction code SM59, create a type-G RFC destination and enter the host and port of the SAP AEM service broker.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_33-1715617904726.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109745iDCE4429E481B429D/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_33-1715617904726.png" alt="snayak_33-1715617904726.png" /></span></P><UL><LI>In transaction code /IWXBE/CONFIG, create Channel configuration in the S/4 HANA system by clicking on ‘via Service Key -&gt; Advanced’ and assign the RFC destination created in the earlier step. In the ‘Service Key’ section enter the JSON content of the service key created using ‘<EM>aem-validation-service-plan</EM>’ instance in BTP cockpit. Please refer this <A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-s-4hana-integration-with-sap-integration-suite-advanced-event-mesh/ba-p/13577271" target="_blank">blog</A> on how to create a service key.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_34-1715617936871.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109746i757EC76128DACABC/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_34-1715617936871.png" alt="snayak_34-1715617936871.png" /></span></P><UL><LI>Save the above changes and activate the channel.</LI><LI>Create an outbound binding and assign any standard topic. For example, select "Business Partner". So whenever a Business Partner is newly created or modified, a standard event will be raised through this outbound channel.</LI></UL><P>&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_5-1715755493498.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110712iC2A415C3ECFB93D4/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_5-1715755493498.png" alt="snayak_5-1715755493498.png" /></span></P><P><STRONG><EM><FONT face="arial,helvetica,sans-serif">6. Testing the end-to-end connection</FONT></EM></STRONG></P><UL><LI>To test the end-to-end connection, go to transaction code BP and create a Business Partner. Click on save.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_36-1715618022882.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109748i33173263BD54B049/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_36-1715618022882.png" alt="snayak_36-1715618022882.png" /></span></P><UL><LI>Once saved, an event should be raised. You can check this by going to transaction code /IWXBE/EEE_SUPPORT and then to /IWXBE/R_EVENT_MONITOR.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_37-1715618043755.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109749iFC44664B4E896293/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_37-1715618043755.png" alt="snayak_37-1715618043755.png" /></span></P><UL><LI>Select your AEM channel.</LI><LI>You will find a list of all events that were raised and sent to AEM.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_38-1715618074086.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109750iC1458DFFF758B8D7/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_38-1715618074086.png" alt="snayak_38-1715618074086.png" /></span></P><UL><LI>Now, go to AEM. In the Kafka sender, you can see the message count in the sent section has increased. This means that the message was successfully received by AEM and then pushed to the Kafka cluster. Additionally, verify the message at the Kafka end.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_39-1715618095747.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109751i01A84FDD106D4381/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_39-1715618095747.png" alt="snayak_39-1715618095747.png" /></span></P><UL><LI>You can also navigate to the 'Try-Me' section where you can set up the sender and receiver connection. Subsequently, you can subscribe to our topic at the receiver end and observe the incoming message from S/4 HANA as shown below.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="snayak_40-1715618116108.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/109752i195CB6640391C42D/image-size/medium?v=v2&amp;px=400" role="button" title="snayak_40-1715618116108.png" alt="snayak_40-1715618116108.png" /></span></P><P><STRONG><U>Conclusion</U></STRONG></P><P>Through this blog, we've demonstrated the process of sending an event from SAP S/4HANA to Kafka via SAP AEM. Now, enterprises can leverage the power of event-driven architectures to drive innovation and efficiency in their operations.</P><P>Stay tuned for my next blog, where we'll explore how to establish an inbound connection from Kafka to S/4 HANA via SAP AEM, completing the full event-driven communication loop.</P><P><STRONG><U>References</U></STRONG></P><P><A href="https://community.sap.com/t5/technology-blogs-by-sap/advanced-event-mesh-create-your-first-event-broker/ba-p/13571945" target="_blank">https://community.sap.com/t5/technology-blogs-by-sap/advanced-event-mesh-create-your-first-event-broker/ba-p/13571945</A></P><P><A href="https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-s-4hana-integration-with-sap-integration-suite-advanced-event-mesh/ba-p/13577271" target="_blank">https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/sap-s-4hana-integration-with-sap-integration-suite-advanced-event-mesh/ba-p/13577271</A></P><P><A href="https://community.sap.com/t5/technology-blogs-by-sap/video-tutorial-sap-s-4hana-and-sap-integration-suite-advanced-event-mesh/ba-p/13575193" target="_blank">https://community.sap.com/t5/technology-blogs-by-sap/video-tutorial-sap-s-4hana-and-sap-integration-suite-advanced-event-mesh/ba-p/13575193</A></P><P><A href="https://help.pubsub.em.services.cloud.sap/Cloud/cloud-lp.htm" target="_blank" rel="noopener nofollow noreferrer">https://help.pubsub.em.services.cloud.sap/Cloud/cloud-lp.htm</A></P><P><A href="https://help.pubsub.em.services.cloud.sap/Cloud/Broker-Manager/config-kafka-bridge.htm" target="_blank" rel="noopener nofollow noreferrer">https://help.pubsub.em.services.cloud.sap/Cloud/Broker-Manager/config-kafka-bridge.htm</A></P> 2024-05-14T16:23:10.601000+02:00 https://community.sap.com/t5/technology-blogs-by-members/sap-btp-trial-account-creation-and-enabling-integration-suite-service-sap/ba-p/13702052 SAP BTP Trial Account Creation and Enabling Integration Suite service(SAP CPI) 2024-05-16T09:35:26.608000+02:00 Praveen_Kumar_B https://community.sap.com/t5/user/viewprofilepage/user-id/1401210 <OL><LI><SPAN>Create an SAP Account from&nbsp;</SPAN><A href="https://www.sap.com/" target="_blank" rel="noopener noreferrer"><SPAN>SAP.com</SPAN></A><SPAN>&nbsp;</SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>It Creates the SAP Universal ID</SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>Fill in the Required Fields and Click on Submit.</SPAN></LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_30-1715767172460.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110839i2CD03D7BB447C310/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_30-1715767172460.png" alt="Praveen_Kumar_B_30-1715767172460.png" /></span></P><P>&nbsp;</P><P><SPAN>2. After Clicking on the Submit button, SAP will send an email to finalize your SAP account.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_1-1715766302026.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110792iFBB5F6D892C3B377/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_1-1715766302026.png" alt="Praveen_Kumar_B_1-1715766302026.png" /></span></P><P>&nbsp;</P><P><SPAN>3. Open Your Mail and Click to activate your account</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_2-1715766302042.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110791i2F68F037602E347D/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_2-1715766302042.png" alt="Praveen_Kumar_B_2-1715766302042.png" /></span></P><P>&nbsp;</P><P><SPAN>4. Now We have to create the SAP BTP Trial Account, go to&nbsp;</SPAN><A href="https://account.hana.ondemand.com/" target="_blank" rel="noopener nofollow noreferrer"><SPAN>account.hana.ondemand.com</SPAN></A><SPAN>&nbsp;and click on sign in, give your email and password, and click on sign in.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_3-1715766301992.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110793i2BAD4429186A4EEC/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_3-1715766301992.png" alt="Praveen_Kumar_B_3-1715766301992.png" /></span></P><P>&nbsp;</P><P><SPAN>5. After logging into the BTP Cockpit, Click on Trial Home.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_4-1715766302053.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110795i00B1283B7C382709/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_4-1715766302053.png" alt="Praveen_Kumar_B_4-1715766302053.png" /></span></P><P>&nbsp;</P><P><SPAN>6. Choose the region you want and click on Create Account</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_5-1715766302036.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110794i95F8B2A461E2368C/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_5-1715766302036.png" alt="Praveen_Kumar_B_5-1715766302036.png" /></span></P><P>&nbsp;</P><P><SPAN>7. After clicking on Create Account, it creates a Global account and subaccount for you, then click on Continue.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_6-1715766302013.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110797i0A9D5E79EEB20815/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_6-1715766302013.png" alt="Praveen_Kumar_B_6-1715766302013.png" /></span></P><P>&nbsp;</P><P><SPAN>8. Click on Go To Your Trial Account.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_7-1715766302068.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110796iE02BB19A83B24DDA/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_7-1715766302068.png" alt="Praveen_Kumar_B_7-1715766302068.png" /></span></P><P>&nbsp;</P><P><SPAN>9. Click on Subaccount.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_8-1715766302027.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110798i6A3ABB7DDEB24ED1/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_8-1715766302027.png" alt="Praveen_Kumar_B_8-1715766302027.png" /></span></P><P>&nbsp;</P><P><SPAN>&nbsp;10.&nbsp;</SPAN><SPAN>Click on Instances and Subscriptions</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_9-1715766302127.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110800i9E612F69C993211C/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_9-1715766302127.png" alt="Praveen_Kumar_B_9-1715766302127.png" /></span></P><P>&nbsp;</P><P><SPAN>11. Here we can see the services we subscribed to.&nbsp;</SPAN><SPAN>&nbsp;</SPAN></P><P style=" padding-left : 30px; "><SPAN>To access the Integration Suite, first, we must Subscribe to it.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_10-1715766302184.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110801i7CEF985BAF0E5ED4/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_10-1715766302184.png" alt="Praveen_Kumar_B_10-1715766302184.png" /></span></P><P>&nbsp;</P><P><SPAN>12. To Subscribe to the Integration Suite, click on Service Marketplace and search for Integration Suite.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_11-1715766302031.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110802iBC55963A92D66F1A/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_11-1715766302031.png" alt="Praveen_Kumar_B_11-1715766302031.png" /></span></P><P>&nbsp;</P><P><SPAN>&nbsp;13.&nbsp;</SPAN><SPAN>Click on Integration Suite and click on Create.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_12-1715766302159.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110804i8DDF77B33C66B704/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_12-1715766302159.png" alt="Praveen_Kumar_B_12-1715766302159.png" /></span></P><P>&nbsp;</P><P><SPAN>&nbsp;14.&nbsp;</SPAN><SPAN>Click on create.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_13-1715766302176.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110805iDA714236F5F35A02/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_13-1715766302176.png" alt="Praveen_Kumar_B_13-1715766302176.png" /></span></P><P>&nbsp;</P><P><SPAN>&nbsp;15.&nbsp;</SPAN><SPAN>To check Whether the Integration Suite is created or not click on View Subscription.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_14-1715766302382.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110803iB484D760D0CD42A8/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_14-1715766302382.png" alt="Praveen_Kumar_B_14-1715766302382.png" /></span></P><P>&nbsp;</P><P><SPAN>&nbsp;16.&nbsp;</SPAN><SPAN>Now we can see the Integration suite in subscriptions.</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>Click on Integration Suite, it will open the Integration Suite.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_15-1715766302102.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110806i97BA2290000989B0/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_15-1715766302102.png" alt="Praveen_Kumar_B_15-1715766302102.png" /></span></P><P>&nbsp;</P><P><SPAN>&nbsp;17.&nbsp;</SPAN><SPAN>It will Show you the Authorization error because to access the Integration Suite we have to assign an&nbsp;</SPAN><STRONG><SPAN>Integration_Provisioner</SPAN></STRONG><SPAN>&nbsp;Role for the User.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_16-1715766302057.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110808iD6AACED8478B32AA/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_16-1715766302057.png" alt="Praveen_Kumar_B_16-1715766302057.png" /></span></P><P>&nbsp;</P><P><SPAN>18. To assign an&nbsp;</SPAN><STRONG><SPAN>Integration_Provisioner</SPAN></STRONG><SPAN>&nbsp;Role, Go back to the BTP Cockpit click on Users, and select the User.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_29-1715766964557.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110836i54720A6A59AD6944/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_29-1715766964557.png" alt="Praveen_Kumar_B_29-1715766964557.png" /></span></P><P>&nbsp;</P><P><SPAN>&nbsp;19.&nbsp;</SPAN><SPAN>After Selecting the User click on Assign Role Collection.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_18-1715766302054.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110809i2E59595CC56F0CCF/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_18-1715766302054.png" alt="Praveen_Kumar_B_18-1715766302054.png" /></span></P><P>&nbsp;</P><P><SPAN>20. Search for the&nbsp;</SPAN><SPAN>Integration_Provisioner</SPAN><SPAN>&nbsp;Role and click on&nbsp; Assign Role Collection.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_19-1715766302155.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110810iF5FB58E27FB45EC6/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_19-1715766302155.png" alt="Praveen_Kumar_B_19-1715766302155.png" /></span></P><P>&nbsp;</P><P><SPAN>21. After Assigning Role, Click on Instances and Subscriptions and then Click on Integration Suite.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_20-1715766302065.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110811i7C04024C2D5C2299/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_20-1715766302065.png" alt="Praveen_Kumar_B_20-1715766302065.png" /></span></P><P>&nbsp;</P><P><SPAN>22. Click on Add Capabilities.</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>Note: - Sometimes it will not show the add capabilities option, it will take time to resolve this Refresh the page or try sign-out and Sign in again.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_21-1715766302039.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110814iD1E8E29AFEBF3835/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_21-1715766302039.png" alt="Praveen_Kumar_B_21-1715766302039.png" /></span></P><P>&nbsp;</P><P><SPAN>23. After clicking on Add Capabilities, it will show you the list of Capabilities,</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>Select the capabilities that you need and click on next.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_22-1715766302415.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110813iDC7FD4AD41BA21BD/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_22-1715766302415.png" alt="Praveen_Kumar_B_22-1715766302415.png" /></span></P><P>&nbsp;</P><P><SPAN>24. In capabilities if you select Manage APIs then this step will appear, select the two checkboxes and click on next.&nbsp;</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_23-1715766302045.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110812iCCF912D7F81C81F7/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_23-1715766302045.png" alt="Praveen_Kumar_B_23-1715766302045.png" /></span></P><P>&nbsp;</P><P><SPAN>25. Click on Activate.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_24-1715766302168.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110816iAAFBC27ED1BCFFD4/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_24-1715766302168.png" alt="Praveen_Kumar_B_24-1715766302168.png" /></span></P><P>&nbsp;</P><P style=" text-align : left; "><SPAN>26. To activate Capabilities of Integration Suite it will take some time.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_25-1715766302155.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110815i7F3BCFBC0081DC78/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_25-1715766302155.png" alt="Praveen_Kumar_B_25-1715766302155.png" /></span></P><P>&nbsp;</P><P><SPAN>27. After the activation click on ok.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_26-1715766302119.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110817i808DF4F5AE1F4F03/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_26-1715766302119.png" alt="Praveen_Kumar_B_26-1715766302119.png" /></span></P><P>&nbsp;</P><P style=" text-align : left; "><SPAN>28. To create and monitor the Iflow we need to assign some roles related to Process Integration.</SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>Go back to BTP Cockpit-&gt;</SPAN><SPAN>User-&gt;</SPAN><SPAN>Assign the below Roles</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_27-1715766302059.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110819iFDAED0BE8C2B1967/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_27-1715766302059.png" alt="Praveen_Kumar_B_27-1715766302059.png" /></span></P><P>&nbsp;</P><P><SPAN>29.&nbsp; Now open the Integration Suite from BTP cockpit-&gt;</SPAN><SPAN>Instances and subscriptions.</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>Now You can create, edit, and monitor the Iflows.</SPAN><SPAN><BR /></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Praveen_Kumar_B_28-1715766302403.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110818i2528B8FD5E1F9607/image-size/medium?v=v2&amp;px=400" role="button" title="Praveen_Kumar_B_28-1715766302403.png" alt="Praveen_Kumar_B_28-1715766302403.png" /></span></P> 2024-05-16T09:35:26.608000+02:00 https://community.sap.com/t5/technology-blogs-by-members/how-to-use-the-odata-api-for-exchanging-messages-from-logs-and-the/ba-p/13700347 How to use the OData-API for exchanging Messages from Logs and the Datastore in Integration Suite 2024-05-16T09:36:10.757000+02:00 JoergHopmann https://community.sap.com/t5/user/viewprofilepage/user-id/1427690 <P>In this blog I will show the basic steps and components to access the&nbsp;<EM>MessageProcessingLog</EM> and the attached messages, wether they are stored in the log itself, in the <EM>MessageStore</EM> or in the <EM>DataStore.</EM></P><P><EM>Later in further blogs I will go into details and show some specific implementations and will compare the different types of message-stores. So please be patient and check back for further information.</EM></P><P><EM>The starting point is in the&nbsp;<A title="SAP Business Accelerator Hub" href="https://api.sap.com/" target="_blank" rel="noopener noreferrer">SAP Business Accelerator Hub</A>.</EM>&nbsp;There is an API package&nbsp;<EM>SAP Cloud Integration</EM> which offers some OData APIs in Version 2. We are focussing on the&nbsp;<EM>Message Processing Logs and download the definition of, what is called here a vdm - virtual data model. I don't want to go deeper in the edmx, only so far, if you search on your fav. search-engine you may get the following statement:</EM></P><P style=" padding-left : 30px; "><EM>edmx file is&nbsp;<STRONG>an XML file that defines an Entity Data Model (EDM), describes the target database schema, and defines the mapping between the EDM and the database</STRONG>.</EM></P><P>On the Business Accelerator Hub you can find tons of documentation about how to use the source code generator in maven, on how to build up (in this case) java-classes, test the API online, with a sandbox or with your own tenant and even code-snippets in many different languages can be downloaded.</P><P>In our scenario we build a client in the Netweaver Development Studio. Then maven-support is initially not part of it but can be added. Search for the keyword M2E. A good starting point on how to generate the client classes (vdm - virtual data model) and how to generate a project from a Maven archetype is on&nbsp;<A title="SAP GitHub" href="https://sap.github.io/cloud-sdk/docs/java/getting-started" target="_blank" rel="noopener nofollow noreferrer">sap.github.io</A>&nbsp;.</P><P>The overall framework for the implementation here is an OnPremise fat-client, but everything can run deployed on a BTP tenant, only the GUI frontend needs to be changed.</P><P>What you get when generating the sources for your client is the following helper-packages and classes and a&nbsp;<EM>MessageProcessingLogsService</EM>:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="MessageProcessingLogs.jpg" style="width: 357px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110098i575C94E176F082B6/image-dimensions/357x349?v=v2" width="357" height="349" role="button" title="MessageProcessingLogs.jpg" alt="MessageProcessingLogs.jpg" /></span></P><P>There are several steps to consider for enhancing your pom-file: Dependencies and plugins. E.g. here:&nbsp;<A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-cloud-application-programming-model-deep-insert-5-consume-remote/ba-p/13419185" target="_blank">SAP Cloud Application Programming Model: Deep Insert (5) Consume Remote Service with SAP Cloud SDK</A>&nbsp;</P><P>The starting point here is the method getAllMessageProcessingLogs()</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="methods.jpg" style="width: 361px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110106i339EF188623F8803/image-dimensions/361x432?v=v2" width="361" height="432" role="button" title="methods.jpg" alt="methods.jpg" /></span></P><P>Depending on wether the code runs on your local laptop or in the cloud, you have to create a destination first:</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-java"><code>import com.sap.cloud.sdk.cloudplatform.connectivity.AuthenticationType; import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination; import com.sap.cloud.sdk.cloudplatform.connectivity.HttpDestination; import com.sap.cloud.sdk.cloudplatform.security.BasicCredentials; (...) public DefaultHttpDestination getDestination() throws IllegalArgumentException { if (destination == null) { if (this instanceof BasicAuthentication) { destination = DefaultHttpDestination.builder(tenant.getURL()) .authenticationType(AuthenticationType.BASIC_AUTHENTICATION) .basicCredentials(new BasicCredentials(((BasicAuthentication)this).getUser(), ((BasicAuthentication)this).getPassword())) .keyStore(keystore) .build(); } } return destination; }</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>(On your tenant you can use the&nbsp;<EM>DestinationService)</EM></P><P>With the destination described above we can request all packages and artifacts. As for now the request is sent by&nbsp;<EM>getAllIntegrationRuntimeArtifacts(). This includes iFlows but also Rest-APIs and more. </EM></P><P><EM>Unfortunately</EM></P><UL><LI><EM>runtime-artifacts do not point to any package</EM></LI><LI><EM>designtime-artifacts are called from a package-perspective but do not include some types like Rest-APIs.&nbsp;</EM></LI></UL><P><EM>(Status on 2024-05-24 is a response of HTTP 501 - not yet implemented. the dev is seems still working on putting everything in place)</EM></P><P><EM>Hence we have a gap of links between packages and artifacts, in case they are not iFlows (e.g. Rest-Api).&nbsp;</EM>The following code puts "everything" together as complete as possible and attaches the artifacts without a link to a package into a virtual package named "&lt;unknown&gt;"</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-java"><code>//create Hashtable for storing our version of packages designPackages = new Hashtable&lt;String, DesignPackage&gt;(); if (authentication != null) { //get url String tenantURL = authentication.getTenant().getRuntimeURL(); //create destination DefaultHttpDestination destination = authentication.getDestination(); //create the services generated in the vdm IntegrationContentService iCS = new DefaultIntegrationContentService().withServicePath("/api/v1/"); //create Hashtable for storing our version of runtime artifacts Hashtable&lt;String, IntegrationRuntimeArtifact&gt; ira_table = new Hashtable&lt;String, IntegrationRuntimeArtifact&gt;(); //retrieve all packages, execute the network-request try { final List&lt;IntegrationPackage&gt; ip = iCS.getAllIntegrationPackages() .executeRequest(destination); //retrieve all runtime artifacts final List&lt;IntegrationRuntimeArtifact&gt; ira = iCS.getAllIntegrationRuntimeArtifacts() .executeRequest(destination); //and put them in the table for (IntegrationRuntimeArtifact ira_iter : ira) ira_table.put(ira_iter.getId(), ira_iter); //iterate over all packages for (IntegrationPackage ip_iter : ip) { //store it in our Hashtable DesignPackage dp = new DesignPackage(ip_iter); designPackages.put(dp.getName(), dp); //get artifacts for this package final List&lt;IntegrationDesigntimeArtifact&gt; ida = ip_iter.getIntegrationDesigntimeArtifactsOrFetch(); //set artifacts as child to the package for (IntegrationDesigntimeArtifact ida_iter : ida) { String url = tenantURL + "/http/" + ida_iter.getId(); Artifact a = new Artifact(ida_iter, url); dp.addArtifact(a); //remove from the list of runtime artifacts ira_table.remove(a.getId()); } } //add remaining artifacts not linked to any package if (ira_table.size() &gt; 0) { //default package IntegrationPackage integrationPackage = new IntegrationPackage(); integrationPackage.setName("&lt;unknown&gt;"); defaultDesignPackage = new DesignPackage(integrationPackage); designPackages.put(defaultDesignPackage.getName(), defaultDesignPackage); Enumeration&lt;String&gt; t = ira_table.keys(); while (t.hasMoreElements()) { String iraId = t.nextElement(); Artifact a = new Artifact((IntegrationRuntimeArtifact)ira_table.get(iraId), tenantURL + "/http/" + iraId + "/*"); defaultDesignPackage.addArtifact(a); } } } catch (com.sap.cloud.sdk.datamodel.odata.client.exception.ODataConnectionException e) { } catch (ODataException e) { } catch (Exception e) { } }</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>Having all packages and artifacts in place, we can get a (filtered) set of log-entries:</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-java"><code>/** * Returns an ArrayList of LogEntries. * The list is based on the filtering. * &lt;p&gt; * This methods processing-time depends on the amount of data requested from BTP. * The status should be set on the GUI for user-information. * In future releases this method will work in a background-task. * * authentication object relevant for login and serving a destination based on this creds * logListFilter the object for filtering the requested logs, i.e. datetime and number of entries * @return ArrayList of LogEntries. */ public ArrayList&lt;LogEntry&gt; updateMessageProcessingLog(Authentication authentication, LogListFilter logListFilter) { ArrayList&lt;LogEntry&gt; logEntries = new ArrayList&lt;LogEntry&gt;(); if (authentication != null) { MessageProcessingLogFluentHelper mPLFH = mPLS.getAllMessageProcessingLogs(); //logs should be filtered always by artifact-id (which is unique) if (logListFilter.getArtifact() != null) mPLFH = mPLFH.filter(MessageProcessingLog.INTEGRATION_FLOW_NAME.eq(logListFilter.getArtifact().getId())); //number of results limited by number? if (logListFilter.getCountFilterEnabled()) { mPLFH = mPLFH .skip(logListFilter.getCountFilterFrom() - 1) .top(logListFilter.getCountFilterTo()); } //filtered by date? if (logListFilter.getDateFilterEnabled()) { //set start and end, logListFilter returns a @LocalDateTime mPLFH = mPLFH.filter(MessageProcessingLog.LOG_START.gt(logListFilter.getDateTimeFilterStart())); mPLFH = mPLFH.filter(MessageProcessingLog.LOG_END.lt(logListFilter.getDateTimeFilterEnd())); } //the result is always ordered ascending by the LogEnd mPLFH = mPLFH.orderBy(MessageProcessingLog.LOG_END, Order.ASC); final List&lt;MessageProcessingLog&gt; mpl = mPLFH.executeRequest(authentication.getDestination()); for (MessageProcessingLog mpl_iter : mpl) { logEntries.add(new LogEntry(mpl_iter)); try { List&lt;MessageStoreEntry&gt; messageStoreEntries = mpl_iter.fetchMessageStoreEntries(); if (messageStoreEntries != null) for (MessageStoreEntry mse : messageStoreEntries) { List&lt;MessageStoreEntryAttachment&gt; mSEAs = mse.fetchAttachments(); //in future releases &lt;do_something&gt; with the MessageStoreEntries and their attachments } } catch(com.sap.cloud.sdk.datamodel.odata.client.exception.ODataResponseException e) { System.out.println("com.sap.cloud.sdk.datamodel.odata.client.exception.ODataResponseException"); } } } return logEntries; }</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>The result, shown as a Java-GUI is as following:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="BTPcl_1.jpg" style="width: 932px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/111014iC71D40AF1B8A522E/image-size/large?v=v2&amp;px=999" role="button" title="BTPcl_1.jpg" alt="BTPcl_1.jpg" /></span></P><P>The java-object MessageProcessingLog and corresponding ..Attachment is based on the classes automatically created within the generator-plugin:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="MPLAttachment.jpg" style="width: 461px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110314i73328775844145E0/image-dimensions/461x138?v=v2" width="461" height="138" role="button" title="MPLAttachment.jpg" alt="MPLAttachment.jpg" /></span>&nbsp;</P><P>With that code we can retrieve the payload on any message starting from object MessageProcessingLog retrieve a MessageProcessingLogAttachment with the following code:</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-java"><code>import com.sap.cloud.sdk.datamodel.namespaces.messageprocessinglogs.MessageProcessingLog; import com.sap.cloud.sdk.datamodel.namespaces.messageprocessinglogs.MessageProcessingLogAttachment; (...) //the messageprocessinglog returns a java-List of attachments List&lt;MessageProcessingLogAttachment&gt; mplAttachments = null; try { mplAttachments = messageProcessingLog.fetchAttachments(); //create a Hashtable which we use to store a local object version of attachment, keys derived from the attachment-name attachments = new Hashtable&lt;String, LogAttachment&gt;(); for (MessageProcessingLogAttachment mpla_iter : mplAttachments) { LogAttachment logAttachment = new LogAttachment(mpla_iter); //use the name as key and put the attachment in the hashtable attachments.put(mpla_iter.getName(), logAttachment); //this logEntry has an attachment hasAttachment = true; } isPrepared = true; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>Different to the previous approaches, the attachment itself (payload) is not provided as a java-object, but by an InputStream. It will be stored in a String and returned by a getter:</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><pre class="lia-code-sample language-java"><code>//the constructor gets the 'mpla' when instantiated public LogAttachment(MessageProcessingLogAttachment mpla) { this.mpla = mpla; } //prepare the payload seperate from the getter (for caching purpose) public void preparePayload() { InputStream is; try { is = mpla.fetchMediaStream(); if ( is instanceof ByteArrayInputStream) { int n; try { n = is.available(); byte[] bytes = new byte[n]; is.read(bytes, 0, n); payload = new String(bytes, StandardCharsets.UTF_8); } catch (IOException e) { e.printStackTrace(); } } } catch (ODataException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //getter for returning the payload as a String //Todo for a future release: what happens if a payload is 'big'? Let's say &gt; 10mb. //We don't want to store that in memory in a String!? public String getPayload() { if (payload == null) preparePayload(); return payload; }</code></pre><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp;</P><P>Based on the code shown in this blog any app can download, show and also re-send the payload to it's origin:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="JoergHopmann_0-1715688559247.png" style="width: 457px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110185i69D124D0222BF189/image-dimensions/457x297?v=v2" width="457" height="297" role="button" title="JoergHopmann_0-1715688559247.png" alt="JoergHopmann_0-1715688559247.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="resend.jpg" style="width: 501px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/110333i1576C9A01B5CFD57/image-dimensions/501x287?v=v2" width="501" height="287" role="button" title="resend.jpg" alt="resend.jpg" /></span></P><P>&nbsp;</P><P>Stay tuned for further blogs describing details. Don't hesitate to request details in which you are interested.</P><P>Best regards Jörg Hopmann</P><P>&nbsp;</P> 2024-05-16T09:36:10.757000+02:00 https://community.sap.com/t5/technology-blogs-by-sap/enabling-in-order-processing-with-sap-integration-suite-advanced-event-mesh/ba-p/13703498 Enabling In-Order processing with SAP Integration Suite, advanced event mesh Partitioned Queues 2024-05-16T13:18:43.926000+02:00 prashantrakheja https://community.sap.com/t5/user/viewprofilepage/user-id/841932 <P><SPAN>This blog has been co-authored by - </SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>&nbsp;<BR /></SPAN><STRONG>Prashant Rakheja, SAP&nbsp;<BR />Hari Rangarajan, Solace&nbsp;</STRONG></P><P><SPAN>This blog covers SAP Integration Suite, advanced event mesh’s support for Partitioned Queues (henceforth referred to as PQs) and how this feature can be used to support several critical business needs such as in-order &amp; parallel processing of messages. It also covers a special use-case involving “exactly-once-in-order” processing of messages with SAP Cloud Integration &amp; AEM, by leveraging PQs.<BR /><BR /><FONT size="6"><STRONG><SPAN class=""><SPAN class="">Overview of Partitioned Queues</SPAN></SPAN></STRONG></FONT><SPAN class=""><FONT size="5"><STRONG><SPAN class="">&nbsp;</SPAN></STRONG></FONT><BR /></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">In AEM, there are two </SPAN><SPAN class="">access </SPAN><SPAN class="">types </SPAN><SPAN class="">for</SPAN> <SPAN class="">Queues:<BR /><BR /><FONT size="5"><STRONG>1) Exclusive</STRONG></FONT>&nbsp;<BR /><BR /></SPAN></SPAN></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="prashantrakheja_0-1715854113223.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/111490iA5EB041C3A13B59E/image-size/large?v=v2&amp;px=999" role="button" title="prashantrakheja_0-1715854113223.png" alt="prashantrakheja_0-1715854113223.png" /></span></P><P><SPAN class="">In an exclusive Queue, only one consumer can actively connect and consume messages from the Queue, while others </SPAN><SPAN class="">remain</SPAN><SPAN class=""> on standby.<BR /><BR /><FONT size="5"><STRONG><SPAN class=""><SPAN class="">2) Non-exclusive </SPAN></SPAN></STRONG></FONT><BR /><BR /></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="prashantrakheja_1-1715855572120.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/111519i17465DE06D4EEAF3/image-size/large?v=v2&amp;px=999" role="button" title="prashantrakheja_1-1715855572120.png" alt="prashantrakheja_1-1715855572120.png" /></span></P><P><SPAN class=""><SPAN class="">In a non-exclusive Queue, multiple consumers can actively connect to the Queue and consume in a round-robin fashion.&nbsp;</SPAN></SPAN><SPAN class="">&nbsp;<BR /><BR /></SPAN><SPAN class=""><SPAN class="">To learn more about </SPAN><SPAN class="">configuring </SPAN><SPAN class="">AEM Queue</SPAN><SPAN class="">s</SPAN><SPAN class="">, you can </SPAN><SPAN class="">refer </SPAN><SPAN class="">to the </SPAN><SPAN class="">AEM help </SPAN></SPAN><A class="" href="https://help.pubsub.em.services.cloud.sap/Cloud/Broker-Manager/configuring-queues-broker-manager.htm." target="_blank" rel="noreferrer noopener nofollow"><SPAN class=""><SPAN class="">doc</SPAN><SPAN class="">.</SPAN></SPAN></A> <SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class=""><BR /></SPAN></SPAN><SPAN class=""><SPAN class="">A partitioned queue is a special type of non-exclusive Queue where each partition </SPAN><SPAN class="">represents</SPAN><SPAN class=""> a logical subdivision with</SPAN><SPAN class="">in</SPAN> <SPAN class="">the</SPAN><SPAN class=""> Queue. </SPAN></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /><BR /></SPAN><STRONG>Key aspects of PQ:</STRONG><SPAN><BR /></SPAN></P><OL><LI><SPAN>Broker distributes incoming messages to partitions in a PQ based on a ‘partition key’. All messages with the same ‘partition key’ are handled by the same partition. </SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN><BR /></SPAN><SPAN>The following table provides API information regarding how the ‘partition key’ can be set on corresponding API for each client type:&nbsp;</SPAN><SPAN><SPAN>&nbsp;<BR /><BR /></SPAN></SPAN><TABLE><TBODY><TR><TD><P><STRONG>Client API</STRONG><SPAN>&nbsp;</SPAN></P></TD><TD><P>&nbsp;</P><P><STRONG>API Parameter&nbsp;</STRONG></P><P><SPAN>&nbsp;</SPAN></P></TD></TR><TR><TD><P><SPAN>JMS</SPAN><SPAN>&nbsp;</SPAN></P></TD><TD><P><SPAN>JMSXGroupID</SPAN><SPAN>&nbsp;</SPAN></P></TD></TR><TR><TD><P><SPAN>HTTP</SPAN><SPAN>&nbsp;</SPAN></P></TD><TD><P><SPAN>JMSXGroupID</SPAN><SPAN>&nbsp;</SPAN></P></TD></TR><TR><TD><P><SPAN>MQTT5</SPAN><SPAN>&nbsp;</SPAN></P></TD><TD><P><SPAN>JMSXGroupID</SPAN><SPAN>&nbsp;</SPAN></P></TD></TR><TR><TD><P><SPAN>SMF</SPAN><SPAN>&nbsp;</SPAN></P></TD><TD><P><SPAN>QUEUE_PARTITION_KEY</SPAN><SPAN>&nbsp;</SPAN></P></TD></TR><TR><TD><P><SPAN>AMQP</SPAN><SPAN>&nbsp;</SPAN></P></TD><TD><P><SPAN>group-id</SPAN><SPAN>&nbsp;</SPAN></P></TD></TR></TBODY></TABLE></LI></OL><P><SPAN><SPAN class=""><SPAN class=""><SPAN class=""><SPAN class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;For up-to-date information on details about the exact key refer to this </SPAN></SPAN><A class="" href="https://help.pubsub.em.services.cloud.sap/Messaging/Guaranteed-Msg/Partitioned-Queue-Messaging.htm" target="_blank" rel="noreferrer noopener nofollow"><SPAN class=""><SPAN class="">link</SPAN></SPAN></A><SPAN class=""><SPAN class="">.</SPAN></SPAN></SPAN></SPAN></SPAN></P><P><SPAN><SPAN class=""><SPAN class=""><SPAN class=""><SPAN class="">&nbsp; &nbsp; 2.&nbsp;</SPAN></SPAN></SPAN></SPAN></SPAN><SPAN>If no partition key is specified, the message would be randomly distributed to any of the partitions.&nbsp;</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>&nbsp; &nbsp; 3.&nbsp;</SPAN><SPAN>Each partition connects to exactly one consumer.</SPAN><SPAN>&nbsp;<BR /><BR /></SPAN><SPAN>&nbsp; &nbsp; 4.&nbsp;</SPAN><SPAN>Each partition in a PQ can handle more than one partition key.</SPAN><SPAN>&nbsp;</SPAN><SPAN>All messages within a partition are delivered in-order. However, there is no guarantee of message ordering across different partitions in a Queue.</SPAN><SPAN>&nbsp;<BR /><BR /></SPAN><SPAN>&nbsp; &nbsp; 5.</SPAN><SPAN>One of other benefits of Partitioned Queues is that it enables parallel consumption of messages from the Queue, thereby improving egress throughput without the need for additional ‘exclusive access’ queues.<BR /><BR /></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="prashantrakheja_2-1715856425521.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/111521i7A60E690207B93E3/image-size/large?v=v2&amp;px=999" role="button" title="prashantrakheja_2-1715856425521.png" alt="prashantrakheja_2-1715856425521.png" /></span></P><P><SPAN><SPAN class=""><SPAN class=""><BR />In the above diagram, </SPAN><SPAN class="">there is</SPAN><SPAN class=""> a non-exclusive Queue that </SPAN><SPAN class="">contains</SPAN><SPAN class=""> three partitions. </SPAN></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">G1 and G2 are messages that belong to the same group (same partition key). But H1, H2 (same group) also </SPAN><SPAN class="">reside</SPAN><SPAN class=""> in the same partition</SPAN><SPAN class="">. This point is important because while setting the partition key ensures that messages that carry the same partition key end up in the same partition, a given partition can also have messages that carry </SPAN><SPAN class="">a different</SPAN><SPAN class=""> partition key. </SPAN><SPAN class="">All</SPAN><SPAN class=""> the messages (in the same partition) would be delivered in-order irrespective of their group. </SPAN></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">As far as consumption is concerned, t</SPAN><SPAN class="">here are 2 consumers for 3 partitions (refer to the diagram above). </SPAN></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">Each partition </SPAN><SPAN class="">maintains</SPAN><SPAN class=""> a sticky connection to the consumer, and in</SPAN> <SPAN class="">case the consumer goes down, </SPAN><SPAN class="">connection is reconciled to another consumer. A partition can have at-most 1 active consumer, which is important </SPAN><SPAN class="">from the point-of-view of </SPAN><SPAN class="">maintaining</SPAN> <SPAN class="">in-</SPAN><SPAN class="">order</SPAN><SPAN class=""> processing</SPAN><SPAN class="">. </SPAN></SPAN><SPAN class=""><SPAN class="">&nbsp;<BR /><BR /></SPAN></SPAN></SPAN><STRONG><SPAN>Exactly-Once-In-Order (EOIO) processing</SPAN></STRONG><SPAN>&nbsp;<BR /></SPAN><SPAN><BR /></SPAN><SPAN>In addition to in-order processing, if a scenario requires&nbsp;‘exactly-once’ quality, it is important to understand some edge cases which cannot be handled by AEM Broker alone.</SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>AEM’s Partitioned Queues described above can be leveraged along with SAP Integration Suite’s Cloud Integration capability to build scenarios involving “exactly-once-in-order” processing. By combining the power of AEM for in-order processing and the power of Cloud Integration for ‘exactly-once’ processing, there is a possibility to handle EOIO.</SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>&nbsp;<BR /></SPAN><STRONG><SPAN>Why is 'exactly-once' messaging important for your business?</SPAN></STRONG><SPAN>&nbsp;<BR /></SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>In some cases, it is important that the messages are delivered exactly-once due to the inability of the consuming system to process duplicates, or the transaction is not differentiable as a duplicate or different transaction.&nbsp;</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>For example, a FinTech company processing loyalty points using an event-driven-architecture -- Imagine the consequences if some of those events are delivered more than once, when they were not supposed to be.&nbsp;</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>In any case, it's important that the middleware system can support this.</SPAN><SPAN>&nbsp;</SPAN></P><P><STRONG><SPAN>Building EOIO scenarios in Integration Suite (Cloud Integration and AEM)</SPAN></STRONG><SPAN>&nbsp;<BR /></SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>With the new AEM adapter, it becomes easy to connect Cloud Integration with AEM. The AEM adapter is a key component which makes it simple to consume AEM’s native features such as Partitioned Queues etc. in Cloud Integration. It is also possible to connect to AEM with standard adapters like AMQP, but it is recommended to go with AEM adapter itself since it is tailor made for AEM.&nbsp;</SPAN><SPAN>&nbsp;</SPAN></P><P><STRONG><SPAN>Publishing events via Cloud Integration&nbsp; </SPAN></STRONG><SPAN>&nbsp;<BR /></SPAN><SPAN><BR /></SPAN><SPAN>For publishing, AEM broker provides the following APIs: JMS/AMQP/HTTP/MQTT. If there is a need to have other client types, Cloud Integration can be leveraged. The iflow below uses an HTTP endpoint for the client to publish messages. It shall be possible to use other adapters following a similar approach.</SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN><BR /></SPAN><SPAN>This section is optional if AEM broker’s APIs are directly used.</SPAN><SPAN>&nbsp;</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="prashantrakheja_3-1715856711930.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/111523i76290C750A019B52/image-size/large?v=v2&amp;px=999" role="button" title="prashantrakheja_3-1715856711930.png" alt="prashantrakheja_3-1715856711930.png" /></span></P><P><SPAN class=""><SPAN class="">T</SPAN><SPAN class="">he above </SPAN><SPAN class="">iFlow</SPAN> <SPAN class="">can be used </SPAN><SPAN class="">as a reference model for publish</SPAN><SPAN class="">ing</SPAN><SPAN class=""> messages in-order to AEM.</SPAN></SPAN><SPAN class="">&nbsp;<BR /><BR /></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="prashantrakheja_4-1715856773951.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/111524iCEBE19E311AACCAC/image-size/large?v=v2&amp;px=999" role="button" title="prashantrakheja_4-1715856773951.png" alt="prashantrakheja_4-1715856773951.png" /></span></P><P>&nbsp;</P><P><SPAN>The sequence diagram above depicts how the messages flow into Cloud Integration using the HTTP adapter and get published in AEM broker using AEM adapter.&nbsp;</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>While publishing messages to AEM broker, following steps are needed to set the ‘partition key’ in AEM adapter:</SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN><SPAN class=""><BR />&nbsp; &nbsp; 1. Use </SPAN><SPAN class="">message property</SPAN><SPAN class=""> to </SPAN><SPAN class="">dynamically assign the ‘partition key’</SPAN><SPAN class=""> -- the a</SPAN><SPAN class="">ctual value can be set via </SPAN><SPAN class="">something like a</SPAN><SPAN class=""> groovy script step.</SPAN></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="prashantrakheja_5-1715856921537.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/111537iB203059DB786BE53/image-size/large?v=v2&amp;px=999" role="button" title="prashantrakheja_5-1715856921537.png" alt="prashantrakheja_5-1715856921537.png" /></span><BR /><SPAN class=""><SPAN class="">This is a small snippet </SPAN><SPAN class="">where </SPAN><SPAN class="">groupID</SPAN> <SPAN class="">is extracted </SPAN><SPAN class="">from the message payload (note: </SPAN><SPAN class="">the </SPAN><SPAN class="">message payload needs to </SPAN><SPAN class="">contain</SPAN><SPAN class=""> such data) and setting that as a message property to provide context to </SPAN><SPAN class="">Cloud Integration</SPAN><SPAN class="">. </SPAN></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">In Advanced Event Mesh </SPAN><SPAN class="">adapter </SPAN><SPAN class="">‘</SPAN><SPAN class="">user properties</SPAN><SPAN class="">’</SPAN><SPAN class=""> configuration, </SPAN><SPAN class="">create a new key-value </SPAN><SPAN class="">pair </SPAN><SPAN class="">as</SPAN><SPAN class=""> shown</SPAN> <SPAN class="">below to</SPAN><SPAN class=""> set the partition key.&nbsp;</SPAN></SPAN><SPAN class="">&nbsp;<BR /><BR /></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="prashantrakheja_6-1715856990353.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/111539iA2E742EDA7E7433E/image-size/large?v=v2&amp;px=999" role="button" title="prashantrakheja_6-1715856990353.png" alt="prashantrakheja_6-1715856990353.png" /></span></P><P><SPAN>Since the adapter uses SMF protocol, the key should be ‘JMSXGroupID’ -- you should use QUEUE_PARTITION_KEY (which is constant with the value ‘JMSXGroupID’) while using the programmatic client. </SPAN><SPAN><BR /><BR /></SPAN><SPAN>The most important consideration during publishing messages to cloud integration is that the client must wait for acknowledgement before publishing the next message. This is critical for ensuring that events are persisted in-order in the AEM queue.</SPAN></P><P><SPAN class=""><SPAN class=""><STRONG>Consuming from AEM in Cloud Integration</STRONG><BR /><BR /></SPAN></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="prashantrakheja_7-1715857077379.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/111540i3E5C80C4CFAD6062/image-size/large?v=v2&amp;px=999" role="button" title="prashantrakheja_7-1715857077379.png" alt="prashantrakheja_7-1715857077379.png" /></span></P><P>&nbsp;</P><P><SPAN>The above iFlow modelling presents a reference for consuming messages from AEM using the AEM adapter and forwarding to a target system with “exactly-once” quality. </SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN><BR /></SPAN><SPAN>To enable exactly once processing of messages, the following steps are needed:</SPAN><SPAN>&nbsp;</SPAN></P><P><STRONG>AEM sender adapter channel configuration</STRONG><SPAN><BR /><BR /></SPAN><SPAN>While consuming from AEM, in the AEM adapter configuration, the acknowledgement mode should be ‘</SPAN><STRONG><SPAN>Automatic on Exchange Complete,’</SPAN></STRONG><SPAN> this is important since the adapter waits for the entire exchange to be completed and does not return a response immediately.</SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>&nbsp;</SPAN><SPAN>The consumer mode should be set to ‘</SPAN><STRONG><SPAN>Guaranteed.’</SPAN></STRONG><SPAN>&nbsp;&nbsp;<BR /><BR /></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="prashantrakheja_8-1715857267874.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/111542i8CEB12291B0F0BCE/image-size/large?v=v2&amp;px=999" role="button" title="prashantrakheja_8-1715857267874.png" alt="prashantrakheja_8-1715857267874.png" /></span><BR /><BR /><STRONG>The iflow needs to implement idempotent behaviour</STRONG><SPAN><BR /></SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>This can be achieved by using local idempotent process call step. Once the message flows to Cloud Integration, the message ID can be set using groovy scripting. </SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>The approach defined above for setting message property can be used here as well. </SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>The reason for setting a message ID in the consumption iFlow is to provide some context to Cloud Integration to determine the uniqueness of the message. The duplicate check is performed with the help of the local idempotent process call. Before executing the local idempotent process call, Cloud Integration checks if the message ID has been processed before, if yes, it is not processed again. Hence, even if the client publishes the messages multiple times, the message would only be processed once.</SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>If the message has not been processed before, Cloud Integration will execute the local idempotent process call and thus, forward the message.&nbsp;</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>It is up to the end user to build their own logic for determining the uniqueness of the message, in this case, the message ID was part of the message payload itself.</SPAN><SPAN>&nbsp;<BR /></SPAN></P><P><SPAN><SPAN class=""><STRONG><SPAN class=""><SPAN class="">Handling failures</SPAN></SPAN></STRONG><SPAN class=""><STRONG><SPAN class="">&nbsp;</SPAN></STRONG><BR /></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">If there is a failure at the camel exchange lev</SPAN><SPAN class="">el, </SPAN><SPAN class="">e.g</SPAN><SPAN class=""> something goes wrong with the groovy script “</SPAN><SPAN class="">setMessageID</SPAN><SPAN class="">” as shown above</SPAN><SPAN class=""> or the HTTP call to S4HANA fails,</SPAN> <SPAN class="">the message would be retried as per the processing configuration of the adapter. </SPAN></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">As you can see in the above configuration, we are setting the ‘Maximum message processing attemp</SPAN><SPAN class="">t</SPAN><SPAN class="">s’ to 5, this means the adapter </SPAN><SPAN class="">attempts</SPAN> <SPAN class="">the deli</SPAN><SPAN class="">ver</SPAN><SPAN class="">y</SPAN><SPAN class=""> five times. </SPAN></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">However, after the </SPAN><SPAN class="">maximum</SPAN> <SPAN class="">attempts of the adapter, when the message is returned to the broker, the queue level configuration kicks in. </SPAN></SPAN><SPAN class=""><SPAN class="">&nbsp;<BR /><BR /></SPAN></SPAN></SPAN></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="prashantrakheja_9-1715857516692.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/111544i5136B6F6DC6862CE/image-size/large?v=v2&amp;px=999" role="button" title="prashantrakheja_9-1715857516692.png" alt="prashantrakheja_9-1715857516692.png" /></span></P><P><SPAN class=""><SPAN class="">If you have set the </SPAN><SPAN class="">‘</SPAN><SPAN class="">Redelivery</SPAN><SPAN class="">’</SPAN><SPAN class=""> to ‘Try forever’ at the Queue level</SPAN><SPAN class=""> on the broker</SPAN><SPAN class="">, the</SPAN><SPAN class=""> message is again picked up for processing by the adapter and this loop continues forever!</SPAN></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">However, there are other strategies of dealing with this – </SPAN></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">(</SPAN><SPAN class="">i</SPAN><SPAN class="">) You can set a finite redelivery count for your queue and then the message </SPAN><SPAN class="">won’t</SPAN><SPAN class=""> block </SPAN><SPAN class="">the queue </SPAN><SPAN class="">throughput</SPAN><SPAN class="">.</SPAN><SPAN class=""> The message would be discarded once the redelivery count is exhausted.</SPAN></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">(ii) It is also possible to use a </SPAN><SPAN class="">'</SPAN><SPAN class="">dead-message-queue (DMQ)</SPAN><SPAN class="">'</SPAN><SPAN class=""> in conjunction with the </SPAN><SPAN class="">redelivery count</SPAN><SPAN class=""> on the broker</SPAN><SPAN class="">. </SPAN><SPAN class="">The message moves to the DMQ after the retry attempts are exhausted. </SPAN></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN></SPAN><SPAN class=""><SPAN class="">&nbsp;</SPAN><BR /></SPAN><SPAN class=""><SPAN class="">There could be more ways of handling failures/retries but that this beyond the scope of this post.&nbsp;</SPAN></SPAN><SPAN class="">&nbsp;</SPAN></P><P><STRONG><SPAN>Ensuring order during consumption</SPAN></STRONG><SPAN>&nbsp;</SPAN></P><P><SPAN>The “in-order” processing quality is ensured while publishing by waiting for acknowledgement before sending a new message. Fortunately, on the consumption side, since we are leveraging AEM adapter, the ordering is taken care of by the AEM adapter itself! (given that you have set acknowledgement mode to ‘</SPAN><STRONG><SPAN>Automatic on exchange complete</SPAN></STRONG><SPAN>’ and consumer mode to ‘</SPAN><STRONG><SPAN>Guaranteed</SPAN></STRONG><SPAN>’ as described above) </SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>The Cloud Integration worker nodes internally maintain a sticky connection to the Partitioned Queues which ensures that messages from the same partition are consumed in order. </SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>&nbsp;<BR /></SPAN><SPAN>All of this combined in SAP Cloud Integration &amp; AEM gives us the magic of “exactly-once-in-order” messaging.&nbsp;<BR /><BR /></SPAN><STRONG><SPAN>Scale with Partitions or Scale with Queues</SPAN></STRONG><SPAN>&nbsp;</SPAN></P><P><SPAN>The ability to scale consumers effectively is a critical aspect of ensuring optimal performance and throughput. Since this blog concerns with “in-order” processing of events, we will be looking at a couple of strategies which can be used namely:</SPAN><SPAN>&nbsp;</SPAN></P><P><I><SPAN>Scaling with partitions:</SPAN></I><SPAN>&nbsp;</SPAN></P><P><SPAN>As discussed earlier, Partitioned queues divide message traffic into multiple partitions based on a partition key, which is defined by the producing client application. Each partition operates independently, allowing messages to be processed concurrently across multiple consumer instances. This parallel processing capability is essential for achieving high throughput and scalability in distributed messaging environments.</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>Partitioned queues facilitate horizontal scaling by allowing multiple instances of a consumer application to process messages in parallel. Each consumer instance is responsible for processing messages from one or more partitions, enabling linear scalability as the number of consumer instances increases.</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>It’s important to note that auto-scaling capabilities (e.g. Kubernetes Event-driven Autoscaling [KEDA]) can also be leveraged to automatically adjust the number of consumer instances based on workload demand. Cloud-based deployment platforms and container orchestration frameworks provide built-in support for elastic scaling, enabling consumer applications to dynamically scale up or down in response to changing message traffic patterns. Scaling policies and thresholds based on different criteria can be defined to implement proactive scaling strategies to anticipate workload spikes and ensure timely resource provisioning.</SPAN><SPAN>&nbsp;</SPAN></P><P><I><SPAN>Scaling with queues:</SPAN></I><SPAN>&nbsp;</SPAN></P><P><SPAN>In SAP AEM, multiple queues and pattern matching in subscriptions can be leveraged to achieve consumer scaling while maintaining in-order processing.&nbsp;</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>Multiple queues can be used to distribute message traffic across multiple consumers, facilitating parallel message processing and horizontal scalability. Pattern matching subscriptions allow consumers to subscribe to multiple queues simultaneously based on subscription patterns, enabling dynamic routing of messages to matching queues. By combining these features, organizations can achieve both scalability and in-order message processing in complex messaging scenarios.</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>To read more about pattern matching in SAP AEM, you can refer to the docs here: </SPAN><A href="https://help.pubsub.em.services.cloud.sap/Messaging/Wildcard-Charaters-Topic-Subs.htm" target="_blank" rel="noopener nofollow noreferrer"><SPAN>Wildcard characters in topic subscriptions</SPAN></A><SPAN>&nbsp;</SPAN></P><P><SPAN>To configure multiple queues with pattern matching, you need to create each queue separately and assign it to a specific consumer. Each consumer then processes messages from its assigned queue. The number of queues you create will depend on the level of parallelism you want to achieve.&nbsp;</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>When a new consumer is added, a new queue can be created and assigned to it. If a consumer fails or is removed, its queue can be reassigned to another consumer or deleted. This dynamic assignment and reassignment of queues enable consumer scaling and ensure high availability.</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>While multiple queues and pattern matching enable high levels of consumer scaling, there are some performance considerations to keep in mind. As the number of queues increases, so does the overhead of managing these queues. Therefore, it's important to find a balance between the level of parallelism and the management overhead.</SPAN><SPAN>&nbsp;</SPAN></P><P><SPAN>Sincerely hoping that this helps you &amp; your organisation level up your integration game with SAP Integration Suite!&nbsp;</SPAN><SPAN>&nbsp;<BR /><BR /></SPAN></P> 2024-05-16T13:18:43.926000+02:00 https://community.sap.com/t5/technology-blogs-by-sap/deploying-sap-edge-integration-cell-playground/ba-p/13705377 Deploying SAP Edge Integration Cell Playground 2024-05-18T17:14:05.051000+02:00 Gunter https://community.sap.com/t5/user/viewprofilepage/user-id/727 <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="eicblog04.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112627iFDB8F43BCDB47C95/image-size/large?v=v2&amp;px=999" role="button" title="eicblog04.png" alt="eicblog04.png" /></span><FONT face="georgia,palatino">Cat deploying SAP Edge Integration Cell during server room night-shift</FONT></P><H2 id="toc-hId-1014778585">Who should read this blog</H2><UL><LI>You read about SAP Edge Integration Cell (EIC) and want to try it out yourself.</LI><LI>You want to deploy it with the least effort and cost.</LI></UL><P><FONT color="#0000FF">Note:</FONT> This is my <U>personal learning journey</U> - this is by no means a deployment recommendation or replacing proper sizing or SAP recommendations stated for this product. It might or might not work for you.</P><H2 id="toc-hId-818265080">What is SAP Edge Integration Cell</H2><P><SPAN>Welcome to the world of SAP Edge Integration Cell (EIC), a cutting-edge solution designed to bridge the gap between cloud innovation and on-premises data security. EIC is an integral part of the SAP Integration Suite, offering a hybrid deployment model that allows businesses to design integration content in the cloud and deploy it securely within their local environment. This powerful tool addresses the critical need for data compliance and security while enabling seamless data connectivity across diverse systems. Whether you're dealing with sensitive data that cannot be hosted in the cloud or looking to leverage the agility of cloud-based services without compromising on-premises security, EIC provides the best of both worlds.&nbsp;</SPAN></P><H2 id="toc-hId-621751575">Overview of deployment</H2><P>As stated, we want to have a playground for EIC at the end! For that we'll run through these steps:</P><OL><LI>Create a virtual machine (VM)</LI><LI>Install Docker on VM and configure VM</LI><LI>Deploy K3S on VM &amp; Configure K3S</LI><LI>Activate EIC on SAP Integration Suite</LI><LI>Deploy and run Edge Lifecycle Management &amp; EIC on K3S</LI><LI>Test for successful installation</LI></OL><P>Let's start!</P><H2 id="toc-hId-425238070">1. Create a virtual machine</H2><P>If you have a 6+ CPU-core machine sitting around on which you can install Linux and which is reachable through DNS from the internet, you can use this device! I had no free machine at home that meets these specs, so I used my Google Cloud Platform (GCP) account to set up a VM. Why 6 cores? This is the minimal value you can choose! Each deployment the ELM will trigger later has a CPU and Memory requirement. If you add this up, you end up with a value below 6 but greater than 4. You can find all the details in the <A href="https://help.sap.com/docs/integration-suite/sap-integration-suite/sizing-guidelines" target="_blank" rel="noopener noreferrer">official guideline</A>, remember, this blog is not a recommended path for a test or production setup!</P><P><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="スクリーンショット 2024-05-18 125242.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112328i41669117B633B43E/image-size/large?v=v2&amp;px=999" role="button" title="スクリーンショット 2024-05-18 125242.png" alt="スクリーンショット 2024-05-18 125242.png" /></span></P><P>I chose 6 vCPUs and 16GB memory together with a 40GB boot disk. I recommend to select the VM availability policy from "Standard" to "Spot" which brings down the cost per month significantly, 40% of the standard cost in my case. I don't care if Google shuts down the VM in peak times, but it never happened so far anyway. As for the OS I selected Debian Bookworm. Once the VM is provisioned, you can SSH into it.</P><P>You want the VM to be reachable from the internet (so that Integration Suite finds it). Since I go cheap, there's only a dynamic public IP and for that I use <A href="https://www.duckdns.org/" target="_self" rel="nofollow noopener noreferrer">Duck DNS</A>&nbsp;to provide me with a fixed URL that SAP IS can use later.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="スクリーンショット 2024-05-18 130623.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112329iB4ED4A6889152929/image-size/large?v=v2&amp;px=999" role="button" title="スクリーンショット 2024-05-18 130623.png" alt="スクリーンショット 2024-05-18 130623.png" /></span></P><P>Just follow the "installation instructions" for cron on Linux which is super simple and you have a cron-job at the end that keeps the IP always updated.</P><H2 id="toc-hId-228724565">2. Install Docker on VM and configure VM</H2><P>Next, we'll get docker up and running. I recommend to work with the <A href="https://docs.docker.com/engine/install/debian/" target="_blank" rel="noopener nofollow noreferrer">official Docker documentation</A>. As for me I had to add the current user I used for SSH to the docker user group <STRONG>after</STRONG> installation:</P><P>&nbsp;</P><pre class="lia-code-sample language-bash"><code>sudo usermod -aG docker $USER</code></pre><P>&nbsp;</P><P>Then activate the change:</P><P>&nbsp;</P><pre class="lia-code-sample language-bash"><code>newgrp docker</code></pre><P>&nbsp;</P><H2 id="toc-hId-32211060">3. Deploy K3S on VM &amp; Configure K3S</H2><P>Now we're good to run K3S inside Docker as a very lean and quick way to provide for Kubernetes. I used the <A href="https://hub.docker.com/r/rancher/rancher" target="_blank" rel="noopener nofollow noreferrer">Rancher image</A> which you deploy like shown below in your SSH session.</P><P>&nbsp;</P><pre class="lia-code-sample language-bash"><code>docker run -d --restart=unless-stopped -p 80:80 -p 443:443 --privileged rancher/rancher:latest</code></pre><P>&nbsp;</P><P>I found <A href="https://www.linuxtechi.com/how-to-install-rancher-on-ubuntu/" target="_blank" rel="noopener nofollow noreferrer">this description</A> very helpful. Once it runs, open the Rancher UI. You need to derive the initial password through this command (just replace the "your docker container name" with the name of the container without the double quotes. You get the container name (or ID) through <EM><FONT face="courier new,courier">docker ps</FONT></EM>.</P><P>&nbsp;</P><pre class="lia-code-sample language-bash"><code>docker logs "your docker container name" 2&gt;&amp;1 | grep "Bootstrap Password:"</code></pre><P>&nbsp;</P><P>Finally you should see something like this&nbsp;(likely without that many pods running).</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="スクリーンショット 2024-05-18 174108.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112386iBF84A440C51E9C24/image-size/large?v=v2&amp;px=999" role="button" title="スクリーンショット 2024-05-18 174108.png" alt="スクリーンショット 2024-05-18 174108.png" /></span></P><P>What's missing is a storage class on your new K3S cluster. Without that, no persistence and the installation of Edge Lifecycle Management (ELM) will fail. In the upper right area of the 'local' page of Rancher you'll find the option to open a shell.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="スクリーンショット 2024-05-18 181211.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112400iAA0DDBFC59BE6CA7/image-size/large?v=v2&amp;px=999" role="button" title="スクリーンショット 2024-05-18 181211.png" alt="スクリーンショット 2024-05-18 181211.png" /></span></P><P>Enter below command and wait for the deployment to finish.</P><P>&nbsp;</P><pre class="lia-code-sample language-bash"><code>&gt; kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.26/deploy/local-path-storage.yaml</code></pre><P>&nbsp;</P><P>Check that the provisioning of local-path storage class was successful in the same shell:</P><P>&nbsp;</P><pre class="lia-code-sample language-bash"><code>&gt; kubectl -n local-path-storage get pod NAME READY STATUS RESTARTS AGE local-path-provisioner-dbdfc4849-g9wqj 1/1 Running 1 (23d ago) 23d</code></pre><P>&nbsp;</P><P>You should also see it under Storage➡StorageClasses in the UI. The SAP ELM just requests storage but doesn't specify which class. Therefore, set the new StorageClass as default:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="スクリーンショット 2024-05-18 184253.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112422i34093769376E07F5/image-size/large?v=v2&amp;px=999" role="button" title="スクリーンショット 2024-05-18 184253.png" alt="スクリーンショット 2024-05-18 184253.png" /></span></P><P>ELM and EIC make also use of Kubernetes' scaling capabilities. Install the horizontal pod autoscaler on the K3S cluster as a next activity. Like before, open the shell inside(!) the UI of Rancher and execute these commands:</P><P>&nbsp;</P><pre class="lia-code-sample language-bash"><code>&gt; helm upgrade --install metrics-server metrics-server/metrics-server</code></pre><P>&nbsp;</P><P>check for installation correctness:</P><P>&nbsp;</P><pre class="lia-code-sample language-bash"><code>&gt; kubectl get --raw "/apis/metrics.k8s.io/" {"kind":"APIGroup","apiVersion":"v1","name":"metrics.k8s.io","versions":[{"groupVersion":"metrics.k8s.io/v1beta1","version":"v1beta1"}],"preferredVersion":{"groupVersion":"metrics.k8s.io/v1beta1","version":"v1beta1"}} &gt; </code></pre><P>&nbsp;</P><P>Our cluster is ready!</P><H2 id="toc-hId--164302445">4. Activate EIC on SAP Integration Suite</H2><P>As next step, the EIC needs activation in your subscription. There can be cost impacts to this step, please do whatever is necessary on your end you don't run into trouble before this!</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="スクリーンショット 2024-05-18 185151.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112426i298EC7ED8D9D97D3/image-size/large?v=v2&amp;px=999" role="button" title="スクリーンショット 2024-05-18 185151.png" alt="スクリーンショット 2024-05-18 185151.png" /></span>&nbsp;Activate EIC in Settings➡Runtime. Wait for it to complete. This is only making the required settings in your SAP Integration Suite Account. It has no effect on the EIC setup.</P><H2 id="toc-hId--360815950">5. Deploy and run Edge Lifecycle Management &amp; EIC on K3S</H2><P>This is the most time-intensive step in that sense that - given you've set up all up so far - you have to wait most of the time. It can take up to one hour (usually 30-40 mins) until it's finally deployed on K3S. I'd assume it might be faster with a bigger-sized cluster. It's exciting though to see the services spinning up so with a cup of coffee or tea there's some entertainment provided.</P><P>First, click on the link that was provided when you activated the EIC (see image above). Then click on "Add Edge Node". A window with several steps pops up. Check all the steps. You need to <A href="https://help.sap.com/docs/EDGE_LIFECYCLE_MANAGEMENT/9d5719aae5aa4d479083253ba79c23f9/b71d5ab83a454ff9a5ed95c1ee8408e2.html?locale=en-US#loiob71d5ab83a454ff9a5ed95c1ee8408e2__section_SAP_BTP_Cockpit" target="_blank" rel="noopener noreferrer">create a P-User</A> (with according role assignment. You should now have all what you need already by now. Click "Next". Set the name of the EIC, no need to check anything (it would increase the EIC's size).</P><P>In the next window you'll assign the users for the BTP (technical P-User) and the Repo-Access user. Later you can check it here and it should look similar to that. Make sure to have the right roles assigned in the BTP account!</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Gunter_0-1716028255641.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112479iFA9127EFE5B0EEDA/image-size/large?v=v2&amp;px=999" role="button" title="Gunter_0-1716028255641.png" alt="Gunter_0-1716028255641.png" /></span></P><P>So, no "Logging and Monitoring" and no "Local Container Registry" as well as "HTTP Proxy". Unless you need a proxy of course.</P><P>Next, download the kubeconfig file from Rancher. It's the button to the left of the "kubectl shell" button you clicked earlier to set up the StorageClass and HPA. A file will be downloaded. It should already contain the duckdns URL.</P><P>Move back to the setup of the ELM/EIC page and it should look similar to this before you upload the kubeconfig file:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Gunter_1-1716028788191.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112480iFEDB68B9FC57E524/image-size/large?v=v2&amp;px=999" role="button" title="Gunter_1-1716028788191.png" alt="Gunter_1-1716028788191.png" /></span></P><P>Upload the file and assign a password. Now you can download the bootstrapping file. Chrome might block the download, so check it and allow it.</P><P>Follow the 4 steps now. It will set up the ELM which is the basis for the EIC deployment. It will take a while and you can watch how the services spin up in the Rancher UI. After maybe 10mins of waiting, you should see successful deployment of the components below:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Gunter_2-1716029030837.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112484i934DBB511B44CD36/image-size/large?v=v2&amp;px=999" role="button" title="Gunter_2-1716029030837.png" alt="Gunter_2-1716029030837.png" /></span></P><P>Let's now deploy the EIC on top of ELM. You click "Deploy Solution" and select the version to deploy, I've always chosen the latest, it will look therefore different for you when you read the blog.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Gunter_3-1716029160023.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112485iFD59359D143C39BD/image-size/large?v=v2&amp;px=999" role="button" title="Gunter_3-1716029160023.png" alt="Gunter_3-1716029160023.png" /></span></P><P>On the Rancher side of things this will create another 3 namespaces. Here's how it looks for me.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Gunter_4-1716029262277.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112506i791EF24AB24CD0A5/image-size/large?v=v2&amp;px=999" role="button" title="Gunter_4-1716029262277.png" alt="Gunter_4-1716029262277.png" /></span></P><P>All of the above are created through ELM and then the upper 3 through EIC solution deployment. Time again for a coffee <span class="lia-unicode-emoji" title=":hot_beverage:">☕</span>! If you get asked about "Loadbalancer" choose "AWS" and "Internal".</P><P>Once complete, you should see a page similar to this:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Gunter_5-1716029404616.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112507i29F1D70ACF084C18/image-size/large?v=v2&amp;px=999" role="button" title="Gunter_5-1716029404616.png" alt="Gunter_5-1716029404616.png" /></span></P><P>Congratulations! You won't see the version with exclamation marks, that's just for me as I didn't upgrade since the last deployment 23 days ago (I should do that now after the blog <span class="lia-unicode-emoji" title=":grinning_face_with_big_eyes:">😃</span>).&nbsp;</P><P>At the end of the installation, add a keystore for the EIC in the Integration Suite itself. (Manage Security➡Keystore➡Create for EIC, it's the "Add" button on the Keystores screen. It takes a while to replicate, maybe 3mins). Then create a keypair with the alias name and CN the virtual host.</P><H2 id="toc-hId--557329455">6. Test for successful installation</H2><P>&nbsp;Time to test for successful installation! Let's move to the SAP Integration Suite page.&nbsp;</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Gunter_6-1716029619375.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112508i4E993587EB6C87B2/image-size/large?v=v2&amp;px=999" role="button" title="Gunter_6-1716029619375.png" alt="Gunter_6-1716029619375.png" /></span></P><P>Settings➡Integration should show an active instance of the EIC by now.</P><P>Let's now do a simple connectivity test.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Gunter_7-1716030078707.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112541i8712D2F1F74E6773/image-size/large?v=v2&amp;px=999" role="button" title="Gunter_7-1716030078707.png" alt="Gunter_7-1716030078707.png" /></span></P><P>Select the EIC, and hit the tile "Connectivity Tests". On the following page select "TLS" test and enter <A href="http://www.google.com" target="_blank" rel="noopener nofollow noreferrer">www.google.com</A>&nbsp;(or anything else). It should be successful.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Successful FTP Test to a test server" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112641i3CF975E30013F0E2/image-size/large?v=v2&amp;px=999" role="button" title="スクリーンショット 2024-05-19 081702.png" alt="Successful FTP Test to a test server" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Successful FTP Test to a test server</span></span></P><P>And we can do the same for FTP or any other protocol.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Successful TLS test to Google.com" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/112642i92DD51D759F1C4EA/image-size/large?v=v2&amp;px=999" role="button" title="スクリーンショット 2024-05-19 082138.png" alt="Successful TLS test to Google.com" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Successful TLS test to Google.com</span></span></P><P>From here, you can now start developing iFlows like you would with SAP Integration Suite but use the runtime of EIC with all benefits that this solution provides.</P><H2 id="toc-hId--753842960">Closing</H2><P>In conclusion, our journey through setting up a tiny, yet functional SAP Edge Integration Cell (EIC) environment has demonstrated that with the right tools and guidance, you can create a playground for exploring the capabilities of EIC. This hands-on experience is for understanding how EIC can fit into your organization's integration strategy, providing the agility of cloud services while maintaining the security of on-premises data handling. I hope this guide has been a helpful starting point for your adventures with EIC.</P><P>I'm eager to hear about your experiences and any insights you've gained along the way. Please share your thoughts and questions in the comments below – your feedback is not only welcome but essential for my learning as well. For further reading and to deepen your understanding of SAP Edge Integration Cell and SAP Edge Lifecycle Management, be sure to explore the following resources:</P><UL><LI><A href="https://help.sap.com/docs/integration-suite/sap-integration-suite/what-is-sap-integration-suite-edge-integration-cell" target="_blank" rel="noopener noreferrer">What is SAP Edge Integration Cell</A></LI><LI><A href="https://help.sap.com/docs/EDGE_LIFECYCLE_MANAGEMENT/9d5719aae5aa4d479083253ba79c23f9/4bf5950487d24c9c9e5a11749b7d3f47.html?q=aws" target="_blank" rel="noopener noreferrer">Overview on SAP Edge Lifecycle Management</A></LI></UL><P>Thank you for joining me on this technical excursion, and I look forward to our continued dialogue as we delve deeper into the world of SAP integrations.</P> 2024-05-18T17:14:05.051000+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