Последний вход пользователя
Сегодня сварганим небольшой отчет, выводящий список всех пользователей 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).
Судя по скриншотам для создания отчёта использовалась 2008 студия. Кроме того насколько я знаю нельзя создать отчёт в 2010 студии.
Все верно, отчеты для RS 2008 пишутся в VS 2008 и только в ней 🙂
Не удается отобразить отчет. (rsProcessingAborted) с чего бы? help:D
ну ребята помогите:) хочется эту фишулю видеть))
Вам нужно включить подробные ошибки в RS и посмотреть что пишет!
ээм) я в crm месяц всего для меня это пока что не совсем изведанная область) можно по конкретнее:\
вообще когда вылезает ошибка при нажатии кнопки повторить выскакивает «недопустимый аргумент»
вообщем то, я скачал просто файл отчета с сайта, заменил там название и ссылки вроде все правильно должно быть?) или я ошибаюсь где..
может быть такая ошибка потому что задействованы две рабочие группы??
Ну собственно , странно ) долго копался )
В 2005 RS подробные ошибки включаются через скрипт. В 2008 RS через интерфейс в Management Studio.
http://technet.microsoft.com/en-us/library/aa337165.aspx
У вас там ошибка в запросе
«DATEPART(hh, (GETDATE() — dbo.fn_UTCToLocalTime(LastAccessTime)))»
hh надо заменить на dd(часы на дни заменить), а то что зеленые с желтыми чередуются постоянно:)
Здравствуйте, а на 4 crm есть что то подобное?
Здравствуйте. Вроде нет. В 4 кажется небыло поля LastAccessTime в карточке пользователя. Теоретически можно сделать через лога IIS’а но это сложно.