Кастомизация
29
Май
8

Кнопка на форме

В этом посте я расскажу, как добавить кнопку непосредственно на форму Microsoft Dynamics CRM (а не на какую-либо из панелей с кнопками). Правда, если не вдаваться в значение слова «Кнопка» 🙂 А если честно, то никакой кнопки не будет: мы создадим новый атрибут и с помощью JavaScript заменим его на кнопку, которая на самом деле пердставляет собой HTML-таблицу, стилизованную под кнопку. А также повесим на это кнопку обработчик собатия onClick, в результате чего будет скрываться и отображаться какая-либо секция на форме. Итак:

  • Создайте новый атрибут с типам nvarchar (я буду производить эксперементы на форме Контакт);
  • Создайте на форме новый раздел и поместите на него этот, только что созданный атрибут;
  • Поместите на онлоад формы нижеследующий скрипт. Только замените в нем названия полей на Ваши. Заметьте только, что для скрытия секции мы обращаемся сначала к атрибуту находящемуся в ней, а уже от него к секции. Так что не забудьте изменить имя этого атрибута на того, который входит в Вашу секцию:
    //скрываем секцию Адрес
    crmForm.all.address1_name_c.parentElement.parentElement.parentElement.style.display = 'none'; 
    
    // Меняем атрибут new_button на кнопку и создаем обработку события onClick
    var fieldTable = crmForm.all.new_button_d;
    var html = "<table border='0' cellspacing='0' cellpadding='0'><tr><td width='0px'>" + fieldTable.innerHTML + "</td><td width='200px'><input type='button' value='Показать/скрыть секцию Адрес' onclick='Button_OnClick()' style='background-color:#d8e8ff' style ='border-width:2px'/></td></tr></table>";
    fieldTable.innerHTML = html;
    
    //скрываем атрибут new_button
    document.all.new_button.style.display='none';
    crmForm.all.new_button_c.innerText="";   
    
    // Функция скрытия/отображения раздела Адрес (в зависимости от того, скрыт ли он сейчас)
    Button_OnClick = function() {
     if (crmForm.all.address1_name_c.parentElement.parentElement.parentElement.style.display =='none') {
     //показываем секцию Адрес
     crmForm.all.address1_name_c.parentElement.parentElement.parentElement.style.display ='block';
     } else {
     //скрываем секцию Адрес
     crmForm.all.address1_name_c.parentElement.parentElement.parentElement.style.display ='none';
     }
    }
    
  • Сохраните и опубликуйте форму. Откройте форму объекта и смотрите на результат!



Еще один пример кода

Делает то же самое…

function create_button_from_textattribute(fieldname, buttontext, buttonwidth,clickevent) {
    functiontocall=clickevent;
    crmForm.all[fieldname].DataValue = buttontext;
    crmForm.all[fieldname].style.borderRight="#3366cc 1px solid";
    crmForm.all[fieldname].style.paddingRight="5px";
    crmForm.all[fieldname].style.borderTop="#3366cc 1px solid";
    crmForm.all[fieldname].style.paddingLeft="5px";
    crmForm.all[fieldname].style.fontSize="11px";
    crmForm.all[fieldname].style.backgroundImage="url(/_imgs/btn_rest.gif)";
    crmForm.all[fieldname].style.borderLeft="#3366cc 1px solid";
    crmForm.all[fieldname].style.width=buttonwidth;
    crmForm.all[fieldname].style.cursor="pointer";
    crmForm.all[fieldname].style.lineHeight="18px";
    crmForm.all[fieldname].style.borderBottom="#3366cc 1px solid";
    crmForm.all[fieldname].style.backgroundRepeat="repeat-x";
    crmForm.all[fieldname].style.fontFamily="Tahoma";
    crmForm.all[fieldname].style.height="20px";
    crmForm.all[fieldname].style.backgroundColor="#cee7ff";
    crmForm.all[fieldname].style.textAlign="center";
    crmForm.all[fieldname].style.overflow="hidden";
    crmForm.all[fieldname].attachEvent("onmousedown",push_button);
    crmForm.all[fieldname].attachEvent("onmouseup",release_button);
    crmForm.all[fieldname].attachEvent("onclick",functiontocall);
}

function push_button() {
    window.event.srcElement.style.marginLeft="1px";
    window.event.srcElement.style.marginTop="1px";
}

function release_button() {
    window.event.srcElement.style.marginLeft="0px";
    window.event.srcElement.style.marginTop="0px";
}

// функция вызываемая при нажатии на кнопку
function testfunction() {
    alert('Ta-da!');
}

// вызываем функцияю создания кнопки и передаем ей следующие параметры: имя текстового поля, надпись на кнопке, длинна, и вызываемая при нажатии функция
create_button_from_textattribute('new_button', 'Превед','184px',testfunction);
Комментарии (8)
  • Roman08 29.05.2009

    Excellent code! Thank you for sample.

  • slivka_83 29.05.2009

    Пожалуйста 🙂

  • stanislav 29.05.2009

    Хороший пример. Но у меня не работает. Эта «кнопка» получается текстовым полем (типа edit), которое соотвественно не нажимается. При закрыти формы CRM собщает об ошибке (код ошибки не указан). Могут ли быть опечатки в листинге? Нужно ли добавлять код в событие новой кнопки «onChange».

  • stanislav 29.05.2009

    Здесь нужно подключать Jqery-132?

  • slivka_83 29.05.2009

    Нда… чегой-то не работает 🙂 возможно в ролапчиках были изменения… на днях гляну 🙂

  • slivka_83 29.05.2009

    Подправил 🙂 работает 🙂

  • slivka_83 29.05.2009

    Добавли еще один пример кода 🙂

  • Stanislav 29.05.2009

    А-А-А-А!!! РАБОТАЕТ!!!
    СПАСИБА-А-А-А-А!!!
    🙂

*

code