Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:
MVP 2010, 2011
- Консалтинг
- Проектирование
- Разработка
- Обучение
MVP 2010, 2011
Мультиязычный CRM. Сортировка выпадающих списков
Запись от Артем Enot Грунин размещена 20.06.2013 в 14:12
Теги customization, development, java script, optionset
Недавно я столкнулся с еще одной особенностью мультиязычных интерфейсов: порядок следования опций в списке определяется еще на этапе настройки, следовательно задается в базовом языке. Чаще всего это не критично, но если список опций содержит несколько сотен значений? Так вышло со списком стран, упомянутым мной в одном из предыдущих постов. Проблему, как водится, пришлось решать доработкой.
В результате родился скрипт приведенный ниже. Скрипт универсальный и может применяться к любому списку.
p.s. Отсортировать список опций в параметрах атрибута все же следует. Пускай эта настройка годится только для базового языка, но так вы получите хотя бы какой-то прирост скорости сортировки за счет того что часть элементов уже упорядочена.
p.p.s. Так же в этом случае можно вставить дополнительную проверку: если язык пользователя базовый - выходим без сортировки. Микросекунды, но все равно приятно...
В результате родился скрипт приведенный ниже. Скрипт универсальный и может применяться к любому списку.
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.p.s. Так же в этом случае можно вставить дополнительную проверку: если язык пользователя базовый - выходим без сортировки. Микросекунды, но все равно приятно...
Всего комментариев 0