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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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