Отчеты
19
Сен
12

Последний вход пользователя

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

  • Откройте VS 2008 и создайте новый проект отчета;
  • Добавьте новый DataSource с подключением к БД _MSCRM;
  • Добавьте новый DataSet с таким кодом:
    SELECT
    	su.FullName,
    	CAST(su.SystemUserId AS NVARCHAR(36)) SystemUserId,
    	su.BusinessUnitIdName,
    	CAST(su.BusinessunitId AS NVARCHAR(36)) BusinessunitId,
    	dbo.fn_UTCToLocalTime(suo.LastAccessTime) LastAccessTime,
    	DATEPART(hh, (GETDATE() - dbo.fn_UTCToLocalTime(LastAccessTime))) Diff
    FROM
    	dbo.FilteredSystemUser su
    		LEFT JOIN MSCRM_CONFIG.dbo.SystemUserOrganizations suo
    			ON su.SystemUserId=suo.CrmUserId
    WHERE
    	su.FullName NOT IN ('INTEGRATION', 'SYSTEM')
    ORDER BY
    	suo.LastAccessTime DESC
    

    Этот код делает следующие:

    • Вытаскивает из вьюхи FilteredSystemUser информацию о пользователях (их имя, и подразделение);
    • Вытаскивает из таблицы SystemUserOrganizations БД MSCRM_CONFIG информацию о том когда зюзвер впоследний раз входил в систему;
    • Вычисляет разницу между последним входом пользователя в систему и текущей датой/временем (в локалтном времени).
  • Добавьте в область Design матричную таблицу с четырьмя столбцами. Во второй, третий и четвертый столбцы поместите имя пользователя, название подразделения и дату последнего входа, соответственно;
  • Для ячеек с именем пользователя и названием подразделения добавьте гиперссылки. Для этого щелкните по ячейке правой кнопкой мыши и выберите Text Box Properties — далее Actions — поставьте Go to URL и щелкните по кнопке Функции. В открывшемся диалоговом окне вбейте такой код:
    • Для имени пользователя:
      ="http://crmserver/orgname/main.aspx?etc=8&extraqs=%3f_gridType%3d8%26etc%3d8%26id%3d%257b" & Fields!SystemUserId.Value & "%257d%26rskey%3d316330237&pagetype=entityrecord"
      
    • Для название подразделения:
      ="http://crmserver/orgname/biz/business/edit.aspx?id=%7b" & Fields!BusinessunitId.Value & "%7d"
      
  • Выделите ячейку с датой последнего входа и на панели Properties задайте свойство Format:
    [hh:mm] dd.MM.yyyy
    
  • В первую колонку поместите интерактивный элемент Indicator. При этом выберите тип Shapes. После добавления выделите его и щелкните по кнопке Свойства – затем Value и States. В Value выберите поле Diff, а в States Measurement Unit – Numeric. Ну и раставьте какой индикатор будет отображаться при каких значениях поля Diff;
  • На этом все, разукрасьте отчет по своему усмотрению, сохраните его, опубликуйтке в CRM и смотрите 🙂

З.Ы. Я все делал под админом, поэтому у меня все нормально работает. Но у других юзверов возможно не будет доступа к таблице MSCRM_CONFIG.dbo.SystemUserOrganizations. Поэтому Вам потребуется выдать права на Select для учетки, под которой работает апликешн пул CRM.

З.Ы.2 Для тех кому лень все это делать, вот файл отчета: lastloginreport.rdl (можете его подключить к проекту отчетов в VS или сразу опубликовать в CRM).






Комментарии (12)
  • Владимир 19.09.2011

    Судя по скриншотам для создания отчёта использовалась 2008 студия. Кроме того насколько я знаю нельзя создать отчёт в 2010 студии.

  • slivka_83 19.09.2011

    Все верно, отчеты для RS 2008 пишутся в VS 2008 и только в ней 🙂

  • Родион 19.09.2011

    Не удается отобразить отчет. (rsProcessingAborted) с чего бы? help:D

  • Родион 19.09.2011

    ну ребята помогите:) хочется эту фишулю видеть))

  • slivka_83 19.09.2011

    Вам нужно включить подробные ошибки в RS и посмотреть что пишет!

  • Родион 19.09.2011

    ээм) я в crm месяц всего для меня это пока что не совсем изведанная область) можно по конкретнее:\
    вообще когда вылезает ошибка при нажатии кнопки повторить выскакивает «недопустимый аргумент»
    вообщем то, я скачал просто файл отчета с сайта, заменил там название и ссылки вроде все правильно должно быть?) или я ошибаюсь где..

  • Родион 19.09.2011

    может быть такая ошибка потому что задействованы две рабочие группы??

  • Родион 19.09.2011

    Ну собственно , странно ) долго копался )

  • slivka_83 19.09.2011

    В 2005 RS подробные ошибки включаются через скрипт. В 2008 RS через интерфейс в Management Studio.
    http://technet.microsoft.com/en-us/library/aa337165.aspx

  • webmaster 19.09.2011

    У вас там ошибка в запросе
    «DATEPART(hh, (GETDATE() — dbo.fn_UTCToLocalTime(LastAccessTime)))»
    hh надо заменить на dd(часы на дни заменить), а то что зеленые с желтыми чередуются постоянно:)

  • Макс 19.09.2011

    Здравствуйте, а на 4 crm есть что то подобное?

  • slivka_83 19.09.2011

    Здравствуйте. Вроде нет. В 4 кажется небыло поля LastAccessTime в карточке пользователя. Теоретически можно сделать через лога IIS’а но это сложно.

*

code