AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.10.2015, 12:49   #1  
andyandy is offline
andyandy
Даёшь прямые руки!
 
36 / 10 (1) +
Регистрация: 06.02.2014
Xrm.Page.context.getUserRoles()
Всем доброго времени суток!

Написал небольшой код для определения наличия у пользователя нужной роли. Прогнал эту функцию на нескольких тестовых пользователях и после положительного результата впихнул на боевой сервер. И всё работало замечательно до тех пор пока не нашлось несколько пользователей, у которых эта функция не срабатывала. Добавил несколько алертов для того что бы понять что же там не так и обнаружил что у этих "избранных" пользователей в строке помеченной *** возвращается совершенно другое значения ID нежели на самом деле имеет эта группа. Назначал разные роли для этих пользователей и скрипт тоже возвращал какие-то другие значения. Похоже, что я упустил какой - то нюанс в этом коде, но хоть убей не пойму в чём он заключается...
Код:
function checkUserGroups(group/*группа в виде ID без фигурных скобок*/)//Проверка пользователя на участие в группе
{
	if (!group)
	{
		//alert ("Пусто!!!");
		return false;
	}
	var userroles;
	var result = false;
	userroles = Xrm.Page.context.getUserRoles();
	//alert (typeof userroles);
	group = group.toLowerCase();
	//alert (userroles);

	//alert (UserRoles[1]);
	for (var i=0; i<=userroles.length; i++) {
		//alert ("Сейчас сравним правильную группу: \"" + group + "\" сравним со значением из массива: \"" + userroles[i]+"\"");
		if (userroles[i]) {
		//alert( "Обнаружена роль: " + userroles[i].toUpperCase()); //***
		if (userroles[i] == group) {
			//alert("Правильная роль обнаружена!" + userroles[i].toUpperCase());
			result = true;
			return result;
		}
	}
	}
	//alert ("Результат проверки группы '"+group+"' != "+ result);
	return result;
}
Старый 29.10.2015, 13:04   #2  
slivka_83 is offline
slivka_83
Консультант-джедай
Аватар для slivka_83
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
1,683 / 374 (16) ++++++
Регистрация: 18.12.2008
Адрес: default city
Пользователи из разных подразделений?
__________________
Крокодил, крокожу и буду крокодить.
Человек человеку - волк , а зомби зомби - зомби.
Экстремал и буду экстремать!
Блога
За это сообщение автора поблагодарили: andyandy (1).
Старый 29.10.2015, 13:10   #3  
andyandy is offline
andyandy
Даёшь прямые руки!
 
36 / 10 (1) +
Регистрация: 06.02.2014
Так точно, в разных!
Не думал, что проблема может быть в этом . Получается нужно добавлять сразу несколько ID для каждого подразделения... Попробую спасибо за быстрый ответ.
Старый 29.10.2015, 13:22   #4  
Roman08 is offline
Roman08
Участник
 
93 / 29 (1) +++
Регистрация: 27.02.2008
Адрес: Украина; Житомир
Записей в блоге: 1
Цитата:
Сообщение от andyandy Посмотреть сообщение
. Получается нужно добавлять сразу несколько ID для каждого подразделения... .
Если подразделения наследуют роль из родительского, то роли с одинаковыми названиями создаются во всех дочерних подразделениях. Чтобы на хардкодить гуиды, мы в тех. условиях с заказчиком оговорили названия ролей, которые не должны изменяться, и уже в коде используем эти названия. Решение тоже не 100% элегантное, но перенос кода осуществляется легче.
Старый 29.10.2015, 13:43   #5  
andyandy is offline
andyandy
Даёшь прямые руки!
 
36 / 10 (1) +
Регистрация: 06.02.2014
Всё заработало спасибо! С названиями интересный вариант, но мало ли кто нибудь его изменит в моё отсутствие и забудет об этом упомянуть . Хотя я так понимаю 100% гибкого решения не придумаешь...
Старый 02.11.2015, 14:45   #6  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Я в своем решении хардкодил только идентификаторы головных ролей (считайте ролей в головном подразделении). Далее скриптом запрашивал ParentRootRoleId от ролей пользователя и сравнивал с хардкодом.

Еще есть вариант стразу запросить рутовые роли текущего пользователя через OData: /SystemUserRolesSet?$select=systemuserroles_association/ParentRootRoleId&$expand=systemuserroles_association&$filter=SystemUserId eq guid'sample', но у меня так не вышло. Через SOAP не пробовал, но там точно должно работать.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional

Последний раз редактировалось Артем Enot Грунин; 02.11.2015 в 14:55.
Старый 10.11.2015, 15:36   #7  
g.Naukovych is offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Регистрация: 23.03.2011
Мы решаем проблему следующим образом.

у нас есть специальная сущность "Настройка", где есть уникальный строковый идентификатор, по которому эту настройку можно найти и поле значение

в поле значение мы через разделитель задаем названия ролей

в коде, получаем значение, разбиваем на массив ролей и выполняем проверку.

если название роли будет изменено, то достаточно изменить его в настройке и не менять код

особенно полезно, когда неожиданно функционал должен быстро начать работать и для другой роли
__________________
Мой блог https://procrm.tv
Теги
groupid, crm2011

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Microsoft Dynamics CRM Team Blog: Updated Xrm.Page Script Library Template Blog bot Dynamics CRM: Blogs 0 06.03.2013 02:13
Gareth Tucker: Duplicate Record Button using Jscript in Microsoft CRM 2011 Blog bot Dynamics CRM: Blogs 0 31.07.2012 16:11
axforum blogs: Xrm.Page Controls vs Attributes Blog bot Dynamics CRM: Blogs 0 29.04.2012 00:14
Xrm.Page smlrus Dynamics CRM: Разработка 6 22.12.2011 23:23
Gareth Tucker: Quick Create Contact from the Phone Call Form Blog bot Dynamics CRM: Blogs 0 23.08.2011 12:11
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:30.