When creating a resource for a connector, you may come across a scenario where not all of your data from the vendor response makes it to the SAP Open Connectors response due to the use of a `response root key`. In this example, we're extending the Hubspot CRM connector and building a resource to GET /companies. The vendor response when calling this resource returns this:
{
"companies": [
{
"additionalDomains": [],
"companyId": 123456789,
"isDeleted": false,
"mergeAudits": [],
"portalId": 1234567,
"properties": {},
"stateChanges": []
},
{
"additionalDomains": [],
"companyId": 123456789,
"isDeleted": false,
"mergeAudits": [],
"portalId": 1234567,
"properties": {},
"stateChanges": []
}
],
"has-more": false,
"offset": 904803338
}Because the resource is looking for a single, parent key. You'll run into this error:
"Connector was not setup properly. This connector does not return a root array for its pluralized responses, so a 'rootKey' field is needed to be set on this resource"
You may be wondering why you can't just set the `response root key` to `companies`. However, doing that will resolve the error and get your list of companies in the response, but what if you need the other fields like `has-more` and `offset` for your paging needs. As you can see, those fields live outside of the `companies` array and will be excluded from the response.
There are two ways to resolve this issue:
- Set the `response root key` to `companies` and in a post request hook, add the `offset` and `has-more` fields to the header. The post request hook will look something like this:
if(!response_headers || response_iserror) {
done();
} else {
let headers = {};
headers['offset'] = response_body["offset"];
headers['has-more'] = response_body["offset"];
done({'response_headers': headers});
}OR
- In a post request hook, nest the raw vendor response inside an object like this:
if(!response_headers || response_iserror) {
done();
} else {
let body = {};
body.parent = response_body;
done({'response_body': body});
}and set the `response root key` to `parent`.