Когда я впервые столкнулся с Microsoft Dynamics CRM 3.0, первым заданием было сделать возможность сортировки записей на английском языке. Т.к. была установлена русская версия MS CRM, то панель сортировки выглядела так:
Здесь я опишу способ, после которого она будет выглядеть так:
Сразу хочу заметить, что метод относится к категории unsupported, будем менять исходный код разработчиков.
- Ищем файл AppGrid_JumpBar.htc, который обычно находится здесь C:\Program Files\Microsoft CRM\CRMWeb\_grid\AppGrid_JumpBar.htc
- Делаем его копию, а сам файл открываем для редактирования. Для этого подойдет любой текстовый редактор.
- Сразу послеВставляем следующий код:
var letters_sort = ["",//1й символ - пробел; (автоматически заменяется на "Все"
"\u0030|\u0031|\u0032|\u0033|\u0034|\u0035|\u0036|\u0037|\u0038|\u0039", // цифры от 0-9
"\u0410|\u0411",// А, Б
"\u0412|\u0413",// В, Г
"\u0414|\u0415",// Д, Е
"\u0416|\u0417",// Ж, З
"\u0418|\u041A",// И, К
"\u041B|\u041C",// Л, М
"\u041D|\u041E",// Н, О
"\u041F|\u0420",// П, Р
"\u0421|\u0422",// С, Т
"\u0423|\u0424",// У, Ф
"\u0425|\u0426",// Х, Ц
"\u0427|\u0428",// Ч, Ш
"\u0429|\u042D",// Щ, Э
"\u042E|\u042F",// Ю, Я
"\u0041|\u0042",// A, B
"\u0043|\u0044",// C, D
"\u0045|\u0046",// E, F
"\u0047|\u0048",// G, H
"\u0049|\u004A",// I, J
"\u004B|\u004C",// K, L
"\u004D|\u004E",// M, N
"\u004F|\u0050",// O. P
"\u0051|\u0052",// Q, R
"\u0053|\u0054",// S. T
"\u0055|\u0056",// U. V
"\u0057|\u0058",// W, X
"\u0059",// Y
"\u005A"// Z
];
В MS CRM 3.0 используется кодировка utf-8 и выше приведённый фрагмент кода — это всего лишь массив из букв русского и английского алфавитов, а так же цифр [0-9] в кодировке utf-8. В массиве 30 элементов, потому что в панели выводится 30 позиций. - Далее идет функция Reset(), в которой мы ничего менять не будем. Эта функция отвечает за внешний вид букв при обновлении окна. Меня она устраивает, поэтому цвета менять не стал.
function Reset()
{
if (_oLast)
{
with (_oLast.style)
{
color = "#000000";
fontWeight = "normal";
}
}
with (this.rows[0].cells[0].style)
{
fontWeight = "bold";
color = "#000088";
}
_oLast = this.rows[0].cells[0];
} - Переходим к функции init(), которая отвечает за вывод букв из нашего массива в нижнюю панель сортировки. Добавляем следующий код:
// Выводим все буквы из массива
for (var i = 2; i < this.rows[0].cells.length; i++)
{
this.rows[0].cells[i].innerText = letters_sort[i].split("|");
}
Функция init() теперь такая:
function init()
{
for (var cell = 0 ;cell < this.rows[0].cells.length; cell++)
{
if (this.rows[0].cells[cell].className == "jump")
{
_oLast = this.rows[0].cells[cell];
}
}
// Выводим все буквы из массива
for (var i = 2; i < this.rows[0].cells.length; i++)
{
this.rows[0].cells[i].innerText = letters_sort[i].split("|");}
} - Осталось изменить функцию для сортировки: filter(). Она теперь будет принимать следующий вид.
function filter()
{
var o = event.srcElement;
if (o.tagName == "TD")
{
with (_oLast.style)
{
color = "#000000";
fontWeight = "bold";
}with (o.style)
{
fontWeight = «normal»;
color = «#000088″;
}
_oLast = o;
var o = window.document.all[this.gridId];o.SetParameter(«filter», _oLast.cellIndex == 0 ? «» : letters_sort[_oLast.cellIndex]); //выводим массив
o.SetParameter(«filterDisplay», _oLast.cellIndex == 0 ? «» : _oLast.innerText);
o.ClearPagingCookie();
o.PageNumber = 1;}
} - Функцию setStyle(bOn) можете изменить по своему вкусу. Она отвечает за визуальное представление.
Вот и все. Экспериментируйте!
UPD: Выложу сам файл AppGrid_JumpBar.htc(поменяйте расширение) на всякий случай. Не забудь сохранить свой оригинал

11.08.2009 в 07:23
Не работает у меня Ваш вариант. Пишет ошибку:
Webpage error details
User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB6; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)
Timestamp: Tue, 11 Aug 2009 05:20:06 UTC
Message: ‘_oLast.style’ is null or not an object
Line: 85
Char: 36
Code: 0
URI: http://localhost/_static/_grid/appgrid_jumpbar.htc
11.08.2009 в 07:59
Попробуйте скачать сам файл, возможно что-то не так отобразилось http://www.stimulus.dn.ua/downloads/AppGrid_JumpBar.htc.txt
есть еще 2й вариант сделать несколько языков http://ms-dynamics-crm.com.ua/2009/03/19/ms-dynamics-crm-alphabets-sort-2/ вы пробовали?
11.08.2009 в 10:09
Да пробывал качать сам файл и вставлять. Делал и по второму варианту. Кстати по второму вообще ничего не происходит.
11.08.2009 в 10:15
Перезагрузите, почистите кэш IE. Не знаю, что бы еще предложить. Все должно срабатывать, в том числе и 2й вариант. Скриншот алфавита сделал с рабочей системы. Выберите организации и там уже должен быть добавленный алфавит. Попробуйте
11.08.2009 в 10:54
Очень странно. Можете детальнее написать, что-то не так делаю
11.08.2009 в 11:06
1. Метод из этого поста работает в MS CRM 3.0, для 4ки я использовал этот http://ms-dynamics-crm.com.ua/2009/03/19/ms-dynamics-crm-alphabets-sort-2/
2. Только что попробовал 2й вариант (для MS CRM 4.0) http://ms-dynamics-crm.com.ua/2009/03/19/ms-dynamics-crm-alphabets-sort-2/ — все по инструкции делал, заменял функцию на ту, что представлена в файле. Жму F5. Все ок, 2 алфавита.
11.08.2009 в 11:09
просто взять и заменить функцию?
11.08.2009 в 11:12
Именно так
Больше ничего делать не стоит.
Жду ответа
11.08.2009 в 11:15
Пишу:
function window.onload()
{
HandleBackButtonIssues(«»);
// Увеличиваем строку для вывода второго ряда букв
crmGrid.rows[1].height = 42;
// Выводим наши алфавиты
crmGrid_JumpBar.outerHTML = «Все № |RU| А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я
|EN| A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
«; }
И ничего не происходит. Перезагружал. Очищал кеш. Всё равно. Что-то Вы забыли сказать
11.08.2009 в 11:23
Последняя догадка — вы обновляете окно CRM и по умолчанию установлено на Действиях, там один алфавит и останется (другой грид используется). Выберите организации, контакты, интересы — должно быть 2 алфавита
11.08.2009 в 11:26
Ничего не происходит и на других гридах
11.08.2009 в 11:32
Появилась ошибка:
Webpage error details
User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB6; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)
Timestamp: Tue, 11 Aug 2009 09:29:36 UTC
Message: Unterminated string constant
Line: 178
Char: 98
Code: 0
URI: http://localhost/SINM/_root/homepage.aspx?etc=10008
11.08.2009 в 11:34
Уже не знаю что предположить, к сожалению. Проверьте, пожалуйста, все свои действия по тому, что описал в этом способе http://ms-dynamics-crm.com.ua/2009/03/19/ms-dynamics-crm-alphabets-sort-2/. Способ действительно работает, уже на 5 системах используется.
Отправил Вам на почту свой файл HomePage.aspx
Попробуйте
11.08.2009 в 11:36
Ошибка — уже хорошо
Файл в кодировке utf-8 должен быть. Проверьте синтаксис, возможно лишняя ; или кавычки не те поставили
11.08.2009 в 11:37
Всё заработало
11.08.2009 в 11:38
Не могли бы Вы сравнить мой и ваш файлы и сказать в чем была причина ошибки? Спасибо
11.08.2009 в 11:43
Причина в том, что не так понял Вашу статью. У Вас было два варианта, но я не думал, что их надо объединять. Что отличие этих вариантов в том, что в разных местах нужно применять логику
11.08.2009 в 11:45
Рад, что разобрались