Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Ефимов Артем от 02 Июля 2020, 05:38:59

Название: Имя активного пользователя в сообщении
Отправлено: Ефимов Артем от 02 Июля 2020, 05:38:59
Здравствуйте, подскажите, возможно ли при формировании сообщения через скрипт по изменению переменной, в структуре сообщения отобразить имя активного пользователя
Название: Re: Имя активного пользователя в сообщении
Отправлено: Simple_Scada от 02 Июля 2020, 11:36:45
Здравствуйте.

Имя активного пользователя можно получить с помощью функции GetUserName (https://simple-scada.com/help/script/getusername.html), но она не работает при вызове из события "OnDataChange" (ведь это событие вызывается сервером при изменении переменных, клиенты к нему непричастны), поэтому в скрипте по изменению переменной получить имя пользователя не получится.
Название: Re: Имя активного пользователя в сообщении
Отправлено: Ефимов Артем от 02 Июля 2020, 12:14:14
Решили проблему маленьким костылем, создали внутреннюю переменную типа String, в нее пишем через скрипт "Авторизация пользователя" имя текущего пользователя, соответственно при переавторизации пользователя эта переменная перезапишется. Далее можно использовать ее в сообщениях.
Название: Re: Имя активного пользователя в сообщении
Отправлено: Simple-Scada от 02 Июля 2020, 13:24:23
Учитывайте, что такой подход будет правильно работать только если к серверу одновременно подключено не более одного клиента. Если клиентов будет несколько, то переменная будет хранить имя пользователя который авторизовался последним.
Название: Re: Имя активного пользователя в сообщении
Отправлено: Ефимов Артем от 03 Июля 2020, 09:25:46
Спасибо за замечание. Больше двух пока и не планируется
Название: Re: Имя активного пользователя в сообщении
Отправлено: metamorphogenesis от 17 Июня 2021, 08:25:16
Возник вопрос, так или иначе касающийся этой темы. Выходит, что отображать на каждом клиенте имя авторизовавшегося в нем пользователя не представляется возможным? Или все же способ есть? В моей реализации тоже так выходит, что на всех клиентах отображается имя последнего зашедшего пользователя на любой из клиентов.


можно ли рассчитывать на реализацию вами этой возможности? В принципе, отображение имени текущего пользователя в текущем клиенте - не такая уж ненужная вещь и пренебрегать ею не стоит. Особенно это актуально когда пользователей действительно много и они часто меняются и при этом нужно отслеживать их поведение в сообщениях скады или бота
Название: Re: Имя активного пользователя в сообщении
Отправлено: Simple_Scada от 17 Июня 2021, 17:48:55
Здравствуйте.

Цитировать
Выходит, что отображать на каждом клиенте имя авторизовавшегося в нем пользователя не представляется возможным?
Да, как мы и писали в этой теме выше, если клиентов несколько, то у Вас будет отображаться имя пользователя, который авторизовался последним. Если требуется просто посмотреть имя пользователя, то в обычном клиенте это можно сделать путем наведения курсора на иконку смены пользователя в левом нижнем углу - при наведении отобразится имя текущего пользователя. Через скрипты имя текущего пользователя можно отобразить корректно только если скрипт будет вызван клиентом, например по клику на кнопку вывести имя пользователя используя ShowMessageClient (https://simple-scada.com/help/script/showmessageclient.html):
Код: (delphi)
begin
  ShowMessageClient(GetClientName, 'Имя пользователя', UTF8Encode('Имя текущего пользователя: ') + GetUserName);
end.
Функция GetUserName будет работать корректно, только в скриптах, которые вызываются клиентом - перечислены по ссылке (https://simple-scada.com/help/script/getusername.html). В других скриптах, которые выполняются сервером скады независимо от клиентов, она работать не будет.

Цитировать
можно ли рассчитывать на реализацию вами этой возможности?
Добавление такой возможности не планируется.