Динамическое создание кнопок и пунктов меню на форме CRM
Вам недостаточно Функционала ISV.config’а? 🙂 Необходимо динамически добавлять кнопки и пункты меню на панель инструментов? Тогда Вы удачно зашли 🙂 Рассмотрим два простых кода, которые в режиме реального времени или по требованию могут формировать новые кнопки и пункты меню на панели инструментов формы CRM…
Динамическое создание кнопки
Тут все просто 🙂 Вешаем на онлоад (например) нужной формы вешаем такой код и правим параметры переданные в функцию createToolbarButton:
// Функция создания кнопки function createToolbarButton(btnTitle, btnId, clickAction, imagePath, btnLabel, includeSpacer) { // Создаем разделитель var Spacer = ''; Spacer += '<li class="ms-crm-Menu-Spacer" tabIndex="-1">'; Spacer += ' '; Spacer += '<img style="clip: rect(0px 4px 17px 0px); background-image: url(/_imgs/imagestrips/control_imgs_1.gif); width: 4px; background-position-y: -55px; height: 17px" alt="" src="/_imgs/imagestrips/transparent_spacer.gif">'; Spacer += '</li>'; // Создаем кнопку var html = ''; html += (!includeSpacer) ? '' : Spacer; // Если includeSpacer = true, добавляем разделитель перед кнопкой html += '<li id="' + btnId + '" + class="ms-crm-Menu" title="' + btnTitle + '" tabIndex="-1" onclick="window.execScript(action)" action="' + clickAction + '">'; html += '<span class="ms-crm-Menu-Label">'; html += '<a class="ms-crm-Menu-Label" tabIndex=-1 onclick="return false;" href="javascript:onclick();" target=_self>'; html += (!imagePath) ? '' : '<img class="ms-crm-Menu-ButtonFirst" tabIndex="-1" alt="' + btnTitle + '" src="' + imagePath + '" />'; html += '<span class="ms-crm-MenuItem-TextRTL" tabIndex=0>' + btnLabel + '</span>'; html += '</a>'; html += '</span>'; html += '</li>'; // Добавляем кнопку в DOM-структуру var toolbar = document.all.mnuBar1.rows(0).cells(0).childNodes[0]; toolbar.insertAdjacentHTML("beforeEnd", html); } // Создаем новую кнопку и передаем ей параметры: // текст всплывающей подсказки, ID кнопки, функция вызываемая при ее нажатии, URL иконки, надпись на кнопке, наличие разделителя перед кнопкой createToolbarButton("Тест новой кнопки", "newbuttonid", "myfunc()", "/_imgs/ico_16_4200.gif", "Тест", true); myfunc = function() { alert("asd"); };
Кнопка готова 🙂
Динамическое добавление нового пункта меню
А тут задачка немного посложнее (но совсем чуть-чуть 🙂 ). Для начала необходимо узнать ID самого меню, потому что без этого функция создания нового пункта меню не будет «знать» куда его добавлять 🙂 Делается то просто: включаем IE Developer Toolbar (по кнопке F12), щелкаем стрелкой Select Element by Click по меню и смотри ID элемента <li> к которому относится необходимое меню. Ну, а дальше вешаем на онлоад такой скрипт и задаем для функции createMenuItem необходимые параметры:
// Функция создания нового пункта меню function createMenuItem(mnId, miTitle, miId, clickAction, imagePath, includeLine) { // Создаем разделительную линию var line = ''; line += '<LI class=ms-crm-MenuList-Spacer tabIndex=-1>'; line += '<HR class=ms-crm-MenuList-Spacer>'; line += '</LI>'; // Создаем пункт меню var html = ''; html += (!includeLine) ? '' : line; // Если includeLine = true, включаем разделительную линию в меню html += '<li id="' + miId + '" class="ms-crm-MenuItem-Label" tabindex="-1" action="' + clickAction + '">'; html += '<span class="ms-crm-MenuItem-Label">'; html += '<a class="ms-crm-MenuLink" tabindex="-1" onclick="return false;" href="javascript:onclick();" target="_self">'; html += '<span class="ms-crm-MenuItem-Icon">'; html += (!imagePath) ? '' : '<IMG class=ms-crm-Menu-ButtonFirst tabIndex=-1 alt="" src="' + imagePath + '">'; html += '</span>'; html += '<span class="ms-crm-MenuItem-Text" tabindex="0">' + miTitle + '</span>'; html += '</a>'; html += '</span>'; html += '</li>'; // Добавляем пункт меню в DOM-структуру var menu = document.getElementById(mnId).childNodes[1].childNodes[0]; menu.insertAdjacentHTML("beforeEnd", html); } // Создаем новый пункт меню и передаем ему параметры: // ID меню (в которое добавляется новый пункт), заголовок, ID нового пункта меню, функция вызываемая при клике, URL иконки, наличие разделительной линии перед новым пунктом меню createMenuItem("New_0_Новое меню", "Тест", "newitemid", "myfunc()", "/_imgs/ico_16_4200.gif", true); myfunc = function() { alert("asd"); };
Первоисточник: http://danielcai.blogspot.com/2010/05/mscrm-40-adding-button-to-form-toolbar.html
Добрый день. Все похожие скрипты используют элеименты DOM-структуры. Каким образом можно узнать об этой структуре для написания таких скриптов? Есть ли какие-то утилиты кроме IE Developer Toolbar, которая в понятной форме представляет всю DOM-структуру страницы?
А что такое «понятная DOM-структура»? Чем девтулбар не нравится? 🙂
Наверное я плохо понимаю что такое DOM. Хотелось бы видеть примерно такое дерево: Страница->Форма-> Тулбар-(кнопки, меню, пункты меню). А в девтулбаре целая простыня тегов. Может я его как-то не так использую 🙂
DOM это иесть набор тегов, объектов, методов и т.д. 🙂
http://ru.wikipedia.org/wiki/Document_Object_Model
http://javascript.ru/tutorial/dom
А то, что Вы хотите к сожалению не существует по той простой причине, что пришлось бы писать индивидуальную программу для каждого сайта которая бы переводила «программистский код» в «пользовательский» 🙂
Подскажите пожалуйста, можно ли каким-то образом аналогичной код использовать для управления меню и кнопками на пердставлениях? Куда в этом случае вставлять код?
Добрый день 🙂
Если речь о представлениях в главном окне, то можно например поместить код < сайт CRM>\_root\bar_Top.aspx и оттуда добраться до дочерних iFrame’ов, которые и содержать меню с кнопками над представлением.
Если же речь о связанных представлениях на форме, то до них можно добраться таким образом http://mmcrm.ru/?p=605
Парни очень срочно попросили на работе создать кнопки!!! В CRM! Можете дубу в этом деле объснить что и как !!!
Кому не лень свяжитесь помоготи!!!
icq 382718128
davpizdt@gmail.com