EnableRule is not working properly on ribbon

0
99
Forum Post: Change the Filter On option on Opportunity Associated View for Account form


Hi,

We have a ribbon where we load a JS function to check whether the logged user has any of the allowed roles to “see” the “Qualify” button on a lead; theoretically, because is not working.

For what I was able to see, the Javascript function is not reactive and the “Qualify” button loads before the function ends. Therefore the function does not hide the button.

This is the function:

function CheckSecurityRoles() {
	// Definicion de variables
	// Se leen los argumentos pasados como roles permitidos
	var allowedRoles = arguments;
	// Se lee el ID de los roles del usuario ingresado
	var loggedUserRoles = Xrm.Page.context.userSettings.securityRoles;
	
	// Se accede a la API de Xrm para obtener todos los roles del sistema
	Xrm.WebApi.retrieveMultipleRecords("roles", "?$select=name,roleid").then( 
		function success(result) {
			// Definicion de variables
			var userHasAccess = false;
			
			// Se verifican los roles devueltos y los roles permitidos
			if(result.entities.length > 0 && allowedRoles.length > 0) {
				// Definicion de variables
				var totalRoles = result.entities;
				var existingRoles = compareRolesNames(allowedRoles, totalRoles);
				
				// Se verifican los roles existentes devueltos
				if(existingRoles.length > 0) {
					userHasAccess = compareRolesID(loggedUserRoles, existingRoles);					
				} // end-if
			} // end-if
			console.log("CheckSecurityRoles() devolvió (OK): " + userHasAccess);
		// Devuelve el acceso
		return userHasAccess;
	}, // end-function
	// En caso de error en la ejecución de la API
	function (error) {
		console.log("CheckSecurityRoles() devolvió (ERROR): " + error.message);
		return false;
	});
}

function compareRolesNames(firstRoles, secondRoles) {
	// Declaración de variables
	var resultingRoles = new Array();

	// Se itera el array de roles pasados como primer argumento
	for(var firstRolesIndex = 0; firstRolesIndex < firstRoles.length; firstRolesIndex++) {
		// Se itera el array de roles pasados como segundo argumento
		for(var secondRolesIndex = 0; secondRolesIndex < secondRoles.length; secondRolesIndex++) {
			if(firstRoles[firstRolesIndex].toLowerCase() === secondRoles[secondRolesIndex].name.toLowerCase()) {
				// Se agrega al array de roles resultantes las coincidencias entre los roles del primero y segundo parámetro
				resultingRoles.push(secondRoles[secondRolesIndex]);
			} // end-if
		} // end-for
	} // end-for
	
	// Devolución de roles comparados
	return resultingRoles;
}

function compareRolesID(firstRoles, secondRoles) {
	// Declaración de variables
	var result = false;
	
	// Se iteran los roles del array pasado como primer parámetro
	for(var firstRolesIndex = 0; firstRolesIndex < firstRoles.length; firstRolesIndex++) {
		// Se iteran los roles del array pasado como segundo parámetro
		for(var secondRolesIndex = 0; secondRolesIndex < secondRoles.length; secondRolesIndex++) {
			// Se comparan los roles de cada array
			if(firstRoles[firstRolesIndex] === secondRoles[secondRolesIndex].roleid) {
				// Se otorga el acceso
				result = true;
			} //end-if
		} //end-for
	} // end-for
	
	// Se devuelve el acceso
	return result;
}

I was reading that Xrm class hasn’t an asynchronous property.

Note: I realized the function works since I debugged the entire function with `console.log(userHasAccess)`, any suggestions to make the function reactive or make it work?

Thanks in advance.



Source link

Leave a reply

Please enter your comment!
Please enter your name here