22.07.2009, 10:29 | #1 |
Участник
|
Согласование Возможной сделки.
Подскажите как сделать.
Создан объект возможная сделка, как сделать, так чтобы его можно было завершить обычному пользователю (Коммерческая служба) , только после того как оно согласовано с руководством. Например добавляю на форму поле Согласование и Атрибут типа bit, который может устанавливать только руководитель, и пока значение не переведенно в статус согласованно( bit = 1) , менеджер не может завершить Возможную сделку. Как это реализовать? |
|
22.07.2009, 10:35 | #2 |
MCTS
|
Звершить, всмысле закрыть со статусом выигрыш или проигрыш ?
__________________
|
|
22.07.2009, 10:38 | #3 |
Чайный пьяница
|
Цитата:
Сообщение от echo_igor
Подскажите как сделать.
Создан объект возможная сделка, как сделать, так чтобы его можно было завершить обычному пользователю (Коммерческая служба) , только после того как оно согласовано с руководством. Например добавляю на форму поле Согласование и Атрибут типа bit, который может устанавливать только руководитель, и пока значение не переведенно в статус согласованно( bit = 1) , менеджер не может завершить Возможную сделку. Как это реализовать? Код: throw new InvalidPluginException("Не соблюдены все условия закрытия сделки");
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
22.07.2009, 10:40 | #4 |
Участник
|
Да , именно так "Выигрыш или проигрыш", только чтобы менеджер мог это сделать только после того как руководитель дал ему на это право. В стандартной конфигурации менеджер вправе сам завершать сделку, необходимо ограничить его в этом.
|
|
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 . Всем спасибо! |
|
24.07.2009, 15:09 | #19 |
Участник
|
Кстати, по последней ссылке можно прочитать очень правильный комментарий от некоего 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); |
|