Wednesday, January 20, 2016

MS CRM 2011 - Enable button based on users security role - Custom rule using javascript

// JavaScript source code
function VisibleButtonBasedOnUserRole() {
    try
    {
        var CRMRole = UserHasRole("System Administrator");
        if (CRMRole) {
            return true;
        } else {
            return false;
        }
    }
    catch (ex) {
        alert(ex.message);
    }

}

function UserHasRole(roleName) {
    var serverUrl = Xrm.Page.context.getServerUrl();
    var BUId = getAuthorizedBU();
    var oDataEndpointUrl = serverUrl + "/XRMServices/2011/OrganizationData.svc/";
 
    oDataEndpointUrl += "RoleSet?$top=1&$filter=Name eq '" + roleName + "' and BusinessUnitId/Id eq(guid'" + BUId + "')";
    var service = GetRequestObject();

    if (service != null) {
        service.open("GET", oDataEndpointUrl, false);
        service.setRequestHeader("X-Requested-Width", "XMLHttpRequest");
        service.setRequestHeader("Accept", "application/json, text/javascript, */*");
        service.send(null);

        var requestResults = eval('(' + service.responseText + ')').d;


        if (requestResults != null && requestResults.results.length == 1) {
            var role = requestResults.results[0];

            var id = role.RoleId;

            var currentUserRoles = Xrm.Page.context.getUserRoles();

            for (var i = 0; i < currentUserRoles.length; i++) {
                var userRole = currentUserRoles[i];
         
                if (GuidsAreEqual(userRole, id)) {
                    return true;
                }
            }
        }
    }

    return false;
}

function getAuthorizedBU() {

    var BUId = null;
    var serverUrl = Xrm.Page.context.getServerUrl();
    var UserID = Xrm.Page.context.getUserId();

    var oDataEndpointUrl = serverUrl + "/XRMServices/2011/OrganizationData.svc/";
    oDataEndpointUrl += "/SystemUserSet?$select=BusinessUnitId&$filter=SystemUserId eq (guid'" + UserID + "')";


    var service = GetRequestObject();

    if (service != null) {
        service.open("GET", oDataEndpointUrl, false);
        service.setRequestHeader("X-Requested-Width", "XMLHttpRequest");
        service.setRequestHeader("Accept", "application/json, text/javascript, */*");
        service.send(null);

        var requestResults = eval('(' + service.responseText + ')').d;

        if (requestResults != null && requestResults.results.length == 1) {
            var businessUnit = requestResults.results[0];
            BUId = businessUnit.BusinessUnitId.Id;
        }
    }

    return BUId;
}

function GetRequestObject() {
    if (window.XMLHttpRequest) {
        return new window.XMLHttpRequest;
    }
    else {
        try {
            return new ActiveXObject("MSXML2.XMLHTTP.3.0");
        }
        catch (ex) {
            return null;
        }
    }
}


function GuidsAreEqual(guid1, guid2) {
    var isEqual = false;

    if (guid1 == null || guid2 == null) {
        isEqual = false;
    }
    else {
        isEqual = guid1.replace(/[{}]/g, "").toLowerCase() == guid2.replace(/[{}]/g, "").toLowerCase();
    }

    return isEqual;
}

No comments:

Post a Comment