Показать сообщение отдельно
Старый 19.08.2009, 15:05   #1  
Blog bot is offline
Blog bot
Участник
 
25,475 / 846 (79) +++++++
Регистрация: 28.10.2006
Мелкомягкий CRM: Убираем кнопки с панели инструментов связанных объектов
Источник: http://mmcrm.ru/?p=605
==============

Передвигаясь по связанным объектам (на форме основного объекта) Вы могли заметить такие интересные кнопочки, вроде «Создать объект бла-бла-бла» или «Добавить существующие объект бла-бла-бла». Иногда они не нужны или что еще хуже, то их удаление это требование политики безопасности компании. И как всегда, стандартными средствами настройки их не удалить!

Но это еще полбеды. Проблема в том, что в момент загрузки формы этих связанных объектов нет на форме! Они подгружаются в iFrame динамически при щелчке на соответствующей ссылке (расположено на левой навигационной панели формы). Таким образом воспользоваться простым способом скрытия объектов (как мы обычно скрываем поля на форме) нам не удастся, т.к. мы тупо не можем к ним обратиться!

Какой выход? Выход простой (точнее сложный, но это уже совсем другая история ) – переопределить событие щелчка по ссылке на навигационной панели и таким образом отследить момент срабатывания js-функции CRM, отвечающую за подгрузку представления связанного объекта. После чего обратиться к уже появившемся кнопкам и скрыть их!

В первую очередь на онлоад формы добавьте следующий скрипт:

function HideViewButtons(Iframe, buttonTitles) { if (Iframe != null ) { Iframe.onreadystatechange = function HideTitledButtons() { if (Iframe.readyState == 'complete') { var iFrame = frames[window.event.srcElement.id]; var liElements = iFrame.document.getElementsByTagName('li'); for (var j = 0; j < buttonTitles.length; j++) { for (var i = 0; i < liElements.length; i++) { if (liElements[i].getAttribute('title') == buttonTitles[j]) { liElements[i].style.display = 'none'; liElements[i].style.visibility = 'hidden'; break; } } } } } }} function HideAssociatedViewButtons(type, loadAreaId, buttonTitles) { if (type== 1 || type== 3) { var navElement = document.getElementById('nav' + loadAreaId); } else { var navElement = document.getElementById('nav_' + loadAreaId); } if (navElement != null) { navElement.onclick = function LoadAreaOverride() { if (type == 1) { loadArea('area' + loadAreaId); HideViewButtons(document.getElementById('area' + loadAreaId + 'Frame'), buttonTitles); } else if (type == 2) { loadArea(loadAreaId); HideViewButtons(document.getElementById(loadAreaId + 'Frame'), buttonTitles); } else { loadArea('area' + loadAreaId, '\x26roleOrd\x3d1'); HideViewButtons(document.getElementById('area' + loadAreaId + 'Frame'), buttonTitles); } } }}Дальше необходимо вызвать функцию HideAssociatedViewButtons (тоже из онлоада) и передать ей три параметра (в порядке следования):
  • Тип связи, который должен быть равен:
    1 – для любой стандартной связи (т.е. уже существующей в системе)
    2 – для кастомной 1:N связь
    3 – для кастомной N:N связь
  • Имя подгружаемой области – вытащить ее можно так: откройте какую-либо запись нужного Вам объекта, запускаете IEDevTool нажатием F12 (в IE8 этот инструмент уже встроен), активируете инструмент «Выбрать элемент щелчком» (или нажмите Ctrl + B), выделяете кнопку на левой навигационной панели которая связана с нужным Вам объектом, скопируйте текст атрибута if (тега ), но исключите из него префиксы nav или nav_ (ели они есть);
  • Названия кнопок, которые хотите скрыть (через запятую). Названия можете посмотреть выделив кнопку с помощью того же «Выбрать элемент щелчком» и скопировав атрибут Title (тега ).
Пробуем

Я добавил на форму Бизнес-партнеров две дополнительные связи: кастомная связь N:1 с объектом Контракт и кастомная связь N:N с объектом Конкурент! Теперь скроем эти две записи, плюс две стандартные с объектами Контакт (N:1) и Маркетинговый список (N:N).

Для начала получим нужные нам названия областей и кнопок:










Затем скроем их, вызвав функцию HideAssociatedViewButtons с нужными параметрами:

ideAssociatedViewButtons(1,'Contacts', ['Добавить к этой записи новый объект Контакт', 'Добавить к этой записи существующий объект Контакт']);HideAssociatedViewButtons(1,'ListsInSFA', ['Добавить в маркетинговый список']);HideAssociatedViewButtons(2,'new_account_contract', ['Добавить к этой записи новый объект Контракт', 'Добавить к этой записи существующий объект Контракт']);HideAssociatedViewButtons(3,'new_account_incident', ['Добавить к этой записи существующий объект Обращение']);



Результат








Источник: http://mmcrm.ru/?p=605
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.