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

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


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


ВНИМАНИЕ!

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



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

Зарегистрирован:
Пт, ноя 25 2005, 15:06
Сообщения: 143
tcp(4.7) написал(а):
Попробуйте вызвать нужную функцию винапи через какой нибудь стандартный активикс который используется для работы с операционкой локальной машины, там поидее можно добавить свой вызов функции, если скопировать группу функций в свою, видели конструкции типа:
CALL METHOD OF H_COM1 'GetRegValue' = STRING
EXPORTING #1 = ROOT
#2 = KEY.
Это вызовы функций винапи.

А документация в природе есть?


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

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
vga написал(а):
С чего бы это? Много функий использующих RFC для получения состояния GUI статуса. Указаная функция одна из них.


Теоретически, конечно, может. Но вопрос этот на форуме возникает постоянно, и не только мне хотелось бы узнать, как это можно сделать практически. Думаю, что 'DY_GET_FOCUS' не случайно работает только в контексте сёрч-хелпа. Т.е. SAP AG в корне пресекает крамольные идеи.


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

Зарегистрирован:
Пн, мар 05 2007, 15:30
Сообщения: 261
Откуда: Москва
Какая документация в САПе? :0)
Попробуйте что нибудь типа:
CALL METHOD OF H_COM1 'GetActiveWindow' = STRING.

ФМ который принадлежит группе функций которую нужно курочить
GUI_GET_REGVALUE

Но не понравится этот, не беда там еще куча ФМ и объектов, к примеру любой ФМ или метод который чтото делает на локальном хосте использует этот механизм :0)


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

Зарегистрирован:
Пт, ноя 25 2005, 15:06
Сообщения: 143
vga написал(а):
ИМХО, я согласен с sibrin, нечего тут выдумывать, обновляйте постоянно, вне зависимости от имеется фокус или нет. Или как предлагали в других ветках, повесть большую жирную кнопку - Обновить.

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


Это принципиальная необходимость. С кнопкой любой дурак может.
Я понимаю, что не виндовз, и если на ABAP такого принципиально сделать нельзя, тогда вопрос в другом - как средствами ABAP получить доступ в виндошной информации? Или, как вариант, написать внешнюю разработку которая будет обмениваться данными с GUI?


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

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

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


Все интерактивные "штучки" живут в окне браузера с использованием JavaScript и JavaApplet. Соответсвенно, серверная часть крутится в виде BSP или WebDynpro на сервере приложений.

Только это вряд ли можно назвать способом разгрузить сервер приложений. Разве только в случае, если отчёт имеет очень тяжёлые селекты. Есть способ бороться и с этим: кэширование, редукция вычислений на этапы и использование контекстов (se33). Устаревшая, насколько я понимаю, технология, но не хуже многих других.


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

Зарегистрирован:
Пн, мар 05 2007, 15:30
Сообщения: 261
Откуда: Москва
Ребята на абапе можно сделать что угодно, если немножко подумать и поковыряться, вот к примеру мой ФМ который возвращает текущее разрешение монитора
FUNCTION ZUNI_GET_SCREEN_RESOLUTION.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" EXPORTING
*" REFERENCE(XRESOLUTION) TYPE I
*" REFERENCE(YRESOLUTION) TYPE I
*" EXCEPTIONS
*" REGISTRY_ERROR
*"----------------------------------------------------------------------
data: KEY(255) type c,
VALUE_NAME type string,
string(256) type c.

key = 'HARDWARE\DEVICEMAP\VIDEO'.
value_name = '\Device\Video0'.
CALL FUNCTION 'ZGUI_GET_REGVALUE'
EXPORTING
ROOT = 2
KEY = 'HARDWARE\DEVICEMAP\VIDEO'
VALUE_NAME = '\Device\Video0'
CHANGING
STRING = string
.

IF SY-SUBRC EQ 0.
REPLACE '\REGISTRY\Machine\System\ControlSet001\' WITH '' INTO string.
CONDENSE string.
concatenate 'SYSTEM\CurrentControlSet\Hardware Profiles\'
'Current\System\CurrentControlSet\'
string into key.

CALL FUNCTION 'ZGUI_GET_REGDWVALUE'
EXPORTING
ROOT = 2
KEY = key
VALUE_NAME = 'DefaultSettings.XResolution'
CHANGING
DWORD = XResolution
.
if sy-subrc ne 0. raise REGISTRY_ERROR. endif.
CALL FUNCTION 'ZGUI_GET_REGDWVALUE'
EXPORTING
ROOT = 2
KEY = key
VALUE_NAME = 'DefaultSettings.YResolution'
CHANGING
DWORD = YResolution
.
if sy-subrc ne 0. raise REGISTRY_ERROR. endif.
ELSE.
raise REGISTRY_ERROR.
ENDIF.
ENDFUNCTION.



А вот который возвращает текущие настройки разделителей триад и десятичных знаков для винды и ёхеля:

FUNCTION ZUNI_GET_SDECIMAL.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" EXPORTING
*" REFERENCE(SDECIMAL) TYPE C
*" REFERENCE(STHOUSAND) TYPE C
*" REFERENCE(INEGNUMBER) TYPE C
*" REFERENCE(ILZERO) TYPE C
*" EXCEPTIONS
*" REGISTRY_ERROR
*"----------------------------------------------------------------------
data: KEY(255) type c,
VALUE_NAME type string,
string(256) type c.

CALL FUNCTION 'ZGUI_GET_REGVALUE'
EXPORTING
ROOT = 1
KEY = 'CONTROL PANEL\INTERNATIONAL'
VALUE_NAME = 'SDECIMAL'
CHANGING
STRING = string
.
if sy-subrc ne 0. raise REGISTRY_ERROR. endif.
SDECIMAL = string.

CALL FUNCTION 'ZGUI_GET_REGVALUE'
EXPORTING
ROOT = 1
KEY = 'CONTROL PANEL\INTERNATIONAL'
VALUE_NAME = 'STHOUSAND'
CHANGING
STRING = string
.
if sy-subrc ne 0. raise REGISTRY_ERROR. endif.
STHOUSAND = string.

CALL FUNCTION 'ZGUI_GET_REGVALUE'
EXPORTING
ROOT = 1
KEY = 'CONTROL PANEL\INTERNATIONAL'
VALUE_NAME = 'INEGNUMBER'
CHANGING
STRING = string
.
if sy-subrc ne 0. raise REGISTRY_ERROR. endif.
INEGNUMBER = string.

CALL FUNCTION 'ZGUI_GET_REGVALUE'
EXPORTING
ROOT = 1
KEY = 'CONTROL PANEL\INTERNATIONAL'
VALUE_NAME = 'ILZERO'
CHANGING
STRING = string
.
if sy-subrc ne 0. raise REGISTRY_ERROR. endif.
ILZERO = string.


ENDFUNCTION.


FUNCTION ZGUI_GET_EX_DEC .
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" EXPORTING
*" REFERENCE(DECIMALSEPARATOR) TYPE C
*" REFERENCE(THOUSANDSSEPARATOR) TYPE C
*" REFERENCE(USESYSTEMSEPARATORS) TYPE I
*" REFERENCE(VERSION) TYPE I
*" EXCEPTIONS
*" REGISTRY_ERROR
*"----------------------------------------------------------------------
data: KEY(255) type c,
VALUE_NAME type string,
string(256) type c,
dw type i,
dummy1(256) type c,
dummy2(256) type c.
CALL FUNCTION 'REGISTRY_GET'
EXPORTING
key = 'CurVer'
section = 'Excel.Application'
IMPORTING
value = string.
if sy-subrc ne 0. raise REGISTRY_ERROR. endif.
SPLIT string AT '.' INTO dummy1 dummy2 key.
version = key.
concatenate
'SOFTWARE\MICROSOFT\OFFICE\'
key
'.0\EXCEL\OPTIONS'
into key.
condense key no-gaps.
*key = 'SOFTWARE\MICROSOFT\OFFICE\10.0\EXCEL\OPTIONS'.
clear string.
CALL FUNCTION 'ZGUI_GET_REGVALUE'
EXPORTING
ROOT = 1
KEY = key
VALUE_NAME = 'DECIMALSEPARATOR'
CHANGING
STRING = string
.
if sy-subrc ne 0. raise REGISTRY_ERROR. endif.
DECIMALSEPARATOR = string.

CALL FUNCTION 'ZGUI_GET_REGVALUE'
EXPORTING
ROOT = 1
KEY = key
VALUE_NAME = 'THOUSANDSSEPARATOR'
CHANGING
STRING = string
.
if sy-subrc ne 0. raise REGISTRY_ERROR. endif.
THOUSANDSSEPARATOR = string.

CALL FUNCTION 'ZGUI_GET_REGDWVALUE'
EXPORTING
ROOT = 1
KEY = key
VALUE_NAME = 'USESYSTEMSEPARATORS'
CHANGING
DWORD = dw
.
if sy-subrc ne 0. raise REGISTRY_ERROR. endif.
USESYSTEMSEPARATORS = dw.


ENDFUNCTION.


Так что если захотеть - можно все, у меня к сожалению нет подрукой других чудес которые я на абапе писал, но и этого хватит чтобы подтвердить мою мысль :0)


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

Зарегистрирован:
Пт, ноя 25 2005, 15:06
Сообщения: 143
C регистром это конечно хорошо, если ли бы еще в нем хранились состояния окон. Или может где-то есть?


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

Зарегистрирован:
Пн, мар 05 2007, 15:30
Сообщения: 261
Откуда: Москва
Тфу. Да причем здесь регистр, я же говорю вызываются функции винапи, пробуй чтонибудь типа CALL METHOD OF H_COM1 'GetActiveWindow' = STRING.
только посмотри как инициализуется объект H_COM1.


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

Зарегистрирован:
Пн, мар 05 2007, 15:30
Сообщения: 261
Откуда: Москва
creo, кстати обратите внимание еще на один механизм: Дело в том что сообщения выводятся только на активное окно, тоесть если стоит сообщение, а за ним коммит или еще чего, то пока вы не станете на окно программы данные не закомитятся, по крайней мере это было раньше, и я попадался на тот прикол что нажал на активацию программы, потом переходил на другое окно, а программа не активировалась :0) Как сейчас не знаю лень проверять, ну так вот если расковырять этот механизм, может чего полезного и нароешь :0)


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

Зарегистрирован:
Пн, мар 05 2007, 15:30
Сообщения: 261
Откуда: Москва
Тоесть улавливаешь мысль? если поставить сообщение типа "возрадуйтесь данные обновились", то программа заткнется на этом месте пока пользователь не глянет на экран. Пробуй, расскажешь, благодарить будеш потом :0)


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

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
2tcp(4.7)
Доступ к windows API конечно интересная возможность, только как связать HWND окна с SAP номером экрана. Надо поизучать winspy-ем.


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

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
tcp(4.7) написал(а):
сообщения выводятся только на активное окно,
...
Как сейчас не знаю лень проверять


Ну только если очень-очень давно.
А проверяется элементарно:
Code:
report test.
WAIT up to 5 seconds.
message 'Hello The World!' type 'S'.


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

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Цитата:
tcp(4.7) писал(а):
сообщения выводятся только на активное окно,
...
Как сейчас не знаю лень проверять


в 4.6с так и есть. Хорошо заметно по характерному писку сообщения, когда переключаешься на окно, выполнявшееся и закончившее работу в фоне.

Все равно мне не совсем понятно беспокойство товарища по поводу рефреша неактивного окна. Есть подозрение, что SAP GUI и сам не будет рефрешить окно, которое неактивно.


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

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

Не работает. Он вообще не выводит в этом месте никаких сообщений типа I, S. Только прерывается на Е.

vga написал(а):
Все равно мне не совсем понятно беспокойство товарища по поводу рефреша неактивного окна. Есть подозрение, что SAP GUI и сам не будет рефрешить окно, которое неактивно.

Дело не в рефреше активного окна - это и так очевидно, что он не рефрешит, а показывает обновления когда на него переключаются.
Смысл в том, что во время рефреша данные в таблице изменяются, и человек, работая в другом окне, должен узнать, что данные обновились.

Задача похожа, например, на работу почтового клиента,когда человек работая в другом приложении видит в трее уведомление, что пришла почта (данные в отчете изменились) он заходит и смотрит, и в этот момент значок,что есть новая почта исчезает, человек читает почту и продолжает работать и т.д. Вот собственно и надо отловить момент когда человек откроет почтовик (т.е. окно станет активным)


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

Зарегистрирован:
Чт, фев 09 2006, 12:02
Сообщения: 462
Пол: Мужской
А просто послать юзеру экспресс сообщение "Барин, данные готовы, извольте откушать" не проще? (и правильней)


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

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


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

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


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

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