In MS CRM we can enable security role to custom forms, and
only selected role users can view that form. When selecting role, all Roles are
shown form ROOT business unit, there is no option to get security role from
child business units.
In some cases if you want to show custom entity form only
for particular business unit users regardless of their role, then need to write
custom JavaScript code.
Add following function for entity form, which want to show
based on business unit, if users business unit is not allowing to view form, then
user will be redirected to other form.
var accountScript = {
showFormBasedOnBusinessUnit: function () {
var userId =
Xrm.Page.context.getUserId();
userId = userId.replace("{", "").replace("}", "");
var req = new XMLHttpRequest();
req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/systemusers(" + userId + ")?$select=_businessunitid_value", 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);
var businessunitid = result["_businessunitid_value"];
var businessunitidname = result["_businessunitid_value@OData.Community.Display.V1.FormattedValue"];
if (businessunitidname != "Finance") {
var forms =
Xrm.Page.ui.formSelector.items.get();
for (var i in forms) {
var formname =
forms[i].getLabel();
if (formname == "Information") {
forms[i].navigate();
break;
}
}
}
} else {
Xrm.Utility.alertDialog(this.statusText);
}
}
};
req.send();
}
};