|
![]() |
#1 |
Участник
|
CRM 4.0. Зависимость пиклиста от значения самого себя - так бывает?
Добрый день!
Я пока крайне неопытный в CRM товарищ, прошу за глупые вопросы кидать тапками не больно )) Вопрос. Мне нужно (=заказчик хочет) сделать так, чтобы состояние договора (пиклист) можно было выбирать только следующее от текущего значения. Т.е. если последовательность состояний договора: Подготавливается На согласовании Согласован На подписи Подписан то из состояния На подписи можно тыкнуть только Подписан. Про зависимые пиклисты и зависимость пиклиста от поля читала (http://mmcrm.ru/?p=708). Вопрос. Можно ли сделать доступными для выбора значения пиклиста в зависимости от значения самого себя? И если да, то как...
__________________
Семь перпендикулярных красных линий? Мы же профессионалы... Последний раз редактировалось X-Lady; 06.04.2012 в 15:08. |
|
![]() |
#2 |
Участник
|
Можно!
На OnLoad вешаем скрипт который смотрит на значение пиклиста и убирает все другие с него значения кроме текущего и следующего. |
|
![]() |
#3 |
Участник
|
Пробую написать
if (crmForm.all.new_status.DataValue == "1") { crmForm.all.new_status.remove (3); } в надежде, что если значение пиклиста 1 - уберет третий статус из списка. ругается на то, что не может получить значение свойства attachEvent Если вместо единицы ставить 0, значение вроде "Согласовывается" - то же самое. Если убирать DataValue - тот же результат.
__________________
Семь перпендикулярных красных линий? Мы же профессионалы... |
|
![]() |
#4 |
Чайный пьяница
|
Можете пожалуйста привести полный код?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
![]() |
#5 |
Участник
|
У меня работает. Из списка удаляются. Нумерация идёт с нулевого. Если выйти за предел ошибку тоже не выдал.
Чтобы убрать третий статус из списка необходимо написать crmForm.all.new_status.remove(2); |
|
![]() |
#6 |
Участник
|
Прошу прощения.
По неопытности проверяю после добавления события предварительным просмотром. Он ругается. А если публиковать и тестить на базе - все действительно работает. Спасибо!
__________________
Семь перпендикулярных красных линий? Мы же профессионалы... |
|
![]() |
#7 |
Участник
|
Когда мы разрабатывали CRM 4, то нам очень не нравилось постоянная публикация формы, и прочее для добавления и редактирования скриптов. Мы делали следующее.
В папку сайта ISV клали файл entitynameonload.js (вместо entityname может быть любой идентификатор) На Onload формы интересующей нас сущности вешали следующий скрипт. X++: include = function (src) { var script = document.createElement('script'); script.type = 'text/javascript'; script.src = src+"?"+new Date().toString(); document.getElementsByTagName('head')[0].appendChild(script); } include('/isv/entitynameonload.js'); Здесь даже можно переопределять события OnChange для полей. X++: crmForm.all.new_field.onchange = function ()
{
alert('change new_field');
} Минусы этого подхода: При переносе к клиенты Вы должны перенести и файлы. Не только кастомизацию. Но мне кажется это не настолько существенный минус, как время и нервый программиста. Был интересный случай. одновременно одну форму разрабатывали 2 человека. При публикации этой формы каждый затирал изменения другого. При подобном подходе это невозможно, т.к каждый разрабатывает в отдльном файле. |
|
|
За это сообщение автора поблагодарили: X-Lady (1). |
![]() |
#8 |
Участник
|
Спасибо большое!
Подскажите, пожалуйста, еще - возможно ли настроить отдельную роль так, чтобы ограничения, накладываемые в OnLoad на нее не распространялись? В частности, чтобы пользователь с этой ролью мог устанавливать договору любое состояние (или иметь меньшие ограничения на выбор состояния договора)?
__________________
Семь перпендикулярных красных линий? Мы же профессионалы... |
|
![]() |
#9 |
Чайный пьяница
|
Можно, но только при помощи скриптинга. Посмотрите следующую статью - http://jianwang.blogspot.com/2008/01...-security.html
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
![]() |
#10 |
Участник
|
Еще вопрос. На "тестовых" экземплярах получилось.
Пробую сделать полноценные условия - не получается. Если конкретно. Есть список состояний договоров. (0) Согласовывается (1) На подписи (2) Подписан (3) Выполнен (4) К расторжению (5) Расторгнут (6) Приостановлен (7) Восстановлен (8) Закрытие ЛС Цифры в начале - это для удобства, считая с 0. Статусы Подписан, Выполнен и Восстановлен не должны быть доступны для выбора вручную никогда. Если в OnLoad помещаем crmForm.all.new_status.remove(2); все здорово. А если помещаем crmForm.all.new_status.remove(2); crmForm.all.new_status.remove(3); crmForm.all.new_status.remove(7); то убирает только второй. если менять последовательность и первым ставить, например, седьмой - убирает только седьмой. А если пытаться прописать более сложные условия - в зависимости от текущего статуса скрыть часть статусов из списка. Сейчас в OnLoad записано if (crmForm.all.new_status.DataValue == "2") { crmForm.all.new_status.remove(0); crmForm.all.new_status.remove(1); crmForm.all.new_status.remove(5); } В результате на одном из договоров: Загружается в статусе На подписе, доступны Выполнен, К расторжению, Расторгнут, Приостановлен, Закрытие ЛС. Совершенно не понятно, в чем дело (
__________________
Семь перпендикулярных красных линий? Мы же профессионалы... |
|
![]() |
#11 |
Чайный пьяница
|
Попробуйте убирать начиная от большего к меньшему. Когда у вас уберётся номер 2, то номер 7 станет 6, т.е.:
X++: if (crmForm.all.new_status.DataValue == "2") { crmForm.all.new_status.remove(5); crmForm.all.new_status.remove(1); crmForm.all.new_status.remove(0); }
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit Последний раз редактировалось a33ik; 20.04.2012 в 16:10. |
|
|
За это сообщение автора поблагодарили: X-Lady (1). |