Централизованное управление подсказками к полям
По умолчанию, подсказки для полей 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 из второй библиотеки.
Идем смотреть…
А не пробовали выводить в подсказках Описание атрибута?
По идее это возможно. Только нужно еще запрашивать метаданные атрибутов и обрабатывать результаты. А это еще дополнительное время при открытии формы.
Всё здорово робит!) Подскажите как будет выглядеть запрос в help.xml и tooltip.js, если поле option Set и необходимо добавить подсказку в значение выпадающего списка.
ну тут так просто не подсказать, нужно отдельный код разрабатывать…
На мероприятии загрузки формы нужно написать следующий код, чтобы добавить пользовательский подсказки
crmForm.all.dropdownlistName.childNodes[0].title = ‘Text to be displayed in tooltip’;
Так выше код будет отображать подсказки для первого варианта в OptionSet. Аналогичным образом вы можете добавить всплывающую подсказку к любому полю на Entity форме в CRM 2011.
Но не проверял ещё. Как думайте решит данную задачу?