cancel
Showing results for 
Search instead for 
Did you mean: 

reading external (OData) API from cap

pragnesh_parmar
Explorer
0 Kudos

Hello All,

I have a requirement to read the data from the external sap odata service from the s4hana system. but, getting below error.

SAP destination is already Basic authorization.

Error during request to remote service: Received content type 'text/html' which is not part of accepted content types

Regards,

Pragnesh

Node.js SAP Cloud Application Programming Model

MioYasutake
Active Contributor
0 Kudos
@pragnesh_parmar Could you share the code and describe what you were trying to do when the error occurred? That way, I (and the community) can offer you better support.

Accepted Solutions (1)

Accepted Solutions (1)

rileyrainey
Product and Topic Expert
Product and Topic Expert
0 Kudos

That's not a Content Type that you should get back from a successful OData API service call - hence the error.

My gut tells me that you might be getting an error during the call and that the API might be poorly implemented enough to be emitting HTML-based error messages.  You might want to verify that you can call the service using something like Postman.  If the call succeeds, you can verify the content type is something like "application/xml", or "text/xml" (different OData service providers will use one of several XML or JSON content types here).  You can force an error, too, to expose the difference.

If this is looking like what's happening, working around it will depend upon the API that you are using to make the call.

Answers (2)

Answers (2)

pragnesh_parmar
Explorer
0 Kudos

Hello @MioYasutake  @rileyrainey @Arley ,

Please find below my code and let me know where errors come up.

ProCat.cds

using { ZPR_HIRED_PLANT_PO_DETAILS_SRV } from './external/ZPR_HIRED_PLANT_PO_DETAILS_SRV';
service ProCat {
   entity PurchaseorderList as projection on ZPR_HIRED_PLANT_PO_DETAILS_SRV.PO_HEADERSet;
}
ProCat.js
const cds = require("@sap/cds");
const { ConnectBackend } = require('./lib/ConnectionHandler');

module.exports = cds.service.impl(async function () {
  const { PurchaseorderList } = this.entities;
  this.on("READ", PurchaseorderList, ConnectBackend)
 
});
Backend connection I have made one different connection handler.
ConnectionHandler.js
const cds = require("@sap/cds");
async function ConnectBackend(req,res)
{
    const backendconnect = await cds.connect.to("ZPR_HIRED_PLANT_PO_DETAILS_SRV");
    const tx = backendconnect.tx(req.query);
    return tx.run(req.query);
}
module.exports = {
    ConnectBackend
}
Package.json
 "cds": {
    "requires": {
      "ZPR_HIRED_PLANT_PO_DETAILS_SRV": {
        "kind": "odata-v2",
        "model": "srv/external/ZPR_HIRED_PLANT_PO_DETAILS_SRV",
        "credentials": {
          "destination": "capsap",
          "path": "/sap/opu/odata/sap/ZPR_HIRED_PLANT_PO_DETAILS_SRV"
        }
      }
    }
  }
.env file to bypass the proxy for SAP BAS
destinations=[{"name":"capsap","proxyHost":"http://127.0.0.1","proxyPort":"8887","url":"http://capsap.dest"}]
 
 
 
I have also attached the screenshot of the BAS Error and browser error with network trace and odata call response with out cap.
 
Please help me to close this issue.
 
Regards,
Pragnesh 
 

 

pragnesh_parmar
Explorer
0 Kudos
it is working now thanks 🙂
rileyrainey
Product and Topic Expert
Product and Topic Expert
0 Kudos
If you don't mind, please elaborate on what fixed your issue -- it will likely help others in the future.
Arley
Advisor
Advisor
0 Kudos