AXForum  
Вернуться   AXForum > Блоги > CRM, SharePoint и Черная Магия
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:
  • Консалтинг
  • Проектирование
  • Разработка
  • Обучение


MVP 2010, 2011
Оценить эту запись

Мультиязычный CRM. Сортировка выпадающих списков

Запись от Артем Enot Грунин размещена 20.06.2013 в 14:12

Недавно я столкнулся с еще одной особенностью мультиязычных интерфейсов: порядок следования опций в списке определяется еще на этапе настройки, следовательно задается в базовом языке. Чаще всего это не критично, но если список опций содержит несколько сотен значений? Так вышло со списком стран, упомянутым мной в одном из предыдущих постов. Проблему, как водится, пришлось решать доработкой.

В результате родился скрипт приведенный ниже. Скрипт универсальный и может применяться к любому списку.
X++:
//name: имя контрола, который нужно отсортировать.
//des: сортировать в обратном порядке (по умолчанию false)
//ontop: массив кодов опций, кторые нужно поместить в начале списка (опционально)

function sortOptions(name, des, ontop)
    {
        var control = Xrm.Page.getControl(name);

        if (control != null && control.getControlType() == "optionset")
        {
            var des = des || false;
            var ontop = ontop || [];

            var attribute = control.getAttribute();
            var options = attribute.getOptions();

            options.sort(function (o1, o2)
            {
                if (o1.text > o2.text) return des ? -1 : 1;
                if (o2.text > o1.text) return des ? 1 : -1;
                return 0;
            });

            control.clearOptions();

            var topOptions = [];

            for (var i = 0; i < options.length; i++)
            {
                var option = options[i];
                if (option.value != "null")
                {
                    var isInTop = false;
                    for (var j = 0; j < ontop.length; j++)
                    {
                        if (ontop[j] == option.value)
                        {
                            isInTop = true;
                            topOptions[j] = option;
                            break;
                        }
                    }
                    if (isInTop == false)
                    {
                        control.addOption(option);
                    }
                }
            }

            //Добавляем элементы, которые должны быть сверху
            for (var i = 0; i < topOptions.length; i++)
            {
                var option = topOptions[topOptions.length - i - 1];
                if (option)
                {
                    control.addOption(option, 1);
                }
            }

            //Восстанавливаем выбор элемента
            attribute.setValue(attribute.getValue());
        }
    }
p.s. Отсортировать список опций в параметрах атрибута все же следует. Пускай эта настройка годится только для базового языка, но так вы получите хотя бы какой-то прирост скорости сортировки за счет того что часть элементов уже упорядочена.

p.p.s. Так же в этом случае можно вставить дополнительную проверку: если язык пользователя базовый - выходим без сортировки. Микросекунды, но все равно приятно...
Размещено в CRM
Просмотров 26941 Комментарии 0
Всего комментариев 0

Комментарии

 


Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:14.