Подскажите, пожалуйста, есть ли возможность в Terrasoft проверить, кто в даный момент работает в программе и можно ли отправить пользователям сообщение с просьбой выйти из программы (или с каким-либо иным текстом)?
Нравится
Отследить момент логина (в программу, к базе данных) еще возможно (в форме главного окна или с помощью триггера на Logon). Но момент выхода из системы - это всегда большой вопрос.
Какую-то информацию дает в том же MS SQL запрос select * from sys.dm_exec_sessions.
Оповещение, думаю, можно реализовать созданием простого напоминания пользователям, которые на данный момент считаются активными.
Как вариант, можно добавить булевское поле в таблицу tbl_AdminUnit, например, LogIn. Во время входа в систему, который легко отследить, изменять значение этого поля для текущего пользователя на true, а во время выхода (например, по результату wmrYes системного сообщения "Вы действительно хотите выйти?") соответственно изменять значение на false.
Оповещение действительно проще всего сделать через напоминания с помощью функции AddRemindingToContact, которую вызывать в цикле для каждого из активных пользователей на текущий момент.
Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.
"Лабьяк Олег Игоревич" написал:Как вариант, можно добавить булевское поле в таблицу tbl_AdminUnit, например, LogIn.
TS позволяет запускать под одним пользователем 2 (и более) приложения. Тогда закрыв одно из них (например, ошибочно запущенное), мы посчитаем, что пользователь в системе уже не работает.
И наоборот - если компьютер ушел на перезагрузку (жесткий выход из программы), то пользователь так и останется отмеченным как активный.
Конечно, это всё паранойя, но предупрежден - значит, вооружен :)
Полностью с Вами согласен. Спасибо за комментарий :).
В принципе, первая проблема решается дополнительным полем для количества подключений. При выходе из приложения изменяем значение поля LogIn на false только тогда, когда количество подключений 0, иначе - уменьшаем его на -1, а LogIn оставляем без изменений.
Вторую проблему без вмешательства пользователя решить уже сложнее. Навскидку можно предложить вариант при каждом запуске системы проверять то же количество подключений, и если их 0, запуск происходит как обычно, если же их больше - сообщать об этом пользователю и предлагать изменить значение на корректное. Если пользователь согласен, что реальное количество его подключений отличается от предложенного программой, выводить диалог для ввода количества подключений.
Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.
Я бы штуку с мотиторингом подключенных пользователей вешал бы на СУБД.
навскидку тынц
Вариант имеет место быть :). Только мне кажется, что СУБД будет считать все коннекты к базе, а не только приложения. В то же время у пользователя может быть запущен TSAdmin, интеграция с MS Outlook и другими приложениями офиса. И если TSAdmin можно вычислить через Application в мониторе активности, то для интеграции колонка Application совпадает с приложением (TSCRM.exe или TSClient.exe).
Если честно, не слышал про триггера на Connect/Disconnect в MS SQL. Вообще бывают такие?
Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.
"Чечель Ольга" написал:
А с помошью MS SQL нельзя создать сообшение?
Если Вы имеете в виду сообщение на подобие тех, которые создаёт Windows, то нет. Для передачи сообщений можно попробовать использовать службы Windows (например, net send), но это не очень эффективно, учитывая, что пользователь может зайти в систему с любого компьютера в сети, где установлен Terrasoft.
Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.
Раз уж мы добрались до до NET SEND то может доработать внутреннюю напоминлку или поставить собственный таймер, сделать таблицу сообщений посессиям и ... полчится внутренняя аська :smile:
"Лабьяк Олег Игоревич" написал:Если честно, не слышал про триггера на Connect/Disconnect в MS SQL. Вообще бывают такие?
Олег, честно не знаю :biggrin:
По поводу триггеров на системные таблицы:
Новое в версии MS SQL Server 2005: триггеры на DDL
"Лабьяк Олег Игоревич" написал:Только мне кажется, что СУБД будет считать все коннекты к базе, а не только приложения
Нда, о интеграциях забыл..
Но по идее, их тоже вырубать нужно, а то если 1с и Террасофт синкатся будут, а мы базу положим :)
select * from sys.sysprocesses
можно брать дистинктом по ЛогинНейм
"Лабьяк Олег Игоревич" написал:Если честно, не слышал про триггера на Connect/Disconnect в MS SQL. Вообще бывают такие?
Тут больше и авторитетнее: http://technet.microsoft.com/en-us/library/bb326598.aspx
Кстати, слышал про эту задачу на тренинге по конфигурации TS :)
Вот маленький пример... В нем используется sys.sysprocesses как предложил Сергей. Это решение тестировалось на версии 3.2.0, на сервере MSSQL2005, под пользователем который имеет роль sysadmin в БД.
Примечания:
1) Если у вас версия TS выше 3.3.1.0 то в сервисе sq_SesInfo нужно изменить значение параметра ApplicationName на 'TSClient.exe'
2) Если у вас версия бд MSSQL2000 то в сервисе sq_SesInfo нужно заменить sys.sysprocesses на master.dbo.sysprocesses