Posted: Thu Nov 29, 2007 5:20 pm Post subject: Асинхронный вызов функции
Подскажите пожалуйста как сделать правильно асинхронный вызов функции из фун. модуля?
В модуле у меня функция, без параметров, просто вызов методов класса.
Функциональный модуль работает, а даже синхронный вызов
Code:
CALL FUNCTION "func_name"
ничего не дает.
Модуль при запуске правда "требует" для выполнения еще одного F8... т.е. на нем есть кнопка "выполнить"... как обойти этот маневр и запустить его? Причем асинхронно... _________________ Приятно когда программа из стадии "Блин, она не компилится!" переходит в стадию "Блин, она не работает!"
Age: 185 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
Posted: Thu Nov 29, 2007 5:25 pm Post subject:
ну в общем случае
Quote:
CALL FUNCTION func ...STARTING NEW TASK task name.
Additions:
1. ... DESTINATION dest
2. ... DESTINATION IN GROUP group name
3. ... DESTINATION IN GROUP DEFAULT
4. ... PERFORMING form ON END OF TASK
5. ... EXPORTING p1 = f1 ... pn = fn
6. ... TABLES p1 = itab1 ... pn = itabn
7. ... EXCEPTIONS syst_except = rc MESSAGE mess
Effect
Starts the function module func asynchronously in a new session. In contrast to normal function module calls, the calling program resumes processing as soon as the function module is started in the target system. It does not wait until the function module has finished. Through CALL SCREEN, the called function module can, for example, display a screen and thus interact with the user.
Читал справку ))
А по поводу работы функции не подскажете? _________________ Приятно когда программа из стадии "Блин, она не компилится!" переходит в стадию "Блин, она не работает!"
*--------------------------------------------------------------------*
* CLASS cl_init DEFINITION *
*--------------------------------------------------------------------*
CLASS cl_init DEFINITION
INHERITING FROM cl_gui_control .
PUBLIC SECTION .
METHODS:
constructor
IMPORTING
!parent TYPE REF TO cl_gui_container
value(shellstyle) TYPE i OPTIONAL
value(disp_mode) TYPE i OPTIONAL
value(life_time) TYPE i OPTIONAL
value(name) TYPE string OPTIONAL
EXCEPTIONS
cntl_install_error .
METHODS:
InitCredA.
ENDCLASS.
*DATA: id(7) TYPE c.
DATA: olelib_init TYPE REF TO cl_init ,
my_container_init TYPE REF TO cl_gui_custom_container.
*DATA: wf_rstring(120).
*--------------------------------------------------------------------*
* CLASS cl_init IMPLEMENTATION *
*--------------------------------------------------------------------*
CLASS cl_init IMPLEMENTATION .
METHOD constructor.
DATA: ctrl_name(80) TYPE c ,
wf_clsid(100) TYPE c .
IF NOT cl_gui_object=>activex IS INITIAL .
wf_clsid = 'olelib.olelibCtrl.1'.
ENDIF.
CALL METHOD super->constructor
EXPORTING
clsid = wf_clsid
shellstyle = shellstyle
lifetime = life_time
name = name
parent = parent.
IF my_container_init IS INITIAL.
CREATE OBJECT my_container_init
EXPORTING
container_name = 'OUTPUT_CONTAINER'
EXCEPTIONS
others = 1.
ENDIF.
IF olelib_init IS INITIAL.
CREATE OBJECT olelib_init
EXPORTING
parent = my_container_init.
ENDIF.
CALL METHOD olelib_init->InitCredA.
IF NOT olelib_init IS INITIAL.
CALL METHOD olelib_init->free.
FREE olelib_init.
ENDIF.
IF NOT my_container_init IS INITIAL.
CALL METHOD my_container_init->free.
FREE my_container_init.
ENDIF.
ENDFUNCTION.
Вот собсна ФМ ) При его запуске, открывается экран... а на экране кнопка "выполнить" F8. После нажатия на которую, судя по дебагу, модуль выполняет свой сгенереный код, потом доходит до моей собственно функции, выполняет ее, потом снова свой код... и только когда он закончит выполнять свой код - идет эффект в виду запуска нужного мне преложения по OLE.
А если делать просто CALL FUNCTION - судя по тому же верному помощнику, дебагу, сразу идет выполнение функции и ничего более и эфекта ноль. _________________ Приятно когда программа из стадии "Блин, она не компилится!" переходит в стадию "Блин, она не работает!"
Age: 185 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
Posted: Thu Nov 29, 2007 10:28 pm Post subject:
Давайте я накидаю вам информации к размышлению, потому что появились только мысли, но не ответы. В основном грешу на видимость класса.
1) Чтобы класс был виден из любой функции, он должен быть или глобальным, или же в отдельной INCLUDE, которая должна находиться выше include с описанием функционального модуля в главной программе функциональной группы.
Если функциональная группа называется Zxxx, то главная программа SAPLZxxx.
Щелкаете на Функ. группе, далее кнопка "Main Program".
2) Зачем Вы вообще разместили локальный класс в Функ. модуль, а не сделали его глобальным через se24 ?
3) Команды RFC накапливаются в кэшах и реально передаются на сервер презентаций (рабочую станцю пользователя) по команде flush.
В предыдущем примере
http://www.sapnet.ru/viewtopic.php?t=290&start=0
это
call method cl_gui_cfw=>flush
сразу после call_method, в вашем коде его нет.
Класс запихнул просто, "для тестировки" работает ли, так сказать... в продуктив он бы только глобально пошел... насчет пункта 3 проверю утром, спасибо за информацию к размышлению _________________ Приятно когда программа из стадии "Блин, она не компилится!" переходит в стадию "Блин, она не работает!"
Спасибо заработало )
Но почему-то работает только один раз )))))
При первом заходе в систему и выполнении - все срабатывает отлично... при повторном - уже не срабатывае... причем даже ФМ не срабатывает... Если перезапустить сессию R/3, то снова 1 раз сработает... тут наверное причина уже в ocx...
Хотя такое впечатление что R/3 подгружает библиотеку и не "отпускает"... _________________ Приятно когда программа из стадии "Блин, она не компилится!" переходит в стадию "Блин, она не работает!"
Age: 185 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
Posted: Fri Nov 30, 2007 6:18 pm Post subject:
rudeman wrote:
Спасибо заработало )
Но почему-то работает только один раз )))))
При первом заходе в систему и выполнении - все срабатывает отлично... при повторном - уже не срабатывае... причем даже ФМ не срабатывает... Если перезапустить сессию R/3, то снова 1 раз сработает... тут наверное причина уже в ocx...
Хотя такое впечатление что R/3 подгружает библиотеку и не "отпускает"...
Скорей всего объекты не освобождаете. Посмотрите, висит ли Ваш ocx в процессах на клиенте, после закрытия сессии с SAP.
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.