https://raw.githubusercontent.com/ajmaradiaga/feeds/main/scmt/topics/Cloud-Integration-qa.xmlSAP Community - Cloud Integration2025-05-14T23:00:10.927895+00:00python-feedgenCloud Integration Q&A in SAP Communityhttps://community.sap.com/t5/technology-q-a/groovy-script-generate-dynamic-filename/qaq-p/14080635Groovy Script : Generate Dynamic Filename2025-04-19T15:17:27.602000+02:00Corrupt-07https://community.sap.com/t5/user/viewprofilepage/user-id/1982075<P>import com.sap.gateway.ip.core.customdev.util.Message</P><P>import java.text.SimpleDateFormat</P><P> </P><P>def Message processData(Message message) {</P><P> def date = new Date()</P><P> def sdf = new SimpleDateFormat("yyyyMMdd_HHmmss")</P><P> def timestamp = sdf.format(date)</P><P> def fileName = "Invoice_" + timestamp + ".pdf"</P><P> </P><P> message.setProperty("dynamicFilename", fileName)</P><P> return message</P><P>}</P>2025-04-19T15:17:27.602000+02:00https://community.sap.com/t5/technology-q-a/po-to-btp-is-migration-query-parameters-in-http-receiver-adapter/qaq-p/14084669PO to BTP - IS Migration : Query parameters in HTTP receiver adapter2025-04-23T15:43:11.455000+02:00aditya_20https://community.sap.com/t5/user/viewprofilepage/user-id/876377<P>Hello all,</P><P>I'm migrating an HTTP interface from PO to BTP-IS. Just wanted to know how the query parameters option in PO HTTP receiver can be implemented in HTTP receiver adapter in CPI.</P><P>Attaching the PO configuration screenshot for reference.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="aditya_20_0-1745415551622.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/254101i3A513C86745C17CA/image-size/medium?v=v2&px=400" role="button" title="aditya_20_0-1745415551622.png" alt="aditya_20_0-1745415551622.png" /></span></P><P>Thank you,</P><P>Aditya</P>2025-04-23T15:43:11.455000+02:00https://community.sap.com/t5/technology-q-a/cpi-alert-notification-template-in-groovy/qaq-p/14084932CPI Alert Notification Template in Groovy2025-04-24T02:31:59.448000+02:00stephen_xuehttps://community.sap.com/t5/user/viewprofilepage/user-id/214851<P>This is a simple one. I just developed a simple program for generating alert notification mail body in HTML catching the exception raised by the Cloud Integration Framwork. </P><P>You need to configure a separated mail receiver for pushing the content into whoever concerns. <span class="lia-unicode-emoji" title=":slightly_smiling_face:">🙂</span></P><P>One of the benifit of using this piece of code is that , the only input parameter is: mail-receiver.</P><P>or if you do not want to even configure it , you can put the receiver in the value mapping</P><pre class="lia-code-sample language-java"><code>valueMapApi.getMappedValue('CPI', 'cpi:office365:receiver', 'receiver', 'OFFICE365', 'cpi:office365:receiver')</code></pre><P>Please read the code carefully before using it and you take your own responsibility for the consequence. <span class="lia-unicode-emoji" title=":slightly_smiling_face:">🙂</span></P><pre class="lia-code-sample language-java"><code>import com.sap.gateway.ip.core.customdev.util.Message
import org.apache.camel.Exchange
import org.apache.camel.builder.SimpleBuilder
import java.time.Instant
import java.time.ZoneId
import java.time.ZonedDateTime
import com.sap.it.api.ITApiFactory
import com.sap.it.api.mapping.ValueMappingApi
/* ************************************************************************
Program : AlertNotification.groovy
Create Date : Mar-26-2025
Author : Stephen Xue
Parameters :
message --> message reference from framework;
testFlag--> true for test mode; default for production code mode;
Function :
1.
Source: HTTP Header alert-receiver
Target: HTML
*************************************************************************/
Message processData(Message message)
{
def map = message.getProperties();
def msgID = map.get("SAP_MessageProcessingLogID");
def receivers = map.get("alert-receiver");;
def exceptionMessage, exceptionCode,exceptionName, tenantType;
// Tenant type: prod or non-prod
def tenant = System.getenv("TENANT_NAME");
if(tenant.contains('-non-')){
tenantType = 'Non-Prod';
}else{
tenantType = 'Prod';
}
// Get receiver from ValueMappingApi
if(receivers == "" || receivers == null ){
def valueMapApi = ITApiFactory.getApi(ValueMappingApi.class, null);
try{
receivers = valueMapApi.getMappedValue('CPI', 'cpi:office365:receiver', 'receiver', 'OFFICE365', 'cpi:office365:receiver');
}catch(Exception e){
receivers = "yourusername@example.com";
}
}
message.setHeader('mail-receiver',receivers);
// Get iflow name and subject
Exchange exchange = message.exchange;
def evaluateSimple = { simpleExpression ->
SimpleBuilder.simple(simpleExpression).evaluate(exchange, String);
}
def iflowName = evaluateSimple('${camelId}');
def subject = "[${tenantType}]iFlow: '${iflowName}' has error";
// Get system time
Instant instant = Instant.now();
ZoneId zoneId = ZoneId.of( "Australia/Melbourne" );
ZonedDateTime zdt = instant.atZone( zoneId );
def systemTime = zdt.toString();
// Get Message Link
String url = System.getenv("TENANT_NAME")+"."+System.getenv("IT_SYSTEM_ID")+"."+System.getenv("IT_TENANT_UX_DOMAIN");
def msgIDLink = "https://"+url+":443/itspaces/shell/monitoring/MessageDetails/%7B%22messageGuid%22%3A%22"+msgID+"%22%7D";
def ex = map.get("CamelExceptionCaught");
if (ex!=null)
{ // Exception Handling in OData V2 Receiver Adapter
if(ex.getClass().getCanonicalName().equals("com.sap.gateway.core.ip.component.odata.exception.OsciException")){
exceptionMessage = ex.getMessage();
exceptionCode = message.getHeaders().get("CamelHttpResponseCode").toString();
exceptionName = ex.getClass().getCanonicalName();
// Exception Handling in HTTP Receiver
}else if(ex.getClass().getCanonicalName().equals("org.apache.camel.component.ahc.AhcOperationFailedException")){
exceptionMessage = ex.getResponseBody();
exceptionCode = message.getHeaders().get("CamelHttpResponseCode").toString();
exceptionName = ex.getClass().getCanonicalName();
}else{
exceptionMessage = ex.getMessage();
exceptionCode = message.getHeaders().get("CamelHttpResponseCode").toString();
exceptionName = ex.getClass().getCanonicalName();
}
mailBody = "<!DOCTYPE html>\n" +
"<html lang=\"en\">\n" +
"<head>\n" +
" <meta charset=\"UTF-8\" />\n" +
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n" +
" <title>EMAIL</title>\n" +
" <style>\n" +
"table, th, td {\n" +
" border: 1px solid black;\n" +
"}\n" +
"</style>\n" +
"</head>\n" +
"<body>\n" +
"<p>Hi,<br><br>\n" +
"Please find below details for Interface Message failure.<br>\n" +
"<table>\n" +
" <tr>\n" +
" <td><span style=\"font-weight:bold\">Tenant Type</span></td>\n" +
" <td>${tenantType}</td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td><span style=\"font-weight:bold\">iFlow Name</span></td>\n" +
" <td>${iflowName}</td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td><span style=\"font-weight:bold\">Message ID</span></td>\n" +
" <td><a href=\"${msgIDLink}\">${msgID}</a></td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td><span style=\"font-weight:bold\">HTTP Status</span></td>\n" +
" <td>${exceptionCode}</td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td><span style=\"font-weight:bold\">Timestamp</span></td>\n" +
" <td>${systemTime}</td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td><span style=\"font-weight:bold\">Exception</span></td>\n" +
" <td>${exceptionName}</td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td><span style=\"font-weight:bold\">Error Message</span></td>\n" +
" <td>${exceptionMessage}</td> \n" +
" </tr>\n" +
"</table><br>\n" +
"Do Not Reply to this mail. Please contact SAP-Integration Team for further investigation.<br><br>\n" +
"Regards,<br>\n" +
"SAP Integration Team.\n" +
"</p>\n" +
"</body>\n" +
"</html>";
message.setHeader('subject',subject);
message.setBody(mailBody);
}
message.setHeader('mime-type','text/html');
return message;
}</code></pre><P> This is how the alert notification looks like in my mail box.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="stephen_xue_0-1745454632634.png" style="width: 580px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/254181i434187E30B0F7D73/image-dimensions/580x219?v=v2" width="580" height="219" role="button" title="stephen_xue_0-1745454632634.png" alt="stephen_xue_0-1745454632634.png" /></span></P><P>feel free to modify the code and have fun. </P><P> </P><P> </P>2025-04-24T02:31:59.448000+02:00https://community.sap.com/t5/technology-q-a/event-mesh-v-s-cloud-integration-jms-adapter/qaq-p/14085138Event Mesh v.s. Cloud Integration - JMS Adapter2025-04-24T08:40:51.074000+02:00shin861231https://community.sap.com/t5/user/viewprofilepage/user-id/1484100<P class="">Hello Experts,</P><P class=""> </P><P class=""><STRONG>My understanding:</STRONG> To achieve asynchronous system integration, Event Mesh is often used. However, according to a<A href="https://www.linkedin.com/posts/venkateswaran-krishnamurthy-46580210_jms-adapter-in-sap-cpi-the-jms-java-activity-7286269234106560512-8GSl" target="_self" rel="nofollow noopener noreferrer"> blog</A>, asynchronous integration can also be achieved without Event Mesh by using the JMS Adapter within Cloud Integration.</P><P class=""><STRONG>Questions:</STRONG></P><OL class=""><LI>Is my understanding correct?</LI><LI>If my understanding is correct, what are the advantages and disadvantages of using Event Mesh versus Cloud Integration - JMS Adapter?</LI><LI>Are there specific use cases for Event Mesh versus Cloud Integration - JMS Adapter? Explanations with examples are appreciated. (when to use event mesh, and when to use JMS Adapter?)</LI><LI>When subscribing Services in BTP Cockpit, Event Mesh must be registered separately from Integration Suite. Does this mean the costs are calculated separately?</LI></OL><P class="">Thank you.</P>2025-04-24T08:40:51.074000+02:00https://community.sap.com/t5/technology-q-a/choosing-the-right-authorization-method-in-sap-integration-suite/qaq-p/14085158Choosing the Right Authorization Method in SAP Integration Suite2025-04-24T08:58:20.399000+02:00StefanKhttps://community.sap.com/t5/user/viewprofilepage/user-id/1558946<P>Hi everyone,</P><P>I'm curious to know which authorization methods you prefer when working with the SAP Integration Suite, including OAuth, Basic Authentication, and Client Certificate Authentication. I've noticed that using Client Certificate Authentication can be more complex due to the need to update certificates with all communication partners every 365 days.</P><P>Given these considerations, do you have recommendations or best practices to share? Additionally, does SAP provide any guidance on preferred authorization methods for specific scenarios?</P><P>Looking forward to hearing your insights!</P><P>Thanks!</P><P>Kind regards,</P><P>Stefan</P>2025-04-24T08:58:20.399000+02:00https://community.sap.com/t5/technology-q-a/sap-cpi-not-able-to-pick-done-file/qaq-p/14085614SAP CPI: Not able to pick done file2025-04-24T15:43:24.061000+02:00MohitRelwanihttps://community.sap.com/t5/user/viewprofilepage/user-id/1498846<P>Using Sender SFTP, I am trying to pick the Main file based on Read lock strategy as Completion file.</P><P> </P><P>Main file Naming Format: abc.TXT<BR />Done/completion File Format: abc_CMPL.TXT</P><P>What should be the format of Done file Naming. Seems it only supports when extension is .done.<BR /><BR />Please suggest</P><P> </P>2025-04-24T15:43:24.061000+02:00https://community.sap.com/t5/technology-q-a/certficate-expiry-notification-in-sap-integration-suite/qaq-p/14085845Certficate expiry notification in SAP Integration Suite2025-04-24T20:39:09.882000+02:00ramu_g4https://community.sap.com/t5/user/viewprofilepage/user-id/245959<P>Hi Experts,</P><P>We have received notification regarding the certificate expiry for Baltimore CyberTrust Root Certificate on 13th May 2025 in Integration Suite. We are not sure whether it really affects us, There are certain steps that needs to be taken mentioned in <A href="https://me.sap.com/notes/3565626/E" target="_blank" rel="noopener noreferrer">https://me.sap.com/notes/3565626/E</A> . Eventhough this certificate is not used currently, it is better to update the certificate right? Pls guide regarding this.</P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ramu_g4_1-1745519792760.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/254500iD414D0D6114C9213/image-size/medium?v=v2&px=400" role="button" title="ramu_g4_1-1745519792760.png" alt="ramu_g4_1-1745519792760.png" /></span></P><P> </P><P>Thanks,</P><P>Ramu.</P><P> </P>2025-04-24T20:39:09.882000+02:00https://community.sap.com/t5/technology-q-a/exactly-once-in-order-eoio-for-group-messages-using-advanced-event-mesh/qaq-p/14086945Exactly once in order (EOIO) for Group messages using Advanced Event Mesh2025-04-26T06:32:23.346000+02:00anuj_dulta1https://community.sap.com/t5/user/viewprofilepage/user-id/788776<P>Hi there,</P><P>We have recently introduced SAP Advanced Event Mesh (AEM), which under the hood is ‘Solace PubSub+ Cloud’ in our Integration Landscape, and now I am seeking for the best way to implement ‘Exactly Once In Order’ Sequencing in our Integration.</P><P>We are on Version 10.9.1.114-0.</P><P><STRONG>The Integration</STRONG> is going to do the following:</P><OL><LI>Source System will Publish the Switching Job details (XML) to SAP AEM from WebLogic JMS Server.</LI><LI>We have another SAP Integration Layer which then subscribes to the Solace Queue (or Topic), does Message Transformation, and then forwards that to External System.</LI></OL><P><STRONG>The Challenge:</STRONG></P><P>We want messages belonging to one Job (lets say Job A), should be delivered to External System in Sequence. Lets say Job A has Operation 1, 2 and 3. If for some reason Operation 2 fails to get delivered to External System, Job 3 should not go. However, Job B and it’s Operations can continue to go as usual.</P><P>So, we need FIFO for individual Job Operation, and not across all the Job Operations.</P><P><STRONG>Analysis done so far:</STRONG></P><OL><LI>We can create <STRONG>One Exclusive Queue and One DMQ</STRONG> for the process, and Publish everything there. By doing it all the Jobs and their Operations will follow Sequence by Default. In All the Success scenarios, this should be okay (I guess). But in case of failure, the message will move to DMQ and the Subsequent message for one Job will not know and ‘might’ get processed.</LI><LI>I went through Partition Queues, but that doesn’t seem to fit the purpose, as there the messages (Job Operations in our case) of one Job can go to any Partition</LI><LI>Non-Durable (Temporary) Queues: What I have understood so far, we can request the Publisher (Client) to create Queues Dynamically and all the messages (Operation) of one Job should be sent to ONE Queue. As soon as those messages are consumed by our SAP Integration and forwarded to Externally System, these Queues get deleted - I am not 100% sure if this is how this will behave. In case of failures, I would expect the Queue remains intact and messages belonging to that Queue will pile up, without impacting the other Jobs.</LI><LI>We can introduce a persistence layer to store the failed messages. Every message consumed from the queue will first be checked (using some checksum) to see if any message for that Operation has failed in the past and if yes, the push the message to DMQ or else continue normal. I will then have to keep DMQ and this persistence layer in sync. Or just use this persistence and not DMQ.</LI></OL><P><STRONG>Following things are Mandatory:</STRONG></P><OL><LI>Guaranteed Delivery of the messages to External System</LI><LI>Order of Operations belonging to same Job should be maintained</LI><LI>Order for Different Jobs is not Mandatory, and those can be parallelly processed.</LI></OL><P>Any help on this would be really appreciated.</P><P>-Anuj</P>2025-04-26T06:32:23.346000+02:00https://community.sap.com/t5/technology-q-a/jars-to-develop-groovy-locally/qaq-p/14089097JARs to develop groovy locally2025-04-29T09:08:40.229000+02:00milan_10https://community.sap.com/t5/user/viewprofilepage/user-id/150158<P>Hi,</P><P>is there a way how to get the required jars in order to be able to develop/run and test groovy scripts locally using your IDE?</P><P>I see this Blog: <A href="https://community.sap.com/t5/technology-blogs-by-members/exploring-cpi-s-filesystem-s-content/ba-p/13414683" target="_blank">https://community.sap.com/t5/technology-blogs-by-members/exploring-cpi-s-filesystem-s-content/ba-p/13414683</A></P><P>from 2019 how to get the required jars from CI using iFlow... This way seems not to work anymore, but I really would expect that SAP somehow offer these jars to download...</P><P>Thanks for any help.</P><P>Milan</P>2025-04-29T09:08:40.229000+02:00https://community.sap.com/t5/technology-q-a/valid-parameters-for-events-api-to-fetch-mdi-data/qaq-p/14091421Valid parameters for events API to fetch MDI data?2025-05-01T19:08:13.133000+02:00SoumenDashttps://community.sap.com/t5/user/viewprofilepage/user-id/1462880<P>We are able to push data from MDG to MDI & need to cascade this data to various consumers. Tried using MDI adapter in IS-CI but it always returns blank response. Tried using HTTP adapter instead and it fetches the whole load alright. Now I am trying to restrict the GET call to fetch only last day data but doesn't look like I am able to get the correct filter parameter. </P><P>The GET URL being used is <SPAN><A href="https://community.sap.com/" target="_blank" rel="nofollow noopener noreferrer">https://<domain>/v1/odm/3.1.0/sap.odm.finance.costobject.CostCenter/events</A><BR /><BR />This gives the full load alright. But on daily basis I need to have only last day load. What should be the parameter to get that? Tried looking for documentation but doesnt seem to be reaching the right place in the ocean of docs from SAP.<BR /><BR />Thanks in Advance.</SPAN></P>2025-05-01T19:08:13.133000+02:00https://community.sap.com/t5/financial-management-q-a/how-to-check-if-customer-invoice-is-paid-in-byd-via-odata/qaq-p/14093315How to check if customer invoice is paid in ByD via OData2025-05-05T12:51:55.906000+02:00mathiasmueller-aicohttps://community.sap.com/t5/user/viewprofilepage/user-id/884665<P>Dear SAP community,</P><P class="">I have a problem finding the correct Business Object name and field while configuring an OData service in SAP ByDesign.</P><P class="">I’m trying to check whether the client’s invoice is open or cleared. I found this article, but it didn’t help me much:<A href="https://community.sap.com/t5/technology-q-a/how-to-check-if-customer-invoice-is-paid-in-byd-via-webservice/qaq-p/12506714" target="_blank">https://community.sap.com/t5/technology-q-a/how-to-check-if-customer-invoice-is-paid-in-byd-via-webservice/qaq-p/12506714</A><BR /><BR /></P><P class="">I’m not sure which Business Object (BO) it should be. Has anyone else encountered this issue before?</P><P class="">To make things clearer, I’m including some screenshots below showing the exact location where the status is displayed.</P><P class=""><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2025-05-05 at 12.42.20.png" style="width: 632px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/257615iFF6BEB7E9EECB70F/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-05-05 at 12.42.20.png" alt="Screenshot 2025-05-05 at 12.42.20.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2025-05-05 at 12.42.25.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/257613iF5C583D9B3333EEA/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-05-05 at 12.42.25.png" alt="Screenshot 2025-05-05 at 12.42.25.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2025-05-05 at 12.42.35.png" style="width: 310px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/257614i3CFB29380421654E/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-05-05 at 12.42.35.png" alt="Screenshot 2025-05-05 at 12.42.35.png" /></span></P><P class=""> </P><P class="">In the OData Configuration Tool, I tried to select the BO name <I>CustomerInvoice</I>, but it doesn’t seem to be the correct one.</P><P class="">Can someone please assist me with this?</P><P>Best wishes!</P><P> </P><P><BR /><BR /><BR /></P>2025-05-05T12:51:55.906000+02:00https://community.sap.com/t5/technology-q-a/sap-cpi-is-not-picking-few-files-from-sender-sftp-al11/qaq-p/14095141SAP CPI is not picking few files from Sender SFTP AL11.2025-05-07T10:17:04.930000+02:00NikhilCharyhttps://community.sap.com/t5/user/viewprofilepage/user-id/807879<P>Daily around 40 files will be placed in AL11 in one of the directory and initially due to some issue with 9 files the files went to processing mode in SAP CPI for 24 hrs and they we're discarded. Since then those file names are not being picked up by CPI, we tried to change the file name they we're successful but I need the exact file names to be processed from the same directory (client requirement) and post processing they should be placed in archive folder. Is there any solution to it, Receiver is also SFTP and we're reading the file name from property and on receiver side the filename is called through property so I cannot append timestamp. client requirement is the filename should be same daily so that they should overwrite the existing file daily. Below is the SFTP detail for reference.<BR /><BR /></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NikhilChary_0-1746605505198.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/258334iD1430E2FED286C06/image-size/medium?v=v2&px=400" role="button" title="NikhilChary_0-1746605505198.png" alt="NikhilChary_0-1746605505198.png" /></span></P><P> </P>2025-05-07T10:17:04.930000+02:00https://community.sap.com/t5/technology-q-a/accessing-sap-graph-odata-v4-through-sap-cloud-integration-cpi/qaq-p/14095338Accessing SAP Graph OData V4 through SAP Cloud Integration (CPI)2025-05-07T13:05:48.437000+02:00Aishwarya_Polahttps://community.sap.com/t5/user/viewprofilepage/user-id/2090996<H2 id="toc-hId-1710189775">Introduction</H2><P>This blog explains how to access an SAP Graph OData V4 URL using SAP Cloud Integration (CPI). We will configure the connection, use OAuth 2.0 Client Credentials, and query data using OData parameters.</P><H2 id="toc-hId-1513676270"><SPAN>What is SAP Graph?</SPAN></H2><P><SPAN>SAP Graph is a unified API that provides a simplified, single interface to access data across various SAP systems (like SAP S/4HANA, SAP SuccessFactors, SAP Sales Cloud, etc.). It helps developers interact with complex SAP systems using a consistent API structure, making integration and data access easier.</SPAN></P><H2 id="toc-hId-1317162765">Prerequisites</H2><UL><LI><P>Access to SAP BTP with an SAP Graph instance.</P></LI><LI><P>OAuth 2.0 Client Credentials for SAP Graph.</P></LI><LI><P>SAP CPI with design privileges.</P></LI></UL><H2 id="toc-hId-1120649260"><SPAN>Step 1: Create OAuth 2.0 Credentials</SPAN></H2><OL><LI><P><SPAN>In SAP BTP Cockpit, navigate to your SAP Graph instance.</SPAN></P></LI><LI><P><SPAN>Go to Security and create OAuth 2.0 client credentials.</SPAN></P></LI><LI><P><SPAN>Note the Client ID and Client Secret.</SPAN></P></LI><LI><P><SPAN>Save the credentials in </SPAN><SPAN><STRONG>Security Material</STRONG></SPAN><SPAN> of CPI as a new OAuth2 Client Credentials artifact (e.g., Credential Name: </SPAN><SPAN>GraphOAuthCredentials</SPAN><SPAN>).</SPAN></P></LI></OL><H2 id="toc-hId-924135755"><SPAN>Step 2: Get the SAP Graph URL</SPAN></H2><OL><LI><P><SPAN>In SAP Integration Suite, navigate to the </SPAN><SPAN><STRONG>Design</STRONG></SPAN><SPAN> section.</SPAN></P></LI><LI><P><SPAN>Inside </SPAN><SPAN><STRONG>Business Data Graph</STRONG></SPAN><SPAN>, you can find the OData V4 URL for your SAP Graph instance.</SPAN></P></LI><LI><P><SPAN>Copy the OData V4 URL (e.g., </SPAN><SPAN>https://<your-graph-url>/graph/api/graphdemo</SPAN><SPAN>).</SPAN></P></LI></OL><H2 id="toc-hId-727622250">Step 3: Configure OData Connection in CPI</H2><OL><LI><P>Log in to SAP CPI, go to Design, and create an Integration Flow.</P></LI><LI><P>Add a Start Timer and a Request Reply step.</P></LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Aishwarya_Pola_0-1746610838349.png" style="width: 764px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/258404i8EEA39716D701D2E/image-dimensions/764x386?v=v2" width="764" height="386" role="button" title="Aishwarya_Pola_0-1746610838349.png" alt="Aishwarya_Pola_0-1746610838349.png" /></span></P><P> 3. Set connection details:</P><UL><LI><P>Address: <FONT color="#000000">https://<your-graph-url>/graph/api/graphdemo/sap.s4</FONT></P></LI><LI><P>Authentication: OAuth2 Client Credentials</P></LI><LI><P><SPAN>Credential Name: </SPAN><SPAN>GraphOAuthCredentials</SPAN></P></LI></UL><P> </P><H2 id="toc-hId-531108745">Step 3: Set the Resource Path</H2><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Aishwarya_Pola_1-1746611173389.png" style="width: 773px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/258405iB0CD32AD6A97A194/image-dimensions/773x417?v=v2" width="773" height="417" role="button" title="Aishwarya_Pola_1-1746611173389.png" alt="Aishwarya_Pola_1-1746611173389.png" /></span></P><P> </P><UL><LI><P>Resource Path: A_SalesOrder</P></LI><LI><P>Query: $select=SalesOrder,SoldToParty&$filter=SalesOrder eq '1'&$expand=_SoldToParty</P></LI></UL><H2 id="toc-hId-334595240">Step 4: Deploy and Test</H2><OL><LI><P>Deploy the integration flow.</P></LI><LI><P>Monitor message processing to verify the response.</P></LI></OL><H2 id="toc-hId-138081735">Conclusion</H2><P>You have successfully configured SAP CPI to access SAP Graph OData V4 using OAuth 2.0 authentication.</P>2025-05-07T13:05:48.437000+02:00https://community.sap.com/t5/technology-q-a/ariba-integration-with-s4-public-cloud-using-mdi/qaq-p/14095528Ariba integration With S4 public cloud using MDI2025-05-07T16:43:14.245000+02:00EsraaMoubarekhttps://community.sap.com/t5/user/viewprofilepage/user-id/140465<P>Hi Dears ,</P><P><SPAN>We need to integrate S4 public cloud with Ariba . Is it possible to integrate via Master Data Integration (Orchestration) application and MDI BTP service only or we have to use CIG "SAP Integration Suite, managed gateway for spend management and SAP Business Network" ?<BR /></SPAN><SPAN>can Ariba be a sender or receiver only as per this photo ?</SPAN></P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="EsraaMoubarek_0-1746625393588.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/258470iB7B604DAC6BEBCCD/image-size/medium?v=v2&px=400" role="button" title="EsraaMoubarek_0-1746625393588.png" alt="EsraaMoubarek_0-1746625393588.png" /></span></P><P> </P>2025-05-07T16:43:14.245000+02:00https://community.sap.com/t5/technology-q-a/jdbc-adapter-fails-to-parse-scalar-response-from-stored-procedure-without/qaq-p/14095626JDBC Adapter Fails to Parse Scalar Response from Stored Procedure Without Alias2025-05-07T18:33:35.158000+02:00DhrubShttps://community.sap.com/t5/user/viewprofilepage/user-id/1821919<P>Hi all,</P><P>I'm working with an iFlow in SAP Integration Suite that calls a stored procedure which returns a scalar value. Unfortunately, the flow fails at the JDBC adapter with the following error:</P><PRE>java.sql.SQLException: com.sap.it.rt.adapter.jdbc.exceptions.JDBCException:
Error occurred while constructing the response nodes. :
org.xml.sax.SAXException: Nodename cannot be empty.,
cause: org.xml.sax.SAXException: Nodename cannot be empty.</PRE><P>The stored procedure returns a scalar value something like this:</P><PRE>SELECT 1234;</PRE><P>If it were written with an alias (e.g., SELECT 1234 AS SeqId;), the issue wouldn't occur. However, modifying the stored procedure is not an option in my case.</P><P>I've also observed that the same error occurs with simple queries like:</P><PRE>SELECT COUNT(*) FROM my_table;</PRE><P>But it works fine if I include an alias:</P><PRE>SELECT COUNT(*) AS total_count FROM my_table;</PRE><P>Since the failure happens at the JDBC adapter level, I cannot handle the response using a Groovy script or mapping step—it never reaches those steps.</P><P><STRONG>My question is:</STRONG> <EM>Is there any way to handle responses like SELECT COUNT(*) FROM my_table in SAP IS without modifying the SQL or stored procedure?</EM><BR />I'm quite new to SAP Integration Suite, so I’d really appreciate a detailed explanation or workaround if one exists.</P><P>Thanks in advance!</P>2025-05-07T18:33:35.158000+02:00https://community.sap.com/t5/technology-q-a/detecting-handwritten-vs-digital-docs-in-sap-cap-dox/qaq-p/14096930Detecting Handwritten vs. Digital Docs in SAP CAP + DOX2025-05-09T08:46:00.939000+02:00sundarhttps://community.sap.com/t5/user/viewprofilepage/user-id/1393233<P><SPAN>I'm working on a solution using </SPAN><STRONG>SAP CAP (Cloud Application Programming) with Node.js</STRONG><SPAN>, integrated with </SPAN><STRONG>SAP Document Information Extraction (DOX)</STRONG><SPAN>. This project sends documents via API to the DOX service to extract relevant information from files such as invoices and receipts. My requirement here is to check whether the document is </SPAN><STRONG>handwritten or computer-generated</STRONG><SPAN>. This distinction could significantly enhance data accuracy and processing logic. If anyone has insights on integrating handwriting detection with SAP DOX or using pre-processing techniques for document classification, I’d love to connect and learn more.</SPAN></P>2025-05-09T08:46:00.939000+02:00https://community.sap.com/t5/technology-q-a/unexpected-eof-at-target-when-calling-api-proxy-for-standard-odata-service/qaq-p/14097776Unexpected EOF at Target when Calling API Proxy for Standard OData Service via SAP API Management2025-05-10T09:19:17.949000+02:00Shashikant_Patelhttps://community.sap.com/t5/user/viewprofilepage/user-id/1486177<P>Hello Community,</P><P>I’ve created an API proxy in <STRONG>SAP API Management</STRONG> that wraps an existing <STRONG>standard OData service</STRONG> from our <STRONG>SAP S/4HANA</STRONG> system. The proxy was deployed successfully, and I’ve included the required <STRONG>API Key</STRONG> in the apikey header when testing via <STRONG>Postman</STRONG>.<BR /><BR />Steps that I have followed:<BR />1. I selected an API from api.sap.com to fetch/retrieve time-sheet data and tested it in POSTMAN and I was getting the data.<BR />2. I created an API proxy using SAP API Management with included policy of APIkey and published the product.<BR />3.But when I tried calling from postman it is giving this error:</P><pre class="lia-code-sample language-json"><code>{
"fault": {
"faultstring": "Unexpected EOF at target",
"detail": {
"errorcode": "messaging.adaptors.http.flow.UnexpectedEOFAtTarget"
}
}
}</code></pre><P> </P><P>I want a solution to this problem!<BR /><BR />Regards,<BR />Shashikant Patel</P>2025-05-10T09:19:17.949000+02:00https://community.sap.com/t5/technology-q-a/can-sap-integration-suite-push-data-to-s-4hana-on-premise-via-jdbc-adapter/qaq-p/14100736Can SAP Integration Suite Push Data to S/4HANA On-Premise via JDBC Adapter?2025-05-14T03:42:42.064000+02:00shin861231https://community.sap.com/t5/user/viewprofilepage/user-id/1484100<P>Hello experts,</P><P><SPAN>I am currently working on a data integration process where I need to fetch data from a third-party system, perform some transformations within SAP Integration Suite, and then insert the data into an <STRONG>on-premise S/4HANA database</STRONG> using the <STRONG>JDBC adapter</STRONG>.</SPAN></P><P><SPAN>Would this be a feasible approach?</SPAN></P><P><SPAN>For reference, the workflow looks like this:</SPAN></P><P><SPAN><span class="lia-unicode-emoji" title=":file_folder:">📁</span> <STRONG>CSV File</STRONG> → <STRONG>SAP Integration Suite</STRONG> → (<STRONG>JDBC Adapter</STRONG>) → <STRONG>SAP S/4HANA DB (On-Premise)</STRONG></SPAN></P><P><SPAN>I understand that <STRONG>OData adapter</STRONG> is the more common approach, but we are currently exploring alternative ways to exchange data between <STRONG>Integration Suite</STRONG> and <STRONG>S/4HANA DB</STRONG>.</SPAN></P><P><SPAN>Has anyone successfully implemented a similar solution? Any insights or recommendations would be greatly appreciated!</SPAN></P><P><SPAN>Thank you! <span class="lia-unicode-emoji" title=":smiling_face_with_smiling_eyes:">😊</span></SPAN></P>2025-05-14T03:42:42.064000+02:00https://community.sap.com/t5/enterprise-resource-planning-q-a/aead-is-not-getting-disabled/qaq-p/14100874AEAD is not getting disabled2025-05-14T08:36:03.830000+02:00NitishKrishna_Dhttps://community.sap.com/t5/user/viewprofilepage/user-id/2124831<P>Even after disabling the AEAD, when we are checking by gpg --list-packets <filename> still it exists, it is showing as prefix for AEAD as O2.<BR /><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NitishKrishna_D_0-1747204487068.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/260883i704CF4DA36FA186A/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="NitishKrishna_D_0-1747204487068.png" alt="NitishKrishna_D_0-1747204487068.png" /></span></P><P> </P>2025-05-14T08:36:03.830000+02:00https://community.sap.com/t5/enterprise-resource-planning-q-a/ml4hmaster229/qaq-p/14100978ML4HMASTER2292025-05-14T10:18:44.927000+02:00berkayilginhttps://community.sap.com/t5/user/viewprofilepage/user-id/842164<P> </P><P>We have made all the necessary adaptations in the S/4HANA Public Cloud system. However, when opening the material and entering the accounting master data, we encounter an error. What could be the reason?</P><P>Best regards.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="berkayilgin_0-1747210383675.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/260916i2F65B520DF86FAA0/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="berkayilgin_0-1747210383675.png" alt="berkayilgin_0-1747210383675.png" /></span></P><P> </P>2025-05-14T10:18:44.927000+02:00