Когда я впервые столкнулся с Microsoft Dynamics CRM 3.0, первым заданием было сделать возможность сортировки записей на английском языке. Т.к. была установлена русская версия MS CRM, то панель сортировки выглядела так:

Стандартная панель поиска - сортировки записей

Стандартная панель поиска - сортировки записей

Здесь я опишу способ, после которого она будет выглядеть так:

Панель сортировки записей по двум языкам

Панель сортировки записей по двум языкам

Сразу хочу заметить, что метод относится к категории unsupported, будем менять исходный код разработчиков.

  1. Ищем файл AppGrid_JumpBar.htc, который обычно находится здесь C:\Program Files\Microsoft CRM\CRMWeb\_grid\AppGrid_JumpBar.htc
  2. Делаем его копию, а сам файл открываем для редактирования. Для этого подойдет любой текстовый редактор.
  3. Сразу послеВставляем следующий код:
    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 позиций.
  4. Далее идет функция 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];
    }
  5. Переходим к функции 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("|");

    }
    }

  6. Осталось изменить функцию для сортировки: 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;

    }
    }

  7. Функцию setStyle(bOn) можете изменить по своему вкусу. Она отвечает за визуальное представление.

Вот и все. Экспериментируйте! :)

UPD: Выложу сам файл AppGrid_JumpBar.htc(поменяйте расширение) на всякий случай. Не забудь сохранить свой оригинал