Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Имя активного пользователя в сообщении  (Прочитано 4085 раз)

Ефимов Артем

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Здравствуйте, подскажите, возможно ли при формировании сообщения через скрипт по изменению переменной, в структуре сообщения отобразить имя активного пользователя

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1179
    • Просмотр профиля
Re: Имя активного пользователя в сообщении
« Ответ #1 : 02 Июля 2020, 11:36:45 »
Здравствуйте.

Имя активного пользователя можно получить с помощью функции GetUserName, но она не работает при вызове из события "OnDataChange" (ведь это событие вызывается сервером при изменении переменных, клиенты к нему непричастны), поэтому в скрипте по изменению переменной получить имя пользователя не получится.
« Изменён: 02 Июля 2020, 11:38:29 от Simple-Scada »

Ефимов Артем

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Имя активного пользователя в сообщении
« Ответ #2 : 02 Июля 2020, 12:14:14 »
Решили проблему маленьким костылем, создали внутреннюю переменную типа String, в нее пишем через скрипт "Авторизация пользователя" имя текущего пользователя, соответственно при переавторизации пользователя эта переменная перезапишется. Далее можно использовать ее в сообщениях.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Re: Имя активного пользователя в сообщении
« Ответ #3 : 02 Июля 2020, 13:24:23 »
Учитывайте, что такой подход будет правильно работать только если к серверу одновременно подключено не более одного клиента. Если клиентов будет несколько, то переменная будет хранить имя пользователя который авторизовался последним.

Ефимов Артем

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Имя активного пользователя в сообщении
« Ответ #4 : 03 Июля 2020, 09:25:46 »
Спасибо за замечание. Больше двух пока и не планируется

metamorphogenesis

  • Пользователь
  • **
  • Сообщений: 58
    • Просмотр профиля
Re: Имя активного пользователя в сообщении
« Ответ #5 : 17 Июня 2021, 08:25:16 »
Возник вопрос, так или иначе касающийся этой темы. Выходит, что отображать на каждом клиенте имя авторизовавшегося в нем пользователя не представляется возможным? Или все же способ есть? В моей реализации тоже так выходит, что на всех клиентах отображается имя последнего зашедшего пользователя на любой из клиентов.


можно ли рассчитывать на реализацию вами этой возможности? В принципе, отображение имени текущего пользователя в текущем клиенте - не такая уж ненужная вещь и пренебрегать ею не стоит. Особенно это актуально когда пользователей действительно много и они часто меняются и при этом нужно отслеживать их поведение в сообщениях скады или бота
« Изменён: 17 Июня 2021, 08:34:47 от metamorphogenesis »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1179
    • Просмотр профиля
Re: Имя активного пользователя в сообщении
« Ответ #6 : 17 Июня 2021, 17:48:55 »
Здравствуйте.

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

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