|
22.07.2009, 10:29 | #1 |
Участник
|
Согласование Возможной сделки.
Подскажите как сделать.
Создан объект возможная сделка, как сделать, так чтобы его можно было завершить обычному пользователю (Коммерческая служба) , только после того как оно согласовано с руководством. Например добавляю на форму поле Согласование и Атрибут типа bit, который может устанавливать только руководитель, и пока значение не переведенно в статус согласованно( bit = 1) , менеджер не может завершить Возможную сделку. Как это реализовать? |
|
22.07.2009, 10:35 | #2 |
MCTS
|
Звершить, всмысле закрыть со статусом выигрыш или проигрыш ?
__________________
|
|
22.07.2009, 10:40 | #3 |
Участник
|
Да , именно так "Выигрыш или проигрыш", только чтобы менеджер мог это сделать только после того как руководитель дал ему на это право. В стандартной конфигурации менеджер вправе сам завершать сделку, необходимо ограничить его в этом.
|
|
22.07.2009, 10:38 | #4 |
Чайный пьяница
|
Цитата:
Сообщение от echo_igor
Подскажите как сделать.
Создан объект возможная сделка, как сделать, так чтобы его можно было завершить обычному пользователю (Коммерческая служба) , только после того как оно согласовано с руководством. Например добавляю на форму поле Согласование и Атрибут типа bit, который может устанавливать только руководитель, и пока значение не переведенно в статус согласованно( bit = 1) , менеджер не может завершить Возможную сделку. Как это реализовать? Код: throw new InvalidPluginException("Не соблюдены все условия закрытия сделки");
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
22.07.2009, 10:43 | #5 |
Консультант-джедай
|
Перехватываете событие сохранения как завершонное http://msdn.microsoft.com/en-us/library/cc150868.aspx
Проверяете галку. Если галко стоит - продолжаем сохранение. Нет - отменяем сохранения и выдаем сообщения "извини, чувак, ничего не получится"
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
23.07.2009, 10:06 | #6 |
Участник
|
Цитата:
Сообщение от slivka_83
Перехватываете событие сохранения как завершонное http://msdn.microsoft.com/en-us/library/cc150868.aspx
Проверяете галку. Если галко стоит - продолжаем сохранение. Нет - отменяем сохранения и выдаем сообщения "извини, чувак, ничего не получится" |
|
23.07.2009, 10:15 | #7 |
Чайный пьяница
|
Цитата:
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
23.07.2009, 10:17 | #8 |
Консультант-джедай
|
У него не имя, а код
А посмотреть этот код можно так alert(event.Mode); поля скрываем так http://mmcrm.ru/?p=291
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
23.07.2009, 12:23 | #9 |
Участник
|
Цитата:
Сообщение от slivka_83
У него не имя, а код
А посмотреть этот код можно так alert(event.Mode); поля скрываем так http://mmcrm.ru/?p=291 |
|
23.07.2009, 12:52 | #10 |
Чайный пьяница
|
Цитата:
Что до кода, то он примерно такой: Код: if (event.Mode == 5)//Деактивация возможной сделки { if (crmForm.all.<поле с заветной галочкой>.DataValue != true)//Галочка установлена { alert('Нельзя закрыть сделку.'); event.returnValue = false; return false; } }
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: echo_igor (1). |
23.07.2009, 14:26 | #11 |
Участник
|
Цитата:
Сообщение от a33ik
Для начала. Код не может появляться - он может выполняться.
Что до кода, то он примерно такой: Код: if (event.Mode == 5)//Деактивация возможной сделки { if (crmForm.all.<поле с заветной галочкой>.DataValue != true)//Галочка установлена { alert('Нельзя закрыть сделку.'); event.returnValue = false; return false; } } Просто если скрывать поле, то пользователю, будет тяжело понять - согласована ли сделка или же нет? Если поле будет отображаться то это проблема будет снята. |
|
23.07.2009, 14:34 | #12 |
Консультант-джедай
|
вместо скрытия блокируете его
crmForm.all.<имя_поля>.Disabled = true;
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
23.07.2009, 14:45 | #13 |
MCTS
|
Коллеги хоть и не занимаюсь больше CRM, но все-равно интересно, а как вы определите, кто может ставить галку, а кто не может ?
т.е. так называемый FieldLevelSecurity
__________________
|
|
23.07.2009, 14:48 | #14 |
Участник
|
Ну можно, например, разрешить ставить галку всем пользователям у которы х есть роль , например "директор"
|
|
23.07.2009, 14:50 | #15 |
Консультант-джедай
|
ссылки выше
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
|
За это сообщение автора поблагодарили: Сабитов Андрей (1). |
23.07.2009, 16:27 | #16 |
Участник
|
Попробовал поддерживаемым способом, с Вашего блога( 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 |
Чайный пьяница
|
Цитата:
Сообщение от 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 |
Участник
|
a33ik , Спасибо огромное. Очень помогла ссылка http://jianwang.blogspot.com/2008/01...-security.html .
Ну в ходе поиска проблемы нашёл ещё одну статью, тоже довольно помогла http://www.crowehorwath.com/cs/blogs...rity-role.aspx . Всем спасибо! |
|