AXForum  
Вернуться   AXForum > Блоги > CRM, SharePoint и Черная Магия
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:
  • Консалтинг
  • Проектирование
  • Разработка
  • Обучение


MVP 2010, 2011
Оценить эту запись

Удивительная история Контрола Button'а

Запись от Артем Enot Грунин размещена 02.11.2009 в 13:20
Обновил(-а) Артем Enot Грунин 11.11.2009 в 11:20
Теги button, java script

Все мы знаем, что CRM 4.0 не позволяет добавлять на форму пользовательские элементы управления. Среди стандартных предусмотрены только поля ввода, которые отвечают определенным системным типам, но никак не кнопки. Некоторые из нас, впрочем, догадываются, что кнопки все же можно добавить: через ISV.config. Способ, однако, выглядит неправильно, противоестественно и просто противно! Неудивительно что многие умельцы постарались решить эту проблему. Из тех что мне удалось найти: CRM 4.0 Creating Inline Toolbar and Buttons или Create "real" CRM 4.0-Style form-buttons in 5 minutes. Автор последнего поста, даже приводит некоторый анализ того, как вообще можно решить данную задачу:
  1. Поместить кнопку и логику в Iframe
  2. Инъекция HTML через DOM
  3. Переделать готовый контрол textbox.
Первый способ сильно отдает идиотизмом. Именно поэтому Microsoft называет его единственно верным и рекомендует к реализации. Второго частично придерживается в своем посте Adi Katz, но он не всегда удобен. Минус третьего в том, что нам потребуется разместить на форме лишнее поле ввода.
На мой взгляд зло от третьего подхода является минимальным. Более того в ряде случаев нам даже не потребуется создавать для сущности новых полей: такие атрибуты как "United Parcel Service (UPS) zone for address 1" или "Stock Exchange symbol for the account." созданы, как будто для того, чтобы никогда не использоваться по прямому назначению.
В чем отличие моего подхода от цитированных источников? В своей реализации я постарался минимизировать код формы, равно как и максимально полно переиспользовать уже имеющиеся свойства текстового контрола: его обработчик OnChange используется для хранения логики исполняемой по нажатии кнопки, а текст метки в качестве надписи. Подобная реализация, на мой взгляд более логична и прозрачна при переносе и отладке кастомизаций.
OnLoad
Код:
var oButton = crmForm.all.address1_name;

MakeButton(oButton);

function MakeButton(oButton)
{
    oButton.Disabled = true;

    // Текст кнопки
    var oButtonLabel = crmForm.all[oButton.id + "_c"];
    oButton.value = oButtonLabel.innerText;
    oButtonLabel.innerText = "";

    // Задаем стиль
    oButton.style.textAlign="center";
    oButton.style.cursor="pointer";

    oButton.style.background="url(/_imgs/app_titlebar.gif) repeat-x";
    oButton.style.borderColor = "#6893CF";

    oButton.attachEvent("onmouseover", function(){
        oButton.style.background="url(/_imgs/app_titlebar_hover.gif) repeat-x";
        oButton.style.borderColor = "#FFBD6C";
         });
    oButton.attachEvent("onmouseout", function(){
        oButton.style.background="url(/_imgs/app_titlebar.gif) repeat-x";
        oButton.style.borderColor = "#6893CF";
        });
    oButton.attachEvent("onmousedown", function(){
        oButton.style.background="url(/_imgs/app_titlebar_msdown.gif) repeat-x";
        oButton.style.borderColor = "#937D5A";
        });
    oButton.attachEvent("onclick", function(){ oButton.FireOnChange(); });
}
Код нужно натравливать на текстовое поле, которое планируется переделать в кнопку. Он автоматически отключает поле на форме (чтобы его значение не сохранялось) а так же скрывает текст метки.



p.s. Оформление кнопки выполнено в полном соответствии с MS Dynamics CRM 4.0 UI Style Guide.
p.p.s. В некоторых случаях может оказаться удобным хранить в этом поле результат выполнения кода между вызовами, например, результат запроса или код ошибки.
Миниатюры
Нажмите на изображение для увеличения
Название: Button.JPG
Просмотров: 320
Размер:	27.0 Кб
ID:	20  
Размещено в CRM
Просмотров 18029 Комментарии 0
Всего комментариев 0

Комментарии

 


Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:10.