2017-02-10 11 views
0

У меня проблема с транзакцией вызова в ALV. , и теперь я хочу вызвать транзакцию, когда я дважды нажимаю на строку в своем всплывающем окне. Его возможно или нет?CALL TRANSACTION во всплывающем окне

Спасибо за ответы Я использую user_command '& IC1' -double нажмите чтобы вызвать всплывающее окно с данными:

 IF selfield-fieldname = 'MATNR'. 
     PERFORM popup. 

ФОРМА всплывающей:

FORM popup. 
DATA: wa_data LIKE zdata. 

CLEAR: wa_data. 
REFRESH it_data. 

LOOP AT t_data. 
CLEAR: wa_data. 
MOVE-CORRESPONDING t_data TO wa_data. 
APPEND wa_data TO it_data. 
ENDLOOP. 

CALL SCREEN 200 
    STARTING AT 20 20 
    ENDING AT 200 90. 

ENDFORM. 

его реализации и определения в моей верхней : lcl_handle_events

CLASS lcl_handle_events DEFINITION. 
PUBLIC SECTION. 
METHODS: on_double_click FOR EVENT double_click OF cl_salv_events_table 
IMPORTING row column. 
ENDCLASS.     "lcl_handle_events DEFINITION 

CLASS lcl_handle_events IMPLEMENTATION. 
METHOD on_double_click. 
PERFORM get_po_ord_info USING row column. 
ENDMETHOD.     "on_double_click 
ENDCLASS.     "lcl_handle_events IMPLEMENTATION 

И это в ALV включают:

FORM get_po_ord_info USING row TYPE salv_de_row 
    column TYPE salv_de_column. 

IF column EQ 'MATNR'. 
    SET PARAMETER ID 'MAT' FIELD t_dost-MATNR. 
    SET PARAMETER ID 'WRK' FIELD t_dost-WERKS. 
    CALL TRANSACTION 'ZCO06' AND SKIP FIRST SCREEN. 
ENDIF. 
ENDIF. 

ENDFORM.  
+1

Просто используйте стандартный двойной щелчок. В чем проблема? – Suncatcher

+0

Я применил класс lcl_handle_events, чтобы дважды щелкнуть вверху и сформировать get_po_ord_info с транзакцией вызова в alv, но все равно не работает. – miedziopl

+1

Дайте полный код вашего lcl_handle_events, а также фрагмент, в который вы прикрепляете обработчики и сетку вызовов. – Suncatcher

ответ

0

я четко не получить, в каком порядке вы называете свои части, но ваш код работает для меня, как это:

CLASS lcl_handle_events DEFINITION. 
PUBLIC SECTION. 
METHODS: on_double_click FOR EVENT double_click OF cl_salv_events_table IMPORTING row column. 
ENDCLASS.     "lcl_handle_events DEFINITION 

CLASS lcl_handle_events IMPLEMENTATION. 
METHOD on_double_click. 
IF column EQ 'MATNR'. 
SET PARAMETER ID 'MAT' FIELD t_dost-MATNR. 
SET PARAMETER ID 'WRK' FIELD t_dost-WERKS. 
CALL TRANSACTION 'MB51' AND SKIP FIRST SCREEN. 
ENDIF. 
ENDMETHOD.     "on_double_click 
ENDCLASS.     "lcl_handle_events IMPLEMENTATION 

START-OF-SELECTION. 

DATA: wa_data LIKE zdata. 
CLEAR: wa_data, it_data. 

LOOP AT t_data. 
CLEAR: wa_data. 
MOVE-CORRESPONDING t_data TO wa_data. 
APPEND wa_data TO it_data. 
ENDLOOP. 

DATA: o_alv TYPE REF TO cl_salv_table. 
DATA: lx_msg TYPE REF TO cx_salv_msg. 
    TRY. 
    cl_salv_table=>factory(
     IMPORTING 
     r_salv_table = o_alv 
     CHANGING 
     t_table  = it_data). 
    CATCH cx_salv_msg INTO lx_msg. 
ENDTRY. 

DATA: handle TYPE REF TO lcl_handle_events. 
CREATE OBJECT handle. 
DATA: lr_events TYPE REF TO cl_salv_events_table. 
CALL METHOD o_alv->GET_EVENT 
    RECEIVING 
    VALUE = lr_events. 
SET HANDLER handle->on_double_click FOR lr_events. 

o_alv->display(). 

Вы также можете позвонить всплывающее окно окно через CALL SCREEN...STARTING в методе on_double_click вместо вызова tcode, но вы можете сделать либо этих действий, вы не сможете запустить новую транзакцию во всплывающем окне.
Единственным обходным решением здесь является вызов модального окна внутри вашей Z-транзакции или использование POPUP_WITH_TABLE_DISPLAY FM, если вам нужен только вывод таблицы во всплывающем окне.

P.S. Также ваш IF column EQ 'MATNR' является избыточным, поскольку вы уже проверяете selfield-fieldname при вызове события.

Смежные вопросы