web
You’re offline. This is a read only version of the page.
close
Skip to main content
Community site session details

Community site session details

Session Id :

Part-2 – Code Conversion to latest Web API (Dynamics 365)

Spring Wave 2016 Profile Picture Spring Wave 2016 325

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.

Comments

*This post is locked for comments