Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Добрый день, коллеги!
Очень часто возникает вопрос, а как сделать выпадающий список (picklist), значения в котором зависят от значений в другом выпадающем списке. Например, у нас и партнеры и клиенты относятся к организациям. Но, например, партнеры Microsoft могут обладать следующими статусами: Registered, Certified и Gold. В то время, как клиенты могут быть потенциальными или текущими. Соответственно, мы хотим, чтобы после того, как мы выбрали в поле "Тип отношений" значение "Партнер", в списке "Доп.информация" были доступны только 3 значения - Registered, Certified и Gold. Если же мы выбираем значение "Клиент", то в списке "Доп.информация" доступны только "Потенциальный" и "Текущий". Давайте посмотрим, как это можно реализовать с помощью событий OnChange и OnLoad.
Для начала, мы должны создать дополнительный атрибут - "Доп.информация" и в качестве типа атрибута указать Picklist. Также, нам надо добавить возможные значения для этого атрибута - Registered, Certified, Gold, Потенциальный, Текущий. Теперь сохраняем этот атрибут, выводим его на форму организации и публикуем изменения (в примере я удалил другие категории организаций, например, такие как: пресса, консультант и т.д.).
Теперь, нам надо написать обработчик OnChange для атрибута "Тип отношений". Открываем форму организации и выбираем свойства поля "Тип отношений". Переходим на закладку События и нажимаем на кнопку Правка для события OnChange. Делаем это событие активным и вводим следующий код:
var oCusType = crmForm.all.customertypecode;
var oNewInfo = crmForm.all.new_info;
oNewInfo .DeleteOption (1);
oNewInfo .DeleteOption (2);
oNewInfo .DeleteOption (3);
oNewInfo .DeleteOption (4);
oNewInfo .DeleteOption (5);
if ( oCusType .DataValue != null )
{
oNewInfo .Disabled = false;
switch ( oCusType.DataValue )
{
case "3":
oNewInfo .AddOption ("Потенциальный" , 4);
oNewInfo .AddOption ("Текущий" , 5);
break;
case "5":
oNewInfo .AddOption ("Registered" , 1);
oNewInfo .AddOption ("Certified" , 2);
oNewInfo .AddOption ("Gold" , 3);
break;
}
}
else
{
oNewInfo.DataValue = null;
oNewInfo.Disabled = true;
}
И, чтобы все окончательно заработало, надо написать обработчик OnLoad для формы организации. Это необходимо для того, чтобы значения в выпадающих списках отображались корректно непосредственно после открытия формы. Открываем свойства формы и нажимаем на кнопку Правка для события OnLoad. Делаем событие также активным и вводим следующий код (здесь все проще, т.к. всю логику мы уже реализовали с помощью события OnChange и нам надо просто вызвать обработчик данного события. За это отвечает метод FireOnChange):
var p = crmForm.all.new_info.DataValue;
if (crmForm.all.customertypecode.DataValue != null)
{
crmForm.all.customertypecode.FireOnChange();
crmForm.all.new_info.DataValue = p;
}
else
{
crmForm.all.new_info.DataValue=null;
crmForm.all.new_info.Disabled = true;
}
Все сохраняем, обязательно публикуем изменения и проверяем. Работает!