Кастомизация
22
Янв
5

Централизованное управление подсказками к полям

По умолчанию, подсказки для полей CRM, вынесенных на форму, равняются имени каждого поля. Что само по себе не информативно, плюс подсказка появляется при наведении курсора на метку поля. Менять подсказки можно с помощью манипуляцией DOM’ом через JS. Соответственно, чтобы задать подсказки для различных полей, на различных формах, приходится по ним бегать и производить индивидуальное кодирование. Чтобы избежать этого, рассмотрим способ централизованного управления этими подсказками с помощью JS и XML Веб-ресурсов.

Приступим…

  • Создайте XML Веб-ресурс с именем help.xml и описанием подсказок в таком формате:
    <help>
      <entity name="competitor">
        <attribute name="name">Супер подсказка</attribute>
      </entity>
    </help>
    

    Здесь мы коллекционируем объекты, их атрибуты и подсказки для них;

  • Создайте JS Веб-ресурс и загрузите в него библиотеку jQuery;
  • Создайте еще один JS Веб-ресурс с таким содержимым:
    function loadHelp() {
        $.ajax({
            type: "GET",
            url: "../webresources/new_help.xml",
            dataType: "xml",
            success: parseHelpXML
        });
    }
    
    function parseHelpXML(data) {
        var entity = Xrm.Page.data.entity.getEntityName().toString().toLowerCase();
        entXML = $("entity[name=" + entity + "]", data)
        $(entXML).children().each(function (i) {
            var attr = this.getAttribute("name");
            var txt = $(this).text();
            registerHelp(attr, txt);
        });
    }
    
    function registerHelp(attr, txt) {
        var obj = document.getElementById(attr + '_c').children[0];
        html = '<div id="help_' + attr + '" style="visibility: hidden; position: absolute;">: ' + txt + '</div>';
        $(obj).append(html);
    }
    

    Здесь три функции:

    • Первая загружает XML Веб-ресурс;
    • Вторая, при успешной загрузке XML Веб-ресурса, производит парсинг XML структуры и выбирает узел соответствующий текущему объекту. Затем проводит итерация по всем дочерним узлам и вытаскивает из них имя поля и и подсказку к нему. Эти два параметра передаются третьей функции…
    • … которая уже находит поле по его имени и добавляет к нему подсказку.
  • Ну и осталось подключить обе JS библиотеки к форме (в данном примере это Конкурент) и вызвать на онлоаде функцию loadHelp из второй библиотеки.
    Идем смотреть…



Комментарии (5)
  • Lexx 22.01.2012

    А не пробовали выводить в подсказках Описание атрибута?

  • slivka_83 22.01.2012

    По идее это возможно. Только нужно еще запрашивать метаданные атрибутов и обрабатывать результаты. А это еще дополнительное время при открытии формы.

  • Борис 22.01.2012

    Всё здорово робит!) Подскажите как будет выглядеть запрос в help.xml и tooltip.js, если поле option Set и необходимо добавить подсказку в значение выпадающего списка.

  • slivka_83 22.01.2012

    ну тут так просто не подсказать, нужно отдельный код разрабатывать…

  • Борис 22.01.2012

    На мероприятии загрузки формы нужно написать следующий код, чтобы добавить пользовательский подсказки
    crmForm.all.dropdownlistName.childNodes[0].title = ‘Text to be displayed in tooltip’;
    Так выше код будет отображать подсказки для первого варианта в OptionSet. Аналогичным образом вы можете добавить всплывающую подсказку к любому полю на Entity форме в CRM 2011.
    Но не проверял ещё. Как думайте решит данную задачу?

*

code