Given I want to select multiple gets in a batch operation ( and I have PR
#24
) I receive the error
What I expect is an array which contains the result of each inner response body.
const changeSets: any[] = [];
const gets: string[] = [
"accounts?$select=name",
"accounts?$select=name"
batchOperation(config, "BATCH123", "CHANGESET123", changeSets, gets)
.then((result) => {
console.log(result);
}, (error) => {
console.log(error);
});
It appears xrm-webapi attempts to parse the entire response as JSON when first it should split and extract each individual response body first.
--batchresponse_4534da94-ba24-4acb-b11e-3b35476dc3de
Content-Type: application/http
Content-Transfer-Encoding: binary
HTTP/1.1 200 OK
Access-Control-Expose-Headers: Preference-Applied,OData-EntityId,Location,ETag,OData-Version,Content-Encoding,Transfer-Encoding,Content-Length,Retry-After
Content-Type: application/json; odata.metadata=minimal
OData-Version: 4.0
"@odata.context":"https://dynamics.com/api/data/v8.2/$metadata#accounts(name)","value":[
"@odata.etag":"W/\"1248759412\"","name":"Account 1","accountid":"00000000-0000-0000-0000-000000000000"
"@odata.etag":"W/\"1248759537\"","name":"Account 2","accountid":"00000000-0000-0000-0000-000000000000"
--batchresponse_4534da94-ba24-4acb-b11e-3b35476dc3de
Content-Type: application/http
Content-Transfer-Encoding: binary
HTTP/1.1 200 OK
Access-Control-Expose-Headers: Preference-Applied,OData-EntityId,Location,ETag,OData-Version,Content-Encoding,Transfer-Encoding,Content-Length,Retry-After
Content-Type: application/json; odata.metadata=minimal
OData-Version: 4.0
"@odata.context":"https://dynamics.com/api/data/v8.2/$metadata#accounts(name)","value":[
"@odata.etag":"W/\"1248759412\"","name":"Account 1","accountid":"00000000-0000-0000-0000-000000000000"
"@odata.etag":"W/\"1248759537\"","name":"Account 2","accountid":"00000000-0000-0000-0000-000000000000"
--batchresponse_4534da94-ba24-4acb-b11e-3b35476dc3de--
The boundary separator can be extracted from the Content-Type
response header.
The response body should be split based on that.
Per response body, the initial Content-Type
and Content-Transfer-Encoding
headers should be stripped out.
The remaining HTTP headers should be parsed and checked ( e.g req.status >= 200) && (req.status < 300
)
If the response type is application/json
the body should then be parsed by JSON.parse.