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

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


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

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


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

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