Кастомизация
21
Мар
6

Статьи Базы знаний в «полный рост»

Кого-нибудь беспокоит способ, которым статьи Базы знаний отображены в объекте Обращение в MS CRM 4.0? Поясню: проблема в том, что статьи Базы знаний отображены расширенным управляющим элементом на форме, которая не может быть настроен. Мало того, что статьи Базы знаний делят вкладку с Примечаниями, так прежде чем их увидеть Вы должны нажать переключатель — я никогда не понимал эту особенность дизайна. Но безусловно самая плохая новость состоит в том, что Вы не можете изменить размер элемента просмотра статьи Базы знаний, так, что даже для самой короткой статьи Вы можете без прокрутки видеть только несколько строк текста.


Расширенный управляющий элемент статьи Базы знаний является не чем иным как IFrame’ом, отображающим страницу «/CS/articles/viewer/default.aspx» и передающим ID Статьи как параметр.

Самый простой способ развернуть окно статьи Базы знаний состоит в том, чтобы заменить расширенный управляющий элемент стандартным IFrame’ом и несколькими строками JavaScript. Однако, по умолчанию раздел, содержащий управляющий элемент, блокирован, препятствуя Вам удалить его в проектировщике формы. К счастью, Вы можете изменить это поведение, экспортируя объект Обращение, изменяя файл XML и произведя обратный импорт.

Ансапорт 🙂

Первым делом сделаем редактируемой область где содержатся статьи Базы знаний.

  • Перейдите Параметры – Настройка – Экспортировать настройки – Выделите объект Обращение и щелкните Экспорт выбранных настроек. Сохраните куда-нибудь архив xml-файла настроек.
  • Затем распакуйте архив и откройте в каком-нибудь редакторе (лучше Visual Studio, но пойдет и блокнот) файл customization.xml. Найдите следующую строчку (различаться должен только ID):
    <section name="kb article" labelwidth="160" showlabel="true" showbar="true" locklevel="0" id="{e7405683-b295-4b3f-8c52-6fdc8b736a9c}" IsUserDefined="0">

    Измените атрибут «locklevel» для тега «section» с 1 на 0.

  • Затем, удалите код события JavaScript, который передает ID статьи Базы знаний расширенному управляющему элементу:
    <event name="" application="true" active="true">
    <script><![CDATA[
    var oKbViewer = document.all.kbviewer;
    if (!IsNull(oKbViewer))
    {
    var oKBId = document.all.kbarticleid.Items()[0];
    if (IsNull(oKBId))
    {
    oKbViewer.src='';
    }
    else
    {
    oKbViewer.src=oKbViewer.baseSrc + oKBId.id;
    }
    }
    ]]></script>
    </event>
    
  • Наконец, удалите строку, которая содержит сам расширенный управляющий элемент:
    <row>
    <cell colspan="2" showlabel="false" rowspan="8" id="{cd51ce63-1e6c-453f-95db-ffaaa477984f}">
    <labels>
    <label description="Средство просмотра базы знаний" languagecode="1049" />
    </labels>
    <control id="kbviewer" classid="{a62b6fa9-169e-406c-b1aa-eab828cb6026}" />
    </cell>
    </row>
    <row />
    <row />
    <row />
    <row />
    <row />
    <row />
    <row />
    
  • Сохраним изменения.



Импортируйте их обратно в CRM и опубликуйте:

  • Перейдите Параметры – Настройка – Импортировать настройки – щелкните Browse и щелкните Отправить. Объект Обращение появится в главном окне, выделите его и жмите Импорт выбранных настроек. Дождитесь пока настройки импортируются;
  • Перейдите Параметры – Настройка – Настроить объекты. Выделите объект Обращение и жмите Опубликовать!


«Косметическим» ремонт

  • Дважды щелкните по объекту Обращение, в открывшейся форме на левой панели перейдите на Формы и представления и дважды щелкните по Форма;
  • Сначала создадим новую вкладку. Щелкните Добавить вкладку, введите имя новой вкладки (я назвал «База Знаний») и ОК;
  • Переименуем старую. Выделите вкладку Примечания и статьи и щелкните Изменить свойства и сотрите слово «Статьи», ОК;



  • Теперь перенесем управляющий элемент (лукап) Статьи базы знаний на новую вкладку. Выделите этот раздел и щелкните Изменить свойства. В нижней части открывшегося окна измените поле Вкладка на ту, которую Вы только что создали и ОК. Раздел переместится в новую вкладку;
  • Добавим IFrame в который будут подгружаться статьи базы знаний. Щелкните Добавить Интернет-кадр, задайте следующие параметры:
    • Имя: KBArticle
    • URL: /_static/blank.htm
  • Снемите галку Ограничить использование сценариев между кадрами. В качестве вкладки укажите вновь созданную, а для раздела Статья базы знаний;
  • Перейдите на вкладку Форматирование и поставьте галку Автоматически развертовать для заполнения доступной обоасти окна. ОК.



Добавим немного JavaScript’а (фактически того же, что мы удалили из XML-файла), чтобы наши статейки отображались в IFram’e:

  • Выделите поле Статьи и щелкните Изменить свойства. Перейдите на вкладку События – Изменить;
  • Поставьте галку Событие сделано активным и добавьте следующий код:
    DisplayKBArticle();
    function DisplayKBArticle()
    {
    var oKBArticle = crmForm.all.IFRAME_KBArticle;
    if (oKBArticle != null)
    {
    var oKBId = crmForm.all.kbarticleid.DataValue;
    if (oKBId == null)
    {
    oKBArticle.src = oKBArticle.url;
    }
    else
    {
    oKBArticle.src="/" + ORG_UNIQUE_NAME + "/CS/articles/viewer/default.aspx?IsRestrictedMode=true&amp;id=" + oKBId[0].id;
    }
    }
    }
    
  • Почти аналогичный код надо добавить и на загрузку формы. Щелкните Свойства формы, выделите При загрузке и щелкните Изменить. Ставьте галку Событие сделано активным и введите следующий код:
    if (crmForm.FormType == 2)
    {
    DisplayKBArticle();
    }
    
    function DisplayKBArticle()
    {
    var oKBArticle = crmForm.all.IFRAME_KBArticle;
    if (oKBArticle != null)
    {
    var oKBId = crmForm.all.kbarticleid.DataValue;
    if (oKBId == null)
    {
    oKBArticle.src = oKBArticle.url;
    }
    else
    {
    oKBArticle.src="/" + ORG_UNIQUE_NAME + "/CS/articles/viewer/default.aspx?IsRestrictedMode=true&amp;id=" + oKBId[0].id;
    }
    }
    }
    
  • Сохраняем, закрываем и публикуем.




Тестируем

  • Для начала добавьте парочку статей в Базу Знаний. Перейдите Сервис – База Знаний – Создать … дальше ничего сложно разберетесь сами 🙂 После того как создали статью опубликуйте ее, т.е. в разделе Черновики щелкните Отправить, чтобы она попала в раздел Не утвержденные, а в нем уже щелкните Утвердить, чтобы статья попала в раздел Утвержденные:
  • Перейдите в Сервис – Обращения – щелкните Создать. Перейдите на созданную спецально для статей базы знаний вкладку. В поле Статьи выберите любую статью Базы знаний и она в «полный рост» отобразится на этой вкладке 🙂



Комментарии (6)
  • Александр 21.03.2009

    Добрый день.
    Подскажите можно каким-то(неподдерживаемым) способом получить возможность выбора статьи, у которой статус — Черновик?
    Обясню почему:)
    Есть ASP страничка, которая позволяет создавать по кнопке из меню Обращения статью Базы знаний, но создаваемую статью программно нельзя привязать к обращению пока статья не опубликована. Юзеры которые это будут делать не будут иметь прав на публикацию. Нужно чтобы была возможность добавлять черновики. Вариант с олицетворением не подходит.
    Заранее спасибо!

  • Александр 21.03.2009

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

  • Евгений 21.03.2009

    Добрый день. Подскажите: не сталкивались ли с проблемой при попытке перенести функционал работы со статьями (отображение) в карточку какого-либо действия, после публикации настроек, с формой действия больше уже не поработать!
    Отказывается публиковать повторно?

    Спасибо.

  • slivka_83 21.03.2009

    Здасьте 🙂

    Нет, не сталкивался 🙂 а можно поподробнее о каком (и каким образом) переносе речь? 🙂

  • losk 21.03.2009

    Добрый день!
    подскажите, как можно добавить ссылку на базу знаний в другой объект(не в обращение)?

  • slivka_83 21.03.2009

    Думаю тут нужно писать почти свой функционал 🙂 Т.е. попробовать смоделировать лукап Базы знаний. Добавить галку на форму и при ее проставлении, с помощью SOAP запроса, тянуть данные из статьи в iFrame 🙂

*

code