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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.07.2009, 10:29   #1  
echo_igor is offline
echo_igor
Участник
Аватар для echo_igor
 
116 / 10 (1) +
Регистрация: 09.06.2009
Адрес: Ростов-на-Дону
Согласование Возможной сделки.
Подскажите как сделать.
Создан объект возможная сделка, как сделать, так чтобы его можно было завершить обычному пользователю (Коммерческая служба) , только после того как оно согласовано с руководством.
Например добавляю на форму поле Согласование и Атрибут типа bit, который может устанавливать только руководитель, и пока значение не переведенно в статус согласованно( bit = 1) , менеджер не может завершить Возможную сделку.
Как это реализовать?
Старый 22.07.2009, 10:35   #2  
Сабитов Андрей is offline
Сабитов Андрей
MCTS
Аватар для Сабитов Андрей
MCBMSS
Лучший по профессии 2009
 
851 / 122 (6) +++++
Регистрация: 07.09.2006
Адрес: СПб
Звершить, всмысле закрыть со статусом выигрыш или проигрыш ?
__________________
Старый 22.07.2009, 10:38   #3  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Lightbulb
Цитата:
Сообщение от echo_igor Посмотреть сообщение
Подскажите как сделать.
Создан объект возможная сделка, как сделать, так чтобы его можно было завершить обычному пользователю (Коммерческая служба) , только после того как оно согласовано с руководством.
Например добавляю на форму поле Согласование и Атрибут типа bit, который может устанавливать только руководитель, и пока значение не переведенно в статус согласованно( bit = 1) , менеджер не может завершить Возможную сделку.
Как это реализовать?
Такое можно реализовать плагином на сообщение Win. В теле проверяете - выполнены ли все требуемые для закрытия ньюансы и если нет - выкидываете исключение например:

Код:
throw new InvalidPluginException("Не соблюдены все условия закрытия сделки");
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 22.07.2009, 10:40   #4  
echo_igor is offline
echo_igor
Участник
Аватар для echo_igor
 
116 / 10 (1) +
Регистрация: 09.06.2009
Адрес: Ростов-на-Дону
Цитата:
Сообщение от Сабитов Андрей Посмотреть сообщение
Звершить, всмысле закрыть со статусом выигрыш или проигрыш ?
Да , именно так "Выигрыш или проигрыш", только чтобы менеджер мог это сделать только после того как руководитель дал ему на это право. В стандартной конфигурации менеджер вправе сам завершать сделку, необходимо ограничить его в этом.
Старый 22.07.2009, 10:43   #5  
slivka_83 is offline
slivka_83
Консультант-джедай
Аватар для slivka_83
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
1,683 / 374 (16) ++++++
Регистрация: 18.12.2008
Адрес: default city
Перехватываете событие сохранения как завершонное http://msdn.microsoft.com/en-us/library/cc150868.aspx
Проверяете галку. Если галко стоит - продолжаем сохранение. Нет - отменяем сохранения и выдаем сообщения "извини, чувак, ничего не получится"
__________________
Крокодил, крокожу и буду крокодить.
Человек человеку - волк , а зомби зомби - зомби.
Экстремал и буду экстремать!
Блога
Старый 23.07.2009, 10:06   #6  
echo_igor is offline
echo_igor
Участник
Аватар для echo_igor
 
116 / 10 (1) +
Регистрация: 09.06.2009
Адрес: Ростов-на-Дону
Цитата:
Сообщение от slivka_83 Посмотреть сообщение
Перехватываете событие сохранения как завершонное http://msdn.microsoft.com/en-us/library/cc150868.aspx
Проверяете галку. Если галко стоит - продолжаем сохранение. Нет - отменяем сохранения и выдаем сообщения "извини, чувак, ничего не получится"
Разобрался с перехватом сохранения, но мне же необходимо перехватывать "Закрытие возможной сделки". Какое имя у этого события? (Opportunity_OpportunityClose ?). И как выставить в ролях, доступ к полю определённых пользователей, грубо говоря частьпользователей могут видеть поле только для чтения, а часть могут изменять.
Старый 23.07.2009, 10:15   #7  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от echo_igor Посмотреть сообщение
И как выставить в ролях, доступ к полю определённых пользователей, грубо говоря частьпользователей могут видеть поле только для чтения, а часть могут изменять.
В ролях этого не сделаешь, а посему необходимо писать JavaScript. Скрипт.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 23.07.2009, 10:17   #8  
slivka_83 is offline
slivka_83
Консультант-джедай
Аватар для slivka_83
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
1,683 / 374 (16) ++++++
Регистрация: 18.12.2008
Адрес: default city
У него не имя, а код
А посмотреть этот код можно так
alert(event.Mode);

поля скрываем так http://mmcrm.ru/?p=291
__________________
Крокодил, крокожу и буду крокодить.
Человек человеку - волк , а зомби зомби - зомби.
Экстремал и буду экстремать!
Блога
Старый 23.07.2009, 12:23   #9  
echo_igor is offline
echo_igor
Участник
Аватар для echo_igor
 
116 / 10 (1) +
Регистрация: 09.06.2009
Адрес: Ростов-на-Дону
Цитата:
Сообщение от slivka_83 Посмотреть сообщение
У него не имя, а код
А посмотреть этот код можно так
alert(event.Mode);

поля скрываем так http://mmcrm.ru/?p=291
ставлю alert(event.Mode); по событию OnSave, но код же будет появляться только по нажатию Сохранить ИЛИ Сохранить и закрыть. А мне необходимо узнать код для Закрыть возможная сделка в выпадающем меню Действие.
Старый 23.07.2009, 12:52   #10  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от echo_igor Посмотреть сообщение
ставлю alert(event.Mode); по событию OnSave, но код же будет появляться только по нажатию Сохранить ИЛИ Сохранить и закрыть. А мне необходимо узнать код для Закрыть возможная сделка в выпадающем меню Действие.
Для начала. Код не может появляться - он может выполняться.

Что до кода, то он примерно такой:

Код:
if (event.Mode == 5)//Деактивация возможной сделки
{
	if (crmForm.all.<поле с заветной галочкой>.DataValue != true)//Галочка установлена
	{
		alert('Нельзя закрыть сделку.');
		event.returnValue = false;
		return false;
	}
}
Код должен быть вставлен в обработчик OnSave формы возможной сделки и он срабатывает не только по нажатию кнопок сохранить/сохранить и закрыть. Читайте SDK.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
За это сообщение автора поблагодарили: echo_igor (1).
Старый 23.07.2009, 14:26   #11  
echo_igor is offline
echo_igor
Участник
Аватар для echo_igor
 
116 / 10 (1) +
Регистрация: 09.06.2009
Адрес: Ростов-на-Дону
Цитата:
Сообщение от a33ik Посмотреть сообщение
Для начала. Код не может появляться - он может выполняться.

Что до кода, то он примерно такой:

Код:
if (event.Mode == 5)//Деактивация возможной сделки
{
	if (crmForm.all.<поле с заветной галочкой>.DataValue != true)//Галочка установлена
	{
		alert('Нельзя закрыть сделку.');
		event.returnValue = false;
		return false;
	}
}
Код должен быть вставлен в обработчик OnSave формы возможной сделки и он срабатывает не только по нажатию кнопок сохранить/сохранить и закрыть. Читайте SDK.
Спасибо, всё получилось. А чтобы поле согласование отображалось у пользователя, но перевести(поставить галочку) мог только руководитель?
Просто если скрывать поле, то пользователю, будет тяжело понять - согласована ли сделка или же нет? Если поле будет отображаться то это проблема будет снята.
Старый 23.07.2009, 14:34   #12  
slivka_83 is offline
slivka_83
Консультант-джедай
Аватар для slivka_83
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
1,683 / 374 (16) ++++++
Регистрация: 18.12.2008
Адрес: default city
вместо скрытия блокируете его

crmForm.all.<имя_поля>.Disabled = true;
__________________
Крокодил, крокожу и буду крокодить.
Человек человеку - волк , а зомби зомби - зомби.
Экстремал и буду экстремать!
Блога
Старый 23.07.2009, 14:45   #13  
Сабитов Андрей is offline
Сабитов Андрей
MCTS
Аватар для Сабитов Андрей
MCBMSS
Лучший по профессии 2009
 
851 / 122 (6) +++++
Регистрация: 07.09.2006
Адрес: СПб
Коллеги хоть и не занимаюсь больше CRM, но все-равно интересно, а как вы определите, кто может ставить галку, а кто не может ?
т.е. так называемый FieldLevelSecurity
__________________
Старый 23.07.2009, 14:48   #14  
Elka is offline
Elka
Участник
Аватар для Elka
 
431 / 22 (1) +++
Регистрация: 02.12.2008
Адрес: г. Ростов-на-Дону
Цитата:
Сообщение от Сабитов Андрей Посмотреть сообщение
Коллеги хоть и не занимаюсь больше CRM, но все-равно интересно, а как вы определите, кто может ставить галку, а кто не может ?
т.е. так называемый FieldLevelSecurity
Ну можно, например, разрешить ставить галку всем пользователям у которы х есть роль , например "директор"
Старый 23.07.2009, 14:50   #15  
slivka_83 is offline
slivka_83
Консультант-джедай
Аватар для slivka_83
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
1,683 / 374 (16) ++++++
Регистрация: 18.12.2008
Адрес: default city
Цитата:
Сообщение от Сабитов Андрей Посмотреть сообщение
Коллеги хоть и не занимаюсь больше CRM, но все-равно интересно, а как вы определите, кто может ставить галку, а кто не может ?
т.е. так называемый FieldLevelSecurity
ссылки выше
__________________
Крокодил, крокожу и буду крокодить.
Человек человеку - волк , а зомби зомби - зомби.
Экстремал и буду экстремать!
Блога
За это сообщение автора поблагодарили: Сабитов Андрей (1).
Старый 23.07.2009, 16:27   #16  
echo_igor is offline
echo_igor
Участник
Аватар для echo_igor
 
116 / 10 (1) +
Регистрация: 09.06.2009
Адрес: Ростов-на-Дону
Цитата:
Сообщение от slivka_83 Посмотреть сообщение
ссылки выше
Попробовал поддерживаемым способом, с Вашего блога( http://mmcrm.ru/?p=291 ).
Пытаюсь скрыть поле "Согласование" new_coordination для объекта Возможная сделка. После опубликования. Скрипт почему то не срабатывает под другими пользователями.
Вот код.

Код:
//Если у пользователя есть роль Системный администратор, то скрываем поле Основной телефон вместе с отображаемой подписью
if(UserHasRole("Системный администратор")) 
{
	crmForm.all.new_coordination.parentElement.parentElement.style.display='none';
}
//Проверяем, есть ли у пользователя запрашиваемая роль
function UserHasRole(roleName) {
	//get Current User Roles, oXml is an object
	var oXml = GetCurrentUserRoles();
	if(oXml != null) {
		//select the node text
		var roles = oXml.selectNodes("//BusinessEntity/q1:name");
		if(roles != null) {
			for( i = 0; i < roles.length; i++) {
				if(roles[i].text == roleName) {
					//return true if user has this role
					return true;
				}
			}
		}
	}
	//otherwise return false
	return false;
}
//Выцепляем все роли пользователя
function GetCurrentUserRoles() {
	var xml = "" +
	"<!--l version=\"1.0\" encoding=\"utf-8\-->" +
	"" +
	GenerateAuthenticationHeader() +
	" " +
	" " +
	" " +
	" role" +
	" " +
	" " +
	" name" +
	" " +
	" " +
	" false" +
	" " +
	" " +
	" roleid" +
	" role" +
	" systemuserroles" +
	" roleid" +
	" Inner" +
	" " +
	" " +
	" systemuserid" +
	" systemuserroles" +
	" systemuser" +
	" systemuserid" +
	" Inner" +
	" " +
	" And" +
	" " +
	" " +
	" systemuserid" +
	" EqualUserId" +
	" " +
	" " +
	" " +
	" " +
	" " +
	" " +
	" " +
	" " +
	" " +
	" " +
	"" +
	"";

	var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");

	xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
	xmlHttpRequest.setRequestHeader("SOAPAction"," http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
	xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
	xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
	xmlHttpRequest.send(xml);

	var resultXml = xmlHttpRequest.responseXML;
	return(resultXml);
}
Старый 23.07.2009, 16:31   #17  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от echo_igor Посмотреть сообщение
Попробовал поддерживаемым способом, с Вашего блога( http://mmcrm.ru/?p=291 ).
Пытаюсь скрыть поле "Согласование" new_coordination для объекта Возможная сделка. После опубликования. Скрипт почему то не срабатывает под другими пользователями.
Вот код.

Код:
//Если у пользователя есть роль Системный администратор, то скрываем поле Основной телефон вместе с отображаемой подписью
if(UserHasRole("Системный администратор")) 
{
	crmForm.all.new_coordination.parentElement.parentElement.style.display='none';
}
//Проверяем, есть ли у пользователя запрашиваемая роль
function UserHasRole(roleName) {
	//get Current User Roles, oXml is an object
	var oXml = GetCurrentUserRoles();
	if(oXml != null) {
		//select the node text
		var roles = oXml.selectNodes("//BusinessEntity/q1:name");
		if(roles != null) {
			for( i = 0; i < roles.length; i++) {
				if(roles[i].text == roleName) {
					//return true if user has this role
					return true;
				}
			}
		}
	}
	//otherwise return false
	return false;
}
//Выцепляем все роли пользователя
function GetCurrentUserRoles() {
	var xml = "" +
	"<!--l version=\"1.0\" encoding=\"utf-8\-->" +
	"" +
	GenerateAuthenticationHeader() +
	" " +
	" " +
	" " +
	" role" +
	" " +
	" " +
	" name" +
	" " +
	" " +
	" false" +
	" " +
	" " +
	" roleid" +
	" role" +
	" systemuserroles" +
	" roleid" +
	" Inner" +
	" " +
	" " +
	" systemuserid" +
	" systemuserroles" +
	" systemuser" +
	" systemuserid" +
	" Inner" +
	" " +
	" And" +
	" " +
	" " +
	" systemuserid" +
	" EqualUserId" +
	" " +
	" " +
	" " +
	" " +
	" " +
	" " +
	" " +
	" " +
	" " +
	" " +
	"" +
	"";

	var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");

	xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
	xmlHttpRequest.setRequestHeader("SOAPAction"," http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
	xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
	xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
	xmlHttpRequest.send(xml);

	var resultXml = xmlHttpRequest.responseXML;
	return(resultXml);
}
Скрипт очевидно не срабатывает, потому что у другого пользователя нет роли Системный администратор:

if(UserHasRole("Системный администратор"))
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
За это сообщение автора поблагодарили: echo_igor (1).
Старый 24.07.2009, 14:29   #18  
echo_igor is offline
echo_igor
Участник
Аватар для echo_igor
 
116 / 10 (1) +
Регистрация: 09.06.2009
Адрес: Ростов-на-Дону
a33ik , Спасибо огромное. Очень помогла ссылка http://jianwang.blogspot.com/2008/01...-security.html .
Ну в ходе поиска проблемы нашёл ещё одну статью, тоже довольно помогла
http://www.crowehorwath.com/cs/blogs...rity-role.aspx .
Всем спасибо!
Старый 24.07.2009, 15:09   #19  
Гуревич Денис is offline
Гуревич Денис
Участник
Лучший по профессии 2009
 
228 / 67 (3) ++++
Регистрация: 04.08.2008
Адрес: Москва
Кстати, по последней ссылке можно прочитать очень правильный комментарий от некоего Ronny VDS:

Hiding fields with jscript is not secure.
This way a user can still see the fields by simply printing the form.
You can also use IE Developer to change css styles so to simply show the tab or field again in the page. (or other tools like IE7Pro...)
It is nice to hide some unnecessary fields for the current user but do not use this when it's top secret information.
(Use a custom entity in a iframe instead)

Это относится не только к скрытию полей, но и к блокированию тоже.
Т.е. в данном случае обычный пользователь вообщем-то может в форме открыть адресную строку и набрать:
Код:
javascript:alert(crmForm.all.<поле с заветной галочкой>.Disabled = false);
и сохранить в нужном состоянии вместо руководителя.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Закрытие Ввозможной сделки maxim_ufa Dynamics CRM: Функционал 9 29.12.2008 18:24
Как отследить создание предложения из возможной сделки ZooY Dynamics CRM: Разработка 2 28.11.2008 21:00
Что произайдет после переустановки системы(reinstall)? pkost Dynamics CRM: Разработка 9 03.07.2008 19:06
Работа с процессами продаж возможной сделки ShurikEv Dynamics CRM: Функционал 0 25.01.2008 15:14

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

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

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