Tuesday, January 7, 2020

checking current login user Businessunit and roles and geting value assign to lookup field

Step1: Get current login user
Step2: Check login user Business unit if the business unit is a library
Step3: Get user role name if user role name is case management rep
Step4: Get the queue record & set that queue record email-sender lookup field in  email entity
Step5: download XRM soap filed and call that file



function isLibraryUser(executionContext)
{
debugger;
var formContext = executionContext.getFormContext();
var userSettings = Xrm.Utility.getGlobalContext().userSettings;
var userid = userSettings.userId.replace('{','').replace('}','');
var fetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true'>" +
  "<entity name='systemuser'>" +
    "<attribute name='fullname' />" +
    "<attribute name='businessunitid' />" +
    "<attribute name='title' />" +
    "<attribute name='address1_telephone1' />" +
    "<attribute name='positionid' />" +
    "<attribute name='systemuserid' />" +
    "<order attribute='fullname' descending='false' />" +
    "<filter type='and'>" +
      "<condition attribute='businessunitid' operator='eq' uiname='Library (LIB)' uitype='businessunit' value='{884BF9AC-62DB-E911-A813-000D3A851FF7}' />" +
      "<condition attribute='systemuserid' operator='eq' uiname='# CRM_DEV1' uitype='systemuser' value='"+userid+"' />" +
    "</filter>" +
    "<link-entity name='systemuserroles' from='systemuserid' to='systemuserid' visible='false' intersect='true'>" +
      "<link-entity name='role' from='roleid' to='roleid' alias='ac'>" +
        "<filter type='and'>" +
          "<condition attribute='name' operator='eq' value='Case Management Rep' />" +
        "</filter>" +
      "</link-entity>" +
    "</link-entity>" +
  "</entity>" +
"</fetch>";

var fetchedUsers = XrmServiceToolkit.Soap.Fetch(fetchXml);
    if (fetchedUsers.length > 0) {

fetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+
  "<entity name='queue'>"+
"<attribute name='name' />"+
"<attribute name='emailaddress' />"+
"<attribute name='queueid' />"+
"<order attribute='name' descending='false' />"+
"<filter type='and'>"+
  "<condition attribute='name' operator='eq' value='Library (Lib)' />"+
"</filter>"+
  "</entity>"+
"</fetch>";
var fetchedQueue = XrmServiceToolkit.Soap.Fetch(fetchXml);
if (fetchedQueue.length > 0)
{
var recorid = fetchedQueue[0].id;
var recordname = fetchedQueue[0].attributes.name.value;
var entityname = fetchedQueue[0].logicalName;
formContext.getAttribute("sp_senderservicemailbox").setValue([{ id: recorid, name: recordname, entityType: entityname}]);
}
}
}










Tuesday, November 19, 2019




function hideColumnData(rowdata, userLCID) {
    var str = JSON.parse(rowdata);
    //step4: add webresouress in customercategory coloumn
    var coldata = str.dxc_customercategory_Value;
    var imgName;
    var tooltip;
    //step3: checking condition if the customercategory is A+,A,B then hide the next row data
    if (coldata == 282210000 || coldata == 282210001 || coldata == 282210002) {
        var currentUserId = Xrm.Page.context.getUserId();
        currentUserId = currentUserId.replace('{', '').replace('}', '');
        var currentUserRoles = getCurrentUserRoles(currentUserId);
        for (var i = 0; i < currentUserRoles.length; i++) {
            if (currentUserRoles[i] == "System Administrator") {
                $('span:contains("A+")').closest('td').next('td').css('visibility', 'hidden');
                $('span:contains("A")').closest('td').next('td').css('visibility', 'hidden');
                $('span:contains("B")').closest('td').next('td').css('visibility', 'hidden');
            }
        }
    }

    var resultarray = [imgName, tooltip];
    return resultarray;
}

//step1: getting current user id and  system user id(roleid)
function getCurrentUserRoles(currentUserId) {
    var userRoleName = new Array();
    var req = new XMLHttpRequest();
    req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.1/systemuserrolescollection?$select=roleid&$filter=systemuserid eq " + currentUserId, 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) {
                var results = JSON.parse(this.response);
                for (var i = 0; i < results.value.length; i++) {
                    var userRoleId = results.value[i]["roleid"];

                    userRoleName[i] = GetRoleName(userRoleId);
                }
            } else {
                Xrm.Utility.alertDialog(this.statusText);
                return userRoleName;
            }
        }
    };
    req.send();
    return userRoleName;
}
//step2: get role name
function GetRoleName(userRoleId) {
    var userRoleName;
    var req = new XMLHttpRequest();
    req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.0/roles(" + userRoleId + ")?$select=name,roleid", 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) {
                var result = JSON.parse(this.response);
                userRoleName = result["name"];
                //var roleid = result["roleid"];
                return userRoleName;
            } else {
                Xrm.Utility.alertDialog(this.statusText);
                return userRoleName;
            }
        }
    };
    req.send();
    return userRoleName;
}

Monday, May 6, 2019

Hiding column data based on current user role

Description:
hiding column data based on current user role.
For this I got the current user id, Query on System user roles table to get the role of the current user. If the role matches the criteria, I am hiding the revenue column details in the opportunity grid. 


I have used JQuery, view customizations and REST API calls, for implementing the above scenario.

    // checking condition if the customercategory is A+,A,B then hide the next row data

function hideColumnData(rowdata, userLCID) {
    var str = JSON.parse(rowdata);
    var coldata = str.dxc_customercategory_Value;
    var imgName;
    var tooltip;
    if (coldata == 282210000 || coldata == 282210001 || coldata == 282210002) {
        var currentUserId = Xrm.Page.context.getUserId();
        currentUserId = currentUserId.replace('{', '').replace('}', '');
        var currentUserRoles = getCurrentUserRoles(currentUserId);
        for (var i = 0; i < currentUserRoles.length; i++) {
            if (currentUserRoles[i] == "System Administrator") {
                $('span:contains("A+")').closest('td').next('td').css('visibility', 'hidden');
                $('span:contains("A")').closest('td').next('td').css('visibility', 'hidden');
                $('span:contains("B")').closest('td').next('td').css('visibility', 'hidden');
            }
        }
    }

    var resultarray = [imgName, tooltip];
    return resultarray;
}

//getting current user id and  system user id(roleid)
function getCurrentUserRoles(currentUserId) {
    var userRoleName = new Array();
    var req = new XMLHttpRequest();
    req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.1/systemuserrolescollection?$select=roleid&$filter=systemuserid eq " + currentUserId, 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) {
                var results = JSON.parse(this.response);
                for (var i = 0; i < results.value.length; i++) {
                    var userRoleId = results.value[i]["roleid"];

                    userRoleName[i] = GetRoleName(userRoleId);
                }
            } else {
                Xrm.Utility.alertDialog(this.statusText);
                return userRoleName;
            }
        }
    };
    req.send();
    return userRoleName;
}
//getting  role name
function GetRoleName(userRoleId) {
    var userRoleName;
    var req = new XMLHttpRequest();
    req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.0/roles(" + userRoleId + ")?$select=name,roleid", 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) {
                var result = JSON.parse(this.response);
                userRoleName = result["name"];
                //var roleid = result["roleid"];
                return userRoleName;
            } else {
                Xrm.Utility.alertDialog(this.statusText);
                return userRoleName;
            }
        }
    };
    req.send();
    return userRoleName;
}
//calling webresource in coloumn











Monday, April 15, 2019

Ckeck Users Exists in Team D365

function Teammemberexists()
{
var returnresult = false;
var req = new XMLHttpRequest();
req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v9.1/teammemberships?$select=systemuserid,teamid&$filter=systemuserid eq "+systemuserid+" and  teamid eq "+Teamid, true);
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) {
            var results = JSON.parse(this.response);
            if(results.value.length > 0)
            returnresult = true;
           
        } else {
            Xrm.Utility.alertDialog(this.statusText);
            return returnresult;
        }
    }
};
req.send();
return returnresult;
}

Sunday, April 14, 2019

Show/Hide Ribbonbutton Based on current userroles


Step:1
Create ribbon button

Step:2
Add Enable Rule

Step:3
Add Custom Rule

Call Below "showhideribbonbutton" function
NOTE: mention role names for whom button has to be shown


function showhideribbonbutton(rowdata, userLCID) {
var result=false;
        var currentUserId = Xrm.Page.context.getUserId();
        currentUserId = currentUserId.replace('{', '').replace('}', '');
        var currentUserRoles = getCurrentUserRoles(currentUserId);
        for (var i = 0; i < currentUserRoles.length; i++) {
            if (currentUserRoles[i] == "System Administrator" ||currentUserRoles[i] == "CSR MANAGER") {
               result=true;
            }
        }
 
    return result;
}


function getCurrentUserRoles(currentUserId) {
    var userRoleName = new Array();
    var req = new XMLHttpRequest();
    req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.1/systemuserrolescollection?$select=roleid&$filter=systemuserid eq " + currentUserId, 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) {
                var results = JSON.parse(this.response);
                for (var i = 0; i < results.value.length; i++) {
                    var userRoleId = results.value[i]["roleid"];

                    userRoleName[i] = GetRoleName(userRoleId);
                }
            } else {
                Xrm.Utility.alertDialog(this.statusText);
                return userRoleName;
            }
        }
    };
    req.send();
    return userRoleName;
}

function GetRoleName(userRoleId) {
    var userRoleName;
    var req = new XMLHttpRequest();
    req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.0/roles(" + userRoleId + ")?$select=name,roleid", 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) {
                var result = JSON.parse(this.response);
                userRoleName = result["name"];
                //var roleid = result["roleid"];
                return userRoleName;
            } else {
                Xrm.Utility.alertDialog(this.statusText);
                return userRoleName;
            }
        }
    };
    req.send();
    return userRoleName;
}

Saturday, March 23, 2019

assign record - bulk

// getting current user id

function GetGUIDofCurrentUser() {
    debugger;
    var UserGUID = Xrm.Page.context.getUserId();
    if (UserGUID != null) {
        //alert(UserGUID);

        var currentid = UserGUID.replace('{', '').replace('}', '');
        var managerid =Validateposition_getManagerId(currentid);
        var opportunitiesrec = getopportunitys(currentid);
       AssignRecordToManager(managerid, opportunityrec);
    }
}

//getting user record details

  function Validateposition_getManagerId(currentid) {
var _parentsystemuserid_value;
    var req = new XMLHttpRequest();
req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/systemusers("+ currentid +")?$select=systemuserid,_parentsystemuserid_value,_positionid_value", false);
    //req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/systemusers(' + currentid +')?$select=_parentsystemuserid_value,_positionid_value", true);
    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) {
                var result = JSON.parse(this.response);
                _parentsystemuserid_value = result["_parentsystemuserid_value"];
                //var _parentsystemuserid_value_formatted = result["_parentsystemuserid_value@OData.Community.Display.V1.FormattedValue"];
                //var _parentsystemuserid_value_lookuplogicalname = result["_parentsystemuserid_value@Microsoft.Dynamics.CRM.lookuplogicalname"];
                var _positionid_value = result["_positionid_value"];
                var _positionid_value_formatted = result["_positionid_value@OData.Community.Display.V1.FormattedValue"];
                //var _positionid_value_lookuplogicalname = result["_positionid_value@Microsoft.Dynamics.CRM.lookuplogicalname"];
                if (_positionid_value_formatted == "bankmanger") {
                    return _parentsystemuserid_value;
                }
            }
            else {
                Xrm.Utility.alertDialog(this.statusText);
return _parentsystemuserid_value;
            }
        }
    };

    req.send();
return _parentsystemuserid_value;
}
//getting all opportunities records owned by user
  function getopportunities(currentid) {

var results;
        //var opportunityid = UserGUID.replace('{', '').replace('}', '');
        var req = new XMLHttpRequest();
        req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/opportunities?$select=name,opportunityid&$filter=statecode eq 0 and  _ownerid_value eq "+currentid+"", 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) {
                    results = JSON.parse(this.response);
                    return results;

                } else {
                    Xrm.Utility.alertDialog(this.statusText);
return results;
                }
            }
        };
        req.send();
return results;
    }

//update ownerid to assign on the record
function AssignRecordToManager(managerid, results) {
for (var i = 0; i < results.value.length; i++) {
var opportunityid = results.value[i]["opportunityid"];
opportunityid = opportunityid.replace('{', '').replace('}', '');
var entity = {};
entity.new_ownerid = managerid;
var req = new XMLHttpRequest();
req.open("PATCH", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/opportunities("+opportunityid+")", true);
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.onreadystatechange = function() {
if (this.readyState === 4) {
req.onreadystatechange = null;
if (this.status === 204) {
//Success - No Return Data - Do Something
var a =67;
} else {
Xrm.Utility.alertDialog(this.statusText);
}
}
};
req.send(JSON.stringify(entity));
}
}



//trigger plugin on ownerid field update to assign to manager

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Xrm.Sdk;
using System.ServiceModel;
using Microsoft.Crm.Sdk.Messages;

namespace opportunities
{
    public class assignopportunity:IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {

            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IOrganizationService service = factory.CreateOrganizationService(context.UserId);
            ITracingService tracingservice = (ITracingService)serviceProvider.GetService(typeof(ITracingService));

            Entity _opportunity = null;
            string _ownerid=string.Empty;

            if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
            {
                _opportunity = (Entity)context.InputParameters["Target"];
                tracingservice.Trace("entity");
            }
            if (_opportunity.Attributes.Contains("new_ownerid") && _opportunity.Attributes["new_ownerid"] != null)
            {
                _ownerid = (string)_opportunity.Attributes["new_ownerid"];
                if (!string.IsNullOrEmpty(_ownerid))
                {
                    tracingservice.Trace("ownerid" + _ownerid);

                    Entity _user = service.Retrieve("systemuser", new Guid(_ownerid), new Microsoft.Xrm.Sdk.Query.ColumnSet("systemuserid"));

                    AssignRequest assign = new AssignRequest
                    {
                        // User or team assigned to the child records
                        Assignee = _user.ToEntityReference(),

                        //Target child record
                        Target = _opportunity.ToEntityReference()

                    };
                    // Execute the Request
                    service.Execute(assign);
                }

            }



        }
    }
}