SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Асинхронный вызов функции



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
rudeman
Специалист
Специалист



Joined: 21 Sep 2007
Posts: 55
Location: Киев

PostPosted: Thu Nov 29, 2007 5:20 pm    Post subject: Асинхронный вызов функции Reply with quote

Подскажите пожалуйста как сделать правильно асинхронный вызов функции из фун. модуля?
В модуле у меня функция, без параметров, просто вызов методов класса.
Функциональный модуль работает, а даже синхронный вызов
Code:

CALL FUNCTION "func_name"

ничего не дает.
Модуль при запуске правда "требует" для выполнения еще одного F8... т.е. на нем есть кнопка "выполнить"... как обойти этот маневр и запустить его? Причем асинхронно...

_________________
Приятно когда программа из стадии "Блин, она не компилится!" переходит в стадию "Блин, она не работает!"
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 185
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Thu Nov 29, 2007 5:25 pm    Post subject: Reply with quote

ну в общем случае

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.
Back to top
View user's profile Send private message Blog Visit poster's website
rudeman
Специалист
Специалист



Joined: 21 Sep 2007
Posts: 55
Location: Киев

PostPosted: Thu Nov 29, 2007 5:31 pm    Post subject: Reply with quote

Читал справку ))
А по поводу работы функции не подскажете? Embarassed

_________________
Приятно когда программа из стадии "Блин, она не компилится!" переходит в стадию "Блин, она не работает!"
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 185
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Thu Nov 29, 2007 5:48 pm    Post subject: Reply with quote

Сложно представить, что происходит Wink Неплохо бы код посмотреть.
Back to top
View user's profile Send private message Blog Visit poster's website
rudeman
Специалист
Специалист



Joined: 21 Sep 2007
Posts: 55
Location: Киев

PostPosted: Thu Nov 29, 2007 5:59 pm    Post subject: Reply with quote

Code:

*--------------------------------------------------------------------*
*       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.

  ENDMETHOD .

  METHOD InitCredA.
    CALL METHOD me->call_method
      EXPORTING
      method = 'InitCredA'.
  ENDMETHOD.
ENDCLASS.
FUNCTION zInitCred.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"----------------------------------------------------------------------

  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 - судя по тому же верному помощнику, дебагу, сразу идет выполнение функции и ничего более и эфекта ноль.

_________________
Приятно когда программа из стадии "Блин, она не компилится!" переходит в стадию "Блин, она не работает!"
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 185
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Thu Nov 29, 2007 10:28 pm    Post subject: Reply with quote

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

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, в вашем коде его нет.

Других предположений пока нет.
Back to top
View user's profile Send private message Blog Visit poster's website
rudeman
Специалист
Специалист



Joined: 21 Sep 2007
Posts: 55
Location: Киев

PostPosted: Fri Nov 30, 2007 1:59 am    Post subject: Reply with quote

Класс запихнул просто, "для тестировки" работает ли, так сказать... в продуктив он бы только глобально пошел... насчет пункта 3 проверю утром, спасибо за информацию к размышлению Wink
_________________
Приятно когда программа из стадии "Блин, она не компилится!" переходит в стадию "Блин, она не работает!"
Back to top
View user's profile Send private message
rudeman
Специалист
Специалист



Joined: 21 Sep 2007
Posts: 55
Location: Киев

PostPosted: Fri Nov 30, 2007 3:19 pm    Post subject: Reply with quote

Спасибо заработало )
Но почему-то работает только один раз )))))
При первом заходе в систему и выполнении - все срабатывает отлично... при повторном - уже не срабатывае... причем даже ФМ не срабатывает... Если перезапустить сессию R/3, то снова 1 раз сработает... тут наверное причина уже в ocx...
Хотя такое впечатление что R/3 подгружает библиотеку и не "отпускает"...

_________________
Приятно когда программа из стадии "Блин, она не компилится!" переходит в стадию "Блин, она не работает!"
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 185
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Fri Nov 30, 2007 6:18 pm    Post subject: Reply with quote

rudeman wrote:
Спасибо заработало )
Но почему-то работает только один раз )))))
При первом заходе в систему и выполнении - все срабатывает отлично... при повторном - уже не срабатывае... причем даже ФМ не срабатывает... Если перезапустить сессию R/3, то снова 1 раз сработает... тут наверное причина уже в ocx...
Хотя такое впечатление что R/3 подгружает библиотеку и не "отпускает"...


Скорей всего объекты не освобождаете. Посмотрите, висит ли Ваш ocx в процессах на клиенте, после закрытия сессии с SAP.
Back to top
View user's profile Send private message Blog Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
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.