You can easily execute fetchxml in WebAPI using the “fetchXml” query parameter. But this “GET” method won’t work, if the fetchxml is too big. In this case, you have to use the “POST” method to execute the fetchxml.
Sample Request Header:
Accept: application/json OData-MaxVersion: 4.0 OData-Version: 4.0 Content-Type: multipart/mixed;boundary=batch_contactfetch
Sample Request Body:
--batch_contactfetch Content-Type: application/http Content-Transfer-Encoding: binary GET https://[CRM URL]/api/data/v8.2/contacts?fetchXml=<fetch count="10" ><entity name="contact" ><attribute name="fullname" /></entity></fetch> HTTP/1.1 Content-Type: application/json OData-Version: 4.0 OData-MaxVersion: 4.0 --batch_contactfetch--
Sample Code:
var req = new XMLHttpRequest(); req.open("POST", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/$batch", true); req.setRequestHeader("OData-MaxVersion", "4.0"); req.setRequestHeader("OData-Version", "4.0"); req.setRequestHeader("Accept", "application/json"); req.setRequestHeader("Content-Type", "multipart/mixed;boundary=batch_contactfetch"); req.onreadystatechange = function() { if (this.readyState === 4) { req.onreadystatechange = null; if (this.status === 200) { var response = JSON.parse(this.response.substring(this.response.indexOf('{'),this.response.lastIndexOf('}')+1)); console.log(response.value); } else { Xrm.Utility.alertDialog(this.statusText); } } }; var body = '--batch_contactfetch\n' body += 'Content-Type: application/http\n' body += 'Content-Transfer-Encoding: binary\n' body += '\n' body += 'GET ' + Xrm.Page.context.getClientUrl()+'/api/data/v8.2/contacts?fetchXml=<fetch count="10" ><entity name="contact" ><attribute name="fullname" /></entity></fetch> HTTP/1.1\n' body += 'Content-Type: application/json\n' body += 'OData-Version: 4.0\n' body += 'OData-MaxVersion: 4.0\n' body += '\n' body += '--batch_contactfetch--' req.send(body);
Request Screenshot
Response Screenshot
