domingo, 23 de septiembre de 2007

Como saber si un usuario pertenece a un rol específico en CRM

Con esta validación sabemos si el usuario que esta actualmente logeado en CRM pertenece a un rol en específico, mas abajo vienen todas las funciones que utilice y que ademas por separado las podemos utilizar par otras cosas, como por ejemplo, saber el GUID o Todos los roles a los que pertenece, den una leída espero les sea muy útil.

if(currentUserHasRole('GICSA Administrador Cuentas por Cobrar')){
alert("Pertenece a GICSA Administrador Cuentas por Cobrar");
}else{
alert("No pertenece GICSA Administrador Cuentas por Cobrar");
}

Función para obtener el GUID del Usuario actual

function getUserId(){
try {
var command = new RemoteCommand("SystemUser", "WhoAmI", "/MSCRMServices/"); var oResult = command.Execute();
if (oResult.Success) {
return oResult.ReturnValue.UserId;
}
}
catch(e) {
alert("Error while retrieving userid.");
}
return null;}

Función que obtiene los roles del usuario actual

function getUserRoles(userId){
try {
var command = new RemoteCommand("UserManager", "GetUserRoles"); command.SetParameter("userIds", "" + userId + "");
var oResult = command.Execute();
if (oResult.Success) {
return oResult.ReturnValue;
}
}
catch(e)
{
alert("Error while retrieving roles.");
}
return null;}

Función que busca si el usuario UserId tiene un rol específico

function userHasRole(userId, roleName){
result = getUserRoles(userId);
if (result != null) {
var oXml = new ActiveXObject("Microsoft.XMLDOM");
oXml.resolveExternals = false;
oXml.async = false;
oXml.loadXML(result);
roleNode = oXml.selectSingleNode("/roles/role[name='" + roleName + "']");
if (roleNode != null) {
if (roleNode.selectSingleNode("roleid[@checked='true']") != null)
return true;
}
}
return false;
}

Función para saber si un usuario actual tiene un rol específico
- devuelve true,false

function currentUserHasRole(roleName){
var userId = getUserId();
return userHasRole(userId, roleName);
}

Saludos

Agregar un Archivo .JS con JavaScript

Si deseas poder usar funciones que tengas en un archivo .js, tan solo basta con agregar estas líneas y listo.

var script = document.createElement('script');
script.language = 'javascript';
script.src = 'MisFunciones.js';
document.getElementsByTagName('head')[0].appendChild(script);
var f = function(){
alert("cargando JS");
if (event.srcElement.readyState == "loaded")
var data=hola("Miguel"); // alguna funcion de MisFunciones.js
alert(data);
}
script.attachEvent("onreadystatechange", f);

Saludos!!

viernes, 21 de septiembre de 2007

Como Obtener el rol de un usuario de CRM

Hola mis queridos CRM'eros, espero que como yo algun día ocupen estas funciones para obtener el rol de el usuario que esta logeado en crm y alguna operación ejecuta un WS.


//Para obtener el Guid Id del usuario que ejecuta el WS.
WhoAmIRequest userRequest = new WhoAmIRequest();
WhoAmIResponse userResp = (WhoAmIResponse)
oCrmService.Execute(userRequest);
userResp.UserId;
string UserRole=GetRole(userResp.UserId;)


private String GetRole(Guid UserID) {
CrmService oCrmService = new CrmService();
oCrmService.Credentials = System.Net.CredentialCache.DefaultCredentials;
QueryExpression qe = new QueryExpression();
qe.EntityName = "role";
qe.ColumnSet = new AllColumns();
LinkEntity le = new LinkEntity();
le.LinkFromEntityName = "role";
le.LinkFromAttributeName = "roleid";
le.LinkToEntityName = "systemuserroles";
le.LinkToAttributeName = "roleid";

LinkEntity le2 = new LinkEntity();
le2.LinkFromEntityName = "systemuserroles";
le2.LinkFromAttributeName = "systemuserid";
le2.LinkToEntityName = "systemuser";
le2.LinkToAttributeName = "systemuserid";
ConditionExpression ce = new ConditionExpression();
ce.AttributeName = "systemuserid";
ce.Operator = ConditionOperator.Equal;
ce.Values = new object[]{UserID};

le2.LinkCriteria = new FilterExpression();
le2.LinkCriteria.Conditions = new ConditionExpression[]{ce};

le.LinkEntities = new LinkEntity[]{le2};
qe.LinkEntities = new LinkEntity[]{le};

BusinessEntityCollection bec = oCrmService.RetrieveMultiple(qe);
if (bec.BusinessEntities.Length > 0) {
return ((role)bec.BusinessEntities[0]).name.ToString();
}
else
throw new Exception("User not found");
}


Saludos!!!