Текущее время: Вт, июл 22 2025, 19:06

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Как определить текущее окно
СообщениеДобавлено: Ср, апр 11 2007, 17:27 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, ноя 25 2005, 15:06
Сообщения: 143
Не подскажет ли кто как определить какая из сессий(окон) пользователя является активной?

Пояснение: есть задача, которая выполняется с периодическим автообновлением. Необходимо отследить когда пользователь переключится на это окно, т.е. оно станет активным.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 11 2007, 17:39 
Специалист
Специалист

Зарегистрирован:
Вт, авг 17 2004, 08:47
Сообщения: 222
Пол: Мужской
Можно попытаться вызвать ФМ TH_USER_LIST и посмотреть по времени в какой сессии было последняя активность.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 11 2007, 20:00 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Проверьте, возможно в структуре будет возвращена полезная информация

DATA: ENV_INFO TYPE DDSHF4ENV.

CALL FUNCTION 'F4UT_GET_ENVIRONMENT'
IMPORTING
ENV_INFO = ENV_INFO
EXCEPTIONS
F4_NOT_ACTIVE = 1.

* ENV_INFO-SUBPROG - current program
* ENV_INFO-SUBDYNP - active screen


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, апр 12 2007, 09:03 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, ноя 25 2005, 15:06
Сообщения: 143
SAPer написал:
Можно попытаться вызвать ФМ TH_USER_LIST и посмотреть по времени в какой сессии было последняя активность.

Идея была хороша, но не сработала. Дело в том, что окно где происходит авторефреш оказывается всегда с последним временем активности, т.к. собственно в нем стоит эта проверка


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, апр 12 2007, 09:21 
Специалист
Специалист

Зарегистрирован:
Вт, авг 17 2004, 08:47
Сообщения: 222
Пол: Мужской
А ты тогда смотри предпоследнюю активность :D


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, апр 12 2007, 13:06 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, ноя 25 2005, 15:06
Сообщения: 143
vga написал(а):
Проверьте, возможно в структуре будет возвращена полезная информация

DATA: ENV_INFO TYPE DDSHF4ENV.

CALL FUNCTION 'F4UT_GET_ENVIRONMENT'
IMPORTING
ENV_INFO = ENV_INFO
EXCEPTIONS
F4_NOT_ACTIVE = 1.

* ENV_INFO-SUBPROG - current program
* ENV_INFO-SUBDYNP - active screen


Странно, в том месте проги где мне надо возвращает EXCEPTIONS = 1. Хотя в другом месте вернуло вроде нормально, но все равно поля
* ENV_INFO-SUBPROG - current program
* ENV_INFO-SUBDYNP - active screen
пустые.

Хотя я думаю это не поможет, попробую еще раз разьяснить.
Допустим есть отчет, который автоматически обновляется (через lcl_gui_timer), получается при каждом временном цикле мне нужно проверить открыто ли текущее окно у пользователя или он работает в другом. Получается функции подобные вышеописанной будут всегда возращать что это окно и есть текущее. А срабатывание события таймера приводит к тому, что в информацию о последней активности записывается именно активность отчета (касательно TH_USER_LIST или TH_LONG_USR_INFO).
Неужели нет какого-либо ФМ который бы просто показывал активно ли окно или нет???


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, апр 12 2007, 14:01 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Глянул в этот ФМ, там стоит проверка, вызывается ли из search-help. Если нет, то выдается ошибка. Но суть не в этом. В этом ФМ есть вызов С функции, возвращающей текущее активное окно.
CALL 'DY_GET_FOCUS'
ID 'SSCREENNAM' FIELD env_info-subprog
ID 'SSCREENNBR' FIELD env_info-subdynp
ID 'MSCREENNAM' FIELD env_info-mainprog
ID 'MSCREENNBR' FIELD env_info-maindynp
ID 'FIELDNAME' FIELD env_info-fieldname
* ID 'FIELDOFFS' FIELD "Position des Cursors im Feld
ID 'LINE' FIELD env_info-steplnum.

Попробуйте напрямую вызвать или поискать другие ФМ, ее использующие.

Если ваше таймерное событие не изменяет активное окно, то по идее ФМ должен вернуть именно активное окно. Ведь Вам это и нужно?

Кстати, на форуме было несколько обсуждений о автообновляемом отчете. Так используется несколько другой механизм, но тоже через таймер.
Поищите, может это решит ваши проблемы.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, апр 12 2007, 14:28 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, ноя 25 2005, 15:06
Сообщения: 143
vga написал(а):
Если ваше таймерное событие не изменяет активное окно, то по идее ФМ должен вернуть именно активное окно. Ведь Вам это и нужно?

В том то и проблема что пользователь может сидеть в любом другом окне и на каждое проверку не напишешь :-)
А так проверка стоит в моей проге, по-этому я думаю результат будет всегда один и тот же.

PS. Вызвал на прямую эту функцию результат нулевой. sy-subrc = 1 и все поля пустые. Так что проверка еще и глубже стоит.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, апр 12 2007, 15:08 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Сервер приложений не может узнать, какое окно SAP GUI имеет фокус ввода.

Только я не пойму, чем плохо-то, если обноляется окно не имея фокуса?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, апр 12 2007, 15:29 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, ноя 25 2005, 15:06
Сообщения: 143
sibrin написал:
Сервер приложений не может узнать, какое окно SAP GUI имеет фокус ввода.

Только я не пойму, чем плохо-то, если обноляется окно не имея фокуса?

1) Совсем не радостно :-(
2) Необходимо выполнять определенные действия только если на него смотрят, а если не смторят то и не надо.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, апр 12 2007, 15:35 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
creo написал(а):
2) Необходимо выполнять определенные действия только если на него смотрят, а если не смторят то и не надо.

А кто сказал, что если нет фокуса, то на него не смотрят?
Может юзер два окна открыл: одно сверху, другое снизу и на оба смотрит?

И наоборот, может юзер уснул давно, а фокус ввода на окне остался.

Если очень хочется не нагружать сервер приложений, пусть юзер жмёт Enter.

Можно также использовать Web-клиента, например, с WebDynpro или BSP приложением.


Последний раз редактировалось sibrin Чт, апр 12 2007, 15:40, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, апр 12 2007, 15:39 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
sibrin написал:
Сервер приложений не может узнать, какое окно SAP GUI имеет фокус ввода.

С чего бы это? Много функий использующих RFC для получения состояния GUI статуса. Указаная функция одна из них.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, апр 12 2007, 15:42 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, мар 05 2007, 15:30
Сообщения: 261
Откуда: Москва
Попробуйте вызвать нужную функцию винапи через какой нибудь стандартный активикс который используется для работы с операционкой локальной машины, там поидее можно добавить свой вызов функции, если скопировать группу функций в свою, видели конструкции типа:
CALL METHOD OF H_COM1 'GetRegValue' = STRING
EXPORTING #1 = ROOT
#2 = KEY.
Это вызовы функций винапи.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, апр 12 2007, 15:46 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, ноя 25 2005, 15:06
Сообщения: 143
sibrin написал:
А кто сказал, что если нет фокуса, то на него не смотрят?
Может юзер два окна открыл: одно сверху, другое снизу и на оба смотрит?
И наоборот, может юзер уснул давно, а фокус ввода на окне остался.

Эти ситуации меня изначально не интересуют, давайте рассматривать идельную модель, где считается, что пользователь работает в другом GUI окне. Все окна развернуты на весь экран.

sibrin написал:
Можно также использовать Web-клиента, например, с WebDynpro или BSP приложением.

Можно по подробнее?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, апр 12 2007, 15:54 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
ИМХО, я согласен с sibrin, нечего тут выдумывать, обновляйте постоянно, вне зависимости от имеется фокус или нет. Или как предлагали в других ветках, повесть большую жирную кнопку - Обновить.

Тут вам не виндоуз, тут климат другой.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB