Impersonation while calling Action using JavaScript

Unlike workflows Actions always executes in user context by default.

If you want to impersonate and execute action from service account . Use below line in you code to call the action

  1. request.setRequestHeader(“MSCRMCallerID”, “214b236e-2970-ea11-a811-000d3a2c57ba”); // here pass the Guid of the service account or any user.
  2. Note : User should have act on behalf privilege.

// Call action sample code
function callAction(primaryControl,teamId,queueID,ActionName){
var parameters = {};
var queue = {};
queue.queueid = queueID; //Delete if creating new record
queue[“@odata.type”] = “Microsoft.Dynamics.CRM.queue”;
parameters.Queue = queue;
var team = {};
team.teamid = teamId; //Delete if creating new record
team[“@odata.type”] = “Microsoft.Dynamics.CRM.team”;
parameters.Team = team;
var globalContext = Xrm.Utility.getGlobalContext(); // get global context
var request = new XMLHttpRequest();
request.open(“POST”, globalContext.getClientUrl() + “/api/data/v9.1/opportunities(“+ OpportunityId +”)/Microsoft.Dynamics.CRM.dss_” + ActionName, true);
request.setRequestHeader(“OData-MaxVersion”, “4.0”);
request.setRequestHeader(“OData-Version”, “4.0”);
request.setRequestHeader(“Accept”, “application/json”);
request.setRequestHeader(“Content-Type”, “application/json; charset=utf-8”);
request.setRequestHeader(“MSCRMCallerID”, “214b236e-2970-ea11-a811-000d3a2c57ba”);
request.onreadystatechange = function() {
if (this.readyState === 4) {
request.onreadystatechange = null;
// alert(this.status);
if (this.status === 204) {
Xrm.Utility.openEntityForm(“opportunity”,OpportunityId);
//Success – No Return Data – Do Something
} else {
Xrm.Utility.alertDialog(this.statusText);
}
}
};
request.send(JSON.stringify(parameters));
}

Hope this helps 🙂

Leave a comment