https://raw.githubusercontent.com/ajmaradiaga/feeds/main/scmt/topics/Cloud-Integration-blog-posts.xmlSAP Community - Cloud Integration2025-06-16T14:00:12.253540+00:00python-feedgenCloud Integration blog posts in SAP Communityhttps://community.sap.com/t5/technology-blog-posts-by-sap/new-integration-content-for-coupa-to-sap-signavio-process-intelligence-now/ba-p/13939023New Integration Content for Coupa to SAP Signavio Process Intelligence Now Available2025-05-28T14:19:56.416000+02:00hoangvuhttps://community.sap.com/t5/user/viewprofilepage/user-id/315943<P><SPAN>We’re excited to announce that new integration content for Coupa to SAP Signavio Process Intelligence is now available, offering organizations an enhanced capability to analyze their end-to-end procurement processes. This valuable integration is accessible free of charge on the SAP Business Accelerator Hub, empowering businesses to make data-driven decisions with greater precision and efficiency.</SPAN></P><H3 id="toc-hId-1204006291"><SPAN>Streamline Your Procurement Analysis</SPAN></H3><P><SPAN>Procurement processes are complex, involving numerous stakeholders and steps that can create inefficiencies and gaps if not closely monitored. By leveraging the new integration content for Coupa and SAP Signavio Process Intelligence, you can gain comprehensive insights into your procurement workflows. This integration helps you visualize, analyze, and optimize the entire procurement process from purchase requisition to payment, ensuring greater transparency and continuous improvement.</SPAN></P><H3 id="toc-hId-1007492786"><SPAN>How to Access the Integration Content</SPAN></H3><P><SPAN>Accessing this powerful integration is straightforward. To get started:</SPAN></P><P><SPAN>Log in to the </SPAN><A href="https://api.sap.com/" target="_self" rel="noopener noreferrer"><SPAN>SAP Business Accelerator Hub</SPAN></A><SPAN>.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="hoangvu_0-1731665494722.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/191249iAFC3C04A6959D30E/image-size/large?v=v2&px=999" role="button" title="hoangvu_0-1731665494722.png" alt="hoangvu_0-1731665494722.png" /></span></P><P> </P><P><SPAN>Navigate to the “Explore” tab and search for “<A href="https://api.sap.com/products/SAPSignavio/integrations/packages" target="_blank" rel="noopener noreferrer">SAP Signavio</A>”.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="hoangvu_1-1731665544630.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/191251iEFC0366A42B49898/image-size/large?v=v2&px=999" role="button" title="hoangvu_1-1731665544630.png" alt="hoangvu_1-1731665544630.png" /></span></P><P> </P><P><SPAN>Locate the new integration content for Coupa.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="hoangvu_2-1731665610400.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/191252iAE2B987503F8976F/image-size/large?v=v2&px=999" role="button" title="hoangvu_2-1731665610400.png" alt="hoangvu_2-1731665610400.png" /></span></P><P> </P><P>View the integration package and dedicated integration flows.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="hoangvu_3-1731665690736.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/191253iC24328932ECD113A/image-size/large?v=v2&px=999" role="button" title="hoangvu_3-1731665690736.png" alt="hoangvu_3-1731665690736.png" /></span></P><P> </P><P><SPAN>The integration package includes dedicated integration flows that outline the relevant business objects and events extracted by default. This setup enables a quick start with the flexibility to adjust and extend the content to meet your specific business needs.</SPAN></P><H3 id="toc-hId-810979281"><SPAN>Key Benefits of the Integration</SPAN></H3><UL><LI><P><SPAN><STRONG>End-to-End Visibility</STRONG></SPAN><SPAN>: Gain a holistic view of your procurement operations, identifying bottlenecks and opportunities for optimization.</SPAN></P></LI><LI><P><SPAN><STRONG>Customizable Data Extraction</STRONG></SPAN><SPAN>: The predefined business objects and events can be tailored to your organization’s unique requirements, offering adaptability for varied use cases.</SPAN></P></LI><LI><P><SPAN><STRONG>Enhanced Decision-Making</STRONG></SPAN><SPAN>: With seamless data extraction from Coupa and integration into SAP Signavio Process Intelligence, organizations can make informed decisions based on accurate process execution data.</SPAN></P></LI></UL><H3 id="toc-hId-614465776"><SPAN>Share Your Feedback</SPAN></H3><P><SPAN>We value your input and look forward to hearing your thoughts on this new integration package. Share your experiences and suggestions in the comments section below.</SPAN></P><P><SPAN>Start analyzing and optimizing your procurement processes today with the new Coupa to SAP Signavio Process Intelligence integration. Discover how this solution can transform your operations and drive better outcomes.</SPAN></P><P><SPAN>In case you have not seen it yet, also check out the integration content we have recently released for <STRONG>Salesforce</STRONG> (<A href="https://community.sap.com/t5/technology-blogs-by-sap/extract-salesforce-data-into-sap-signavio-process-intelligence-using-sap/ba-p/13804734" target="_self">Blog post</A> / <A href="https://api.sap.com/package/SalesforcetoSAPSignavio/integrationflow" target="_self" rel="noopener noreferrer">Integration content</A>) and <STRONG>Microsoft Dynamics CRM</STRONG> (<A href="https://community.sap.com/t5/technology-blogs-by-sap/extract-ms-dynamics-crm-data-into-sap-signavio-process-intelligence-with/ba-p/13923715" target="_self">Blog post</A> / <A href="https://api.sap.com/package/MicrosoftDynamicsCRMIntegrationwithSAPSignavio/integrationflow" target="_self" rel="noopener noreferrer">Integration content</A>)</SPAN></P>2025-05-28T14:19:56.416000+02:00https://community.sap.com/t5/technology-blog-posts-by-sap/cloud-to-cloud%E7%9A%84%E6%95%B0%E6%8D%AE%E7%9B%B4%E8%BF%9E%E9%9B%86%E6%88%90-%E4%B8%9A%E5%8A%A1%E4%BC%99%E4%BC%B4business-partner%E4%B8%BB%E6%95%B0%E6%8D%AE/ba-p/14114285Cloud to Cloud的数据直连集成:业务伙伴Business Partner主数据2025-05-29T10:31:27.171000+02:00Vincent_Zhuhttps://community.sap.com/t5/user/viewprofilepage/user-id/131883<P>这篇文章是作为<A class="" href="https://community.sap.com/t5/technology-blog-posts-by-sap/cloud-to-cloud%E7%9A%84%E6%95%B0%E6%8D%AE%E7%9B%B4%E8%BF%9E%E9%9B%86%E6%88%90-%E4%BA%A7%E5%93%81%E4%B8%BB%E6%95%B0%E6%8D%AE/ba-p/14104921" target="_blank">Cloud to Cloud的数据直连集成:产品主数据</A> 的后续,介绍第二个集成场景:业务伙伴Business Partner主数据。</P><P> </P><H1 id="toc-hId-1602317439">1. 业务伙伴Business Partner的集成:</H1><P>BP主数据的集成,我们参考的是同一个scope item 1RO(Master Data Integration)。</P><H3 id="toc-hId-1663969372">1.1 发送系统的设置</H3><H4 id="toc-hId-1596538586">1.1.1 创建通信系统</H4><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Vincent_Zhu_0-1748506380634.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267193i6B8CADABF14A522F/image-size/large?v=v2&px=999" role="button" title="Vincent_Zhu_0-1748506380634.png" alt="Vincent_Zhu_0-1748506380634.png" /></span></P><P>与前一个场景一样,我们同样需要首先设置通信系统。该通信系统是需要集成的目标系统。</P><P>输入自定义的System ID、System Name,Host Name为接收系统(receiver system)的地址,维护字段Logical System和Business System。</P><P>另外,需要在通信系统中维护通信的inbound user和outbound user。</P><P><U><STRONG>这里需要特别注意的是,发送系统的outbound user与之后维护的接收系统的inbound user需要一致。</STRONG></U></P><H4 id="toc-hId-1400025081">1.1.2 创建通信安排</H4><P><SPAN>BP主数据的集成借助了通信场景<STRONG>SAP_COM_0008</STRONG>,创建基于该通信场景的通信安排,选中之前创建的通信系统:</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Vincent_Zhu_1-1748506653437.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267197i04712372046145FB/image-size/large?v=v2&px=999" role="button" title="Vincent_Zhu_1-1748506653437.png" alt="Vincent_Zhu_1-1748506653437.png" /></span></P><P><SPAN>具体使用到的接口信息如下,选择激活该SOAP接口,并且维护Replication Model, Replication Mode, Output Mode。</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Vincent_Zhu_2-1748506754176.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267199i90FD3473BD8DDEE2/image-size/large?v=v2&px=999" role="button" title="Vincent_Zhu_2-1748506754176.png" alt="Vincent_Zhu_2-1748506754176.png" /></span></P><P> </P><H3 id="toc-hId-1074428857">1.2 接收系统的设置</H3><H4 id="toc-hId-1006998071">1.2.1 通信系统的设置</H4><P><SPAN>不同于发送系统中创建的通信系统需要选择接收系统,在接收系统中创建的通信系统是选择其本身,因为在这个通信场景里,它是一个被动接收的角色。</SPAN></P><P><SPAN>同样,在该通信系统中,需要维护inbound user和outbound user。 inbound user需要特别注意,与之前发送系统的outbound user维护成一致。</SPAN></P><P> </P><H4 id="toc-hId-810484566"><SPAN>1.2.2 创建通信安排</SPAN></H4><P><SPAN>接收端的通信安排不需要激活outbound services,使用的是下面的这个inbound service。因此,不需要特别的设置。</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Vincent_Zhu_3-1748507005269.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267203iA2EA753C05DD1B99/image-size/large?v=v2&px=999" role="button" title="Vincent_Zhu_3-1748507005269.png" alt="Vincent_Zhu_3-1748507005269.png" /></span></P><P> </P><H3 id="toc-hId-484888342">1.3 设置消息的监控</H3><P><SPAN>为了测试中能够看到SOAP接口的消息,打开应用Assign Recipients to Users,给测试的用户分配以下条目:</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Vincent_Zhu_4-1748507115731.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267208i319BEB30AD6EA4EE/image-size/large?v=v2&px=999" role="button" title="Vincent_Zhu_4-1748507115731.png" alt="Vincent_Zhu_4-1748507115731.png" /></span></P><P> </P><H3 id="toc-hId-288374837">1.4 测试</H3><P>与前一篇分享的类似,BP主数据的集成可以单个集成同步(<SPAN>Replicate by Object Selection</SPAN>)或者批量同步完成(<SPAN>Replicate by Replication Model</SPAN>)。具体可参考 <A class="" href="https://community.sap.com/t5/technology-blog-posts-by-sap/cloud-to-cloud%E7%9A%84%E6%95%B0%E6%8D%AE%E7%9B%B4%E8%BF%9E%E9%9B%86%E6%88%90-%E4%BA%A7%E5%93%81%E4%B8%BB%E6%95%B0%E6%8D%AE/ba-p/14104921" target="_blank">Cloud to Cloud的数据直连集成:产品主数据</A></P><P> </P><H3 id="toc-hId-91861332">1.5 查看消息日志</H3><P>消息的查看同样是在Message Dashboard里可以看到。</P><P> </P><H1 id="toc-hId-406922472">2. 参考文档</H1><P>如文章开头所说,实现Cloud to cloud的业务伙伴Business Partner主数据的集成,参考的是标准scope item 1RO,如想了解详细内容,可参考以下链接:</P><P><A href="https://support.sap.com/content/dam/SAAP/Sol_Pack/S4C/Library/Setup/1RO_Set-Up_EN_XX.pdf" target="_self" rel="noopener noreferrer">1RO(Master Data Integration)的set-up Guide</A></P><P>通过该标准流程,亦可实现BP主数据在cloud系统之间通过后台作业的方式实现数据的同步。</P><P>感谢阅读!</P><P> </P>2025-05-29T10:31:27.171000+02:00https://community.sap.com/t5/application-development-and-automation-blog-posts/sap-developer-news-may-29th-2025/ba-p/14114712SAP Developer News May 29th, 20252025-05-29T21:10:00.041000+02:00Eberenwaobiorahttps://community.sap.com/t5/user/viewprofilepage/user-id/1937986<H3 id="toc-hId-1860487462"><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%2Fq73gDfWwp-c%3Ffeature%3Doembed&display_name=YouTube&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dq73gDfWwp-c&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fq73gDfWwp-c%2Fhqdefault.jpg&type=text%2Fhtml&schema=youtube" width="400" height="225" scrolling="no" title="SAP: BTP ABAP, Integration Suite, Studio Home Build, CAP Challenge, SAPUI5 | SAP Developer News" frameborder="0" allow="autoplay; fullscreen; encrypted-media; picture-in-picture;" allowfullscreen="true"></iframe></div></H3><H3 id="toc-hId-1663973957">DESCRIPTION</H3><P><STRONG>PODCAST</STRONG>:<SPAN> </SPAN><A href="https://podcast.opensap.info/sap-developers/2025/05/29/sap-developer-news-may-29th-2025/" target="_blank" rel="noopener nofollow noreferrer">https://podcast.opensap.info/sap-developers/2025/05/29/sap-developer-news-may-29th-2025/</A></P><P><STRONG>SAP BTP ABAP Environment – Release 2505</STRONG></P><UL><LI>Blog post: <SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sap-btp-abap-environment-release-2505/ba-p/14102638" target="_blank">https://community.sap.com/t5/technology-blog-posts-by-sap/sap-btp-abap-environment-release-2505/ba-p/14102638</A></SPAN></LI><LI><SPAN>What's New in ABAP Generative AI in ABAP Cloud: </SPAN><SPAN><A href="https://help.sap.com/whats-new/4d359a7f8e8248e18f98e85ea0b9d83e?locale=en-US" target="_blank" rel="noopener noreferrer">https://help.sap.com/whats-new/4d359a7f8e8248e18f98e85ea0b9d83e?locale=en-US</A></SPAN></LI></UL><P><STRONG><SPAN>Studio Home in SAP Build</SPAN></STRONG></P><UL><LI><SPAN>Introducing Studio Home, new decision management application for business users</SPAN></LI></UL><P><SPAN><A href="https://community.sap.com/t5/application-development-and-automation-blog-posts/empowering-business-to-manage-decisions-in-sap-build-process-automation/ba-p/14092130" target="_blank">https://community.sap.com/t5/application-development-and-automation-blog-posts/empowering-business-to-manage-decisions-in-sap-build-process-automation/ba-p/14092130</A></SPAN></P><UL><LI><SPAN>Configure Studio Home application in Work zone – SAP Help Portal</SPAN></LI></UL><P><SPAN><A href="https://help.sap.com/docs/build-process-automation/sap-build-process-automation/configure-studio-home-application" target="_blank" rel="noopener noreferrer">https://help.sap.com/docs/build-process-automation/sap-build-process-automation/configure-studio-home-application</A></SPAN></P><P><STRONG>SAP CAP Developer Challenge June</STRONG></P><UL><LI>Blog post: <SPAN><A href="https://community.sap.com/t5/application-development-and-automation-blog-posts/sap-community-escape-house-for-june-sap-cap-%EF%B8%8F-%EF%B8%8F/ba-p/14110094" target="_blank">https://community.sap.com/t5/application-development-and-automation-blog-posts/sap-community-escape-house-for-june-sap-cap-%EF%B8%8F-%EF%B8%8F/ba-p/14110094</A></SPAN></LI><LI>SAP Community Escape House: <SPAN><A href="https://sap-community-escape-house.cfapps.us10.hana.ondemand.com/" target="_blank" rel="noopener noreferrer">https://sap-community-escape-house.cfapps.us10.hana.ondemand.com/</A></SPAN></LI></UL><P><STRONG>SAPUI5 WCAG 2.2 Update</STRONG></P><UL><LI>WCAG Homepage: <SPAN><A href="https://www.w3.org/WAI/" target="_blank" rel="noopener nofollow noreferrer">https://www.w3.org/WAI/</A></SPAN></LI><LI>WCAG 2.2 Changes: <SPAN><A href="https://www.w3.org/WAI/standards-guidelines/wcag/new-in-22/" target="_blank" rel="noopener nofollow noreferrer">https://www.w3.org/WAI/standards-guidelines/wcag/new-in-22/</A></SPAN></LI><LI>SAPUI5 is Leading the Way in Accessibility with WCAG 2.2 Blog Post: <SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/sapui5-is-leading-the-way-in-accessibility-with-wcag-2-2/ba-p/14101596" target="_blank">https://community.sap.com/t5/technology-blog-posts-by-sap/sapui5-is-leading-the-way-in-accessibility-with-wcag-2-2/ba-p/14101596</A><BR /></SPAN></LI></UL><P><SPAN> </SPAN><STRONG>New learning content for SAP Integration Suite</STRONG></P><UL><LI>SAP Integration Suite Basic Trial: <SPAN><A href="https://community.sap.com/t5/integration-blog-posts/sap-integration-suite-basic-trial/ba-p/14112484" target="_blank">https://community.sap.com/t5/integration-blog-posts/sap-integration-suite-basic-trial/ba-p/14112484</A></SPAN></LI><LI>Start your free trial for SAP Integration Suite: <SPAN><A href="https://www.sap.com/products/technology-platform/integration-suite/trial.html" target="_blank" rel="noopener noreferrer">https://www.sap.com/products/technology-platform/integration-suite/trial.html</A></SPAN></LI><LI>Get Started with SAP Integration Suite, advanced event mesh: <SPAN><A href="https://developers.sap.com/mission.advanced-event-mesh-get-started.html" target="_blank" rel="noopener noreferrer">https://developers.sap.com/mission.advanced-event-mesh-get-started.html</A></SPAN></LI></UL><P> </P><H3 id="toc-hId-1467460452">CHAPTER TITLES</H3><P>0:00 Intro</P><P>0:10 <SPAN>SAP BTP ABAP Environment – Release 2505</SPAN></P><P>1:29 <SPAN>Studio Home in SAP Build</SPAN></P><P>3:38 SAP CAP Developer Challenge June</P><P><SPAN>4:37 SAPUI5 WCAG 2.2 Update</SPAN></P><P><SPAN>5:18</SPAN> <SPAN>New learning content for SAP Integration Suite</SPAN></P><P> </P><H3 id="toc-hId-1270946947">TRANSCRIPTION</H3><P class="lia-align-justify" style="text-align : justify;"><STRONG>[Intro]</STRONG> This is the SAP Developer News for May the 29th, 2025.</P><P class="lia-align-justify" style="text-align : justify;"><STRONG>[Shilpa]</STRONG> Hello, ABAP Developers. The ABAP release of 2505 happened last week, and I'm here to highlight some of the key features. Firstly, reduction in the technical downtime during the release upgrade, which is great to keep your business process running. Secondly, in ADT, there is a new wizard called Quick Fiori Application Generator, which will help you to generate a Fiori project within ADT itself. You need not have to log into Business Application Studio or Visual Studio Code to create a Fiori project, but it is integrated with ADT. A video about this feature will be available coming Monday in our SAP Developers YouTube channel. And thirdly and most important one, AI in ABAP. In the AI space, I want to highlight three things. First, Joule Chat is now integrated in ABAP repository object generator wizard, which will help you to generate OData UI service from the scratch just by using natural language prompts. Second, Unit test is quite important, and you can now use the prompt to generate ABAP Unit test methods. Third, the prediction of the code completion has been enhanced. There are other features related to ADT, OData, CDS, which is described in the blog post by Nora Klemp, which is in the description. Do check it out.</P><P class="lia-align-justify" style="text-align : justify;"><STRONG>[Shrinivasan]</STRONG> Decisions in SAP Build allows business users to create business rules for approval policies, pricing logic, visibility check, etc. within a process automation project. Until now, even the simplest rule modifications required developer intervention, leading to delayed updates and a slow change management cycle due to their dependency. That's where Studio Home, SAP Build's latest decision management application comes in. With the new Studio Home, business users can now view, edit and maintain decisions from a dedicated user interface that only shows the decision artifacts within a project. Options such as inputs, outputs, reorder, create new rule are not present in this user interface, showing only the options that are relevant to the business users With a one-click button, they can release a patch version of the project and deploy it after making the rule updates This application comes with a design console that shows any error or warning message during the release and deployment of a project and a version history option to navigate and view the previous versions of the decision artifacts in the project. The Studio Home application can be configured to be accessed from a work zone tile. The instructions to configure the application in the work zone site is provided in the help portal. On top of Studio Home's release, there are enhancements to the expression editor in decision tables, making quick edits faster and more intuitive than ever before. With a new Studio Home, business users can now take the ownership of maintaining and owning the decision artifacts independently. By simplifying the process, reducing dependencies, and accelerating change management, decision management is more accessible and efficient than ever. Check out this blog post from Sesh Sreenivas to find out all the details about Studio Home and the enhancements to the expression editor for decisions.</P><P class="lia-align-justify" style="text-align : justify;"><STRONG>[Ajay]</STRONG> Hello everyone. We have almost come to the end of this month and we thank all the participants who have already completed the ABAP Developer Challenge. We still have a couple of days to finish the ABAP Developer Challenge and earn a badge of completion. In June, we get to escape a brand new room for SAP Cloud Application Programming Model in SAP Community Escape House. This room will be unlocked next week for the participants to attempt the SAP Developer Challenge. In order to escape the CAP room, you would have to create a CAP project, create some custom code, and perform some testing. On your way out, you will also learn about remote debugging. In order to participate, you just need to use your user ideas and input and start the challenge and explore the story that unfolds. Links to the SAP Community's Cave House are included in the description. Wishing you all the best for your challenge and happy learning!</P><P class="lia-align-justify" style="text-align : justify;"><STRONG>[Michelle]</STRONG> SAP has announced that its SAPUI5 Web Development Framework now complies with the latest Web Content Accessibility Guidelines, WCAG 2.2 and SAPUI5 version 1.136 and UI5 Web Components version 2.9.0. These updates enhance features like focus visibility and assistive technology, ensuring better usability for people with disabilities and improve the user experience overall. If you're interested to learn more of what kind of changes have been made to the SAP UI5 and UI5 Web Components frameworks, be sure to check out the link in the description below. Happy coding!</P><P class="lia-align-justify" style="text-align : justify;"><STRONG>[Antonio]</STRONG> Hola, SAP developers. I'm always amazed by how accessible SAP learning content is nowadays. Long gone are the days that the only way you could learn about an SAP technology was by attending a course at a training center. I just want to highlight two new learning offerings that are available to all of you developers out there who are interested in learning about integration. There is the new SAP Integration Suite basic trial, which provides you a ready-made environment where you can get familiar with a few capabilities, like for example, cloud integration, API management, and integration assessment. It should take you around an hour 30 minutes to complete it, so go ahead and check it out. Also, there's a new mission in the tutorial system, which helps you get started with SAP Integration Suite Advanced Event Mesh. It covers everything, from creating an instance to connecting to an S4HANA cloud system, getting familiar with the main components of the service, and how you can integrate with other products, like cloud integration and SAP Build Process Automation. All the content is freely available. It is just a matter of dedicating time to learn. So, go ahead and enjoy the learning. Happy learning!</P>2025-05-29T21:10:00.041000+02:00https://community.sap.com/t5/technology-blog-posts-by-sap/a-look-into-the-migration-assessment-modernization-recommendation-clean/ba-p/14107032A look into the Migration Assessment Modernization Recommendation - Clean Core2025-05-30T09:23:11.898000+02:00DeniseRodrigueshttps://community.sap.com/t5/user/viewprofilepage/user-id/1974289<P><SPAN>Moving from SAP Process Orchestration to SAP Integration Suite shouldn’t be just about </SPAN><STRONG><SPAN>migrating</SPAN></STRONG><SPAN>.</SPAN><SPAN> </SPAN></P><P><SPAN>In order to unlock full potential, increase agility and flexibility and reduce technical debts we have to think about </SPAN><STRONG><SPAN>modernization</SPAN></STRONG><SPAN>.</SPAN><SPAN> </SPAN></P><P class="lia-align-justify" style="text-align : justify;"><SPAN>The modernization recommendations are used in the </SPAN><A href="https://help.sap.com/docs/integration-suite/sap-integration-suite/migration-assessment" target="_blank" rel="noopener noreferrer"><SPAN>Migration Assessment</SPAN></A><SPAN> capability of Cloud Integration. Once you´ve extracted your integration scenarios and executed the Scenario Evaluation, you can find the modernization recommendations in the Dashboard and in the downloadable </SPAN><I><SPAN>Evaluation Run Results</SPAN></I><SPAN> reports - under the </SPAN><I><SPAN>Modernization Recommendations</SPAN></I><SPAN> section of the pdf and in the </SPAN><I><SPAN>Recommendations</SPAN></I><SPAN> and </SPAN><I><SPAN>API Recommendations</SPAN></I><SPAN> tabs of the excel, as shown below:</SPAN><SPAN> </SPAN></P><P><SPAN> </SPAN></P><P class="lia-align-justify" style="text-align : justify;"><SPAN>So, you have done your data extraction and opened the respective </SPAN><I><SPAN>Scenario Evaluation Dashboard</SPAN></I><SPAN>. There you can see the </SPAN><I><SPAN>Modernization Recommendations</SPAN></I><SPAN> under the </SPAN><I><SPAN>Overview</SPAN></I><SPAN> tab, and you have the option to export the results to a spreadsheet or to generate a report.</SPAN><SPAN> </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="DeniseRodrigues_0-1747918237840.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/265090i8057D1C044D4B315/image-size/large?v=v2&px=999" role="button" title="DeniseRodrigues_0-1747918237840.png" alt="DeniseRodrigues_0-1747918237840.png" /></span></P><P><SPAN><SPAN class=""><SPAN class="">When you open </SPAN><SPAN class="">the pdf </SPAN><SPAN class="">report</SPAN><SPAN class=""> there is a section </SPAN><SPAN class="">dedicated to </SPAN><SPAN class="">modernization</SPAN><SPAN class=""> recommendations, where you can have an </SPAN><SPAN class="">idea of the integration scenarios that could be improved.</SPAN></SPAN><SPAN class=""> </SPAN> </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="DeniseRodrigues_0-1748364555864.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/266553i49CFA93B69780C38/image-size/large?v=v2&px=999" role="button" title="DeniseRodrigues_0-1748364555864.png" alt="DeniseRodrigues_0-1748364555864.png" /></span></P><P><SPAN><SPAN class=""><SPAN class="">In </SPAN><SPAN class="">a similar way</SPAN><SPAN class="">, w</SPAN><SPAN class="">hen you </SPAN><SPAN class="">open the excel </SPAN><SPAN class="">results</SPAN> <SPAN class="">you can check </SPAN><SPAN class="">the recommendations for the </SPAN><SPAN class="">possible modernization item </SPAN><SPAN class="">of the </SPAN><SPAN class="">integration scenario</SPAN> <SPAN class="">and</SPAN><SPAN class=""> the category it falls into.</SPAN></SPAN><SPAN class=""> </SPAN></SPAN><SPAN> </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="DeniseRodrigues_1-1747918237841.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/265091i4FE0FFF8ABC05DF6/image-size/large?v=v2&px=999" role="button" title="DeniseRodrigues_1-1747918237841.png" alt="DeniseRodrigues_1-1747918237841.png" /></span></P><P><SPAN>On a different tab, you can also analyze the API recommendations presented based on the extracted </SPAN><I><SPAN>Object ID</SPAN></I><SPAN>, its type, and the proposed solution.</SPAN><SPAN> </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="DeniseRodrigues_2-1747918237843.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/265092i7314F690F2E27018/image-size/large?v=v2&px=999" role="button" title="DeniseRodrigues_2-1747918237843.png" alt="DeniseRodrigues_2-1747918237843.png" /></span></P><P><SPAN><SPAN class=""><SPAN class="">And on the next tab, you can see the </SPAN><SPAN class="">recommendations for the existing </SPAN><SPAN class="">Business Event </SPAN><SPAN class="">scenarios.</SPAN></SPAN><SPAN class=""> </SPAN></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="DeniseRodrigues_1-1748364643847.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/266555i125C3F4E3B1835AA/image-size/large?v=v2&px=999" role="button" title="DeniseRodrigues_1-1748364643847.png" alt="DeniseRodrigues_1-1748364643847.png" /></span></P><P> </P><P><SPAN>Those <A href="https://help.sap.com/docs/migration-guide-po/migration-guide-for-sap-process-orchestration/modernization-recommendations" target="_blank" rel="noopener noreferrer">recommendations</A> point out where your existing integration scenarios show potential to be updated for optimal usage in Cloud Integration and can be divided in the following categories: </SPAN><SPAN> </SPAN></P><UL><LI><STRONG><SPAN>Clean Core:</SPAN></STRONG><SPAN> Recommendations on replacing outdated or custom interfaces with standard content or standard APIs to be up to date and in line with SAP product strategy </SPAN><SPAN> </SPAN></LI></UL><UL><LI><STRONG><SPAN>Integration Style:</SPAN></STRONG><SPAN> Recommendations on integration patterns </SPAN><SPAN> </SPAN></LI></UL><UL><LI><STRONG><SPAN>Mapping:</SPAN></STRONG><SPAN> Recommendations on using different mapping approaches </SPAN><SPAN> </SPAN></LI></UL><UL><LI><STRONG><SPAN>Monitoring & Operation:</SPAN></STRONG><SPAN> Recommendations on enhancing monitoring and operations </SPAN><SPAN> </SPAN></LI></UL><UL><LI><STRONG><SPAN>Protocol:</SPAN></STRONG><SPAN> Recommendations on using state-of-the-art communication protocols </SPAN><SPAN> </SPAN></LI></UL><UL><LI><STRONG><SPAN>Security:</SPAN></STRONG><SPAN> Recommendations on using state-of-the-art security options in integration scenarios </SPAN><SPAN> </SPAN></LI></UL><P><SPAN> </SPAN></P><P><SPAN>Today we will focus on the category </SPAN><STRONG><SPAN>Clean Core Modernization Recommendations</SPAN></STRONG><SPAN>.</SPAN><SPAN> </SPAN></P><P><SPAN>As SAP landscapes evolve to meet the demands of agility, scalability, and innovation, the concept of </SPAN><STRONG><SPAN>Clean Core</SPAN></STRONG><SPAN> has become a </SPAN><STRONG><SPAN>key priority</SPAN></STRONG><SPAN>. It refers to maintaining a stable, upgrade-friendly SAP system by minimizing customizations and relying on standardized, modern integration practices. </SPAN><SPAN> </SPAN></P><P><SPAN> </SPAN></P><P><STRONG><SPAN>Guiding Principles</SPAN></STRONG><SPAN> </SPAN></P><P><SPAN>Having that in mind the guiding principles for the clean core modernization rely on four pillars:</SPAN><SPAN> </SPAN></P><UL><LI><STRONG><SPAN>Avoid</SPAN></STRONG><SPAN> extensions where not necessary and stay as close as possible to SAP standards.</SPAN><SPAN> </SPAN></LI></UL><UL><LI><STRONG><SPAN>Be Aware </SPAN></STRONG><SPAN>of your technical debts, evaluate them on a regular basis and establish a binding governance framework.</SPAN></LI></UL><UL><LI><STRONG><SPAN>Be Cloud Ready </SPAN></STRONG><SPAN>by extending and integrating in a stable and transparent manner.</SPAN><SPAN> </SPAN></LI></UL><UL><LI><STRONG><SPAN>Decouple </SPAN></STRONG><SPAN>by leveraging BTP as a platform to innovate for additional differentiation and automate with standard APIs and Events.</SPAN></LI></UL><P> </P><P><STRONG><SPAN>Integration Dimension</SPAN></STRONG><SPAN> </SPAN></P><P><SPAN>There are some main aspects regarding the integration implementation that you can follow to keep your landscape reliable:</SPAN><SPAN> </SPAN></P><UL><LI><SPAN>Integrations shall be based on </SPAN><STRONG><SPAN>standard APIs</SPAN></STRONG><SPAN> (OData and SOAP).</SPAN><SPAN> </SPAN></LI></UL><UL><LI><SPAN>Aim for </SPAN><STRONG><SPAN>side-by-side extensibility</SPAN></STRONG><SPAN> with API integration or even SAP Build, by utilizing the tight coupling with the SAP Cloud Integration.</SPAN></LI></UL><UL><LI><STRONG><SPAN>Loosely coupled integrations</SPAN></STRONG><SPAN> could be realized in an event-driven design based on standard events.</SPAN><SPAN> </SPAN></LI></UL><UL><LI><STRONG><SPAN>Avoid</SPAN></STRONG><SPAN> traditional APIs (</SPAN><STRONG><SPAN>RFC and IDoc</SPAN></STRONG><SPAN>) and their related classical extension options.</SPAN></LI></UL><UL><LI><STRONG><SPAN>Ensure</SPAN></STRONG><SPAN> proper </SPAN><STRONG><SPAN>monitoring</SPAN></STRONG><SPAN> and error resolution capabilities by utilizing SAP Application Interface Framework.</SPAN><SPAN> </SPAN></LI></UL><P><SPAN>Three of the most impactful modernization moves include:</SPAN><SPAN> </SPAN></P><P><FONT size="3"><STRONG><SPAN>1. Replacing RFCs (BAPIs) with SOAP/OData APIs</SPAN></STRONG></FONT><SPAN> </SPAN></P><P><SPAN>Modern APIs are better suited for integration with both SAP and non-SAP systems, </SPAN><SPAN>offering:</SPAN><SPAN> </SPAN></P><UL><LI><SPAN>Greater flexibility for future changes</SPAN></LI></UL><UL><LI><SPAN>Public documentation and support via SAP Business Accelerator Hub</SPAN></LI><LI><SPAN>Cleaner, standardized interfaces</SPAN></LI></UL><P><SPAN><STRONG>2. Replacing custom interfaces with Pre-Delivered Packages</STRONG></SPAN></P><P><SPAN>Pre-delivered content accelerates implementation and ensures consistency:</SPAN><SPAN> </SPAN></P><UL><LI><SPAN>Saves development time with ready-to-use mappings and flows</SPAN></LI></UL><UL><LI><SPAN>Built on best practices and regularly updated by SAP</SPAN><SPAN> </SPAN></LI><LI><SPAN>Scalable and adaptable for enterprise growth</SPAN><SPAN> </SPAN></LI></UL><P><SPAN><STRONG>3. Replace IDOCs with SOAP/OData APIS or Business Events</STRONG></SPAN></P><P><SPAN>Using open and standardized protocols like SOAP or OData for event communication </SPAN><SPAN>provides benefits like:</SPAN><SPAN> </SPAN></P><UL><LI><SPAN>Interoperability</SPAN><SPAN> </SPAN></LI></UL><UL><LI><SPAN>Wider adoption</SPAN><SPAN> </SPAN></LI></UL><UL><LI><SPAN>Easier integration with non-SAP systems</SPAN></LI></UL><P><SPAN>The central access point to discover integration artifacts like standard APIs, events and integration flows is </SPAN><A href="https://api.sap.com/" target="_blank" rel="noopener noreferrer"><STRONG><SPAN>SAP Business Accelerator Hub</SPAN></STRONG></A><STRONG><SPAN>. </SPAN></STRONG><SPAN> </SPAN></P><P><SPAN>Below you have a step by step of how to find the recommended API and business event highlighted in the </SPAN><I><SPAN>API Recommendation </SPAN></I>and<I><SPAN> Business Event Recommendation</SPAN></I><SPAN> tabs of the </SPAN><I><SPAN>Evaluation Run Results</SPAN></I><SPAN> excel.</SPAN><SPAN> </SPAN></P><P><SPAN class="">So, you opt to move forward with the API </SPAN><SPAN class="">and the Business Event </SPAN><SPAN class="">recommendation</SPAN><SPAN class="">s</SPAN><SPAN class=""> and choose the object</SPAN> <SPAN class="">you want to replace.</SPAN> <SPAN class="">Let’s</SPAN><SPAN class=""> take the second line as an </SPAN><SPAN class="">example,</SPAN> <SPAN class="">the Object ID is </SPAN><SPAN class="">ORDERS05,</SPAN> <SPAN class="">and you will be replacing an </SPAN><SPAN class="">I</SPAN><SPAN class="">DOC </SPAN><SPAN class="">for </SPAN><SPAN class="">an </SPAN><SPAN class="">SAP S/4HANA </SPAN><SPAN class="">or SAP S/4HANA </SPAN><SPAN class="">Cloud Public Edition</SPAN> <SPAN class="">SOAP </SPAN><SPAN class="">API</SPAN><SPAN class="">, </SPAN><SPAN class="">depending on your context</SPAN><SPAN class="">.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="DeniseRodrigues_3-1747918237844.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/265094i8AC2076F234BEEE6/image-size/large?v=v2&px=999" role="button" title="DeniseRodrigues_3-1747918237844.png" alt="DeniseRodrigues_3-1747918237844.png" /></span></P><P><SPAN><SPAN class=""><SPAN class="">As for the business event</SPAN><SPAN class="">, you will be replacing the IDOC for </SPAN><SPAN class="">a Purchase</SPAN><SPAN class=""> Order </SPAN><SPAN class="">Event</SPAN><SPAN class="">,</SPAN><SPAN class=""> available either on</SPAN> </SPAN><SPAN class=""><SPAN class="">SAP S/4HANA</SPAN><SPAN class=""> Business Event</SPAN></SPAN><SPAN class=""><SPAN class=""><SPAN class="">s</SPAN></SPAN></SPAN><SPAN class=""><SPAN class=""> or SAP S/4HANA Cloud Public Edition</SPAN><SPAN class=""> for Business </SPAN></SPAN><SPAN class=""><SPAN class="">Events,</SPAN> </SPAN><SPAN class=""><SPAN class="">according to </SPAN><SPAN class="">your context</SPAN></SPAN><SPAN class=""><SPAN class="">.</SPAN></SPAN></SPAN><SPAN> </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="DeniseRodrigues_3-1748365155886.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/266558iE7BBFCF01AC95E88/image-size/large?v=v2&px=999" role="button" title="DeniseRodrigues_3-1748365155886.png" alt="DeniseRodrigues_3-1748365155886.png" /></span></P><P><SPAN class=""><SPAN class="">Note that </SPAN><SPAN class="">in</SPAN><SPAN class=""> th</SPAN><SPAN class="">ese</SPAN> <SPAN class="">cases</SPAN></SPAN> <SPAN class=""><SPAN class="">we can see that there is a solution available for both S/4HANA versions, but sometimes the </SPAN><SPAN class="">suggestion </SPAN><SPAN class="">might </SPAN><SPAN class="">be only</SPAN><SPAN class=""> available for one of the versions (public or private</SPAN><SPAN class=""> edition</SPAN><SPAN class="">).</SPAN></SPAN><SPAN class=""> </SPAN></P><P><SPAN>To find the recommended object you must open the Business Accelerator Hub and look for it. There are multiple ways to do it.</SPAN><SPAN> </SPAN></P><P><SPAN>You can go to the general categories of APIs/Events, where both SAP S/4HANA and SAP S/4HANA Cloud Public Edition will show up.</SPAN><SPAN> </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="DeniseRodrigues_4-1748365229041.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/266559iE49286DD8C7615B0/image-size/large?v=v2&px=999" role="button" title="DeniseRodrigues_4-1748365229041.png" alt="DeniseRodrigues_4-1748365229041.png" /></span></P><P><SPAN class=""><SPAN class="">There, you can search by the name and protocol provided in the </SPAN></SPAN><SPAN class=""><SPAN class="">Evaluation Run Results</SPAN></SPAN><SPAN class=""><SPAN class=""> excel</SPAN><SPAN class=""> or by the event name, respectively</SPAN><SPAN class="">.</SPAN></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="DeniseRodrigues_5-1748365254785.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/266560iCF0ADCED9BBFE5EE/image-size/large?v=v2&px=999" role="button" title="DeniseRodrigues_5-1748365254785.png" alt="DeniseRodrigues_5-1748365254785.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="DeniseRodrigues_6-1748365277186.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/266561iCE63B520A609ED24/image-size/large?v=v2&px=999" role="button" title="DeniseRodrigues_6-1748365277186.png" alt="DeniseRodrigues_6-1748365277186.png" /></span></P><P><SPAN class=""><SPAN class="">As an alternative</SPAN><SPAN class=""> you can go directly to SAP S/4HANA Cloud Public Edition </SPAN><SPAN class="">and search there</SPAN><SPAN class=""> for the </SPAN><SPAN class="">P</SPAN><SPAN class="">ublic </SPAN><SPAN class="">Edition</SPAN><SPAN class=""> solution</SPAN><SPAN class="">.</SPAN></SPAN><SPAN class=""> </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="DeniseRodrigues_7-1748365370809.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/266562iEB9CA1A2CE5644D6/image-size/large?v=v2&px=999" role="button" title="DeniseRodrigues_7-1748365370809.png" alt="DeniseRodrigues_7-1748365370809.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="DeniseRodrigues_8-1748365406059.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/266563iEFFFCF0256A3C1C6/image-size/large?v=v2&px=999" role="button" title="DeniseRodrigues_8-1748365406059.png" alt="DeniseRodrigues_8-1748365406059.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="DeniseRodrigues_9-1748365417920.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/266564i2B29CC403FE7C628/image-size/large?v=v2&px=999" role="button" title="DeniseRodrigues_9-1748365417920.png" alt="DeniseRodrigues_9-1748365417920.png" /></span></P><P><SPAN class=""><SPAN class="">In </SPAN><SPAN class="">a similar way</SPAN><SPAN class="">,</SPAN><SPAN class=""> you can go directly to SAP S/4HANA Cloud Private Edition and search there</SPAN><SPAN class=""> for the S/4HANA solution either for the API or for the business event</SPAN><SPAN class="">.</SPAN></SPAN><SPAN class=""> </SPAN></P><P><SPAN class=""><SPAN class=""><SPAN class="">For an even more refined result</SPAN><SPAN class=""> you can search by the API </SPAN><SPAN class="">or the event </SPAN><SPAN class="">technical name</SPAN></SPAN><SPAN class=""><SPAN class=""><SPAN class=""> </SPAN></SPAN></SPAN><SPAN class=""> <SPAN class="">and get a 1:1 match.</SPAN></SPAN></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="DeniseRodrigues_10-1748365482987.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/266565i2D27684F9825FCD4/image-size/large?v=v2&px=999" role="button" title="DeniseRodrigues_10-1748365482987.png" alt="DeniseRodrigues_10-1748365482987.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="DeniseRodrigues_11-1748365498619.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/266566i8B81AECC8F20E560/image-size/large?v=v2&px=999" role="button" title="DeniseRodrigues_11-1748365498619.png" alt="DeniseRodrigues_11-1748365498619.png" /></span></P><P><SPAN class="">Once you find </SPAN><SPAN class="">it,</SPAN><SPAN class=""> you can </SPAN><SPAN class="">access the specification</SPAN><SPAN class=""> and use it</SPAN><SPAN class=""> on Cloud Integration.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="DeniseRodrigues_12-1748365540469.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/266567iA0C84BF37AE10453/image-size/large?v=v2&px=999" role="button" title="DeniseRodrigues_12-1748365540469.png" alt="DeniseRodrigues_12-1748365540469.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="DeniseRodrigues_13-1748365550321.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/266568iB0757FA357CDAA9D/image-size/large?v=v2&px=999" role="button" title="DeniseRodrigues_13-1748365550321.png" alt="DeniseRodrigues_13-1748365550321.png" /></span></P><P><SPAN class=""><SPAN class="">Note that </SPAN><SPAN class="">after th</SPAN><SPAN class="">e</SPAN><SPAN class=""> replacement, either by</SPAN> <SPAN class="">S/4HANA or </SPAN><SPAN class="">S/4HANA</SPAN><SPAN class=""> Cloud</SPAN><SPAN class=""> Public</SPAN> <SPAN class="">Edition </SPAN><SPAN class="">API</SPAN><SPAN class="">/</SPAN><SPAN class="">Event,</SPAN><SPAN class=""> further </SPAN><SPAN class="">changes in the </SPAN><SPAN class="">i</SPAN><SPAN class="">F</SPAN><SPAN class="">low</SPAN> <SPAN class="">may </SPAN><SPAN class="">be </SPAN><SPAN class="">required</SPAN><SPAN class="">.</SPAN> <SPAN class="">At the moment</SPAN><SPAN class=""> that </SPAN><SPAN class="">additional</SPAN><SPAN class=""> effort is not being </SPAN><SPAN class="">considered</SPAN> <SPAN class="">on the effort estimation</SPAN><SPAN class=""> results,</SPAN></SPAN> <SPAN class=""><SPAN class="">so it is important</SPAN> <SPAN class="">not only </SPAN><SPAN class="">to have that in mind </SPAN><SPAN class="">but also </SPAN><SPAN class="">to </SPAN><SPAN class="">verify </SPAN><SPAN class="">if th</SPAN><SPAN class="">at</SPAN><SPAN class=""> given </SPAN></SPAN><A class="" href="https://help.sap.com/docs/migration-guide-po/migration-guide-for-sap-process-orchestration/modernization-recommendations#loiod337a6f0d324405f9ef0c410fd0d3739__section_kfp_nmx_fbc" target="_blank" rel="noreferrer noopener"><SPAN class=""><SPAN class=""><SPAN class=""><SPAN class="">recommendation</SPAN></SPAN></SPAN></SPAN></A><SPAN class=""> <SPAN class="">fulfills </SPAN><SPAN class="">all the necessary functional requirements </SPAN><SPAN class="">currently in place for the given business scenario</SPAN><SPAN class="">.</SPAN></SPAN></P><P><SPAN class=""><SPAN class=""> </SPAN></SPAN></P><P><STRONG><SPAN>Final Thoughts</SPAN></STRONG><SPAN> </SPAN></P><P class="lia-align-justify" style="text-align : justify;"><SPAN>Modernizing your integration landscape isn’t just about following trends—it’s about future-proofing your SAP environment. By replacing outdated technologies with standardized APIs and leveraging prebuilt content, you move closer to a Clean Core that’s easier to maintain, more responsive to business needs, and ready for the future.</SPAN><SPAN> </SPAN></P><P class="lia-align-justify" style="text-align : justify;"><SPAN>Think strategically, start simple, and scale confidently by adopting SAP’s recommendations and incrementally build a cleaner and smarter core.</SPAN><SPAN> </SPAN></P><P> </P><P><FONT size="4"><STRONG>SAP Help Pages</STRONG></FONT></P><UL><LI>To explore in more detail the Migration Assessment, refer to <A href="https://help.sap.com/docs/integration-suite/sap-integration-suite/migration-assessment" target="_blank" rel="noopener noreferrer">Migration Assessment</A> or <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/automatically-assess-your-migration-from-sap-process-orchestration-systems/ba-p/13555563" target="_blank">Automatically assess your migration</A></LI><LI>To get information on Modernization Recommendations, refer to <A href="https://help.sap.com/docs/migration-guide-po/migration-guide-for-sap-process-orchestration/modernization-recommendations#loiod337a6f0d324405f9ef0c410fd0d3739__section_kfp_nmx_fbc" target="_blank" rel="noopener noreferrer">Modernization Recommendations</A></LI></UL><P> </P><P> </P><P> </P><P> </P>2025-05-30T09:23:11.898000+02:00https://community.sap.com/t5/technology-blog-posts-by-sap/ariba-api-data-extraction-amp-reporting-with-sap-btp/ba-p/14114406ARIBA API data extraction & reporting with SAP BTP2025-06-03T09:31:27.716000+02:00VinayBhatthttps://community.sap.com/t5/user/viewprofilepage/user-id/162013<P><FONT size="7"><STRONG>Introduction</STRONG></FONT></P><P><FONT size="4">In this blog post I'm sharing some highlights from a recent project work involving data extraction from <STRONG>ARIBA API</STRONG> into <STRONG>SAP Datasphere</STRONG> OpenSQL schema using <STRONG>Integration suite</STRONG> with a basic dashboard in <STRONG>Analytics cloud</STRONG>. </FONT></P><P> <span class="lia-unicode-emoji" title=":white_heavy_check_mark:">✅</span> Use <STRONG>Integration Suite iflow</STRONG> to extract data from <STRONG>ARIBA API</STRONG>.</P><P class=""> <span class="lia-unicode-emoji" title=":white_heavy_check_mark:">✅</span> <STRONG>Persisting</STRONG> records in <STRONG>Datasphere</STRONG> OpenSQL schema</P><P class=""> <span class="lia-unicode-emoji" title=":white_heavy_check_mark:">✅</span> Data <STRONG>modelling</STRONG> in <STRONG>Datasphere</STRONG></P><P class=""> <span class="lia-unicode-emoji" title=":white_heavy_check_mark:">✅</span> <STRONG>Reporting</STRONG> in <STRONG>Analytics Cloud</STRONG></P><P class=""><FONT size="5"><STRONG>Upcoming Functionality with SAP BDC <span class="lia-unicode-emoji" title=":rocket:">🚀</span></STRONG></FONT></P><P><FONT size="4">With the annoucement of <STRONG><A href="https://www.sap.com/products/data-cloud.html" target="_self" rel="noopener noreferrer">SAP Business Data cloud (BDC),</A> </STRONG><SPAN>a fully managed SaaS solution that unifies and governs all SAP data and seamlessly connects with third-party data, </SPAN>we will soon have standard <STRONG>Data Products</STRONG> & <STRONG>Insight Applications</STRONG> across SAP LoB solutions, and with that we will have direct access to such data assets without the need for data integration as in this blog post. SAP has already started publishing these data products and these can be looked up here : <A href="https://api.sap.com/dataproducts" target="_self" rel="noopener noreferrer">SAP Data Products.</A></FONT></P><P><FONT size="4">In this post you get to see some highlights with screenshots on how <STRONG>SAP Integration suite</STRONG> can work with ARIBA APIs, with end to end data modelling and visualization. Its quite relevant for customers with exisitng subscription of Integration Suite. </FONT></P><P><STRONG><FONT size="5">SAP Discovery Mission <span class="lia-unicode-emoji" title=":magnifying_glass_tilted_left:">🔍</span></FONT></STRONG></P><P><FONT size="4">For detailed implemenation of <STRONG>ARIBA API spend data extraction</STRONG> please refer this <A href="https://discovery-center.cloud.sap/missiondetail/4038/?tab=overview " target="_self" rel="nofollow noopener noreferrer">SAP Discovery mission</A> which comes with Integration Suite iflows, sample SQL scripts to execute on Datasphere etc. </FONT></P><P><FONT size="4">While the discovery mission is very detailed , we will observe in the blog post the overall flow with sample implementation steps using a single iflow and I hope it will help understand the overall flow when modelling ARIBA apis for extraction. </FONT></P><P><FONT size="5"><STRONG>ARIBA API <span class="lia-unicode-emoji" title=":chains:">⛓</span></STRONG></FONT></P><P><FONT size="4">I have used the Purchase orders buyer API which can tested using the free sandbox at api.sap.com </FONT></P><P><FONT size="4"><STRONG><A href="https://api.sap.com/api/purchase_orders/overview" target="_blank" rel="noopener noreferrer">ARIBA Network Purchase Orders buyer API</A></STRONG></FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_0-1748512438299.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267352iE1A49177232E18E2/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_0-1748512438299.png" alt="VinayBhatt_0-1748512438299.png" /></span></P><P><FONT size="5"><STRONG>Prepackaged Integration Content <span class="lia-unicode-emoji" title=":wrapped_gift:">🎁</span></STRONG></FONT></P><P>With Integration Suites prepackaged content you get well designed iflows which you can configure for your specific systems & apis.</P><P>Explore Prepakaged Content on <A href="https://api.sap.com/integrations/discoverintegrations?source=SAPAriba&target=SAPCloudPlatform" target="_self" rel="noopener noreferrer"><STRONG>Business Accelerator Hub .</STRONG></A></P><P>For the integration in discussion as well we have the standard iflows listed as below:</P><P><A href="https://api.sap.com/package/SAPAribaIntegrationwithSAPAribaAPIs/integrationflow" target="_self" rel="noopener noreferrer"><STRONG>ARIBA connection iflows on Business Accelerator Hub</STRONG></A></P><P>On your integration suite tenant you can access this prepackaged content under <STRONG>Discover --> integrations</STRONG> </P><P>Published ARIBA connection package in Integration suite : </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_0-1748580394919.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267765iB251DEE3147EA05C/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_0-1748580394919.png" alt="VinayBhatt_0-1748580394919.png" /></span></P><P>As part of this packages you get 2 iflows as described below : </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_3-1748582873737.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267774i58C496748D551F2B/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_3-1748582873737.png" alt="VinayBhatt_3-1748582873737.png" /></span><FONT size="5"><STRONG>MODIFIED INTEGRATION FLOW (iflow): <span class="lia-unicode-emoji" title=":up_left_arrow:">↖️</span></STRONG></FONT></P><P>I did some modifications on this prepackaged iflow so that I can connect to ARIBA and then process data using below addtional operators : </P><UL><LI><STRONG>General Splitter</STRONG></LI><LI><STRONG>Content modifier</STRONG></LI><LI><STRONG>JDBC receiver</STRONG> (OpenSQL schema of SAP Datasphere) </LI></UL><P>If needed you can download this from my Github page : <A href="https://github.com/VNSHANPR/Ariba_iflow_sap_integration_suite/tree/main" target="_self" rel="nofollow noopener noreferrer">Download modified iflow</A></P><P>Here is a screenshot of the modified iflow : </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_1-1748514446885.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267353i4C7619D7C37A0125/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_1-1748514446885.png" alt="VinayBhatt_1-1748514446885.png" /></span></P><P>So the second iflow "<STRONG>output_from_ARIBA"</STRONG> is simply calling the first iflow using <STRONG>ProcessDirect</STRONG> and it gets deployed with an HTTP end point, which when queried triggers the first iflow <STRONG>"Connect SAP ARIBA to the SAP ARIBA APIs"</STRONG>. The iflows are used to just show the mechanism of fast and direct communication between iflows using <STRONG>Process Direct</STRONG>, you can read more it here : <A href="https://help.sap.com/docs/integration-suite/sap-integration-suite/processdirect-adapter" target="_self" rel="noopener noreferrer"><STRONG>ProcessDirect</STRONG></A> </P><P>In the screenshot you see that "output_from_ARIBA" iflow gets deployed with an address of /vinay/Ariba, this will reflect in the eventual endpoint when the iflow is deployed. </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_2-1748582366922.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267771iD5B54006CB4F1011/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_2-1748582366922.png" alt="VinayBhatt_2-1748582366922.png" /></span></P><P> </P><P>Below we see the processDirect Adapter making an internal call to the first iflow, which gets deployed with an address : /Ariba/OpenAPI.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_4-1748582990450.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267775i38D5711BB2C820C4/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_4-1748582990450.png" alt="VinayBhatt_4-1748582990450.png" /></span></P><P> </P><P><FONT size="7"><STRONG>Extract data from ARIBA API <span class="lia-unicode-emoji" title=":play_button:">▶️</span></STRONG></FONT></P><P>Lets now look at the first iflow <STRONG>"connect SAP Ariba to the SAP Ariba APIs"</STRONG> in detail. We will go through each important section of the iflow and understand the processing with screen shots. </P><P><FONT size="5"><STRONG>GET ACCESS TOKEN</STRONG></FONT></P><P>The first step in the iflow execution is to get an Access token from ARIBA's Oauth URL with encoded client id/secret, an auth token is returned which is then saved in the header.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_2-1748514478525.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267354iA95E50B5100287FF/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_2-1748514478525.png" alt="VinayBhatt_2-1748514478525.png" /></span></P><P> </P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_3-1748514518077.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267355iDC2AFCC03D656B17/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_3-1748514518077.png" alt="VinayBhatt_3-1748514518077.png" /></span></P><P><STRONG><FONT size="5">GET DOCUMENT</FONT> </STRONG></P><P>Now when then access token is retrieved we can further add additional headers for our subsequent call to ARIBA's Purchase order buyer API, e.g in this case the ARIBA networkx- ID along with the API key. </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_5-1748514679712.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267357i8F45F11124B6B5CD/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_5-1748514679712.png" alt="VinayBhatt_5-1748514679712.png" /></span></P><P>Now we make the final HTTP request to ARIBA API, in the query <STRONG>ARIBA Realm</STRONG> and <STRONG>filters</STRONG> can also be specified. </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_6-1748514719368.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267358i851B6942057B4052/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_6-1748514719368.png" alt="VinayBhatt_6-1748514719368.png" /></span></P><P><FONT size="5"><STRONG>JSON TO XML Converter</STRONG></FONT></P><P>The JSON structure of the API was intitially tested at the api.sap.com, and now we have used <STRONG>JSON to XML </STRONG>converter, so the message can be parsed using the <STRONG>XPATH - which is a query language to <SPAN>navigate through elements and attributes in an XML document.</SPAN></STRONG></P><P><FONT size="5"><STRONG><SPAN>GENERAL SPLITTER</SPAN></STRONG></FONT></P><P>Splitter will simply split the XML message based on the number of records as in this example there will be multiple purchase orders returned from the ARIBA API. </P><P><FONT size="5"><STRONG>CONTENT MODIFIER</STRONG></FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_7-1748514734487.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267359i81A546D1AAA30801/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_7-1748514734487.png" alt="VinayBhatt_7-1748514734487.png" /></span></P><P>In the message body of the <STRONG>Content Modifier, </STRONG>we now use Type <STRONG>Expression, </STRONG>to build a SQL query using the exchange properties we desgined above. </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_8-1748514755286.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267360iEF72CF56012EC17C/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_8-1748514755286.png" alt="VinayBhatt_8-1748514755286.png" /></span></P><P>Finally, we reach the point of the database call which is configured as the OpenSQL schema of the Datasphere. </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_9-1748514795548.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267361i59ADB3F25709D109/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_9-1748514795548.png" alt="VinayBhatt_9-1748514795548.png" /></span></P><P>The JDBC connection is maintained in the integration suite tenant as below : </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_1-1748581695106.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267769i491AC64A802409FE/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_1-1748581695106.png" alt="VinayBhatt_1-1748581695106.png" /></span></P><P><FONT size="5"><STRONG>Runnning the Integration Flow </STRONG></FONT></P><P><FONT size="4">We deploy both iflows and we can see the <STRONG>Endpoint</STRONG> against the iflow below : </FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_10-1748514893254.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267362iEEB74BB02E997831/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_10-1748514893254.png" alt="VinayBhatt_10-1748514893254.png" /></span></P><P><FONT size="4">Call the <STRONG>endpoint</STRONG> either using Postman or visual Studio code and you will see the message processed as below : </FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_11-1748514934536.png" style="width: 760px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267363i3D63950B9520095A/image-dimensions/760x512?v=v2" width="760" height="512" role="button" title="VinayBhatt_11-1748514934536.png" alt="VinayBhatt_11-1748514934536.png" /></span></P><P><FONT size="4">We now verify the OpenSQL table to see the <STRONG>persisted records</STRONG> : ( Please note we only had a few records from the sabdbox API used in this case and the iflow was run mutiple times so you see some duplicate records below)</FONT></P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_12-1748514941885.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267364i3F0B3C96CA42CA2C/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_12-1748514941885.png" alt="VinayBhatt_12-1748514941885.png" /></span></P><P> </P><P><STRONG><FONT size="7">Data modelling in Datasphere <span class="lia-unicode-emoji" title=":chart_increasing:">📈</span> <span class="lia-unicode-emoji" title=":bar_chart:">📊</span></FONT></STRONG></P><P><FONT size="4">With the data moved to Datasphere OpenSQL schema we can access the table in Datasphere Data Builder, Open a new <STRONG>Graphical view </STRONG>and from the left navigation under sources you would see the linked openSQL Schema. Drag & drop the table on the canvas. I have added a <STRONG>calculated column</STRONG> here to convert the <STRONG>POAMOUNT</STRONG> to a <STRONG>decimal value</STRONG> ( it was nvarchar after the initial data import). Save and deploy the view.</FONT></P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_13-1748514946668.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267365i26564859522D4DC5/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_13-1748514946668.png" alt="VinayBhatt_13-1748514946668.png" /></span></P><P><FONT size="4">Create an <STRONG>Analytical model</STRONG> using the Graphical view created above, use the <STRONG>POAMOUNT </STRONG>field as a <STRONG>Measure : </STRONG></FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_14-1748514956043.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267366iD790A5378898FBC9/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_14-1748514956043.png" alt="VinayBhatt_14-1748514956043.png" /></span></P><P><STRONG><FONT size="7">Reporting in SAP Analytics Cloud <span class="lia-unicode-emoji" title=":bar_chart:">📊</span></FONT></STRONG></P><P><FONT size="4">I'm using a <STRONG>linked SAP analytics cloud tenant</STRONG>, you can learn how to connect Datasphere & Analytics cloud tenants <A href="https://developers.sap.com/tutorials/data-warehouse-cloud-bi1-connect-sac..html" target="_self" rel="noopener noreferrer">here</A>. </FONT></P><P><FONT size="4">Once linked, open a black story and proceed to <STRONG>add new data --> Existing Data model --> select Datasphere system</STRONG> from the left navgation as below.</FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_15-1748514982721.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267367iF19A004E672FD99B/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_15-1748514982721.png" alt="VinayBhatt_15-1748514982721.png" /></span></P><P>Select your deployed model under the datasphere space name and build a story with data that you processed using the iflow : </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_16-1748514990249.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/267368iD99554D1347F7E9D/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_16-1748514990249.png" alt="VinayBhatt_16-1748514990249.png" /></span></P><P> </P><P><STRONG><FONT size="7">CONCLUSION <span class="lia-unicode-emoji" title=":end_arrow:">🔚</span></FONT></STRONG></P><P><FONT size="4">Hope this helps the community members to get an overall idea of the integration discussed in this blog post and sparks ideas for your exisitng or future projects. </FONT></P><P><FONT size="4">Thank you for your time & attention! </FONT></P><P><FONT size="7"><STRONG>APPENDIX </STRONG></FONT></P><P><FONT size="5"><STRONG>Monitoring the iflow and the message flow using trace</STRONG></FONT></P><P><FONT size="4">As some of you must already know Integration suite provides several advanced capabilities to monitor the iflow. In the below steps we will enable the trace on the main iFlow and see how different components are workign together : </FONT></P><P><FONT size="4"><STRONG>Enabling the Trace : </STRONG></FONT></P><P><FONT size="4">Navigate to <STRONG>Monitor --> Integrations and APIs --> Manage Integration Content</STRONG> and look for the "Started" iflows for ARIBA.</FONT></P><P><FONT size="4">Here we enable the Trace by changing the <STRONG>"Log Level"</STRONG> to trace. The trace only gets enabled for 10 mins (default setting) as Integration suite startes storing on the messages. </FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_0-1748832443405.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268279i513320C40EF3F463/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_0-1748832443405.png" alt="VinayBhatt_0-1748832443405.png" /></span></P><P><FONT size="4">Trigger the iFlow again to fetch the records and so that we can now see the tracing results : </FONT></P><P><FONT size="4"><STRONG>Goto : Monitor --> Integrations and APIs --> Monitor Message Processing </STRONG></FONT></P><P><FONT size="4">you can now see the trace as below, click on the "<STRONG>Trace</STRONG>" :</FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_1-1748832854380.png" style="width: 751px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268280i406EDBB4D5B8EFA3/image-dimensions/751x485?v=v2" width="751" height="485" role="button" title="VinayBhatt_1-1748832854380.png" alt="VinayBhatt_1-1748832854380.png" /></span></P><P> </P><P><FONT size="4">Now, we can easily check various parameters, headers, exchange properties & payloads across various the iflow:</FONT> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_3-1748833017912.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268282i74C86DADAAEDFCEB/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_3-1748833017912.png" alt="VinayBhatt_3-1748833017912.png" /></span></P><P><FONT size="4">You can see the JSON payload coming through below : </FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_4-1748833239972.png" style="width: 761px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268283i7F6026CD81D142F6/image-dimensions/761x455?v=v2" width="761" height="455" role="button" title="VinayBhatt_4-1748833239972.png" alt="VinayBhatt_4-1748833239972.png" /></span></P><P><FONT size="4">Splitting & XML conversion happens in the iflow and here we see the splitted payload: </FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_5-1748833401668.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268284i5E4456F4D1579430/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_5-1748833401668.png" alt="VinayBhatt_5-1748833401668.png" /></span></P><P><FONT size="4">Extracted Exchange properties can be seen here (e.g documentNumber) : </FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_6-1748833521570.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268286i82E503A56B3FAF9F/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_6-1748833521570.png" alt="VinayBhatt_6-1748833521570.png" /></span></P><P><FONT size="4">Finally, we see the prepared SQL statement.</FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VinayBhatt_7-1748833550681.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268287iDB6DD0E8921ED378/image-size/large?v=v2&px=999" role="button" title="VinayBhatt_7-1748833550681.png" alt="VinayBhatt_7-1748833550681.png" /></span></P><P><FONT size="4">Tracing is a very powerful tool to debug the various phases of the iflow and at the same time allowing us to format the data passing through to make required corrections. </FONT></P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P>2025-06-03T09:31:27.716000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/currency-conversion-using-integration-suite/ba-p/14116122Currency Conversion using Integration Suite2025-06-03T17:48:23.494000+02:00Souravraj_Maitrahttps://community.sap.com/t5/user/viewprofilepage/user-id/2123529<P>Hi all. Today I will explain the use case of currency conversion that I have made using Integration Suite. Below I have attached the image of the Integration Flow that I have created:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Souravraj_Maitra_0-1748748030787.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268215i15EEF07FF910B59A/image-size/medium?v=v2&px=400" role="button" title="Souravraj_Maitra_0-1748748030787.png" alt="Souravraj_Maitra_0-1748748030787.png" /></span></P><P> </P><P>In the Currency Parameter setting, we have set the 3 parameters : one for storing the currency in which we will insert our amount (say USD), second one for storing the target currency (INR), and the third one is for storing the amount which we want to convert to the target currency. Also, we set our APIKey here to acces the external api using Request Reply. Next we Request Reply to an external api, say fastFOREX, for fetching the base currency and the target currency/currencies rate(s). Then we use the script Amount conversion to convert the given amount to target currency amount. Then we formulate our final message in Payload Creation that we want to be sent to the target mail ids using mail adapter.<BR /><BR />Here's a sample mail that one will get after deploying it:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Souravraj_Maitra_1-1748748030834.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268214iD018E950F2D26F59/image-size/medium?v=v2&px=400" role="button" title="Souravraj_Maitra_1-1748748030834.png" alt="Souravraj_Maitra_1-1748748030834.png" /></span></P><P> </P><P>If you want to change the currencies you can do the same by changing the toCurrency and fromCurrency properties in the 'Currency Parameter setting' Content Modifier. </P><P>Hope you like it.</P><P>#btp cpi <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/2099839">@Mukulvarshney8</a> <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/13525">@Bibekananda123</a> </P>2025-06-03T17:48:23.494000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/integrating-gmail-using-sap-cpi-mail-adapter-in-iflow/ba-p/14116129Integrating GMAIL using SAP CPI Mail Adapter in iFlow2025-06-03T17:48:40.060000+02:00Mukulvarshney8https://community.sap.com/t5/user/viewprofilepage/user-id/2099839<P><SPAN><STRONG>Hi All,</STRONG></SPAN></P><H3 id="toc-hId-1860540289" id="toc-hId-1860541316"><STRONG><SPAN class="lia-unicode-emoji"><span class="lia-unicode-emoji" title=":pushpin:">📌</span></SPAN><SPAN> </SPAN>Introduction</STRONG></H3><P><SPAN>In <STRONG>SAP CPI (Cloud Integration)</STRONG>, the <STRONG>Mail Adapter for Gmail</STRONG> plays a crucial role in automating email notifications and integrating email functionality into business processes. It allows <STRONG>seamless communication via SMTP</STRONG>, ensuring secure transmission of emails within integration flows.</SPAN></P><P><SPAN>Below is the image of the <STRONG>Integration Flow</STRONG> I created:</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Mukulvarshney8_0-1748752469838.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268216iD48E9A519F64DF50/image-size/medium?v=v2&px=400" role="button" title="Mukulvarshney8_0-1748752469838.png" alt="Mukulvarshney8_0-1748752469838.png" /></span></P><P> </P><H3 id="toc-hId-1664026784" id="toc-hId-1664027811"><STRONG><SPAN class="lia-unicode-emoji"><span class="lia-unicode-emoji" title=":pushpin:">📌</span></SPAN><SPAN> </SPAN>Step 1: Content Modifier for Email Body</STRONG></H3><P><SPAN>I have used a <STRONG>Content Modifier</STRONG> named <STRONG>Mail_body</STRONG> to define the email content dynamically using <STRONG>HTML code</STRONG> for styling. This ensures structured email formatting and supports customization.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Mukulvarshney8_1-1748752469843.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268217i3C81FF249721A1D4/image-size/medium?v=v2&px=400" role="button" title="Mukulvarshney8_1-1748752469843.png" alt="Mukulvarshney8_1-1748752469843.png" /></span></P><P> </P><H3 id="toc-hId-1467513279" id="toc-hId-1467514306"><STRONG><SPAN class="lia-unicode-emoji"><span class="lia-unicode-emoji" title=":pushpin:">📌</span></SPAN><SPAN> </SPAN>Step 2: Configuring the Mail Adapter</STRONG></H3><UL><LI><P><SPAN>The <STRONG>Mail Adapter</STRONG> is configured using an <STRONG>SMTP connection</STRONG> to communicate with the Gmail server.</SPAN></P></LI><LI><P><SPAN>An <STRONG>Authentication Credential</STRONG> is created under <STRONG>Security Material</STRONG> with the help of GCP (Google Cloud Platform) credentials to ensure <STRONG>secure email transmission</STRONG> and prevent unauthorized access.</SPAN></P></LI><LI><P><SPAN>Under the <STRONG>Processing tab</STRONG>, I have defined the <STRONG>mail attributes</STRONG>, including:</SPAN></P><UL><LI><P><SPAN><STRONG>Recipient details (To, CC, BCC)</STRONG></SPAN></P></LI><LI><P><SPAN><STRONG>Subject line</STRONG></SPAN></P></LI><LI><P><SPAN><STRONG>Body Mime-Type set as "Text/HTML"</STRONG> for styling the email body using HTML.</SPAN></P></LI></UL></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Mukulvarshney8_2-1748752469844.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268218i661C846CEF885820/image-size/medium?v=v2&px=400" role="button" title="Mukulvarshney8_2-1748752469844.png" alt="Mukulvarshney8_2-1748752469844.png" /></span></P><P> </P><H3 id="toc-hId-1270999774" id="toc-hId-1271000801"><STRONG><SPAN class="lia-unicode-emoji"><span class="lia-unicode-emoji" title=":pushpin:">📌</span></SPAN><SPAN> </SPAN>Step 3: Sample Email Output</STRONG></H3><P><SPAN>Once deployed, here’s a sample email that users will receive: <EM>(Attach an example email screenshot here.)</EM></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Mukulvarshney8_3-1748752470024.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268219iB34CD2B7D51BB661/image-size/medium?v=v2&px=400" role="button" title="Mukulvarshney8_3-1748752470024.png" alt="Mukulvarshney8_3-1748752470024.png" /></span></P><P> </P><H3 id="toc-hId-1074486269" id="toc-hId-1074487296"><STRONG><SPAN class="lia-unicode-emoji"><span class="lia-unicode-emoji" title=":pushpin:">📌</span></SPAN><SPAN> </SPAN>Step 4: Using Exchange Properties for Dynamic Content</STRONG></H3><P><SPAN>To <STRONG>store dynamic email content (mail attributes)</STRONG>, we use <STRONG>exchange properties</STRONG> in the Content Modifier. This allows dynamic values like <STRONG>recipient email, transaction details, and timestamps</STRONG> to be populated during runtime.</SPAN></P><DIV> </DIV><P> </P><H3 id="toc-hId-877972764" id="toc-hId-877973791"><STRONG>Conclusion</STRONG></H3><P><SPAN>In this blog, we explored how to: <SPAN class="lia-unicode-emoji"><span class="lia-unicode-emoji" title=":white_heavy_check_mark:">✅</span></SPAN> <STRONG>Set up the Mail Adapter</STRONG> in an iFlow. <SPAN class="lia-unicode-emoji"><span class="lia-unicode-emoji" title=":white_heavy_check_mark:">✅</span></SPAN> <STRONG>Configure SMTP authentication</STRONG> for secure email transmission. <SPAN class="lia-unicode-emoji"><span class="lia-unicode-emoji" title=":white_heavy_check_mark:">✅</span></SPAN> <STRONG>Format HTML-based email bodies</STRONG> for structured messages. <SPAN class="lia-unicode-emoji"><span class="lia-unicode-emoji" title=":white_heavy_check_mark:">✅</span></SPAN> <STRONG>Optimize integration with exchange properties</STRONG> for dynamic content.</SPAN></P><P><SPAN>By applying these best practices, enterprises can <STRONG>enhance email reliability, security, and customization</STRONG> in their CPI workflows. With continuous enhancements in <STRONG>SAP Integration Suite</STRONG>, email-based automation will remain a <STRONG>powerful tool for business process efficiency</STRONG>.</SPAN></P><P><SPAN><STRONG>If you have any questions or insights, feel free to share your thoughts in the comments!</STRONG></SPAN></P><P><SPAN><a href="https://community.sap.com/t5/user/viewprofilepage/user-id/2123529">@Souravraj_Maitra</a> <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/13525">@Bibekananda123</a> </SPAN></P><P> </P>2025-06-03T17:48:40.060000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/sending-a-processed-payload-to-receivers/ba-p/14116139Sending a processed payload to receivers2025-06-03T17:49:04.188000+02:00Souravraj_Maitrahttps://community.sap.com/t5/user/viewprofilepage/user-id/2123529<P>Hi all,<BR />today I will be explaining the use case of payload processing using Integration Flow. Below I have attached screenshots and their corresponding explanations:</P><P><STRONG>1. Sample Payload</STRONG></P><P><STRONG><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sample_Payload.png" style="width: 478px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268221iFE0756390D206A03/image-size/large?v=v2&px=999" role="button" title="Sample_Payload.png" alt="Sample_Payload.png" /></span></STRONG></P><P>Here's the sample payload that we will be providing to the Integration Flow using Postman thats the sender here. This payload, as you can see in the JSON Format.</P><P><STRONG>2. Sample Payload: </STRONG></P><P><STRONG><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sample_Response.png" style="width: 411px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268223iFC697205FE0389EE/image-size/large?v=v2&px=999" role="button" title="Sample_Response.png" alt="Sample_Response.png" /></span></STRONG>This is the response we are supposed to get after final processing of the payload using iFlow. Seeing the response, we can understand that we need the following for this message to be formulated:<BR />a. firstName</P><P>b. mailID</P><P>c. totalProductPrice </P><P><STRONG>3. Integration Flow:</STRONG></P><P><STRONG><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Payload_Processing.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268222iC0FB19A1B6552089/image-size/large?v=v2&px=999" role="button" title="Payload_Processing.png" alt="Payload_Processing.png" /></span></STRONG></P><P>As mentioned in the previous point, Postman is the sender here. As for thew remaining components, we will be explaining it stepwise:<BR /><EM>i. Payload Append</EM>: We are using this script to accept the payload from the <STRONG>Postman</STRONG> ,calculate the total productPrice and append it to the JSON Payload.</P><P><EM>ii. JSON to XML Converter</EM>: It converts the modified payload to an XML file.</P><P><EM>iii. Content Modifier</EM>: It's used to pull the data we mentioned in the previous point from the XML file i.e. firstName and mailId that was there initially, and totalProductPrice that we appended to the payload in Payload Script, into the properties section using XPath. After this we formulate the message, we mentioned in <STRONG>Sample Payload</STRONG> to be sent to the receivers.</P><P><EM>iv. Parallel Multicast</EM>: It's used to send copies of the same message to multiple targets parallelly. In our case its just 2 targets - one to the mail adapter, another to the target system using SFTP. For this adapter to work, we need required certifications in <U>Monitor --> Integrations and APIs --> Manage Security --> Security Materials</U>.</P><P><EM>v. Receivers</EM>: Here we have 2 receivers - one is gmail recipient using Mail adapters and other is SFTP. Mail adapters are used to to connect iFlow with mails and SFTP is used to connect iFlow with Client system for secured file transfer. A point to note: the file you want to transfer must have a copy in the target system, it can be empty. If not, it will throw an error.</P><P>===================================================================================</P><P>Hope my explanation is up to the mark. Please feel free to ask any questions you may have. </P><P>#btp cpi </P><P><a href="https://community.sap.com/t5/user/viewprofilepage/user-id/2099839">@Mukulvarshney8</a> <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/13525">@Bibekananda123</a> </P>2025-06-03T17:49:04.188000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/understanding-incorrect-message-mapping-and-why-context-matters/ba-p/14117735Understanding incorrect Message Mapping and why Context matters2025-06-03T17:50:15.893000+02:00SebShttps://community.sap.com/t5/user/viewprofilepage/user-id/1428110<DIV><DIV><H2 id="toc-hId-1731494181"><STRONG>What are Contexts in Message Mapping?</STRONG></H2><P>Contexts allow for a logical grouping of data elements, influencing how data is processed during mapping. Each context can hold specific information that helps in deciding how data should be transformed.</P><P> </P><P> </P><H2 id="toc-hId-1534980676"><STRONG>Why Contexts are Important</STRONG></H2><P> </P><UL><LI><SPAN>Data Organization: Contexts help organize data, making it easier to see relationships and hierarchies.</SPAN></LI><LI><SPAN>Flexibility: They allow different data sets to be handled differently based on situations.</SPAN></LI><LI><SPAN>Performance: Using contexts can make data processing more efficient by simplifying the transformation steps.</SPAN></LI></UL><P> </P><P> </P><H2 id="toc-hId-1338467171"><STRONG>Understanding Queues in Message Mapping</STRONG></H2><P>Queues temporarily hold messages as they move between processing stages, ensuring orderly data handling. They help manage messages between systems, especially when different systems process data at different speeds.</P><P> </P><UL><LI><P><SPAN>Purpose of Queues: Queues help buffer messages and synchronize data processing.</SPAN></P></LI><LI><SPAN>Integration with Contexts: Contexts help organize how messages are processed once in a queue and may trigger specific processing rules based on the data.</SPAN></LI></UL><P> </P><P> </P><H2 id="toc-hId-1141953666"><STRONG>Managing Contexts</STRONG></H2><P> </P><UL><LI><SPAN>Defining Contexts: Clearly define contexts to represent different data areas when creating message mappings.</SPAN></LI></UL><UL><LI><SPAN>Using Context Functions: SAP offers tools to help change data within contexts, such as 'Context Switch' functions.</SPAN></LI><LI><SPAN>Context Variables: Use temporary context variables to retain values during processing, avoiding repeated calculations.</SPAN></LI><LI><SPAN>Conditional Logic: Use if-else statements to adjust the context based on incoming data from queues.</SPAN></LI><LI>Nesting Contexts: Nest contexts for complex data structures, allowing better data management.</LI></UL><P> </P><P> </P><H2 id="toc-hId-945440161"><SPAN>Hands-on example</SPAN></H2><P> </P><P>With the basics out of the way, lets look at the information in a real world example, a problem that i had to resolve a while back. In one flow an issue arises, somehow data gets mixed up after message mapping. Users (Employees) have mostly correct information, but at some point Users have a correct ID, correct job description, etc. However, their first and last names are incorrect. How can this happen? But not only that, looking at the bottom of our Employees, the last few entries of our mapping results are basically empty.</P><P> </P><P> </P><H2 id="toc-hId-748926656"><SPAN>Identifying an issue with source data</SPAN></H2><P> </P><P>After a lot of searching, debugging, checking we find out that our mapping tries to look up some nodes that do not exist:</P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SebS_0-1748950163106.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268872i1CE0746CD61BA0F1/image-size/medium?v=v2&px=400" role="button" title="SebS_0-1748950163106.png" alt="SebS_0-1748950163106.png" /></span></P><P> </P><P>In our case, the "empInfo" tag is empty, this holds information about our employees, like the aforementioned firstName and lastName.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SebS_1-1748950163107.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268870i5F911053525A0B69/image-size/medium?v=v2&px=400" role="button" title="SebS_1-1748950163107.png" alt="SebS_1-1748950163107.png" /></span></P><H2 id="toc-hId-552413151">Debugging</H2><P> </P><P>So this mapping here is being ignored, as the nodes leading up to it do not exist and the whole mapping is skipped.This is where the queue comes in, but in a way that messes up our data. Let's have a look at what i am talking about:</P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SebS_2-1748950163107.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268871i158CBBC47988B968/image-size/medium?v=v2&px=400" role="button" title="SebS_2-1748950163107.png" alt="SebS_2-1748950163107.png" /></span></P><P> </P><P>To check out what exactly is happening with our data, it is necessary to provide a test input file. This can be done in a few different ways, like when trying to simulate mapping some examples which requires data given with a test file. Once we provide a file, we can check out what the input queue looks like and what it would look like after mapping:<span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SebS_3-1748950163107.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268874iF893C6A1A445BFA0/image-size/medium?v=v2&px=400" role="button" title="SebS_3-1748950163107.png" alt="SebS_3-1748950163107.png" /></span></P><P> </P><P>The input node can display the input queue, which in our test case right now would look something like this:</P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SebS_4-1748950163107.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268873i2055FD442816E601/image-size/medium?v=v2&px=400" role="button" title="SebS_4-1748950163107.png" alt="SebS_4-1748950163107.png" /></span></P><P> </P><P>Well that's fine but what are we looking at here? First entry, the <null> can simply be ignored, this is the start of the queue. Every white background entry means a value that will end up in our mapping result, which we can check here:</P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SebS_5-1748950163108.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268875iBE99283928E5F84F/image-size/medium?v=v2&px=400" role="button" title="SebS_5-1748950163108.png" alt="SebS_5-1748950163108.png" /></span><BR />Every grey entry means a context change. Basically a new entry, in our case a new Employee. But right there, we can see two grey rows with "Brandon" in them. A white row is missing. That is the reason why our resulting mapped list of Employees firstName is messed up. Say we have 10 employee's first names and we want the result to also show these 10 names, with our given example we would end up with only 9 names. Because the context changed and no value was given.</P><P> </P><P> </P><H2 id="toc-hId-355899646"><SPAN>Why fix the message mapping?</SPAN></H2><P> </P><P>Why would an employee have no first name? Simple actually. Admin users, service users. If we were to exclude them from the mapping, filter them out before mapping, we would be done and could continue without a problem. Yes, that is a possibility. But then again, what other issues might arise with our given data? How much more would we have to filter out, would we even be aware of incorrect data? In our case alone, we found two more instances of the source data not being what we expected it to be. No, filtering is not the solution here.</P><P> </P><H2 id="toc-hId-159386141"><SPAN>Tools</SPAN></H2><P> </P><P>What we need to correctly map everything thrown at us is to handle the context and handle the queue. Message mapping gives us a few tools that we can use.</P><DIV><BR /><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SebS_6-1748950163108.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268877iF9F0C3EB45E4DEAC/image-size/medium?v=v2&px=400" role="button" title="SebS_6-1748950163108.png" alt="SebS_6-1748950163108.png" /></span><BR />This method allows us to handle every context change by ourselves. In the Advanced section there are several options, so we can change the context only when the value in the queue changes, only on empty values, etc.<P> </P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SebS_7-1748950163108.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268876i3CA44A0E0E2F1A46/image-size/medium?v=v2&px=400" role="button" title="SebS_7-1748950163108.png" alt="SebS_7-1748950163108.png" /></span><P> </P>This method can give us a default value if the input is empty.<BR />With these two we changed the mapping on all of our input fields, so they all look like this now:<P> </P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SebS_8-1748950163109.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268878i473455EA170E9755/image-size/medium?v=v2&px=400" role="button" title="SebS_8-1748950163109.png" alt="SebS_8-1748950163109.png" /></span><P> </P>So we force our given queue to always give us something into our output and the context is forced to always change.<BR />But still, we have issues. Because even if we make sure to always handle the context correctly, this does not matter if we can't even reach the input node during mapping. As we've seen earlier, the whole chain of nodes leading down to the firstName doesn't exist. So we created a perfectly fine mapping which is simply ignored by our message mapping.<BR /><H2 id="toc-hId--37127364"> </H2><H2 id="toc-hId-113613488">The solution</H2><P> </P>The solution is simple but very easy to miss. When we select the input property and click the three-dots-menu, we are given a few selections.One of these options is the Context entry:<P> </P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SebS_9-1748950163109.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268879i829CDA388FB9E107/image-size/medium?v=v2&px=400" role="button" title="SebS_9-1748950163109.png" alt="SebS_9-1748950163109.png" /></span><BR />Here we can see our chain of nodes. In this case PerPersonal cannot be reached as many of its parent nodes are missing. So all need to do is select the lowest node that always exists, the node that we are sure is always present. In our case this was empInfo:<P> </P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SebS_10-1748950163109.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268881iA9B1D1877CE502F8/image-size/medium?v=v2&px=400" role="button" title="SebS_10-1748950163109.png" alt="SebS_10-1748950163109.png" /></span><P> </P><H2 id="toc-hId--82900017">The result</H2><P> </P>With this new start of the context selected, and all of our additional methods for context manipulation, our output queue now looks like this:<P> </P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SebS_11-1748950163110.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268880i2303732E35F4BB30/image-size/medium?v=v2&px=400" role="button" title="SebS_11-1748950163110.png" alt="SebS_11-1748950163110.png" /></span><P> </P>The queue changed, so even if we have some missing nodes, our output would still have at least something, in this case an empty String (as provided in the default value mapping).<BR />After we changed the context and added the node methods on all of our input fields, it was done. We mapped all of our data correctly, nothing was missing.</DIV><DIV> </DIV><DIV>Success.</DIV></DIV></DIV>2025-06-03T17:50:15.893000+02:00https://community.sap.com/t5/technology-blog-posts-by-sap/cloud-to-cloud%E7%9A%84%E6%95%B0%E6%8D%AE%E7%9B%B4%E8%BF%9E%E9%9B%86%E6%88%90-po-so%E8%BD%AC%E6%8D%A2/ba-p/14118394Cloud to Cloud的数据直连集成:PO/SO转换2025-06-04T08:27:13.971000+02:00Vincent_Zhuhttps://community.sap.com/t5/user/viewprofilepage/user-id/131883<P>这篇文章是作为Cloud to Cloud直接集成的第三篇介绍,前面两篇关于产品主数据和BP主数据的集成可参考以下链接:</P><P><A class="" href="https://community.sap.com/t5/technology-blog-posts-by-sap/cloud-to-cloud%E7%9A%84%E6%95%B0%E6%8D%AE%E7%9B%B4%E8%BF%9E%E9%9B%86%E6%88%90-%E4%BA%A7%E5%93%81%E4%B8%BB%E6%95%B0%E6%8D%AE/ba-p/14104921" target="_blank">Cloud to Cloud的数据直连集成:产品主数据</A></P><P><A class="" href="https://community.sap.com/t5/technology-blog-posts-by-sap/cloud-to-cloud%E7%9A%84%E6%95%B0%E6%8D%AE%E7%9B%B4%E8%BF%9E%E9%9B%86%E6%88%90-%E4%B8%9A%E5%8A%A1%E4%BC%99%E4%BC%B4business-partner%E4%B8%BB%E6%95%B0%E6%8D%AE/ba-p/14114285" target="_blank">Cloud to Cloud的数据直连集成:业务伙伴Business Partner主数据</A></P><P> </P><H1 id="toc-hId-1602437594">1. 背景介绍</H1><P>除了之前介绍的主数据集成,另外一个常见的场景是关于贸易公司和生产公司之间采购订单(PO)与销售订单(SO)的集成:当贸易公司生成采购订单,立刻集成到生产公司生成一张销售订单(SO)。两个系统间PO/SO的集成,可以实现Cloud到Cloud直连的方式,不需要借助中间平台即可实现。</P><P> </P><H1 id="toc-hId-1405924089">2. 发送系统的设置</H1><P>在这个集成场景中,我们借助了两个标准scope item来实现PO到SO的转换。</P><P>在发送系统中,需要往外发送采购订单(PO),参考的scope item是<A href="https://me.sap.com/processnavigator/SolS/EARL_SolS-013/2502/SolP/2EJ?region=DE" target="_self" rel="noopener noreferrer">2EJ(<SPAN>Integration of Procurement with External Suppliers</SPAN>)</A>。</P><P> </P><H3 id="toc-hId-1467576022">2.1 创建通信系统</H3><P>如果有实现之前主数据集成的场景,那么可以复用之前的通信系统。<SPAN>该通信系统是需要集成的目标系统。</SPAN></P><P>输入自定义的System ID、System Name,Host Name为接收系统(receiver system)的地址,维护字段Logical System和Business System。</P><P>另外,需要在通信系统中维护通信的inbound user和outbound user。</P><P><U><STRONG>这里需要特别注意的是,发送系统的outbound user与之后维护的接收系统的inbound user需要一致。</STRONG></U></P><P> </P><H3 id="toc-hId-1271062517">2.2 创建通信安排</H3><P>参考scope item 2EJ,创建基于通信场景SAP_COM_0224的通信安排。在该通信安排中,使用到的是下面这个outbound service:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Vincent_Zhu_0-1749007612464.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/269167iEE32D9897723B232/image-size/large?v=v2&px=999" role="button" title="Vincent_Zhu_0-1749007612464.png" alt="Vincent_Zhu_0-1749007612464.png" /></span></P><P> </P><H3 id="toc-hId-1074549012">2.3 输出参数定义(Output Parameter Determination)</H3><P>进入Fiori应用“输出参数定义Output Parameter Determination”,配置采购订单EDI相关的内容。具体可参考scope item 2EJ配置文档的2.2.16章节:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Vincent_Zhu_1-1749008160922.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/269168iDFE6438F56FFC2AE/image-size/large?v=v2&px=999" role="button" title="Vincent_Zhu_1-1749008160922.png" alt="Vincent_Zhu_1-1749008160922.png" /></span></P><H3 id="toc-hId-878035507">2.4 给用户分配收件人(Assign Recipients)</H3><P><SPAN>为了后续能够看到SOAP接口的消息,打开应用Assign Recipients to Users,给测试的用户分配以下条目:</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Vincent_Zhu_0-1749014411629.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/269206iCC2936BBD8EB9B8D/image-size/large?v=v2&px=999" role="button" title="Vincent_Zhu_0-1749014411629.png" alt="Vincent_Zhu_0-1749014411629.png" /></span></P><P> </P><H1 id="toc-hId-423356564">3. 接收系统的设置</H1><P>在接收系统中,我们将会接收从发送系统发出的采购订单,在接收系统内创建销售订单。参考的scope item是<A href="https://me.sap.com/processnavigator/SolS/EARL_SolS-013/2502/SolP/2EL?region=DE" target="_self" rel="noopener noreferrer">2EL(<SPAN>Integration of Sales with External Buyers</SPAN>)</A>。</P><H3 id="toc-hId-485008497">3.1 创建通信系统</H3><P>在接收系统中,我们首先也是创建通信系统。<SPAN>同样,在该通信系统中,需要维护inbound user和outbound user。 inbound user需要特别注意,与之前发送系统的outbound user维护成一致。</SPAN></P><P> </P><H3 id="toc-hId-288494992">3.2 创建通信安排</H3><P>参考scope item 2EL,创建基于通信场景SAP_COM_0223的通信安排。在该通信安排中,使用到的是下面这个inbound service:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Vincent_Zhu_1-1749014906574.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/269207i84595C667A09BE0C/image-size/large?v=v2&px=999" role="button" title="Vincent_Zhu_1-1749014906574.png" alt="Vincent_Zhu_1-1749014906574.png" /></span></P><H3 id="toc-hId-91981487">3.3 给用户分配收件人(Assign Recipients)</H3><P><SPAN>为了后续能够看到SOAP接口的消息,打开应用Assign Recipients to Users,给测试的用户分配以下条目:</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Vincent_Zhu_2-1749018031836.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/269255i482FF7BB581592B5/image-size/large?v=v2&px=999" role="button" title="Vincent_Zhu_2-1749018031836.png" alt="Vincent_Zhu_2-1749018031836.png" /></span></P><P> </P><P>在完成了上述的配置之后,发送系统创建采购订单,在采购订单审批完成之后,会自动触发该接口,在接收系统创建销售订单。</P><P> </P><P> </P><H1 id="toc-hId-407042627">4. 参考文档</H1><P><SPAN>如文章开头所说,实现Cloud to cloud的PO转SO的集成,参考的是标准scope item 2EJ和2EL,如想了解详细内容,可参考以下链接:</SPAN></P><P><SPAN><A href="https://support.sap.com/content/dam/SAAP/Sol_Pack/S4C/Library/Setup/2EJ_Set-Up_EN_XX.pdf" target="_blank" rel="noopener noreferrer">2EJ_Set-Up_EN_XX.pdf</A></SPAN></P><P><SPAN><A href="https://support.sap.com/content/dam/SAAP/Sol_Pack/S4C/Library/Setup/2EL_Set-Up_EN_XX.pdf" target="_blank" rel="noopener noreferrer">2EL_Set-Up_EN_XX.pdf</A></SPAN></P><P><SPAN>感谢阅读!</SPAN></P><P> </P>2025-06-04T08:27:13.971000+02:00https://community.sap.com/t5/integration-blog-posts/add-sap-pi-po-communication-channel-start-stop-functionality-to-your-iflows/ba-p/14115643Add SAP PI/PO Communication Channel Start/Stop Functionality to Your iFlows2025-06-04T09:14:40.214000+02:00CraigStasilahttps://community.sap.com/t5/user/viewprofilepage/user-id/161187<P>Greetings SAP Integration Community. My name is Craig Stasila, and I have been in the SAP integration ecosystem for many, many years. It has been a long time since I’ve written a technical blog post, but while I was at SAP Sapphire Orlando recently, a customer that had migrated from SAP PI/PO to SAP Integration Suite posed a question for which I did not have an immediate answer. I promised this person that I would author a blog post with all the details to answer her question, <U>and this is that blog post.</U></P><P>Her question was simple--the answer was not exactly straightforward:</P><P><EM>When will SAP Integration Suite have a feature like the SAP PI/PO Communication Channel start/stop control?</EM></P><P>On its face, this request sounds like a regular feature request. But the power and flexibility of the Cloud Integration capability of SAP Integration Suite means that you do not have to wait for an official implementation of this feature, and this blog post will tell you how.</P><P><STRONG>Quick sidebar: </STRONG>To create and vote on future feature requests, visit <A href="https://influence.sap.com/sap/ino/#/campaign/2282" target="_blank" rel="noopener noreferrer">SAP Integration Suite Customer Influence campaign.</A></P><P>The following artifacts have been created to demonstrate the channel start/stop prototype. Each artifact will be explained below:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Figure 1: Package Channel Start/Stop Prototype Artifacts" style="width: 814px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268002i5F1C33362561A803/image-size/large?v=v2&px=999" role="button" title="CraigStasila_0-1748639445243.png" alt="Figure 1: Package Channel Start/Stop Prototype Artifacts" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 1: Package Channel Start/Stop Prototype Artifacts</span></span></P><H2 id="toc-hId-1731433667"><SPAN>Mass Controlling Communication Channels and Adapters</SPAN></H2><P>The adapter engine component of SAP PI/PO had a feature that allowed for communication channels to be started and stopped through an administration user interface. And, while SAP Integration Suite does not have this exact feature, we can implement a close analog.</P><P>We can accomplish this by having our iFlows check the status of a global variable, <FONT face="courier new,courier">GlobalChannelStatus</FONT> for example, and stopping the processing of the iFlow if it has a value of 'STOPPED'.</P><P>When to check and what to do if the variable is 'STOPPED' depends on whether the integration is synchronous or asynchronous.</P><H3 id="toc-hId-1664002881"><STRONG>Stopping Channel in Synchronous Integrations</STRONG></H3><P>Stopping processing for synchronous interfaces is relatively straightforward. The best practice to stop integration execution for synchronous interfaces is to stop processing and return the call to the sender as soon as possible--before any transformation of the message occurs.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Figure 2: Best-practice to stop synchronous interface processing" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268001iC320FFFECD6D5971/image-size/large?v=v2&px=999" role="button" title="CraigStasila_1-1748639445245.png" alt="Figure 2: Best-practice to stop synchronous interface processing" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 2: Best-practice to stop synchronous interface processing</span></span></P><P><SPAN>When implementing this pattern, handling and reprocessing the messages must be handled by the sender. The logic is implemented in the iFlow </SPAN><STRONG>_1 Synchronous Check Channel Status.</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Figure 3: iFlow _1 Synchronous Check Channel Status" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268003i6EE031E03F58FFF0/image-size/large?v=v2&px=999" role="button" title="CraigStasila_2-1748639445247.png" alt="Figure 3: iFlow _1 Synchronous Check Channel Status" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 3: iFlow _1 Synchronous Check Channel Status</span></span></P><P><SPAN>As soon as the synchronous message arrives from the sender, the global variable <FONT face="courier new,courier">GlobalChannelStatus</FONT> is retrieved. A router checks the variable and if the value is 'RUNNING', the message can be transformed as normal and the message can be sent to the receiver system. If, however, the channel status is 'STOPPED', the message is stopped via an exception. I suggest referencing </SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-members/create-custom-message-for-exceptions-raised-by-sap-cpi/ba-p/13424223" target="_blank">this blog post to create a custom error message</A><SPAN> so that the sending system receives the correct context that processing has been halted by the administrator.</SPAN></P><H3 id="toc-hId-1467489376">Stopping Channel in Asynchronous Integrations</H3><P>Stopping processing for asynchronous interfaces is a bit more involved. In addition to checking the global variable GlobalChannelStatus, we will also be implementing the <A href="https://help.sap.com/docs/cloud-integration/sap-cloud-integration/apply-retry-pattern" target="_blank" rel="noopener noreferrer">Retry Pattern</A> with a JMS queue. Unlike the best-practice for synchronous interface processing, for asynchronous processing it is the best practice to hold the message after the message has been transformed--immediately before the message is to be sent to the receiver.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Figure 4: Best-practice to stop asynchronous interface processing" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268004iD6B0A4498F673AAE/image-size/large?v=v2&px=999" role="button" title="CraigStasila_3-1748639445248.png" alt="Figure 4: Best-practice to stop asynchronous interface processing" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 4: Best-practice to stop asynchronous interface processing</span></span></P><P> </P><P>Processing for the asynchronous scenario starts like any other interface. I created iFlow <STRONG>A - Build Message Payload</STRONG> to simulate the creation of a message payload whenever the package is deployed. In practice, this will be whatever the standard interface message processing will be. The sender system, channel, and message processing will be unchanged. The only feature that is specific to the channel start/stop processing is the usage of a JMS receiver at the conclusion of the iFlow processing instead of directly calling the receiver system.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Figure 5: iFlow A - Build Message Payload" style="width: 621px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268005iA212DDFCA62253F9/image-size/large?v=v2&px=999" role="button" title="CraigStasila_4-1748639445249.png" alt="Figure 5: iFlow A - Build Message Payload" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 5: iFlow A - Build Message Payload</span></span></P><P>The iFlow <STRONG>B - Check Channel Status and Send to Adapter</STRONG> is where we will check the status of the global channel variable and implement all of the JMS retry logic. This iFlow will be invoked immediately after <STRONG>A - Build Message Payload</STRONG> publishes the message to the shared message queue. The iFlow simply retrieves the global variable <FONT face="courier new,courier">GlobalChannelStatus</FONT>. If the value of this variable is 'RUNNING', the message is sent to the receiver system--in this case a iFlow called via the ProcessDirect adapter that simply logs the message payload. If the value of the global variable is 'STOPPED', the processing of the message is stopped and the message will stay in the JMS queue in a Failed status.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Figure 6: iFlow B - Check Channel Status and Send to Adapter" style="width: 957px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268006i9160B51E889133DE/image-size/large?v=v2&px=999" role="button" title="CraigStasila_5-1748639445250.png" alt="Figure 6: iFlow B - Check Channel Status and Send to Adapter" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 6: iFlow B - Check Channel Status and Send to Adapter</span></span></P><P><SPAN>Finally, I created a small iFlow to mock a receiver system. The simple iFlow </SPAN><STRONG>C - Process Direct Call Adapter</STRONG><SPAN> logs the message header and body to the message processing log so that it can be viewed in the message monitor.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Figure 7: iFlow C - Process Direct Call Adapter" style="width: 775px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268007iB3C9C55085B31A96/image-size/large?v=v2&px=999" role="button" title="CraigStasila_6-1748639445251.png" alt="Figure 7: iFlow C - Process Direct Call Adapter" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 7: iFlow C - Process Direct Call Adapter</span></span></P><P><SPAN>For this prototype, the global variable <FONT face="courier new,courier">GlobalChannelStatus</FONT> can be set to 'RUNNING' through iFlow </SPAN><STRONG>D - Start Channels</STRONG><SPAN> and can be set to 'STOPPED' by deploying iFlow </SPAN><STRONG>E - Stop Channels</STRONG><SPAN>. In practice, these iFlows could be triggered externally from an API or through a custom application.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Figure 8: iFlows D - Start Channels & E - Stop Channels" style="width: 575px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/268008i3F2B7637843598B0/image-size/large?v=v2&px=999" role="button" title="CraigStasila_7-1748639445252.png" alt="Figure 8: iFlows D - Start Channels & E - Stop Channels" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 8: iFlows D - Start Channels & E - Stop Channels</span></span></P><H3 id="toc-hId-1270975871">Conclusion</H3><P>SAP Integration Suite is not a one-for-one reimplementation of SAP PI/PO in the cloud—in many ways it is way more powerful. This blog post is an example of how using SAP Integration Suite as a true platform solution unlocks a whole host of advanced functionality.</P><P>Have any of you tried the JMS retry functionality? Can you think of any improvements to what I’ve shown here? I can think of a couple things I could improve but want to hear from you! What would you do to improve this channel start/stop concept?</P>2025-06-04T09:14:40.214000+02:00https://community.sap.com/t5/financial-management-blog-posts-by-members/integration-of-sap-digital-currency-hub-into-your-s-4-payments/ba-p/14119453Integration of SAP Digital Currency Hub into your S/4 payments infrastructure2025-06-10T19:47:36.646000+02:00vpolovyyhttps://community.sap.com/t5/user/viewprofilepage/user-id/1494367<P>Recently we had an opportunity to build a prototype for digital payments solution and successfully integrated Digital Currency Hub service platform. Here we would like to share some practical aspects ouf our work.</P><P><STRONG>Configuration steps in the S/4 system</STRONG></P><P>Our S/4 systems are designed to work with traditional currencies(fiat) in treasury and payment operations. To be able to operate with digital currencies via DCH, you will need a new payment method and new house bank account.</P><OL><LI>Define a new payment method in your country and company code</LI><LI>Use a custom payment medium format, where you’ll be able to call custom function modules. This is where you’ll integrate API-Calls offered by DCH to transfer payment instructions. Disable DME Mapping Engine in format settings</LI><LI>Define an internal bank master data record of type "payment system". Then use this record to set up a house bank account, account determination rules and GL account for payment clearing</LI></OL><P>Having completed this step, you should be able to use your new payment method while booking an invoice and assign it to business partners.</P><P><STRONG>Configuration steps in the DCH payment platform</STRONG></P><P>In general DCH is a cloud plattform and uses the Fiori Launchpad user interface design, that we know. It is easy to navigate and find an appropriate tile for a specific task </P><OL><LI>Define cryptocurrencies: We used stablecoins in our case. DCH offers an option to map traditional (fiat) currencies to cryptos. So using this setup we were able to initiate payments in fiat currencies in S/4 and transfer the funds in stablecoins. Another benefit of this aproach is no need to maintain a new crypto-currency and exchange rates in S/4. <BR />There are also some related tasks to be done: networks, custodians etc.</LI><LI>Set up integration. Write down client ID and client secret somewhere safe, as you will need this data for authentification later</LI><LI>Finally set up your master data in DCH: <BR />- Create a company as payment initiator as a conterpart for your company code<BR />- Replicate business partners records, which you choose for test. Tipp: use business partner ID in S/4 as external ID in DCH. This will make your integration a lot more transparent </LI></OL><P><STRONG>General overview</STRONG></P><P>This is how it all fits together in our test environment.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="vpolovyy_0-1749071652636.png" style="width: 664px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/269781i61E3A21DA3820F5D/image-dimensions/664x350?v=v2" width="664" height="350" role="button" title="vpolovyy_0-1749071652636.png" alt="vpolovyy_0-1749071652636.png" /></span></P><P><STRONG>Technical implementation</STRONG></P><P>Certain configuration steps must be performed by your system engineers. Just like other solutions by SAP, S/4 Systems connect to DCH via cloud connector. Hence somebody needs to take care of cloud connector add-on installation, setting up a logon procedure and network security.</P><P>The API integration takes place via REST calls in ABAP. Use function modules of your custom payment medium format as wrappers. All necessary information such as business partner, amount, currency, will be delivered automatically by the interface of the function modules.</P><P>Now, lets face the most technical part of our prototype. ABAP Coding would generally consist of handling two tasks:</P><P><STRONG>1) Authentication call and retrieving the access token</STRONG></P><P>The purpose here is to retrieve the access token by an authification call using previuosly retrieved client ID and client secret. We used generic HTTP-Client Class for our purpose.</P><pre class="lia-code-sample language-abap"><code>cl_http_client=>create_by_url(
exporting
url = auth_url,
ssl_id = 'ANONYM'
importing
client = data(mo_token_client)
).
mo_token_client->request->set_method( 'POST' ).
mo_token_client->authenticate(
exporting
username = client_id,
password = client_secret
).</code></pre><P>Submit the call and check the http-code by mo_token_client->response->get_status( ) method. If “200” value is returned, read response object and retrieve access token from the JSON Body by mo_token_client->response->get_cdata( ) method.</P><P><STRONG>2) API Call </STRONG></P><P>Create another instance of http-client for api calls and set your access token as a header parameter:</P><pre class="lia-code-sample language-abap"><code>cl_http_client=>create_by_url(
exporting
url = api_url,
ssl_id = 'ANONYM'
importing
client = data(mo_http_client)
).
mo_rest_client->if_rest_client~set_request_header(
iv_name = 'Authorization',
iv_value = |Bearer { lv_access_token }|
).</code></pre><P>Prepare payment payload from deep structure in ABAP to a JSON string by calling <EM>/ui2/cl_json=>serialize( ).</EM></P><P> Finally submit your payments to payment platform</P><pre class="lia-code-sample language-abap"><code>lo_request->set_content_type( iv_media_type = if_rest_media_type=>gc_appl_json ).
lo_request->set_string_data( io_payments ).
mo_rest_client->if_rest_resource~post( lo_request ).</code></pre><P>Check the result of API call. This is indicated by the response object. If all went well, you should see a new transaction in DCH. Initially its status would be "In process" and then changed to "Completed".</P><P><STRONG>Conclusion and outlook</STRONG></P><P>This case covers a very basic scenario of payment processing with digital currencies. Its puspose is to trigger a fund transfer from one party to another and ensure correct booking in S/4 . At the end your booked invoice is automatically cleared by F110-payment run and payments are processed in usual manner.</P><P>More advanced options are upcoming, when the ongoing DCH-release with Multi Banking Connectivity becomes available.</P><P>But no matter, if you run your payments on larger scale using MBC or use simple integration as described here, adding the option of digital payments may turn out highly beneficial. Treasurers might be attracted by optimization af cross-border payments costs, processing speed and becoming independent from banking holidays and working hours</P>2025-06-10T19:47:36.646000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/automating-customer-communication-and-data-delivery-using-sap-integration/ba-p/14122321Automating Customer Communication and Data Delivery Using SAP Integration Suite2025-06-10T20:03:27.325000+02:00Anky02https://community.sap.com/t5/user/viewprofilepage/user-id/2085116<H2 id="toc-hId-1732264868"><U><STRONG>Part 1: Customer Notification iFlow</STRONG></U><BR /><BR /><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="calculate_price.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/271356i4FEECB5C40BCA5D9/image-size/large?v=v2&px=999" role="button" title="calculate_price.png" alt="calculate_price.png" /></span></H2><P>Below is a JSON payload received via HTTP, we have to extract customer details, calculate the total purchase amount, and send a personalized email using gcp and smtp to the customer.<BR /><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="This is the sample payload which is sent using postman. Postman will be the sender here for testing purposes." style="width: 348px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/271354iFDDE8DC78997DD58/image-size/large?v=v2&px=999" role="button" title="payload.png" alt="This is the sample payload which is sent using postman. Postman will be the sender here for testing purposes." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">This is the sample payload which is sent using postman. Postman will be the sender here for testing purposes.</span></span><BR /><BR /></P><H4 id="toc-hId-1793916801">1. HTTP Sender Adapter:</H4><UL><LI> Here we are sending the payload using http sender adapter via postman.</LI><LI>Configuration:<UL><LI>Method: We are using a POST method.</LI><LI>Address: /CalculateTotalProductPrice02</LI></UL></LI></UL><H4 id="toc-hId-1597403296">2. Content Modifier</H4><UL><LI>The HTTP adapter is connected to start message event which is in turn connected to content modifier which stores the incoming payload in the message body for further usage.</LI></UL><H4 id="toc-hId-1400889791">3. Parallel Multicast</H4><UL><LI>After the processing of the message in the content modifier we send the payload to two different routes at the same time using a parallel multicast.<BR /><UL><LI>Branch 1 is connected to Groovy Script which extracts the required data, and it is further connected to end event which is connected to receiver1 via Mail Adapter.</LI><LI>Branch 2 is connected to end event which is connected to receiver2 via Process Direct which triggers a second iFlow.</LI></UL></LI></UL><H4 id="toc-hId-1204376286">4. Groovy Script</H4><UL><LI>Using the groovy script we are parsing the JSON payload, calculating the total amount of all the products, and extracting the name and email of the customer from the payload for dynamic mail sending.<BR /><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Anky02_0-1749389409111.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/271349i05FB6E7C581E675F/image-size/medium?v=v2&px=400" role="button" title="Anky02_0-1749389409111.png" alt="Anky02_0-1749389409111.png" /></span><BR /><P><!-- ScriptorStartFragment --></P><DIV class="lia-align-justify" style="text-align : justify;"><FONT color="#003366"><FONT color="#003366"><STRONG>Copy the code below and paste in GroovyScript.<BR /></STRONG></FONT></FONT><FONT color="#003366"><STRONG><BR /></STRONG></FONT></DIV><DIV class="lia-align-justify" style="text-align : justify;">import com.sap.gateway.ip.core.customdev.util.Message;</DIV><DIV class="lia-align-justify" style="text-align : justify;">import groovy.json.JsonSlurper; </DIV><DIV class="lia-align-justify" style="text-align : justify;">Message processData(Message message) {</DIV><DIV class="lia-align-justify" style="text-align : justify;"> def body = message.getBody(String);</DIV><DIV class="lia-align-justify" style="text-align : justify;"> def json = new JsonSlurper().parseText(body);</DIV><DIV class="lia-align-justify" style="text-align : justify;"> def firstName = json.customerFirstName;</DIV><DIV class="lia-align-justify" style="text-align : justify;"> def customerEmail = json.customerEmail;</DIV><DIV class="lia-align-justify" style="text-align : justify;"> def total = 0;</DIV><DIV class="lia-align-justify" style="text-align : justify;"> json.purchases.each { purchase -></DIV><DIV class="lia-align-justify" style="text-align : justify;"> total += purchase.productPrice;</DIV><DIV class="lia-align-justify" style="text-align : justify;"> }</DIV><DIV class="lia-align-justify" style="text-align : justify;"> message.setProperty("customerEmail", customerEmail);</DIV><DIV class="lia-align-justify" style="text-align : justify;"> message.setProperty("customerFirstName", firstName);</DIV><DIV class="lia-align-justify" style="text-align : justify;"> def response = "Hi ${firstName}. Your transaction of ${total} is successfully placed. Regards, My Website Sales Team ";</DIV><DIV class="lia-align-justify" style="text-align : justify;"> message.setBody(response);</DIV><DIV class="lia-align-justify" style="text-align : justify;"> return message;</DIV><DIV class="lia-align-justify" style="text-align : justify;">}</DIV><DIV class="lia-align-justify" style="text-align : justify;"> </DIV><P class="lia-align-justify" style="text-align : justify;"><!-- ScriptorEndFragment --></P><H4 id="toc-hId-1007862781">5. Mail Adapter</H4><UL class="lia-align-justify" style="text-align : justify;"><LI>To: ${property.customerEmail} refer to Camel property of accessing properties.</LI><LI>Subject: Order Confirmation for ${property.customerFirstName}</LI><LI>Body: Uses the message body set by the Groovy script.</LI></UL><H4 id="toc-hId-811349276">6. Process Direct Adapter<SPAN>:</SPAN></H4><SPAN>The process direct adapter is used to forward the processed payload to the second iFlow for transformation and delivery.</SPAN></LI></UL><P> </P><H2 id="toc-hId-356670333"> <U>Part 2: JSON to CSV Transformation and SFTP Delivery iFlow</U></H2><H3 id="toc-hId-289239547"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="json_to_csv.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/271369i6E8CBB93602D3AF5/image-size/large?v=v2&px=999" role="button" title="json_to_csv.png" alt="json_to_csv.png" /></span></H3><P>Convert the JSON payload into CSV format and send it to an SFTP server. Since SAP Integration Suite doesn’t support direct JSON-to-CSV conversion, we use a multi-step approach.</P><H2 id="toc-hId--36356677"><U> Integration Flow Components</U></H2><H4 id="toc-hId--472421839">1. Process Direct Sender Adapter</H4><UL><LI>We are using a process direct from the sender here to receive the processed payload from the first iFlow.</LI><LI>Configuration: <package_name> /<iFlow_name></LI></UL><H4 id="toc-hId--668935344">2. JSON to XML Converter</H4><UL><LI>We are using a JSON to XML converter that converts the JSON payload into XML format.</LI></UL><H4 id="toc-hId--865448849">3. Parallel Multicast</H4><UL><LI>We are again making use of parallel multicast to split the XML into two branches:<UL><LI>Branch 1 named products extract's and converts product data.</LI><LI>Branch 2 named customer extract's and converts customer data.</LI></UL></LI></UL><H4 id="toc-hId--1061962354">4. XML to CSV Converters</H4><UL><LI>Here we are using two XML to CSV Converters.</LI><LI>Converter 1 (Products) is used to convert product XML to CSV and Converter 2 (Customers) is used to convert customer XML to CSV.</LI></UL><H4 id="toc-hId--1258475859">5. Join Component</H4><UL><LI>The join component is used to join the two parallel branches after conversion.</LI></UL><H4 id="toc-hId--1454989364">6. Gather Component</H4><UL><LI>The gather component is used to aggregate the joined data into a single message.</LI></UL><H4 id="toc-hId--1651502869">7. SFTP Receiver Adapter</H4><OL><LI>The end message event is connected to receiver via SFTP adapter that sends the final CSV file to an SFTP server.</LI><LI>Configuration: Includes server address, port, authentication, and target directory.</LI></OL><H2 id="toc-hId--1261210360"> Key Takeaways</H2><UL><LI><STRONG>Content Modifier</STRONG><SPAN> </SPAN>is essential for storing and forwarding payloads.</LI><LI><STRONG>Parallel Multicast</STRONG><SPAN> </SPAN>enables concurrent processing paths.</LI><LI><STRONG>Groovy Script</STRONG><SPAN> </SPAN>provides flexibility for custom logic.</LI><LI><STRONG>Mail Adapter</STRONG><SPAN> </SPAN>supports dynamic personalization.</LI><LI><STRONG>Process Direct</STRONG><SPAN> </SPAN>promotes modular iFlow design.</LI><LI><STRONG>JSON to XML → XML to CSV</STRONG><SPAN> </SPAN>is a practical workaround for JSON-to-CSV transformation.</LI><LI><STRONG>SFTP Adapter</STRONG><SPAN> </SPAN>enables secure file delivery to external systems.<BR /><BR /><BR /><BR /><BR /></LI></UL><P> </P>2025-06-10T20:03:27.325000+02:00https://community.sap.com/t5/integration-blog-posts/set-up-the-sap-cloud-connector-integrating-on-premise-systems-with-cloud/ba-p/14124903Set up the SAP Cloud Connector: Integrating On‑Premise Systems with Cloud Services2025-06-12T08:24:48.267000+02:00Thijn_Grilishttps://community.sap.com/t5/user/viewprofilepage/user-id/1988733<H1 id="toc-hId-1603150657" id="toc-hId-1603247437"><SPAN>Set up the SAP Cloud Connector: Integrating On‑Premise SAP Systems with Cloud Services Using the Cloud Connector</SPAN></H1><P><SPAN>In today’s hybrid IT landscape, connecting on‑premise SAP systems with cloud services is a strategic necessity and a best practice ecomended by SAP. This blog explains how to establish secure connections between your internal SAP environment and cloud platform, such as the Business Technology Platform, Integration Suite, or SAP Build Apps, using the Cloud Connector. We cover the key connection protocols, compare three OData service deployment strategies, and outline the service creation </SPAN><SPAN>process with relevant SAP transaction codes. Finally, we detail the steps to set up the Cloud Connector with proper certificate management and configuration paths, ensuring a secure and efficient integration.</SPAN></P><P><STRONG>Connection Protocols and Their Roles</STRONG></P><P><SPAN>Before configuring your integration, it is essential to understand the protocols that underpin communication between systems:</SPAN></P><UL><LI><STRONG>HTTP/HTTPS:</STRONG><STRONG><BR /></STRONG><SPAN>These protocols form the basis for web-based communication. HTTPS, in particular, ensures that data transferred between cloud services and on‑premise systems is encrypted an</SPAN><SPAN>d secure—critical for protecting sensitive business information.</SPAN><SPAN><BR /></SPAN></LI><LI><STRONG>RFC (Remote Function Call):</STRONG><STRONG><BR /></STRONG><SPAN>RFC enables communication between different SAP components. When integrated with the Cloud Connector, RFC calls are securely transmitted from cloud applications to your on‑premise SAP system, ensuring consistency and reliability in data and process exchanges.</SPAN><SPAN><BR /></SPAN></LI><LI><SPAN><STRONG>OData (Open Data Protocol):</STRONG><STRONG><BR /></STRONG>OData is the standard protocol for exposing SAP Business Suite data as RESTful services. It supports CRUD operations (Create, Read, Update, Delete), making it ideal for modern applications that require flexible and real‑time data interaction across multiple devices.</SPAN></LI></UL><H3 id="toc-hId-1664802590" id="toc-hId-1664899370"><STRONG>Interface Connections and Deployment Strategies</STRONG></H3><P><SPAN>Interface connections are the channels through which data flows between your on‑premise SAP systems and cloud platforms. When exposing SAP Business Suite data via OData services, you can choose among three primary deployment strategies:</SPAN></P><OL><LI><STRONG>Embedded Deployment:<BR /></STRONG><SPAN>With Embedded Deployment, available from SAP NetWeaver 7.4 onward, the SAP Gateway Foundation is integrated within each SAP Business Suite system. Each system runs its own SAP Gateway instance, meaning that you must configure the gateway individually for each backend system. This approach is ideal when data needs to be exposed independently for each system, although it does require managing multiple configurations.</SPAN><SPAN><BR /></SPAN></LI><LI><STRONG>Central HUB Deployment:</STRONG><STRONG><BR /></STRONG><SPAN>In this model, the SAP Gateway is installed on a dedicated front‑end server (the hub system) rather than being embedded in every backend system. A single SAP Gateway instance serves all SAP Business Suite systems, centralizing connectivity and enhancing security.</SPAN><SPAN><BR /></SPAN></LI><LI><SPAN><STRONG>OData Provisioning via Cloud-Based Deployment:</STRONG><STRONG><BR /></STRONG>This strategy moves the SAP Gateway frontend to the cloud. Here, the SAP Cloud Platform manages the gateway while OData services connect to on‑premise systems (typically SAP HANA) via the Cloud Connector. The Cloud Connector, acting as an on‑premise agent, initiates outbound connections, thereby eliminating the need to open inbound firewall ports. This not only enhances security but also leverages modern, centrally managed, browser-based development environments like the cloud version of SAP Web IDE.</SPAN></LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thijngr_0-1749626784353.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/272891iB37995E7C7316D55/image-size/large?v=v2&px=999" role="button" title="thijngr_0-1749626784353.png" alt="thijngr_0-1749626784353.png" /></span></P><H2 id="toc-hId-1142692861" id="toc-hId-1339303146"><STRONG>Why Use the SAP Cloud Connector?</STRONG></H2><P><SPAN>Even if your OData services appear to be accessible directly, employing the SAP Cloud Connector provides substantial benefits beyond basic connectivity:</SPAN></P><P><STRONG>Enhanced Security via Reverse Invoke</STRONG><STRONG><BR /></STRONG><SPAN>SAP Cloud Connector uses a secure, outbound "reverse invoke" approach. Instead of opening risky inbound firewall ports that could expose your internal network to threats, the connector initiates secure connections outward from your protected on-premise environment to the SAP Cloud. This significantly reduces vulnerabilities by preventing unauthorized external access.</SPAN></P><P><STRONG>Centralized Connection Management</STRONG><STRONG><BR /></STRONG><SPAN>By providing a centralized point of control, SAP Cloud Connector simplifies managing your cloud-to-on-premise connections. It allows administrators to handle access controls, authentication, and certificate management in one place. Consequently, you ensure that only authorized SAP cloud services can connect to your internal systems, maintaining consistency and simplifying governance.</SPAN></P><P><STRONG>Granular and Precise Access Control</STRONG><STRONG><BR /></STRONG><SPAN>Even if OData links seem publicly reachable, the Cloud Connector gives you detailed control over exactly which services, APIs, or datasets external applications can access. This granular management greatly reduces the risk of unauthorized data exposure, ensuring compliance and protecting sensitive information. </SPAN><SPAN>Facilitating SAP BTP Services (SAP Build Apps, Integration Suite, and More)</SPAN></P><P><SPAN>Beyond security, the Cloud Connector is vital for enabling seamless and effective integration of SAP Business Technology Platform (BTP) services, such as SAP Build Apps, SAP Integration Suite, and SAP Analytics Cloud. It ensures these cloud-based applications can reliably and securely interact with your on-premise SAP backend systems, enhancing their functionality and simplifying integration tasks.</SPAN></P><P><SPAN>In summary, SAP Cloud Connector doesn't just enhance security—it simplifies integration, provides centralized control, and significantly enhances the effectiveness and security of your SAP cloud integrations</SPAN></P><H2 id="toc-hId-946179356" id="toc-hId-1142789641"><STRONG>Service Creation and Interface Configuration</STRONG></H2><P><SPAN>This blog primarily covers setting up the Cloud Connector. If you're new to SAP, additional background information about available data and deployment strategies is available.</SPAN></P><P><SPAN>SAP recommends using predefined CDS views to securely expose data via OData services. CDS views offer control over selecting relevant fields, enable data transformations, and help enforce security and business rules through built-in annotations and validations.</SPAN></P><P><SPAN>You can create OData services rapidly through automatic service generation or develop more complex services manually using the SAP Gateway Service Builder (SEGW). Once created, services must be activated using transaction </SPAN><SPAN>/IWFND/MAINT_SERVICE</SPAN><SPAN> and can be tested with </SPAN><SPAN>/IWFND/GW_CLIENT</SPAN><SPAN>. This link provides more information: </SPAN><SPAN><A href="https://community.sap.com/t5/application-development-and-automation-blog-posts/a-step-by-step-process-to-create-odata-services-in-sap-sap-hana-system/ba-p/13515353" target="_blank">https://community.sap.com/t5/application-development-and-automation-blog-posts/a-step-by-step-proces...</A></SPAN><SPAN><BR /></SPAN></P><P> </P><H1 id="toc-hId-620583132" id="toc-hId-817193417"><STRONG>Setting Up the Cloud Connector</STRONG></H1><P><SPAN>Establishing a secure interface using the Cloud Connector involves several key steps:</SPAN></P><H2 id="toc-hId-553152346" id="toc-hId-749762631"><STRONG>1. Installation:</STRONG><STRONG><BR /></STRONG></H2><OL><LI><STRONG>Download:</STRONG><SPAN> Begin by downloading the latest version of the Cloud Connector: </SPAN><A href="https://tools.hana.ondemand.com/#cloud" target="_blank" rel="noopener nofollow noreferrer"><SPAN>https://tools.hana.ondemand.com/#cloud</SPAN></A><SPAN> </SPAN></LI><LI><STRONG>Install:<SPAN> </SPAN></STRONG><SPAN>Before you install the Cloud Connector make sure that the newest Java 8 version is installed: </SPAN><A href="https://www.oracle.com/nl/java/technologies/javase/javase8-archive-downloads.html" target="_blank" rel="noopener nofollow noreferrer"><SPAN>https://www.oracle.com/nl/java/technologies/javase/javase8-archive-downloads.html</SPAN></A><SPAN>.To install the cloud connector it is possible to click true all the steps in the setup</SPAN></LI><LI><STRONG>Open:<SPAN> </SPAN></STRONG><SPAN>To open the Cloud Connector run the program “Start Cloud Connector” as administrator and enter this link in your web browser: </SPAN><A href="https://localhost:8443/" target="_blank" rel="noopener nofollow noreferrer">https://localhost:8443</A><SPAN> and click on proceed to local host.</SPAN></LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thijngr_1-1749626784334.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/272888iAD894E11B7F61432/image-size/large?v=v2&px=999" role="button" title="thijngr_1-1749626784334.png" alt="thijngr_1-1749626784334.png" /></span></P><P><SPAN>To login use the Username: Administrator and the Password: manage. In the next page you can set your new password and proceed with the initial setup. for the Initial setup choose Master (primary installation) and press save. </SPAN></P><H2 id="toc-hId-356638841" id="toc-hId-553249126"><SPAN><STRONG>2. Configuring Subaccount:</STRONG></SPAN></H2><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thijngr_2-1749626784369.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/272890iAFE9ED9F6908A8CA/image-size/large?v=v2&px=999" role="button" title="thijngr_2-1749626784369.png" alt="thijngr_2-1749626784369.png" /></span></P><P><STRONG>To connect to the SAP Subaccount, press the button + Add Sub Account. The following pop up will be displayed:</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thijngr_3-1749626784377.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/272892iC24AE3DB9E0FFB22/image-size/large?v=v2&px=999" role="button" title="thijngr_3-1749626784377.png" alt="thijngr_3-1749626784377.png" /></span></P><P><SPAN>Connecting to the internet through an HTTPS proxy, as prompted here in SAP Cloud Connector Administration, may be necessary in the following scenarios:</SPAN></P><H3 id="toc-hId-289208055" id="toc-hId-485818340"><STRONG>When to Use an HTTPS Proxy</STRONG></H3><OL><LI><STRONG>Cloud Integration Needs</STRONG><SPAN>: If your SAP environment connects to external cloud services like </SPAN><STRONG>SAP BTP Integration Suite</STRONG><SPAN>, an HTTPS proxy ensures secure, reliable data tunnels between on-premises systems and the cloud. </SPAN><I><SPAN>Even if the Cloud Connector is hosted locally, connecting to SAP BTP (a cloud service) typically requires a proxy unless your network allows direct, secure internet access.</SPAN></I></LI><LI><STRONG>Enhanced Security & Compliance</STRONG><SPAN>: Proxies add a layer of protection by monitoring traffic, helping meet regulatory standards and internal security policies.</SPAN></LI><LI><STRONG>Restricted Corporate Networks</STRONG><SPAN>: If your network blocks direct internet access, a proxy is mandatory to enable external communication while adhering to company policies.</SPAN></LI><LI><STRONG>Simplified Maintenance</STRONG><SPAN>: Proxies streamline software updates and patches, keeping your Cloud Connector secure and up-to-date.</SPAN></LI></OL><H3 id="toc-hId-92694550" id="toc-hId-289304835"><STRONG>When to Skip the Proxy</STRONG></H3><OL><LI><STRONG>Secure Direct Internet Access</STRONG><SPAN>: If your network already allows secure direct connections to SAP BTP endpoints (e.g., </SPAN><SPAN>*.hana.ondemand.com</SPAN><SPAN>), a proxy may add unnecessary complexity.</SPAN></LI><LI><STRONG>Internal Use Only</STRONG><SPAN>: If the Cloud Connector doesn’t interact with external services, a proxy offers no benefit and can be omitted.</SPAN></LI><LI><STRONG>Prioritizing Simplicity</STRONG><SPAN>: Proxies introduce configuration overhead. If your setup values minimalism, bypassing the proxy reduces management effort.</SPAN></LI></OL><P><SPAN>If you need to configure an HTTPS proxy for SAP Cloud Connector, here's what you typically fill in: <STRONG>But for this example we leave the proxy empty. </STRONG></SPAN></P><P><STRONG>Host</STRONG><SPAN>: Enter the proxy server’s hostname or IP address provided by your organization's network team (Example: proxy.mycompany.com or 192.168.1.1)</SPAN></P><P><STRONG>Port:</STRONG><SPAN> The proxy server's port number, often 8080, 443, or another port specified by your IT department.</SPAN></P><P><STRONG>User:</STRONG><SPAN> Proxy username, if authentication is required.</SPAN></P><P><SPAN>(Leave empty if no authentication is necessary.)</SPAN></P><P><STRONG>Password:<SPAN> </SPAN></STRONG><SPAN>Corresponding password for the proxy user.</SPAN></P><P><SPAN>(Leave empty if no authentication is necessary.)</SPAN></P><P><STRONG>After this step, open your BTP environment, here you can find the relevant data you need to connect SAP BTW with your cloud connector. You can choose to add all the data manually, or go to Cloud Connectors and download Authentication data. </STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thijngr_4-1749626784279.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/272893iEF599B62A3F1AF33/image-size/large?v=v2&px=999" role="button" title="thijngr_4-1749626784279.png" alt="thijngr_4-1749626784279.png" /></span></P><P><STRONG>After downloading this data go back to your cloud connector and select configure using authentication data and choose, add sub account authentication data from file and select the file that you just downloaded. </STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thijngr_5-1749626784361.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/272894iFEF2D2B896F21557/image-size/large?v=v2&px=999" role="button" title="thijngr_5-1749626784361.png" alt="thijngr_5-1749626784361.png" /></span></P><P><STRONG>You can now Check if there is a secure connection in the BTP platform and in your cloud connector. This should look somewhat like this:</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thijngr_6-1749626784365.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/272895i0B6310D75CBD1D73/image-size/large?v=v2&px=999" role="button" title="thijngr_6-1749626784365.png" alt="thijngr_6-1749626784365.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thijngr_7-1749626784290.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/272896i280BB128E955638D/image-size/large?v=v2&px=999" role="button" title="thijngr_7-1749626784290.png" alt="thijngr_7-1749626784290.png" /></span></P><P><STRONG>!If the Cloud Connector cannot establish a connection to your BTP account, first verify that your Windows network profile is set to “Private.” At home the Connector often works on “Public” because your router allows port 8443 and outbound HTTPS by default, but in a corporate setting a firewall or proxy will block these connections. Switching to “Private,” configuring the Connector with your company’s proxy, or asking IT to open ports 8443 and 443 to *.hana.ondemand.com will restore connectivity.</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thijngr_8-1749626784409.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/272897i6CF4A8C3635B99ED/image-size/large?v=v2&px=999" role="button" title="thijngr_8-1749626784409.png" alt="thijngr_8-1749626784409.png" /></span></P><H2 id="toc-hId--278674327" id="toc-hId--36291389"><STRONG>3. Configuring Certifications:</STRONG></H2><P><SPAN>When setting up HTTPS communication between the SAP Cloud Connector and your SAP backend system, properly managing certificates in the SAP Trust Manager (transaction STRUST) is essential. Certificates act like digital passports—they verify identities, establish trust between systems, and ensure that data is encrypted during transmission. But how does this actually work in SAP? And where exactly do these certificates go? Let’s break it down.</SPAN></P><H3 id="toc-hId--768590839" id="toc-hId--178953544"><STRONG>Identity Certificates vs. Trust Anchors in STRUST</STRONG></H3><P><SPAN>In each Personal Security Environment in STRUST, there are two types of certificates to be aware of:</SPAN></P><H4 id="toc-hId--1258507351" id="toc-hId--668870056"><STRONG>1. Identity Certificate ("Own Certificate")</STRONG></H4><P><SPAN>This is your SAP system’s own server certificate—it contains a private key and is used when SAP needs to prove its identity (e.g., during TLS handshakes). Only one identity certificate can be active per PSE at any given time.</SPAN></P><P><STRONG>!If you replace this certificate, you must update all other devices to trust the new one; otherwise, connections may fail!</STRONG></P><H4 id="toc-hId--1455020856" id="toc-hId--865383561"><STRONG>2. Trusted Certificates ("Certificate List")</STRONG></H4><P><SPAN>These are public certificates your SAP system uses to trust other systems—such as the Cloud Connector or its CA. These are also called trust anchors. You can store multiple trusted certificates here without issue.</SPAN></P><P><SPAN>Regularly reviewing this list helps avoid trust errors or certificate expiration surprises.</SPAN></P><H3 id="toc-hId--1358131354" id="toc-hId--768494059"><STRONG>Where to Place Certificates in STRUST</STRONG></H3><P><SPAN>When your SAP backend receives inbound HTTPS connections (such as requests from the SAP Cloud Connector), it uses a specific trust store in STRUST called the SSL System-wide Standard PSE.</SPAN></P><P><SPAN>To establish trust, you typically need to upload the Cloud Connector’s certificate or the CA certificate that signed it into this PSE. This tells your SAP system: “This incoming connection is safe and trusted.”</SPAN></P><P><SPAN>Important: You do not need to upload this certificate if it's already signed by a widely trusted root CA that your SAP system recognizes by default. In many cases, SAP already includes a list of common root CAs—so the Cloud Connector will be trusted automatically.</SPAN></P><H3 id="toc-hId--1554644859" id="toc-hId--965007564"><STRONG>Configuring Certificates</STRONG></H3><P><SPAN>When setting up HTTPS communication between the SAP Cloud Connector and your SAP backend system, properly managing certificates in the SAP Trust Manager (transaction STRUST) is essential. The goal is to ensure that your SAP system both presents a valid identity certificate when required and trusts the relevant external certificates to establish a secure SSL/TLS handshake.</SPAN></P><H3 id="toc-hId--1751158364" id="toc-hId--1161521069"><STRONG>Identity Certificates vs. Trust Anchors in STRUST</STRONG></H3><P><SPAN>In each Personal Security Environment (PSE) in STRUST, there are two types of certificates to be aware of:</SPAN></P><P><SPAN>When dealing with certificates in STRUST, it’s important to understand the distinction between identity certificates (also called “Own Certificates”) and trust anchors (trusted certificates in the Certificate List). These serve different purposes:</SPAN></P><UL><LI><SPAN>An identity certificate is the certificate that identifies </SPAN><I><SPAN>your</SPAN></I><SPAN> SAP system. It usually includes a private key and is used by SAP when acting as a server or client to present its identity to others. For example, if your SAP system is serving HTTPS requests, it will present its identity certificate to the client (browser or Cloud Connector) during the SSL handshake. In STRUST, the identity certificate is shown in the “Own Certificate” section of a PSE.</SPAN><SPAN><BR /><BR /></SPAN></LI><LI><SPAN>Trust anchors are the certificates of external authorities or systems that your SAP system trusts. In other words, these are usually root CA certificates or intermediate certificates that form the chain of trust for the certificates presented by others. They do not contain a private key in your system; they are public certificates that you add to SAP so that it recognizes and trusts the identities of external parties. In STRUST, trusted certificates are listed in the “Certificate List” section of a PSE (the lower pane). For example, if you need to call an external web service over HTTPS, you must import the web service’s root CA certificate as a trust anchor. This way, when SAP (as a client) connects, it can verify the server’s certificate against these trusted CAs.</SPAN></LI></UL><H3 id="toc-hId--1947671869" id="toc-hId--1358034574"><STRONG>Understanding the Difference Between PSE Types</STRONG></H3><P><SPAN>Finally, it’s important to clearly understand the two primary Personal Security Environment Types we’ve discussed and when each is used:</SPAN></P><UL><LI><STRONG>SSL System-wide Standard PSE (SSL Server PSE):</STRONG><SPAN> This PSE is used when the SAP system acts as a server in an SSL/TLS communication. In other words, for inbound connections to SAP. The System-wide SSL Server PSE provides the server’s identity certificate and uses its trust list to verify clients if needed. “System-wide” means one certificate can be used across all application servers in the system (as opposed to having a separate certificate per instance).</SPAN><SPAN><BR /><BR /></SPAN></LI><LI><STRONG>SSL Client (Standard) PSE:</STRONG><SPAN> This PSE is used when the SAP system acts as a client making outbound HTTPS requests. For any outbound connection that SAP initiates (calling a REST API, connecting to an external cloud service, etc.), the SSL Client (Standard) PSE is consulted. It contains the list of trusted CA certificates that SAP will accept for server certificates on the other side.</SPAN><SPAN><BR /><BR /></SPAN></LI><LI><STRONG>Be careful where you import certificates: Always choose the correct PSE based on the direction of the connection. Importing a certificate into the wrong PSE, like putting a client certificate into the system-wide PSE, can disrupt communication with other systems and cause unexpected connection failures.</STRONG></LI></UL><P><STRONG>Creating Certificates:</STRONG></P><P><SPAN>If your SAP system doesn’t already have a background trust certificate (X.509), you can generate one using one of the methods outlined below. However, it's rare for this certificate to be missing, so if you're unsure, it's best to consult your network specialist.</SPAN></P><UL><LI><SPAN>Using XCA (recommended due to its user-friendly GUI):</SPAN><A href="https://community.sap.com/t5/technology-blogs-by-sap/how-to-guide-xca-quick-start-guide/ba-p/13325445" target="_blank"><SPAN> </SPAN><SPAN>https://community.sap.com/t5/technology-blogs-by-sap/how-to-guide-xca-quick-start-guide/ba-p/133254...</SPAN></A><SPAN> </SPAN></LI><LI><SPAN>Using OpenSSL:</SPAN><A href="https://www.youtube.com/watch?v=Z2l-5utm3WY" target="_blank" rel="noopener nofollow noreferrer"><SPAN> </SPAN><SPAN>https://www.youtube.com/watch?v=Z2l-5utm3WY</SPAN></A><SPAN> </SPAN></LI></UL><P><STRONG>Exporting Existing Certificates:</STRONG></P><P>To export an existing certificate from SAP, go to transaction STRUST in the PSE SSL Server Standard system wide and double click on one of the issuer certificates: </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thijngr_9-1749626784399.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/272898i15C92635675F291F/image-size/large?v=v2&px=999" role="button" title="thijngr_9-1749626784399.png" alt="thijngr_9-1749626784399.png" /></span></P><P><STRONG>Now the certificate is opened on the bottom of the page. Press the button export certificate.</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thijngr_10-1749626784401.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/272899i34F2B9C466B31C2A/image-size/large?v=v2&px=999" role="button" title="thijngr_10-1749626784401.png" alt="thijngr_10-1749626784401.png" /></span></P><P><STRONG>A new tab is opened where you can select the location, name of the certificate and the file format. After downloading your certificate go to the cloud connector site and select configuration. On the configuration screen select on premise.</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thijngr_11-1749626784284.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/272900i24EAB638D5DA2ED7/image-size/large?v=v2&px=999" role="button" title="thijngr_11-1749626784284.png" alt="thijngr_11-1749626784284.png" /></span></P><P><STRONG>Go to the tab Backend Trust Store allowlist and press the button add x509 certificate.</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thijngr_12-1749626784363.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/272901iFBD4DD86355EDA85/image-size/large?v=v2&px=999" role="button" title="thijngr_12-1749626784363.png" alt="thijngr_12-1749626784363.png" /></span></P><P><STRONG>Upload your certificate here. It is not necessary to upload a CA Certificate because the system already trusts publicly signed certificates from standard Certificate Authorities (CAs).</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thijngr_13-1749626784371.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/272903i2E88AE5B51E639D4/image-size/large?v=v2&px=999" role="button" title="thijngr_13-1749626784371.png" alt="thijngr_13-1749626784371.png" /></span></P><H2 id="toc-hId-1236774085" id="toc-hId--1261145072"><SPAN>4. Configuring Connection Paths:</SPAN></H2><P><SPAN>After making sure the right certificates are in place we can continue with connecting the system. Open the sap cloud connector site and select Cloud to On premise in the left menu. and press the button “add system mapping”. For the back end type are several options available. For this case we choose SAP HANA, but it is also possible to select other back end systems.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thijngr_14-1749626784282.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/272902i99E9DDFC8D62B3DD/image-size/large?v=v2&px=999" role="button" title="thijngr_14-1749626784282.png" alt="thijngr_14-1749626784282.png" /></span></P><P> </P><TABLE width="930px"><TBODY><TR><TD width="111.953px"><P><STRONG>Field</STRONG></P></TD><TD width="817.047px"><P><STRONG>Entry</STRONG></P></TD></TR><TR><TD width="111.953px"><P><STRONG>Back-end Type</STRONG></P></TD><TD width="817.047px"><P><STRONG>SAP HANA</STRONG><STRONG>:<SPAN> </SPAN></STRONG><SPAN>Select this option to specify that the backend system is an SAP HANA database.</SPAN></P></TD></TR><TR><TD width="111.953px"><P><STRONG>Protocol</STRONG></P></TD><TD width="817.047px"><P><STRONG>HTTPS</STRONG><STRONG>:<SPAN> </SPAN></STRONG><SPAN>Choose HTTPS to ensure that communication with the backend system is encrypted and secure.</SPAN></P></TD></TR><TR><TD width="111.953px"><P><STRONG>Internal Host</STRONG></P></TD><TD width="817.047px"><P><SPAN>Enter the Fully Qualified Domain Name (FQDN) or hostname of the machine where the Production Connector is installed. A mismatch between the entered hostname and the certificate will result in SSL errors and block the connection. I used the command </SPAN><SPAN>/IWFND/GW_CLIENT or /IWFND/MAINT_SERVICE</SPAN><SPAN> to inspect the request url. For example </SPAN><A href="https://prod-connector.company.com:44321/sap/opu/odata/sap/ZC_142JJ_MATERIALSPERUSER_CDS/?$format=xml" target="_blank" rel="noopener nofollow noreferrer"><SPAN>https://prod-connector.company.com</SPAN><SPAN>:</SPAN><SPAN>44321/sap/opu/odata/sap/ZC_142JJ_MATERIALSPERUSER_CDS/?$format=xm...</SPAN></A><SPAN>. Use the red text as the internal host. </SPAN></P></TD></TR><TR><TD width="111.953px"><P><STRONG>Internal Port</STRONG></P></TD><TD width="817.047px"><P><STRONG>Enter the port number</STRONG><SPAN> used by the Production Connector for cloud communication (e.g., 443 or a custom HTTPS port). For example </SPAN><A href="https://prod-connector.company.com:44321/sap/opu/odata/sap/ZC_142JJ_MATERIALSPERUSER_CDS/?$format=xml" target="_blank" rel="noopener nofollow noreferrer"><SPAN>https://prod-connector.company.com</SPAN><SPAN>:</SPAN><SPAN>44321</SPAN><SPAN>/sap/opu/odata/sap/ZC_142JJ_MATERIALSPERUSER_CDS/?$format=xm...</SPAN></A><SPAN>. Use the red text as the internal host. </SPAN></P></TD></TR><TR><TD width="111.953px"><P><STRONG>Virtual Host</STRONG></P></TD><TD width="817.047px"><P><STRONG>Enter a unique virtual host name</STRONG><SPAN>, such as </SPAN><SPAN>prodconccms</SPAN><SPAN>, to identify this Production Connector instance. Only use letters (A–Z, a–z), numbers (0–9), and periods (</SPAN><SPAN>.</SPAN><SPAN>). Special characters are not allowed.</SPAN></P></TD></TR><TR><TD width="111.953px"><P><STRONG>Virtual Port</STRONG></P></TD><TD width="817.047px"><P><STRONG>Enter a virtual port number</STRONG><SPAN>, for example: </SPAN><SPAN>50066</SPAN><SPAN>.This will be used together with the virtual host to form the URL, e.g., </SPAN><SPAN><A href="https://prodconccms:50066/" target="_blank" rel="noopener nofollow noreferrer">https://prodconccms:50066</A></SPAN><SPAN>. The virtual port can be the same as the internal port if desired.</SPAN></P></TD></TR><TR><TD width="111.953px"><P><STRONG>Principal Propagation</STRONG></P></TD><TD width="817.047px"><P><STRONG>Deselect this option</STRONG><STRONG>.</STRONG><SPAN>Certificate-based OAuth is now used for authentication instead of principal propagation.</SPAN></P></TD></TR><TR><TD width="111.953px"><P><STRONG>System Certificate for Logon</STRONG></P></TD><TD width="817.047px"><P><STRONG>Select this checkbox</STRONG><SPAN> to enable certificate-based authentication for logging into the system.</SPAN></P></TD></TR><TR><TD width="111.953px"><P><STRONG>Host In Request Header</STRONG></P></TD><TD width="817.047px"><P><STRONG>Use the default setting</STRONG><SPAN>: </SPAN><SPAN>Use Virtual Host</SPAN><SPAN>This ensures the virtual host name is sent in the request headers.</SPAN></P></TD></TR><TR><TD width="111.953px"><P><STRONG>Description</STRONG></P></TD><TD width="817.047px"><P><STRONG>No input required</STRONG><STRONG>.</STRONG><SPAN>This field can be left empty unless a description is specifically needed.</SPAN></P></TD></TR><TR><TD width="111.953px"><P><STRONG>Check Internal Host</STRONG></P></TD><TD width="817.047px"><P><STRONG>Select this checkbox</STRONG><SPAN> to verify that the internal host name is reachable and correctly configured.</SPAN></P></TD></TR></TBODY></TABLE><P><STRONG>The result should look like this and the status should be reachable:</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thijngr_15-1749626784286.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/272904i7FE225762ACD8108/image-size/large?v=v2&px=999" role="button" title="thijngr_15-1749626784286.png" alt="thijngr_15-1749626784286.png" /></span></P><P><STRONG>Define “Cloud to On‑Premise” Paths:</STRONG><SPAN> Configuring resource path mappings is what actually grants your cloud applications access to specific services in your internal network. Without this step, even though the Cloud Connector is installed and connected to your subaccount, no data can flow. These mappings define exactly which internal systems and paths the Cloud Connector is allowed to expose to the cloud, acting as a secure filter to prevent unauthorized access.</SPAN></P><P><SPAN>When a request comes from SAP BTP, such as a call to an OData service, it passes through the Cloud Connector. Here’s where resource path mappings come in: they translate the virtual host and path requested by the cloud app into the actual internal system address and path, ensuring that the request reaches the right backend component (e.g., SAP Gateway, ABAP system, or ERP backend).</SPAN></P><P><STRONG><SPAN> I used the command </SPAN><SPAN>/IWFND/GW_CLIENT or/IWFND/MAINT_SERVICE</SPAN><SPAN> to inspect the request url. For example </SPAN><A href="https://prod-connector.company.com:44321/sap/opu/odata/sap/ZC_142JJ_MATERIALSPERUSER_CDS/?$format=xml" target="_blank" rel="noopener nofollow noreferrer"><SPAN>https://prod-connector.company.com</SPAN><SPAN>:</SPAN><SPAN>44321</SPAN><SPAN>/sap/opu/odata/</SPAN><SPAN>sap/ZC_142JJ_MATERIALSPERUSER_CDS/?$format=xm...</SPAN></A><SPAN>. Use the red text as the path. Additionally, set the Access Policy to “Path and all Sub-Paths” to ensure the system allows access to the specified path as well as any nested resources and query options beneath it.</SPAN></STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thijngr_16-1749626784414.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/272906iB6B30713790C963C/image-size/large?v=v2&px=999" role="button" title="thijngr_16-1749626784414.png" alt="thijngr_16-1749626784414.png" /></span></P><H2 id="toc-hId--167150264" id="toc-hId--1457658577"><SPAN>5. Create Destination:</SPAN></H2><P><SPAN>Go to the connectivity tab in SAP BTP and check if your cloud connector has an exposed back end system. And that the resources are available.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thijngr_17-1749626784355.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/272905iD8E2B98A805E1D86/image-size/large?v=v2&px=999" role="button" title="thijngr_17-1749626784355.png" alt="thijngr_17-1749626784355.png" /></span></P><P><SPAN>The next step is to create a new Destination. For this go to SAP BTP Connectivity and then Destinations. And then press the button to create a new Destination. Use your virtual host as url like this example below. Set proxy type to OnPremise and use basic authentication and use your own SAP username and password. Also don't forget to use the Additional Properties mentioned in the example below and set your SAP-Client to your own client. </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thijngr_18-1749626784368.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/272907iA7EB3F8666A2A816/image-size/large?v=v2&px=999" role="button" title="thijngr_18-1749626784368.png" alt="thijngr_18-1749626784368.png" /></span></P><H2 id="toc-hId--560177274" id="toc-hId--1654172082"><SPAN>6. Test your Connection </SPAN></H2><P><SPAN>When you go to the SAP application studio select the Data source Connect to a System. You can select your own system (Destination that we just created). Here are all services that are opened with the URL resource path in the SAP CLOUD connector.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thijngr_19-1749626784356.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/272908i007DB818293E801F/image-size/large?v=v2&px=999" role="button" title="thijngr_19-1749626784356.png" alt="thijngr_19-1749626784356.png" /></span></P><H2 id="toc-hId--1767588118" id="toc-hId--1682501896"><SPAN>Final Thoughts</SPAN></H2><P><SPAN>Installing the Cloud Connector is a straightforward process, but the many available options can make it challenging for beginners to set up a connection. I wrote this blog during my SAP traineeship, so I'm not an expert in certificates or network configurations. If you spot any mistakes or have suggestions for improvement, I'd really appreciate your feedback!</SPAN></P>2025-06-12T08:24:48.267000+02:00https://community.sap.com/t5/human-capital-management-blog-posts-by-sap/employee-central-reporting-of-pending-workflow-data/ba-p/14120404Employee Central: Reporting of Pending workflow data2025-06-13T10:26:42.662000+02:00sireeshpatilhttps://community.sap.com/t5/user/viewprofilepage/user-id/20017<P><U><STRONG>Introduction:</STRONG></U></P><P>Few of our customers have a requirement to report on Employee Central - pending workflow data. That is, the workflow is in pending approval status and report needs to generate data changes (current and previous values) which are in the workflow. <SPAN>This information is crucial for decision makers like Managers, HR business partners and Compliance teams. The users need to know the information in the pending workflows to make better business decisions. </SPAN></P><P>The HR department and compliance teams have several use-cases for pending data. Few examples are:</P><P>Use-Case 1: The HR compliance teams require a report on all pending location change requests (Current location and new location)</P><P>Use-Case 2: The HR mobility teams require a report on list of all Global Assignment transfers pending approval (short-term assignment and long-term)</P><P>Use-Case 3: The HR compensation teams require a report to track all employees changing their payment cycle (hourly and monthly)</P><P><SPAN>When high volume of workflow changes are pending in the system for approval, a report would be easier to read than opening each workflow request in the UI and viewing the data changes. A report would also help workflow approvers to make better decisions on the pending workflow itself, either to edit the workflow with or without route change, Approve or Decline or initiate follow on processes in the 3rd party system.</SPAN></P><P><U><STRONG>Challenge:</STRONG></U></P><P data-unlink="true">The KBA <A href="https://me.sap.com/notes/2274688" target="_self" rel="noopener noreferrer">2274688</A> lists all the currently available standard reports for workflow. However, reporting on pending workflow data of HRIS Entities (like Job Info, Comp info. etc...) is still a limitation (KBA <A href="https://me.sap.com/notes/2682975" target="_blank" rel="noopener noreferrer">2682975</A>)</P><P><U><STRONG>Solution Approach:</STRONG></U></P><P>The solution is to use API <EM>getWorkflowPendingData. </EM>This API can be used to <SPAN>query the changed data in a </SPAN>workflow<SPAN> that is not yet approved or rejected, as well as fully completed. This API supports entities that are in the label: value pair format (oldValue vs newValue). </SPAN><SPAN>The following list of entities are supported:</SPAN></P><UL class=""><LI>EmpCompensation</LI><LI>EmpEmployment</LI><LI>EmpGlobalAssignment</LI><LI>EmpJob</LI><LI>EmpPensionPayout</LI><LI>FOPayComponentGroup</LI><LI>PerAddress</LI><LI>PerGlobalInfo</LI><LI>PerPerson</LI><LI>PerPersonal</LI><LI>PerPersonRelationship</LI></UL><P>The <EM>getWorkflowPendingData </EM>can be used in combination with other workflow related API's/function imports to extract all the required data and build a custom solution. For more detailed information on all the available workflow API's, kindly refer to Successfactors API help documentation. </P><P>Using workflow API's customers can build innovative solutions to meet their business needs. </P><P><STRONG>Example</STRONG>: Managers raise location change requests in Successfactors which are getting routed to the compliance team for action. The team reviews these requests and takes the necessary actions as per the regulatory guidelines/company policies. Based on the report, the approver will either approve/decline the workflow, forward the workflow to onboarding partner in the new location or <SPAN>initiate follow-on processes in the 3rd party system. Let's say there are 300 location change requests pending for approval. In the absence of a report, all the compliance team members have to open individual works and gather the data. This will slow down the process and impact employee experience. </SPAN></P><P><U>Step 1</U>. Get all Pending workflow request ID's(wfRequestId) of users on jobinfo. Use ToDo api to query all the pending workflows. Also, use WfRequest API, EmpWfRequest navigation properties to get all the relevant records. You can limit the selection by identifying specific event reasons and field changes that contribute to a location change. Sample query:</P><P><SPAN><A target="_blank" rel="noopener">https://<api-server>/odata/v2/TodoEntryV2?$format=json&$filter=categoryIdeq'14'&statuseq'2'</A></SPAN></P><P><SPAN><A target="_blank" rel="noopener">https://<api-server>/odata/v2/WfRequest?$format=JSON&$filter=statuseq'PENDING'</A></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sireesh_2-1749490340619.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/271920iCEEAF78AFBC49C35/image-size/medium?v=v2&px=400" role="button" title="sireesh_2-1749490340619.png" alt="sireesh_2-1749490340619.png" /></span></P><P><U>Step 2</U>: For each wfRequestId, call the getWorkflowPendingData API and it will capture both oldValue (current) and newValue (proposed).<BR /><A href="https://api41.sapsf.com/odata/v2/getWorkflowPendingData?wfRequestId=1115152L" target="_blank" rel="noopener nofollow noreferrer">https://<SPAN><api-server></SPAN>/odata/v2/getWorkflowPendingData?wfRequestId=1115152L</A></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sireesh_4-1749490369853.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/271922i1796DF60D867E0E6/image-size/medium?v=v2&px=400" role="button" title="sireesh_4-1749490369853.png" alt="sireesh_4-1749490369853.png" /></span></P><P><U>Step 3</U>: Retrieve all the records and deliver the output to a SFTP folder or SAP Datasphere to enable creation of reports.</P><P>I hope you will find this blog useful. <SPAN>In case of feedback or question, please feel free to use comment section.</SPAN></P><P> </P>2025-06-13T10:26:42.662000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/special-character-in-xml-processed-by-cpi/ba-p/14119544Special character in XML processed by CPI2025-06-13T16:08:38.734000+02:00stephen_xuehttps://community.sap.com/t5/user/viewprofilepage/user-id/214851<P>In most of the CPI steps, it will convert escaped form into original form automatically. Let's analyse them one by one.</P><P>This is the source message used. There is an escaped & in the xml making it a valid xml to be processed.</P><pre class="lia-code-sample language-markup"><code><Message>
<content>Test special character: &amp;</content>
</Message></code></pre><P>These below methods will be used to check how the escaped character will be processed by them. </P><H3 id="toc-hId-1860634590">1. Xpath in Content Modifier</H3><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="stephen_xue_1-1749089381459.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/269804i1EFC22254817615B/image-size/large?v=v2&px=999" role="button" title="stephen_xue_1-1749089381459.png" alt="stephen_xue_1-1749089381459.png" /></span></P><P>This is the value of the property after the step.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="stephen_xue_3-1749089480092.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/269806iA0A4056CD82E2409/image-size/medium?v=v2&px=400" role="button" title="stephen_xue_3-1749089480092.png" alt="stephen_xue_3-1749089480092.png" /></span></P><P>conclusion: value has been changed.</P><H3 id="toc-hId-1664121085">2. setProperty in Graphic Mapping</H3><P>This is the UDF</P><pre class="lia-code-sample language-java"><code>import com.sap.it.api.mapping.*;
def String customFunc1(String P1,MappingContext context) {
String value1 = context.setHeader("Myheader",P1);
return P1;
}</code></pre><P>This is the value of head after process</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="stephen_xue_4-1749090175462.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/269807i64A0A770E1BE68B4/image-size/medium?v=v2&px=400" role="button" title="stephen_xue_4-1749090175462.png" alt="stephen_xue_4-1749090175462.png" /></span></P><P>conclusion: value has been changed.</P><H3 id="toc-hId-1467607580">3. setProperty in XSLT Mapping</H3><P>This is the xsl used for test</P><pre class="lia-code-sample language-markup"><code><?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:cpi="http://sap.com/it/">
<xsl:output method="xml" omit-xml-declaration="yes" />
<xsl:param name="exchange"/>
<xsl:template match="/">
<xsl:apply-templates select='Message'/>
</xsl:template>
<xsl:template match="Message">
<xsl:value-of select="./text()"/>
<xsl:value-of select="cpi:setProperty($exchange, 'context', content/text())"/>
</xsl:template>
</xsl:stylesheet></code></pre><P>This is the result after the step</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="stephen_xue_5-1749090443193.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/269808i9AC2ABEA36E93562/image-size/medium?v=v2&px=400" role="button" title="stephen_xue_5-1749090443193.png" alt="stephen_xue_5-1749090443193.png" /></span></P><P>the value has been changed.</P><H3 id="toc-hId-1271094075">4. setProperty in Groovy Script</H3><P>This is the groovy script used.</P><pre class="lia-code-sample language-java"><code>import com.sap.gateway.ip.core.customdev.util.Message;
import groovy.xml.MarkupBuilder
def Message processData(Message message) {
//Body
def input = message.getBody(Reader).getText();
def source = new XmlSlurper(false,false).parseText(input);
message.setProperty("TestProperty", source.content.text());
//def target = Mapping(source);
//message.setBody(target);
return message;
}</code></pre><P>This is the result</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="stephen_xue_6-1749090699233.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/269809i74E3A7E2CD82DF8B/image-size/medium?v=v2&px=400" role="button" title="stephen_xue_6-1749090699233.png" alt="stephen_xue_6-1749090699233.png" /></span></P><P>The value has been changed. </P><P>Unchanged Situation</P><P>The only way i found that doesn't not change the escape value back to its orginal form is message body level mapping into another XML.</P><P>Since the only outcome of graphic mapping is XML, the graphic mapping can always keep the escaped value without being changed back.</P><P>For XSLT mapping, if the outcome is not XML, say text, the escaped value shall be changed back to its original form automatically. However the only way to retrieve the escaped value from an element and set it as a message body without any tags is via XSLT mapping. here is an example code:</P><pre class="lia-code-sample language-markup"><code><?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:cpi="http://sap.com/it/">
<xsl:output method="xml" omit-xml-declaration="yes" />
<xsl:param name="exchange"/>
<xsl:template match="/">
<xsl:apply-templates select='Message'/>
</xsl:template>
<xsl:template match="Message">
<xsl:value-of select="content/text()"/>
</xsl:template>
</xsl:stylesheet></code></pre><P> This is the value in the message body:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="stephen_xue_7-1749091183256.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/269812iCA00CE0B6679037F/image-size/medium?v=v2&px=400" role="button" title="stephen_xue_7-1749091183256.png" alt="stephen_xue_7-1749091183256.png" /></span></P><P>For groovy script, if the message bod is a xml, the escaped character will be remained. if it is a text , json or some format else, the escaped character will be changed into it original format. </P><P> </P><H1 id="toc-hId-816415132">conclusion</H1><P>Most of value retrieving methods in CPI changes the escaped characters from xml automatically. This mechanism should be awared by the developer. Otherwise, if the value has been populated back to form a new XML, you might generate an invalid XML message to the target system. two cents. </P><P> </P>2025-06-13T16:08:38.734000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/transforming-xml-in-sap-cpi-using-groovy-a-real-world-example/ba-p/14124600Transforming XML in SAP CPI Using Groovy: A Real-World Example2025-06-13T16:09:13.106000+02:00misri_huzefahttps://community.sap.com/t5/user/viewprofilepage/user-id/876473<H3 id="toc-hId-1861409989">The Scenario</H3><DIV class="">The input XML was structured like this:</DIV><DIV class=""> </DIV><DIV class=""> </DIV><pre class="lia-code-sample language-markup"><code><Demo>
<columns>
<string>idOnController</string>
<string>name</string>
<string>id</string>
<string>MacAddress</string>
<string>lat</string>
<string>lng</string>
<string>address</string>
<string>location.streetdescription</string>
<string>location.city</string>
<string>location.zipcode</string>
<string>GroupName</string>
</columns>
<values>
<object-array>
<string>178531359</string>
<string>178531359</string>
<int>25342</int>
<string>43434343432ff</string>
<double>35.431632</double>
<double>-97.494129</double>
<string>TEST Line 21</string>
<string>OKLAHOMA CITY</string>
<string>OKLAHOMA CITY</string>
<string>73129-5130</string>
<string>Sunrise</string>
</object-array>
</values>
</Demo></code></pre><H3 id="toc-hId-1664896484">The Goal</H3><DIV class="">Transform this into a simplified XML structure like:</DIV><DIV class=""> </DIV><DIV class=""> </DIV><pre class="lia-code-sample language-markup"><code><Attributes>
<componentId>178531359</componentId>
<deviceName>178531359</deviceName>
<SerialNumber>25342</SerialNumber>
<macAddress>345435435435ff</macAddress>
<latitude>35.431632</latitude>
<longitude>-97.494129</longitude>
<address1>Test Line 21</address1>
<address2>OKLAHOMA CITY</address2>
<city>OKLAHOMA CITY</city>
<zipcode>73129-5130</zipcode>
<GroupName>Sunrise</GroupName>
</Attributes></code></pre><P> </P><H3 id="toc-hId-1468382979">The Groovy Script</H3><DIV class="">Here’s the Groovy script that made it happen in CPI:</DIV><DIV class=""> </DIV><DIV class=""> </DIV><pre class="lia-code-sample language-abap"><code>import com.sap.gateway.ip.core.customdev.util.Message
import groovy.util.XmlSlurper
import groovy.xml.MarkupBuilder
def Message processData(Message message) {
def body = message.getBody(String) as String
def inputXml = new XmlSlurper().parseText(body)
def values = inputXml.values.'object-array'.children().collect { it.text() }
def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
xml.Attributes {
componentId(values[0])
deviceName(values[1])
SerialNumber(values[2])
macAddress(values[3])
latitude(values[4])
longitude(values[5])
address1(values[6])
address2(values[7])
city(values[8])
zipcode(values[9])
GroupName(values[10])
}
message.setBody(writer.toString())
return message
}</code></pre><P> </P><H3 id="toc-hId-1271869474">Lessons Learned</H3><UL><LI><STRONG>Indexing matters</STRONG>: Initially, I mistakenly passed the entire list to each tag, resulting in repeated values. Correcting the index for each field fixed the issue.</LI><LI><STRONG>Use<SPAN> </SPAN>groovy.util.XmlSlurper<SPAN> </SPAN>in CPI</STRONG>: Unlike standard Groovy environments, CPI requires<SPAN> </SPAN>groovy.util.XmlSlurper<SPAN> </SPAN>instead of<SPAN> </SPAN>groovy.xml.XmlSlurper.</LI><LI><STRONG>Test incrementally</STRONG>: Always test your script with sample payloads in the CPI runtime to catch formatting or parsing issues early.</LI></UL><HR /><DIV class="">If you're working with XML transformations in CPI and need to extract structured data from nested arrays, this approach might save you hours of debugging.</DIV><DIV class="">Have you faced similar challenges in CPI? Share your tips or questions in the comments!</DIV><HR /><DIV class="">Would you like me to format this into a downloadable<SPAN> </SPAN>.md<SPAN> </SPAN>or<SPAN> </SPAN>.txt<SPAN> </SPAN>file for easy posting?</DIV>2025-06-13T16:09:13.106000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/quot-pd-where-used-quot-button-a-chrome-extension-for-sap-integration-suite/ba-p/14125200"PD Where Used" Button – A Chrome Extension for SAP Integration Suite2025-06-13T16:15:45.230000+02:00emreanilhttps://community.sap.com/t5/user/viewprofilepage/user-id/1700700<P>For consultants managing integrations on <STRONG>SAP Integration Suite</STRONG>, small yet effective tools can greatly simplify daily tasks. Based on this need, I developed a Chrome extension called: <STRONG>"PD Where Used" Button</STRONG>.<BR /><BR /></P><H3 id="toc-hId-1861435936">What does "PD Where Used" button do?</H3><P>While working on a complex iFlow that contained <STRONG>many ProcessDirect calls</STRONG>, I found myself constantly switching tabs, manually searching for where each target address was used. The lack of a quick overview made this process <STRONG>annoying and time-consuming</STRONG>, especially in projects with dozens (or hundreds) of iFlows.</P><P>The <STRONG>"PD Where Used"</STRONG> button analyzes all <STRONG>ProcessDirect</STRONG> addresses used in the currently open iFlow and lists which other iFlows are referencing them. The results are displayed in a new popup window.<BR /><BR />This extension has been developed and tested on the SAP Integration Suite running in a Cloud Foundry environment.<BR /><BR /><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Screenshot 2025-05-28 095301.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/266800i58007CEC548A673D/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-05-28 095301.png" alt="Screenshot 2025-05-28 095301.png" /></span></P><P> <span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Screenshot 2025-05-2..._imresizer.jpg" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/266801i5A0B42D5D4DE88A5/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-05-2..._imresizer.jpg" alt="Screenshot 2025-05-2..._imresizer.jpg" /></span></P><H2 id="toc-hId-1535839712"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Recording 2025-05-28 100946.gif" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/266804iB9C7AE9FCADFB5B0/image-size/large?v=v2&px=999" role="button" title="Recording 2025-05-28 100946.gif" alt="Recording 2025-05-28 100946.gif" /></span></H2><P> </P><H2 id="toc-hId-761901374" id="toc-hId-1339326207">Installation</H2><P><BR /><SPAN>Install directly from </SPAN><A href="https://chromewebstore.google.com/detail/pdwhereused/jhmmppnlbopemjlalhnbbffflkonhcol" target="_blank" rel="nofollow noopener noreferrer">Chrome Web Store.</A><SPAN> After installation, button must appear in your flows.<BR /><BR /></SPAN></P><H3 id="toc-hId-1271895421">Acknowledgement</H3><P>I want to sincerely thank <A href="https://community.sap.com/t5/user/viewprofilepage/user-id/120520" target="_self"><STRONG>Dominic Beckbauer</STRONG></A>, the creator of the <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/cpi-cpi-helper-chrome-extension-swiss-army-knife-for-integrators/ba-p/13514445" target="_self"><STRONG>CPI Helper</STRONG></A> extension, for his support and guidance throughout the development of this tool. His feedback was incredibly valuable.</P><P> </P><P><SPAN>Emre Anil Kucuk</SPAN></P>2025-06-13T16:15:45.230000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/sap-btp-api-proxy-to-work-with-basic-authentication-or-oauth-2-0/ba-p/14126742SAP BTP API Proxy to Work with Basic Authentication or OAuth 2.02025-06-13T16:16:55.746000+02:00RameshVarangantihttps://community.sap.com/t5/user/viewprofilepage/user-id/51927<H6 id="toc-hId--2046248481">Introduction</H6><P><FONT size="2">In modern SAP integration landscapes, organizations often face diverse authentication requirements. Some external consumers may depend on Basic Authentication due to legacy system constraints or simplicity, while others are required to use OAuth 2.0 to comply with enterprise security policies.</FONT><BR /><FONT size="2">In this blog post, we’ll explore how to configure a single SAP BTP API Management proxy that supports both Basic Authentication and OAuth 2.0, ensuring flexibility for a range of API consumers without compromising on security standards</FONT></P><H6 id="toc-hId-2052205310">Business Scenario</H6><P><FONT size="2">In complex enterprise environments, particularly federated organizations:</FONT></P><UL><LI><FONT size="2">Legacy systems or subsidiaries may still utilize Basic Authentication.</FONT></LI><LI><FONT size="2">Corporate IT may mandate OAuth 2.0 for cloud and mobile integrations.</FONT></LI><LI> </LI><LI><FONT size="2">Maintaining separate API proxies for each authentication method is undesirable due to increased complexity and maintenance.</FONT></LI></UL><P><FONT size="2">Objective: Implement a unified API proxy in SAP BTP that dynamically supports both authentication methods based on the incoming request.</FONT></P><H6 id="toc-hId-1855691805">Solution Architecture</H6><P><FONT size="2">Here's how the solution works:</FONT></P><P><FONT size="2">API Consumer --> SAP BTP API Proxy (auth policy check) --> SAP Backend (e.g., S/4HANA)</FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="RameshVaranganti_0-1749768201572.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/273794i1E57205C60534F78/image-size/medium?v=v2&px=400" role="button" title="RameshVaranganti_0-1749768201572.png" alt="RameshVaranganti_0-1749768201572.png" /></span></P><P><FONT size="2">Various consumers, such as Legacy, Cloud, or Mobile applications, may utilize the same proxy endpoint with either Basic or OAuth2.0 authentication. The proxy inspects the request for:</FONT></P><UL><LI><FONT size="2">Authorization: If "Basic", it validates via Basic Authentication.</FONT></LI><LI><FONT size="2">Authorization: If "Bearer", it validates via the OAuth 2.0 token.</FONT></LI><LI><FONT size="2">Upon successful authentication, the request is routed to the backend.</FONT></LI><LI><FONT size="2">If authentication fails, a response is sent back.</FONT></LI></UL><H6 id="toc-hId-1659178300">Implementation Steps</H6><UL class="lia-list-style-type-square"><LI><FONT size="2">Develop an API Proxy in SAP BTP API Management, ensuring to establish the backend SAP connection for oData services.</FONT><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="RameshVaranganti_0-1749769689171.png" style="width: 520px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/273804iACA8E9F67BFAAF23/image-dimensions/520x372?v=v2" width="520" height="372" role="button" title="RameshVaranganti_0-1749769689171.png" alt="RameshVaranganti_0-1749769689171.png" /></span><P> </P></LI></UL><P class="lia-align-justify lia-indent-padding-left-30px" style="text-align : justify; padding-left : 30px;"><FONT size="2">Required Parameters will be entered.</FONT></P><UL class="lia-align-justify" style="text-align : justify;"><LI><FONT size="2">API Basepath:</FONT></LI><LI><FONT size="2">Target Endpoint:</FONT><UL><LI><FONT size="2">API Provider: SAP (or any provider)</FONT></LI><LI><FONT size="2"><SPAN>URL: Odata path (or any URL)</SPAN></FONT></LI></UL></LI></UL><UL class="lia-list-style-type-square"><LI><FONT size="2">Add Pre-Flow Policies with condition routing.</FONT></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="RameshVaranganti_1-1749769712255.png" style="width: 612px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/273805i03A9C893F6BF37BB/image-dimensions/612x100?v=v2" width="612" height="100" role="button" title="RameshVaranganti_1-1749769712255.png" alt="RameshVaranganti_1-1749769712255.png" /></span></P><P class="lia-indent-padding-left-60px" style="padding-left : 60px;"><FONT size="2">Please refer to the following for more detailed information on each step.</FONT></P><UL class="lia-list-style-type-disc"><LI><FONT size="2"><STRONG>RaiseFault</STRONG>: This step checks if authentication is used and raises a fault if neither Basic nor OAuth is applied.</FONT><UL><LI><FONT size="2">Condtion String <STRONG>request.header.authorization = null</STRONG></FONT></LI><LI><FONT size="2">Policy String:</FONT></LI></UL></LI></UL><P class="lia-indent-padding-left-90px" style="padding-left : 90px;"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="RameshVaranganti_2-1749769763241.png" style="width: 625px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/273806i24A2D3D4C4379819/image-dimensions/625x202?v=v2" width="625" height="202" role="button" title="RameshVaranganti_2-1749769763241.png" alt="RameshVaranganti_2-1749769763241.png" /></span></P><UL class="lia-list-style-type-disc"><LI><FONT size="2"><STRONG>oAuthVerify</STRONG>: This function verifies oAuth credentials when a bearer token is provided.</FONT><UL><LI><FONT size="2">Condition String <STRONG> request.header.Authorization ~ "Bearer*"</STRONG></FONT></LI><LI><FONT size="2">Policy String:</FONT></LI></UL></LI></UL><P class="lia-indent-padding-left-60px" style="padding-left : 60px;"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="RameshVaranganti_3-1749769825137.png" style="width: 579px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/273807iDA53948108BEC24D/image-dimensions/579x272?v=v2" width="579" height="272" role="button" title="RameshVaranganti_3-1749769825137.png" alt="RameshVaranganti_3-1749769825137.png" /></span></P><UL class="lia-list-style-type-disc"><LI><FONT size="2"><STRONG>decodebasicAuth</STRONG>: Decodes Basic Authentication.</FONT><UL class="lia-list-style-type-disc"><LI><FONT size="2">Condition String : <STRONG>request.header.Authorization ~ "Basic*".</STRONG></FONT></LI><LI><FONT size="2">Policy String :</FONT></LI></UL></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="RameshVaranganti_0-1749770235448.png" style="width: 558px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/273808iD45A416D7F474282/image-dimensions/558x209?v=v2" width="558" height="209" role="button" title="RameshVaranganti_0-1749770235448.png" alt="RameshVaranganti_0-1749770235448.png" /></span></P><P> </P><UL class="lia-list-style-type-disc"><LI><FONT size="2"><STRONG>verifyKey: </STRONG>This will check if the key is associated with this API Product APP key.</FONT><UL class="lia-list-style-type-disc"><LI><FONT size="2">Consdition String : <STRONG>request.header.Authorization !~ "Bearer*"</STRONG></FONT></LI><LI><FONT size="2">Policy String :</FONT></LI></UL></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="RameshVaranganti_1-1749770287457.png" style="width: 549px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/273809iB0841275466E7A91/image-dimensions/549x183?v=v2" width="549" height="183" role="button" title="RameshVaranganti_1-1749770287457.png" alt="RameshVaranganti_1-1749770287457.png" /></span></P><P> </P><UL class="lia-list-style-type-disc"><LI><FONT size="2"><STRONG>invalidCredentials</STRONG>: This fault exception occurs when credential validation fails.</FONT><UL class="lia-list-style-type-disc"><LI><FONT size="2">Condition String : <STRONG>(verifyapikey.Verify-API-Key.failed = true) or (varanganti.clientSecret != verifyapikey.verifyKey.client_secret)</STRONG></FONT></LI><LI><FONT size="2">Policy String:</FONT></LI></UL></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="RameshVaranganti_2-1749770369086.png" style="width: 660px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/273810i40E52A0FF5F46215/image-dimensions/660x235?v=v2" width="660" height="235" role="button" title="RameshVaranganti_2-1749770369086.png" alt="RameshVaranganti_2-1749770369086.png" /></span></P><UL class="lia-list-style-type-disc"><LI><FONT size="2"><STRONG>RemoveHeader (Optional): </STRONG>This function removes the API headers post-authorization, as they are no longer necessary for targeting the application once authorization is successful. The necessity of this step depends on subsequent procedures.</FONT></LI><LI><FONT size="2"><STRONG>Readkey (Optional): </STRONG>Since I am accessing an OData service on the backend, credentials for Key Vault Manager (KVM) are being read.</FONT></LI><LI><FONT size="2"><STRONG>Basic (Optional): </STRONG>Include a Basic Header for the target application if necessary. This depends on how the target key is being accepted.</FONT></LI><LI><FONT size="2"><STRONG>scCSRF (Optional): </STRONG>This parameter is used to set the CSRF token, as is required by my target application.</FONT></LI><LI><FONT size="2"><STRONG>setSCParsms (Optional) : </STRONG> Follow-up step for SCRF to call backend application.</FONT></LI></UL><UL class="lia-list-style-type-square"><LI>Configure Credential Aliases</LI></UL><P class="lia-indent-padding-left-60px" style="padding-left : 60px;"><FONT size="2">In the API Developer Hub, create an application to obtain credentials. These will be utilized for basic authentication or OAuth Authentication.</FONT></P><UL class="lia-list-style-type-square"><LI>Testing the Proxy<UL class="lia-list-style-type-disc"><LI><FONT size="2">Cas1: No Authentication</FONT><UL class="lia-list-style-type-disc"><LI><FONT size="2">Do Not pass any credentials</FONT></LI></UL></LI></UL></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="RameshVaranganti_1-1749771298394.png" style="width: 687px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/273816i406F091EDA7783C1/image-dimensions/687x291?v=v2" width="687" height="291" role="button" title="RameshVaranganti_1-1749771298394.png" alt="RameshVaranganti_1-1749771298394.png" /></span></P><P> </P><UL class="lia-list-style-type-disc"><LI><FONT size="2">Cas2: Basic Authentication</FONT><UL class="lia-list-style-type-disc"><LI><FONT size="2">The call will succeed and receive a response.</FONT></LI></UL></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="RameshVaranganti_0-1749771238281.png" style="width: 637px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/273815i8F8825910EAA8B33/image-dimensions/637x401?v=v2" width="637" height="401" role="button" title="RameshVaranganti_0-1749771238281.png" alt="RameshVaranganti_0-1749771238281.png" /></span></P><P> </P><UL><LI><FONT size="2">Case 3: Utilizing OAuth Authentication</FONT><UL><LI><FONT size="2">Pre-Requisite: Set up a proxy with a placeholder target for obtaining the OAuth authentication token.</FONT></LI><LI><FONT size="2">Select OAuth2.0 as the authentication method and execute accordingly.</FONT><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="RameshVaranganti_2-1749771482472.png" style="width: 669px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/273817iC73ADD3D6E53835E/image-dimensions/669x406?v=v2" width="669" height="406" role="button" title="RameshVaranganti_2-1749771482472.png" alt="RameshVaranganti_2-1749771482472.png" /></span></LI></UL></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RameshVaranganti_3-1749771620699.png" style="width: 667px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/273818iE7121593B6DC5780/image-dimensions/667x340?v=v2" width="667" height="340" role="button" title="RameshVaranganti_3-1749771620699.png" alt="RameshVaranganti_3-1749771620699.png" /></span></P><P> </P><H6 id="toc-hId-1462664795">Conclusion</H6><P><FONT size="2">Configuring a single SAP BTP API proxy to support both Basic Authentication and OAuth 2.0 provides a scalable and secure solution for diverse integration requirements. <STRONG>This approach minimizes redundancy, simplifies management, and supports both modern and legacy applications accessing the same backend services</STRONG>.</FONT><BR /><BR /><FONT size="2">By leveraging policy-based routing and dynamic authentication handling, enterprises can ensure compliance, enhance flexibility, and optimize their API architecture.</FONT></P><P> </P><P> </P>2025-06-13T16:16:55.746000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/blog-series-on-my-cpi-camel-learning-journey-interlude2-apim-debugging/ba-p/14121949Blog series on my CPI + Camel learning journey - Interlude2 APIM debugging2025-06-15T22:59:37.197000+02:00alex_myakinkiihttps://community.sap.com/t5/user/viewprofilepage/user-id/194559<H3 id="toc-hId-1861323632">Motivation</H3><P>Well, as with MPL you have to start doing some real life debugging to figure out the tools you are provided with "have some space for improvement", to put it mildly.</P><P>And this is what happened to me when I had a weird case for one of my api proxies.</P><H3 id="toc-hId-1664810127">A little bit about Apigee and debug session structure</H3><P>Not a secret that under the hood APIM has apigee platform (that google bought)</P><P><SPAN>So, it turns out it was not SAP to blame for this "debug session" logic, but still the app they made is something special I have to say..</SPAN></P><P>What bothers us is this stuff <SPAN><A href="https://cloud.google.com/apigee/docs/api-platform/debug/trace" target="_blank" rel="noopener nofollow noreferrer">https://cloud.google.com/apigee/docs/api-platform/debug/trace</A> </SPAN></P><P><SPAN>And particularly the structure of session/transactions <A href="https://cloud.google.com/apigee/docs/api-platform/debug/trace#download-structure" target="_blank" rel="noopener nofollow noreferrer">https://cloud.google.com/apigee/docs/api-platform/debug/trace#download-structure</A></SPAN></P><P><SPAN>Without going into details (after all this blog does not aim to provide the full schema details) let's see what could be of our most interest here.</SPAN></P><P><SPAN>First, the whole session is an array of entries (we will call it <STRONG>transactions</STRONG> which are<U> api calls</U>)</SPAN></P><P><SPAN>Below we would see "<STRONG>point</STRONG>" array - kinda <U>Steps</U> of flow execution each having an array of "<STRONG>results</STRONG>" in turn.</SPAN></P><pre class="lia-code-sample language-json"><code>[
{
"completed": true,
"point": [
{
"id": "Paused|Resumed|StateChange|FlowInfo|Condition|Execution|Error",
"results": [
{
"ActionResult": "DebugInfo|RequestMessage|ResponseMessage|ErrorMessage|VariableAccess"
}
]
}
]
}
]</code></pre><P><SPAN>These results contain some more details (which we see in the standard app as lists/forms) of key-value pairs</SPAN></P><P><SPAN>What is different is just name of "aggregation" - path in json to those arrays (eg "properties/property" or "headers" or "accessList")</SPAN></P><pre class="lia-code-sample language-json"><code>{
"ActionResult": "DebugInfo",
"properties": {
"property": [ { "name": "<PROP_NAME>", "value": "<PROP_VALUE>" } ]
},
"timestamp": "04-06-25 13:28:52:904" // yes, not a proper iso8601 timestamp ;(
}
{
"ActionResult": "RequestMessage",
"content": "<REQUEST_BODY_IF_PRESENT>",
"headers": [ { "name": "<HEADER_NAME>", "value": "<HEADER_VALUE>" } ],
"uRI": "<URI>",
"verb": "<VERB>"
}
{
"ActionResult": "ResponseMessage",
"content": "<RESPONSE_BODY_TRIMMED>.....",
"headers": [ { "name": "<HEADER_NAME>", "value": "<HEADER_VALUE>" } ],
"reasonPhrase": "<STATUS_PHRASE>",
"statusCode": "<STATUS_CODE>"
}
{
"ActionResult": "ErrorMessage",
"content": "<APIM_ERR_BODY>",
"headers": [ { "name": "<HEADER_NAME>", "value": "<HEADER_VALUE>" } ],
"reasonPhrase": "<STATUS_PHRASE>",
"statusCode": "<STATUS_CODE>"
}
{
"ActionResult": "VariableAccess",
"accessList": [
{
"Get": { "name": "<VAR>", "value": "<VALUE_IF_GOT>" }
},
{
"Set": { "name": "<VAR>", "success": true, "value": "<VALUE>" }
}
]
}</code></pre><H3 id="toc-hId-1468296622">Api Proxy debug viewer app</H3><P><SPAN>But most important thing is that we DO HAVE Request and Response (and Error) Method, Url, Content and Status!!</SPAN></P><P>And so I decided to make a really simple frontend-only ui5 app based on Flexible Column Layout (which is hidden behind the intent <U>#apim-dbg</U> in capic launchpad)</P><P>For this I just had to figure out the structure of the session and then apply some transformations to display it nicely.</P><P>And while the original app tries to follow "visual approach" apigee had in their app (you could see it following the link above) - using lots of pictograms/icons while doing its best to hide essential information from us like target endpoint http code/status or request/response body - <U>I decided to display our stuff via lists and forms</U>, cuz as a developer I LOVE TEXT (which can even be searchable).</P><P>This image from apigee documentation illustrates it well <A href="https://docs.apigee.com/api-platform/fundamentals/what-are-flows" target="_blank" rel="noopener nofollow noreferrer">https://docs.apigee.com/api-platform/fundamentals/what-are-flows</A> (not 100% percent sure I am right regarding mapping of stages, but it somewhat makes sense to me)</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0-apigee-flows-stages.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/274243i7FF50C28C8616097/image-size/large?v=v2&px=999" role="button" title="0-apigee-flows-stages.png" alt="0-apigee-flows-stages.png" /></span></P><P>Basically, the app displays our debugging session in the following way (kinda 5 levels):</P><UL><LI>Master - <STRONG>1 Transactions</STRONG> (api calls) as Items <EM>// with objectstatus stuff</EM></LI><LI>Detail - <U>2 Stages</U> (list grouping) + <STRONG>3 points</STRONG> (steps) as Items /<EM>/ also with some color coding</EM></LI><LI>Detail-Detail - <U>4 ActionResults</U> (form container) + <STRONG>5 results</STRONG> params as form elements</LI></UL><P>Some other things to point out here (at Detail screen): </P><DIV><UL><LI><SPAN><STRONG><EM>StateChange</EM></STRONG> typically has <U>RequestMessage|ResponseMessage|ErrorMessage</U> ActionResult object appearing</SPAN></LI></UL><DIV><SPAN>It comes first in group and it is marked with <STRONG>blue</STRONG> highlight (also from this guy I calculated groups for detail list)</SPAN></DIV><UL><LI><SPAN><EM><STRONG>Error</STRONG></EM> has some error information that doesn't help much but is a place in flow where error occured - marked <STRONG>red</STRONG></SPAN></LI><LI><EM><STRONG>Execution</STRONG></EM> - is an interesting step, basically, this is where our policies run - it is marked <STRONG>amber</STRONG></LI></UL><DIV>Properties of DebugInfo action here contain "<U>type</U>" or "<SPAN><SPAN><U>stepDefinition-type</U>" which is policy type (not 100% sure) and "</SPAN></SPAN><DIV><SPAN><SPAN><U>stepDefinition-name</U>" or "</SPAN></SPAN><SPAN><U>stepDefinition-displayName</U>" which is actual policy name as we created it.</SPAN></DIV><DIV><SPAN>I use it as a name for step instead of just "Execution" (this is why you don't see it in UI)</SPAN></DIV><DIV> </DIV><DIV><SPAN>Here are the screenshots of a simple debugging session that hopefully will immediately make sense to you</SPAN></DIV><DIV><TABLE border="1" width="100%"><TBODY><TR><TD width="25%"><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="1-get-service-401-err.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/274244iCF6F1BC73A25E119/image-size/medium?v=v2&px=400" role="button" title="1-get-service-401-err.png" alt="1-get-service-401-err.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="2-get-service-401-res.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/274245i2B2F7A2BE05BD9FE/image-size/medium?v=v2&px=400" role="button" title="2-get-service-401-res.png" alt="2-get-service-401-res.png" /></span></P></TD><TD width="25%"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="3-get-service-200-analytics.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/274246i9484D4C23CAE2E85/image-size/medium?v=v2&px=400" role="button" title="3-get-service-200-analytics.png" alt="3-get-service-200-analytics.png" /></span></TD><TD width="25%"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="4-get-metadata-200-body.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/274247iBE452CBA1CCAB5D5/image-size/medium?v=v2&px=400" role="button" title="4-get-metadata-200-body.png" alt="4-get-metadata-200-body.png" /></span></TD><TD width="25%"><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="5-post-metadata-405-res.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/274249i1E3206198EF5F14A/image-size/medium?v=v2&px=400" role="button" title="5-post-metadata-405-res.png" alt="5-post-metadata-405-res.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="6-post-metadata-405-err.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/274250i15C5692C833A992D/image-size/medium?v=v2&px=400" role="button" title="6-post-metadata-405-err.png" alt="6-post-metadata-405-err.png" /></span></P></TD></TR></TBODY></TABLE></DIV></DIV><DIV> </DIV></DIV><H3 id="toc-hId-1271783117">Some JS magic</H3><P>Ok, this might even look good (or at least better than the original), but how to get the data?</P><P>Well, it turns out, SAP did a great job exposing some global methods (and even <U>oapiproxyData</U> object ) in their app (yes it seems to be a really, really old one), so we can just programmatically create us a session and then fetch data into clipboard.</P><P>And for that I used super old trick: javascript favourites snippets (even had to google they were called "<A href="https://en.wikipedia.org/wiki/Bookmarklet" target="_self" rel="nofollow noopener noreferrer">bookmarklets</A>")</P><P>So, to start session you might want to use something like this:</P><pre class="lia-code-sample language-javascript"><code>sap.apimgmt.commons.ajaxHandler({
data: JSON.stringify({"name": oapiproxyData.name, "version": oapiproxyData.version, "session_id":"pwn3d"}),
headers: {"Content-Type": "application/json", "Accept": 'application/json', "operation": "start"},
url: APIMGMT.TRACE_WORKSPACE_ROOT,
type: APIMGMT.HTTP_METHODS.POST,
success: console.log, error: console.log
})</code></pre><P> And to fetch data into your browser clipboard (and I was surprised I did not need a focusable element when using the bookmarkelt to write to it) you would do this:</P><pre class="lia-code-sample language-javascript"><code>sap.apimgmt.commons.ajaxHandler({
data: JSON.stringify({"name": oapiproxyData.name, "version": oapiproxyData.version, "session_id":"pwn3d"}),
headers: {"Content-Type": "application/json", "Accept": 'application/json', "operation": "get"},
url: APIMGMT.TRACE_WORKSPACE_ROOT,
type: APIMGMT.HTTP_METHODS.POST,
success: function(data){ navigator.clipboard.writeText(JSON.stringify(data))}, error: console.log
})</code></pre><P><EM> And I am not going to teach you how to add that stuff into bookmarks but wiki probably could.</EM></P><H3 id="toc-hId-1075269612">Demo</H3><P>In this demo we are going to reproduce the session from screenshots above.</P><P>For this purpose we use simplest api proxy possible - to anonymous Northwind service <A href="https://services.odata.org/V2/Northwind/Northwind.svc/" target="_blank" rel="noopener nofollow noreferrer">https://services.odata.org/V2/Northwind/Northwind.svc/</A> and protect it with apikey, so you can easily try it yourself in like 10 mins.</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%2FZm7ZUKugqBA%3Ffeature%3Doembed&display_name=YouTube&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DZm7ZUKugqBA&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FZm7ZUKugqBA%2Fhqdefault.jpg&type=text%2Fhtml&schema=youtube" width="200" height="113" scrolling="no" title="сapic apim dbg demo" frameborder="0" allow="autoplay; fullscreen; encrypted-media; picture-in-picture;" allowfullscreen="true"></iframe></div></P><P><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=Zm7ZUKugqBA" target="" rel="nofollow noopener noreferrer">00:00</A></SPAN><SPAN class=""> Intro and motivation</SPAN></P><P><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=Zm7ZUKugqBA&t=99s" target="" rel="nofollow noopener noreferrer">01:39</A></SPAN><SPAN class=""> Northwind api proxy and debug with standard app (2 positive and 2 negative responses)</SPAN></P><P><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=Zm7ZUKugqBA&t=225s" target="" rel="nofollow noopener noreferrer">03:45</A></SPAN><SPAN class=""> Try interpreting the results</SPAN></P><P><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=Zm7ZUKugqBA&t=298s" target="" rel="nofollow noopener noreferrer">04:58</A></SPAN><SPAN class=""> But actual session data json contains more data and that is what we cover in blog (kind of)</SPAN></P><P><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=Zm7ZUKugqBA&t=366s" target="" rel="nofollow noopener noreferrer">06:06</A></SPAN><SPAN class=""> A little bit about apigee stuff and json structure and corresponding app screens</SPAN></P><P><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=Zm7ZUKugqBA&t=514s" target="" rel="nofollow noopener noreferrer">08:34</A></SPAN><SPAN class=""> How to obtain session data json (other than by copying from network requests)</SPAN></P><P><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=Zm7ZUKugqBA&t=608s" target="" rel="nofollow noopener noreferrer">10:08</A></SPAN><SPAN class=""> Repeat same api test/debug routine with bookmarklets magic</SPAN></P><P><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=Zm7ZUKugqBA&t=696s" target="" rel="nofollow noopener noreferrer">11:36</A></SPAN><SPAN class=""> Fetch session json data to finally see the new app in action (and try to interpret data there)</SPAN></P><P><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=Zm7ZUKugqBA&t=915s" target="" rel="nofollow noopener noreferrer">15:15</A></SPAN><SPAN class=""> Confirm that <U>AnalyticsPublisher</U> policy/step indeed contains response <U>message.status.code</U>, <U>request.path</U> and <U>request.verb</U> as vars (but not body though)</SPAN></P><P><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=Zm7ZUKugqBA&t=970s" target="" rel="nofollow noopener noreferrer">16:10</A></SPAN><SPAN class=""> "<EM>And we do see that we do have body which is very nice</EM>" (in proper place)</SPAN></P><P><SPAN class=""><A class="" href="https://www.youtube.com/watch?v=Zm7ZUKugqBA&t=1027s" target="" rel="nofollow noopener noreferrer">17:07</A></SPAN><SPAN class=""> Final words about app screens and features and outro</SPAN></P><H3 id="toc-hId-878756107">P.S Disclaimer and feature requests/fixes</H3><P>This is the simplest and mot naive implementation of this app made out offrustration, so if for some reason you might want to test it there can (or must) be scenarios it does not support (haven't tried using scripts, conditional flows etc).</P><P>Please feel free to comment here regarding errors/features you might need, but <STRONG>DON'T paste session info here</STRONG> as it contains sensitive information about your apim instance.</P>2025-06-15T22:59:37.197000+02:00