Всем привет.
SELECT LOWER(UserAtHost) AS UserAtHost, Status=
CASE
WHEN Availability BETWEEN 0 AND 2999 THEN Availability
WHEN Availability BETWEEN 3000 AND 4499 THEN 'Available'
WHEN Availability BETWEEN 4500 and 5999 THEN 'Available - Idle'
WHEN Availability BETWEEN 6000 and 7499 THEN 'Busy'
WHEN Availability BETWEEN 7500 and 8999 THEN 'Busy - Idle'
WHEN Availability BETWEEN 9000 and 11999 THEN 'Do not Disturb'
WHEN Availability BETWEEN 12000 and 14999 THEN 'Be right back'
WHEN Availability BETWEEN 15000 and 17999 THEN 'Away'
WHEN Availability >= 18000 THEN 'Offline'
END,
LastPubTime
FROM rtc.dbo.Resource Resource RIGHT JOIN (SELECT Instance.PublisherId, SUBSTRING(Instance.Data, CHARINDEX('<availability>', Instance.Data) + 14, CHARINDEX('</availability>', Instance.Data) - CHARINDEX('<availability>', Instance.Data) - 14) AS Availability, Instance.LastPubTime
FROM (SELECT PublisherId, cast(substring(Data, 0, 256) AS varchar(256)) AS Data, LastPubTime
FROM rtcdyn.dbo.PublishedInstance
WHERE ContainerNum = 2 AND CategoryId = 4 UNION ALL
SELECT PublisherId, cast(substring(Data, 0, 256) AS varchar(256)) AS Data, LastPubTime
FROM rtc.dbo.PublishedStaticInstance
WHERE ContainerNum = 2 AND CategoryId = 4) AS Instance
WHERE CHARINDEX('aggregateState', Data) > 0) AS UserAndAvailability ON Resource.ResourceId = PublisherId
ORDER BY UserAtHost, LastPubTime DESC
В Skype for Business имеется возможность видеть статус сотрудника, по которому можно определять его доступность в реальном времени. То ли он на месте (в сети), то ли отошёл (скоро вернусь), то ли отсутствует (не на работе, нет на месте), то ли участвует в видеоконференции, то ли просто занят (занят, не беспокоить). Также клиент выдаёт данные, когда пользователь последний раз входил в систему (компьютер). Например, в списке контактов можно увидеть, что работник был в сети 150 часов назад. Значит можно предположить, что он либо в отпуске, либо клиентская часть по какой-то причине не запущена. При большом количестве сотрудников удобно иметь весь перечень перед глазами, а не отдельно по каждому просматривать состояние присутствия. Да, есть еще такие руководители которые именно так оценивают работу своих сотрудников.
По умолчанию статус присутствия Skype for Business включён и синхронизируется с почтовой системой Exchange. То есть при использовании клиента Outlook статус присутствия также виден. Однако, чтобы быть до конца уверенным в правильных настройках, нужно в этом убедиться.
В клиентской части Skype for Business заходим в Сервис->Параметры, в появившемся окне заходим в раздел Личные, проверяем или активируем галочки Синхронизировать контакты между Skype for Business и Exchange, Обновлять моё состояние присутствия на основе данных календаря и другие по необходимости.
При создании письма при вводе почтового адреса в адресной строке должно отобразиться состояние присутствия получателя письма.
Где хранится информация?
Данные о состоянии присутствия пользователей Skype for Business хранятся в таблице PublishedInstance, базы данных rtcdyn сервера Exchange, инстанса rtclocal.
Чтобы получить информацию о статусе присутствия работников компании, можно написать свой SQL-запрос либо же выполнить уже готовый
SELECT LOWER(UserAtHost) AS UserAtHost, Status=
CASE
WHEN Availability BETWEEN 0 AND 2999 THEN Availability
WHEN Availability BETWEEN 3000 AND 4499 THEN 'Available'
WHEN Availability BETWEEN 4500 and 5999 THEN 'Available - Idle'
WHEN Availability BETWEEN 6000 and 7499 THEN 'Busy'
WHEN Availability BETWEEN 7500 and 8999 THEN 'Busy - Idle'
WHEN Availability BETWEEN 9000 and 11999 THEN 'Do not Disturb'
WHEN Availability BETWEEN 12000 and 14999 THEN 'Be right back'
WHEN Availability BETWEEN 15000 and 17999 THEN 'Away'
WHEN Availability >= 18000 THEN 'Offline'
END,
LastPubTime
FROM rtc.dbo.Resource Resource RIGHT JOIN (SELECT Instance.PublisherId, SUBSTRING(Instance.Data, CHARINDEX('<availability>', Instance.Data) + 14, CHARINDEX('</availability>', Instance.Data) - CHARINDEX('<availability>', Instance.Data) - 14) AS Availability, Instance.LastPubTime
FROM (SELECT PublisherId, cast(substring(Data, 0, 256) AS varchar(256)) AS Data, LastPubTime
FROM rtcdyn.dbo.PublishedInstance
WHERE ContainerNum = 2 AND CategoryId = 4 UNION ALL
SELECT PublisherId, cast(substring(Data, 0, 256) AS varchar(256)) AS Data, LastPubTime
FROM rtc.dbo.PublishedStaticInstance
WHERE ContainerNum = 2 AND CategoryId = 4) AS Instance
WHERE CHARINDEX('aggregateState', Data) > 0) AS UserAndAvailability ON Resource.ResourceId = PublisherId
ORDER BY UserAtHost, LastPubTime DESC
Может возникнуть ситуация, что сразу не получится выполнить данный запрос и SQL-сервер выдаст ошибку: The SELECT permission was denied on the object 'PublishedStaticInstance', database 'rtc', schema 'dbo', а при попытке добавить права группе или пользователю выдаст другую ошибку: can`t alter the server role 'sysadmin', because its does not exist or you do not have permissions.
Чтобы добавить права нужно запустить службу SQL Server (RTCLOCAL) в однопользовательском режиме. Для этого сначала останавливаем службу SQL Server (RTCLOCAL), в ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\ ControlSet001\Services\MSSQL$RTCLOCAL параметру ImagePath добавляем ключ “–m”, который как раз и отвечает за запуск службы в однопользовательском режиме. То есть должно быть C:\Program Files\Microsoft SQL Server\MSSQL12.RTCLOCAL\MSSQL\Binn\sqlservr.exe” -m sRTCLOCAL.
Далее включаем службу, открываем консоль Microsoft SQL Server Management Studio, заходим в раздел Security->Logins, в свойствах пользователя или группы в разделе Server Roles активируем галочку напротив sysadmin. После этого проделываем обратные действия – убираем в реестре ключ “–m” и запускаем консоль управления под учётными данными с полными правами, выполняем запрос, получаем результат.
Вот и все.
No comments:
Post a Comment
А что вы думаете по этому поводу?