Part-2 – Code Conversion to latest Web API (Dynamics 365)
Views (932)
Pick Item from Queue
Using 2011 endpoint in CRM 2011 to CRM 2016 we can pick item from queue as given below
//--***********************************************************************************************// //-- Pick Queue From Record by Using 2011 End Point //--***********************************************************************************************// //--Let's suppose objectId is opportunityid for our opportunity record function getQueueItemIdFromRecord(objectId) { //Get the customer type var clientURL = Xrm.Page.context.getClientUrl(); //var recordId = customerId.replace("{", "").replace("}", ""); var oDataUri = clientURL + "/xrmservices/2011/OrganizationData.svc/QueueItemSet?$select=QueueItemId&$filter=ObjectId/Id eq guid'" + objectId + "'"; var jSonArray = new Array(); jQuery.ajax({ type: "GET", contentType: "application/json; charset=utf-8", datatype: "json", url: oDataUri, async: false, beforeSend: function (XMLHttpRequest) { //Specifying this header ensures that the results will be returned as JSON. XMLHttpRequest.setRequestHeader("Accept", "application/json"); }, success: function (data, textStatus, XmlHttpRequest) { isActiveProspect = false; //if return results if (typeof data !== "undefined" && data.d != null && typeof data.d !== "undefined") { if (data.d.results.length == 1) { if (data.d.results[0].QueueItemId) { // alert((data.d.results[0].QueueItemId)); queueId = data.d.results[0].QueueItemId; } } } }, error: function (XmlHttpRequest, textStatus, errorThrown) { alert("Error Occurred : " + errorThrown); //Error } }); } function pickItemFromQueue() { var opportunityId = '3e4c5587-8bc0-4246-aa00-cf9f50265e4e'; var queueItemId = getQueueItemIdFromRecord(opportunityId); var requestMain = "" requestMain += "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"; requestMain += " <s:Body>"; requestMain += " <Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">"; requestMain += " <request i:type=\"b:PickFromQueueRequest\" xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\" xmlns:b=\"http://schemas.microsoft.com/crm/2011/Contracts\">"; requestMain += " <a:Parameters xmlns:c=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">"; requestMain += " <a:KeyValuePairOfstringanyType>"; requestMain += " <c:key>QueueItemId</c:key>"; requestMain += " <c:value i:type=\"ser:guid\" xmlns:ser=\"http://schemas.microsoft.com/2003/10/Serialization/\">" + queueItemId + "</c:value>"; requestMain += " </a:KeyValuePairOfstringanyType>"; requestMain += " <a:KeyValuePairOfstringanyType>"; requestMain += " <c:key>WorkerId</c:key>"; requestMain += " <c:value i:type=\"ser:guid\" xmlns:ser=\"http://schemas.microsoft.com/2003/10/Serialization/\">" + Xrm.Page.context.getUserId() + "</c:value>"; requestMain += " </a:KeyValuePairOfstringanyType>"; requestMain += " <a:KeyValuePairOfstringanyType>"; requestMain += " <c:key>RemoveQueueItem</c:key>"; requestMain += " <c:value i:type=\"d:boolean\" xmlns:d=\"http://www.w3.org/2001/XMLSchema\">false</c:value>"; requestMain += " </a:KeyValuePairOfstringanyType>"; requestMain += " </a:Parameters>"; requestMain += " <a:RequestId i:nil=\"true\" />"; requestMain += " <a:RequestName>PickFromQueue</a:RequestName>"; requestMain += " </request>"; requestMain += " </Execute>"; requestMain += " </s:Body>"; requestMain += "</s:Envelope>"; var orgServicePath = "/XRMServices/2011/Organization.svc/web"; var clientURL = Xrm.Page.context.getClientUrl(); var serviceURL = clientURL + orgServicePath; var req = new XMLHttpRequest(); req.open("POST", serviceURL, false) // Responses will return XML. It isn't possible to return JSON. req.setRequestHeader("Accept", "application/xml, text/xml, */*"); req.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); req.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute"); req.onreadystatechange = function () { Response(req, successCallback, errorCallback); }; req.send(requestMain); }
From 2016 onwards we can use latest web API approach like this
//--***********************************************************************************************// //-- Pick Queue From Record by Using Web API //--***********************************************************************************************// function getQueueItemIdFromRecord(objectId) { var queueItemId = null; objectId = objectId.replace(/\{|\}/gi, ''); var req = new XMLHttpRequest(); req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/queueitems?$select=queueitemid&$filter=_objectid_value eq " + objectId, false); req.setRequestHeader("OData-MaxVersion", "4.0"); req.setRequestHeader("OData-Version", "4.0"); req.setRequestHeader("Accept", "application/json"); req.setRequestHeader("Content-Type", "application/json; charset=utf-8"); req.setRequestHeader("Prefer", "odata.include-annotations=\"*\""); req.onreadystatechange = function () { if (this.readyState === 4) { req.onreadystatechange = null; if (this.status === 200) { if (this.response == null || this.response == undefined) { if (this.responseText != undefined) { var result = JSON.parse(this.responseText); if (result != null && result.value[0] != undefined && result.value[0] != null) { queueItemId = result.value[0]['queueitemid']; return queueItemId; } } } else { var results = JSON.parse(this.response); for (var i = 0; i < results.value.length; i++) { queueItemId = results.value[i]["queueitemid"]; break; } return queueItemId; } } else { //Xrm.Utility.alertDialog(this.statusText); } } }; req.send(); return queueItemId; } // https://easycrmblog.wordpress.com/2016/05/20/custom-pick-button-on-queueitem/ function pickItemFromQueue() { var opportunityId = '3e4c5587-8bc0-4246-aa00-cf9f50265e4e'; var queueItemId = getQueueItemIdFromRecord(opportunityId); var userId = Xrm.Page.context.getUserId().replace(/\{|\}/gi, ''); var parameters = {}; var systemuser = {}; systemuser.systemuserid = userId; systemuser["@odata.type"] = "Microsoft.Dynamics.CRM.systemuser"; parameters.SystemUser = systemuser; parameters.RemoveQueueItem = false; var req = new XMLHttpRequest(); req.open("POST", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/queueitems(" + queueItemId + ")/Microsoft.Dynamics.CRM.PickFromQueue", false); req.setRequestHeader("OData-MaxVersion", "4.0"); req.setRequestHeader("OData-Version", "4.0"); req.setRequestHeader("Accept", "application/json"); req.setRequestHeader("Content-Type", "application/json; charset=utf-8"); req.send(JSON.stringify(parameters)); req.onreadystatechange = function () { if (this.readyState === 4) { debugger; req.onreadystatechange = null; if (this.status === 204) { //Success - No Return Data - Do Something } else { //Xrm.Utility.alertDialog(this.statusText); } } }; }
References:
https://easycrmblog.wordpress.com/2016/05/20/custom-pick-button-on-queueitem/
This was originally posted here.
*This post is locked for comments