Кастомизация
04
Июн
7

Динамическое создание кнопок и пунктов меню на форме 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 += '&nbsp';
	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

Комментарии (7)
  • Олег 04.06.2010

    Добрый день. Все похожие скрипты используют элеименты DOM-структуры. Каким образом можно узнать об этой структуре для написания таких скриптов? Есть ли какие-то утилиты кроме IE Developer Toolbar, которая в понятной форме представляет всю DOM-структуру страницы?

  • slivka_83 04.06.2010

    А что такое «понятная DOM-структура»? Чем девтулбар не нравится? 🙂

  • Олег 04.06.2010

    Наверное я плохо понимаю что такое DOM. Хотелось бы видеть примерно такое дерево: Страница->Форма-> Тулбар-(кнопки, меню, пункты меню). А в девтулбаре целая простыня тегов. Может я его как-то не так использую 🙂

  • slivka_83 04.06.2010

    DOM это иесть набор тегов, объектов, методов и т.д. 🙂
    http://ru.wikipedia.org/wiki/Document_Object_Model
    http://javascript.ru/tutorial/dom

    А то, что Вы хотите к сожалению не существует по той простой причине, что пришлось бы писать индивидуальную программу для каждого сайта которая бы переводила «программистский код» в «пользовательский» 🙂

  • Oleg 04.06.2010

    Подскажите пожалуйста, можно ли каким-то образом аналогичной код использовать для управления меню и кнопками на пердставлениях? Куда в этом случае вставлять код?

  • slivka_83 04.06.2010

    Добрый день 🙂
    Если речь о представлениях в главном окне, то можно например поместить код < сайт CRM>\_root\bar_Top.aspx и оттуда добраться до дочерних iFrame’ов, которые и содержать меню с кнопками над представлением.

    Если же речь о связанных представлениях на форме, то до них можно добраться таким образом http://mmcrm.ru/?p=605

  • Cheren 04.06.2010

    Парни очень срочно попросили на работе создать кнопки!!! В CRM! Можете дубу в этом деле объснить что и как !!!
    Кому не лень свяжитесь помоготи!!!
    icq 382718128
    davpizdt@gmail.com

*

code