Разработка
18
Сен
6

Диаграмма Ганта и загруженность пользователей

Прикрутим к CRM такую фичу: выведем на форму пользователя диаграмму Ганта, которая будет показывать загруженность текущего пользователя на определенную дату.

  • Создайте новый отчет в VS 2008;
  • Создайте для отчета два параметра:
    • Date, с типом Date/Time и дефолтным значением (задается на вкладке Default Values):
      =Today()

      Чтобы по умолчанию отчет строился по текущей дате;

    • uGUID, с типом Text и сделайте его скрытым.
  • Добавьте к отчету DataSet с таким SQL запросом:
    SELECT
    	po.scheduledstart 'Начало',
    	CASE 
    		WHEN po.activitytypecodename = 'Встреча' THEN DATEADD(mi, po.scheduleddurationminutes, po.scheduledstart) 
    		ELSE DATEADD(mi, po.actualdurationminutes, po.scheduledstart)
    	END 'Окончание',
    	po.activitytypecodename 'Действие'
    FROM
    	FilteredActivityPointer po
    WHERE
    	1=1
    	AND (po.actualdurationminutes IS NOT NULL OR po.scheduleddurationminutes IS NOT NULL)
    	AND po.scheduledstart IS NOT NULL
    	AND CONVERT(VARCHAR(10), po.scheduledstart, 104) = CONVERT(VARCHAR(10), @Date, 104)
    	AND @uGUID IN (SELECT pa.partyid FROM FilteredActivityParty pa WHERE pa.activityid = po.activityid)
    	AND ownerid = @uGUID
    ORDER BY 1
    

    Этот запрос отбирает Действия определенного пользователя на определенную дату. При этом отбирается дата начала действия и вычисляется дата его окончания (на основе продолжительности). Кстати, поле Дата начала не вынесено на форму Действий, так что если оно Вам мнужно вынесите его.
    Для этого запроса на вкладе Parameters сопоставьте переменные из запроса и параметры отчета:

    • @Date = [@Date]
    • @uGUID = [@uGUID]



  • Вынесите в отчет Range Bar и задайте для него такие параметры построения:
    • Values = Начало
      • [Начало]
      • [Окончание]
    • Category Groups = (Details)
    • Series Groups = Действие
  • Затем откройте свойства значений (Series Properties) и установите такие параметры:
    • Top Value = [Начало]
    • Bottom Value = [Окончание]
    • Category Field = [Действие]
  • Для горизонтальной оси укажите такой диапазона значений:
    • Минимум:
      =Year(Parameters!Дата.Value) & "-" & Month(Parameters!Дата.Value) & "-" & Day(Parameters!Дата.Value) & " 08:00:00"
    • Максимум:
      =Year(Parameters!Дата.Value) & "-" & Month(Parameters!Дата.Value) & "-" & Day(Parameters!Дата.Value) & " 20:00:00"
    • Интервал = 1
    • Тип интервала = Hours

    Этой настройкой мы ограничили горизонтальную ось с 8 до 22 часов (типа рабочий день).
    Также на вкладке Number задайте формат «HH», чтобы на горизонтальной оси отображались только целые часы;

  • Скройте вертикальную ось и подпись к ней;




  • Загрузите отчет в CRM. На форме редактирования отчета нажмите Действия – Опубликовать отчет для внешнего использования. В результате отчет будет доступен непосредственно с сервера отчетов;
  • Откройте этот отчет на сервере отчетов. Для этого перейдите по ссылке:
    http://<имя_сервера_отчетов>/ReportServer/ -> далее щелкните по названию организации -> название отчета. Отчет откроется, но не отобразится, т.к. в нем не задан скрытый параметр (его мы передадим в коде далее). Скопируйте URL из адресной строки отчета;


  • Создайте JavaScript Веб-ресурс с таким кодом:
    function showReport() {
        var iframeObject = Xrm.Page.getControl("IFRAME_busyuser");
        var strURL = "http://crm2011/ReportServer/Pages/ReportViewer.aspx?%2fsuperfirma_MSCRM%2fBusyUser&rs:Command=Render&uGUID=" + Xrm.Page.data.entity.getId().replace('{', '').replace('}', '');
        iframeObject.setSrc(strURL);
    }
    

    Этот код просто изменяет URL iFrame’а вынесенного на форму, в который также подставляется GUID текущей записи Пользователя. Замените в коде URL отчета на свой (скопированный на предыдущем шаге) и добавьте к нему строку

    &uGUID=

    Подключите этот JS Веб-ресурс к форме Пользователя и вызовите на онлоад функцию showReport;

  • Добавьте на форму Пользователя новый iFrame (с именем busyuser). При этом снимите галку, ограничивающую использование скриптов. Также можете убрать прокрутку и границу iFrame’а.



На этом все… открываем форму какого-либо пользователя и смотрим его загрузку.

Комментарии (6)
  • Ion 18.09.2012

    Добрый день!

    А есть какой-то аналог для СРМ онлайн?

    Эта же диаграмма работать не будет?

  • slivka_83 18.09.2012

    Точно сказать не могу.
    SQL запрос работать. Можно ли для такого отчета написать эквивалент на фетч — я не знаю — с онлайн работь не приходилось.
    А в остальном проблем не вижу.

  • filo 18.09.2012

    Сделал все по шаблону но почему то при генерации отчетавместо отчета пишет данные недоступны

  • filo 18.09.2012

    В report builder’е для uGUID в качестве значения по умолчанию подставил ID одного из пользователей, и тоже получил вместо таблицы сообщение «Данные недоступны» похоже какието разрешения должны быть в самом CRM(версия 2011 rollup 11)

  • slivka_83 18.09.2012

    А в самом SQL Вы моежете выполнять запросы? данные возвращаются?

  • filo 18.09.2012

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

*

code