Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:
MVP 2010, 2011
- Консалтинг
- Проектирование
- Разработка
- Обучение
MVP 2010, 2011
Удивительная история Контрола Button'а
Запись от Артем Enot Грунин размещена 02.11.2009 в 13:20
Обновил(-а) Артем Enot Грунин 11.11.2009 в 11: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. Автор последнего поста, даже приводит некоторый анализ того, как вообще можно решить данную задачу:
На мой взгляд зло от третьего подхода является минимальным. Более того в ряде случаев нам даже не потребуется создавать для сущности новых полей: такие атрибуты как "United Parcel Service (UPS) zone for address 1" или "Stock Exchange symbol for the account." созданы, как будто для того, чтобы никогда не использоваться по прямому назначению.
В чем отличие моего подхода от цитированных источников? В своей реализации я постарался минимизировать код формы, равно как и максимально полно переиспользовать уже имеющиеся свойства текстового контрола: его обработчик OnChange используется для хранения логики исполняемой по нажатии кнопки, а текст метки в качестве надписи. Подобная реализация, на мой взгляд более логична и прозрачна при переносе и отладке кастомизаций.
OnLoad
Код нужно натравливать на текстовое поле, которое планируется переделать в кнопку. Он автоматически отключает поле на форме (чтобы его значение не сохранялось) а так же скрывает текст метки.
p.s. Оформление кнопки выполнено в полном соответствии с MS Dynamics CRM 4.0 UI Style Guide.
p.p.s. В некоторых случаях может оказаться удобным хранить в этом поле результат выполнения кода между вызовами, например, результат запроса или код ошибки.
- Поместить кнопку и логику в Iframe
- Инъекция HTML через DOM
- Переделать готовый контрол textbox.
На мой взгляд зло от третьего подхода является минимальным. Более того в ряде случаев нам даже не потребуется создавать для сущности новых полей: такие атрибуты как "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. В некоторых случаях может оказаться удобным хранить в этом поле результат выполнения кода между вызовами, например, результат запроса или код ошибки.
Всего комментариев 0