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