cancel
Showing results for 
Search instead for 
Did you mean: 

$batch Request in SAP CAP Remote Service Call

hatrigt
Participant
0 Kudos
2,536

Hello Experts,

I am working on a CAP solution wherein I want to make multiple GET calls to SAP on-premise. So I decided to go with $batch request instead of individual calls.

The below code snippet shows how I made the call:

                let oSAPConnection = await cds.connect.to('approvalService_sapOthers');

                let oImportedCaseDetails = 
                    await oSAPConnection.send({
                        method: 'POST',
                        path: `/$batch`,
                        headers: { 'Content-Type': 'multipart/mixed;boundary=batch' },
                        data: 
                        `--batch
                        Content-Type: application/http
                        Content-Transfer-Encoding: binary
                        
                        GET LtFscmInfoSet('5406695') HTTP/1.1
                        

                        --batch--`,
                    });

In Package.json,

However, I am getting the error as follows:

2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR [remote] - Error: Error during request to remote service:
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR In the context of Data Services an unknown internal server error occurred
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR at run (/home/vcap/app/node_modules/@sap/cds/libx/_runtime/remote/utils/client.js:306:31)
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR at async RemoteService.<anonymous> (/home/vcap/app/node_modules/@sap/cds/libx/_runtime/remote/Service.js:295:20)
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR at async next (/home/vcap/app/node_modules/@sap/cds/lib/srv/srv-dispatch.js:79:17)
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR at async RemoteService.handle (/home/vcap/app/node_modules/@sap/cds/lib/srv/srv-dispatch.js:77:10)
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR at async importCaseService.<anonymous> (/home/vcap/app/srv/importCaseService.js:46:21)
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR at async next (/home/vcap/app/node_modules/@sap/cds/lib/srv/srv-dispatch.js:79:17)
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR at async importCaseService.handle (/home/vcap/app/node_modules/@sap/cds/lib/srv/srv-dispatch.js:77:10)
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR at async /home/vcap/app/node_modules/@sap/cds/libx/_runtime/cds-services/adapter/odata-v4/handlers/action.js:52:16 {
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR statusCode: 502,
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR reason: AxiosError: Error during request to remote service:
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDOUT Error Occurred on SAP Connection: Error: Error during request to remote service:
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR In the context of Data Services an unknown internal server error occurred
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR at settle (/home/vcap/app/node_modules/axios/dist/node/axios.cjs:1909:12)
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR at IncomingMessage.handleStreamEnd (/home/vcap/app/node_modules/axios/dist/node/axios.cjs:2989:11)
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR at IncomingMessage.emit (node:events:525:35)
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR at endReadableNT (node:internal/streams/readable:1359:12)
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDOUT In the context of Data Services an unknown internal server error occurred
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR code: 'ERR_BAD_RESPONSE',
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR config: {
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR timeout: 0,
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR xsrfCookieName: 'XSRF-TOKEN',
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR xsrfHeaderName: 'X-XSRF-TOKEN',
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR maxContentLength: -1,
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR maxBodyLength: -1,
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR proxy: false,
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR method: 'post',
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR baseURL: 'http://saphoxxxxet:443',
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR url: '/sap/opu/odata/sap/YxxxxATA_SRV/$batch',
2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR data: '--batch\n' + 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR ' Content-Type: application/http\n' + 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR ' Content-Transfer-Encoding: binary\n' + 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR ' \n' + 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR " GET LtFscmInfoSet('5406695') HTTP/1.1\n" + 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR ' \n' + 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR ' \n' + 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR ' --batch--' 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR }, 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR request: { 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR method: 'POST', 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR url: 'http://saphoxxxxet:443/sap/opu/odata/sap/YxxxxATA_SRV/$batch', 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR headers: [AxiosHeaders] 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR }, 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR response: { 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR status: 500, 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR statusText: 'Internal Server Error', 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR headers: [AxiosHeaders], 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR body: [Object] 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR }, 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR correlationId: '55435bd1-7d8d-4eb7-6d8a-f61aa7b10abf' 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR } 2023-07-31T15:34:48.545+0000 [APP/PROC/WEB/0] STDERR } 2023-07-31T15:34:48.548+0000 [APP/PROC/WEB/0] STDERR [cds] - Error: SAP Connection Error 2023-07-31T15:34:48.548+0000 [APP/PROC/WEB/0] STDERR at importCaseService.<anonymous> (/home/vcap/app/srv/importCaseService.js:70:21) 2023-07-31T15:34:48.548+0000 [APP/PROC/WEB/0] STDERR at process.processTicksAndRejections (node:internal/process/task_queues:95:5) 2023-07-31T15:34:48.548+0000 [APP/PROC/WEB/0] STDERR at async next (/home/vcap/app/node_modules/@sap/cds/lib/srv/srv-dispatch.js:79:17) 2023-07-31T15:34:48.548+0000 [APP/PROC/WEB/0] STDERR at async importCaseService.handle (/home/vcap/app/node_modules/@sap/cds/lib/srv/srv-dispatch.js:77:10) 2023-07-31T15:34:48.548+0000 [APP/PROC/WEB/0] STDERR at async /home/vcap/app/node_modules/@sap/cds/libx/_runtime/cds-services/adapter/odata-v4/handlers/action.js:52:16 { 2023-07-31T15:34:48.548+0000 [APP/PROC/WEB/0] STDERR code: 400, 2023-07-31T15:34:48.548+0000 [APP/PROC/WEB/0] STDERR numericSeverity: 4, 2023-07-31T15:34:48.548+0000 [APP/PROC/WEB/0] STDERR id: '1350040', 2023-07-31T15:34:48.548+0000 [APP/PROC/WEB/0] STDERR level: 'ERROR', 2023-07-31T15:34:48.548+0000 [APP/PROC/WEB/0] STDERR timestamp: 1690817688546 2023-07-31T15:34:48.548+0000 [APP/PROC/WEB/0] STDERR } 2023-07-31T15:34:48.551+0000 [RTR/31] STDOUT hxxxx.cfapps.eu10.hana.ondemand.com - [2023-07-31T15:34:47.604128636Z] "POST /odata/v4/import-case/ImportCase HTTP/1.1" 400 10 85 "-" "PostmanRuntime/7.28.4" "10.0.136.5:30146" "10.36.193.16:61111" x_forwarded_for:"103.28.246.145, 10.0.136.5" x_forwarded_proto:"https" vcap_request_id:"55435bd1-7d8d-4eb7-6d8a-f61aa7b10abf" response_time:0.947239 gorouter_time:0.048076 app_id:"e2b28e07-b36c-435d-92d3-73cab0636550" app_index:"0" instance_id:"3e6e266b-f9d9-4c44-6a04-a388" x_cf_routererror:"-" x_correlationid:"-" tenantid:"-" sap_passport:"-" x_scp_request_id:"1cc70c70-17b4-4981-9668-f5873aede14a-64C7D497-3E32D12" x_cf_app_instance:"-" x_forwarded_host:"-" x_custom_host:"-" x_ssl_client:"-" x_ssl_client_session_id:"-" x_ssl_client_verify:"-" x_ssl_client_subject_dn:"-" x_ssl_client_subject_cn:"-" x_ssl_client_issuer_dn:"-" x_ssl_client_notbefore:"-" x_ssl_client_notafter:"-" x_cf_forwarded_url:"-" traceparent:"-" x_b3_traceid:"55435bd17d8d4eb76d8af61aa7b10abf" x_b3_spanid:"6d8af61aa7b10abf" x_b3_parentspanid:"-" b3:"55435bd17d8d4eb76d8af61aa7b10abf-6d8af61aa7b10abf"
If a batch request is still not supported in CAP, is there any alternative to achieve this? I have checked SAP Cloud-SDK for batch requests. But is there anyone who achieved it through that? If so, kindly share some sample codes.
View Entire Topic
Willem_Pardaens
Product and Topic Expert
Product and Topic Expert

This could be due to the new line character "\n" that is part of your multipart body. Scenarios using SAP Integration Suite with a manual multipart body also require an additional step to convert new lines to "\r\n" (example).

I would try to change your code to use explicit New Line + Carriage Return "\r\n" characters to construct the body instead of relying on the backtick notation.

hatrigt
Participant
0 Kudos

Tried this and it works. Thank you!!

image