2017-02-10 14 views
0

ALV에서 통화 거래에 문제가 있습니다. 그리고 지금 내 팝업에서 행을 두 번 클릭 할 때 트랜잭션을 호출하려고합니다. 그것의 가능한 또는 아닙니다? 내 상단에팝업 창에서 CALL TRANSACTION이

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. 

구현 및 정의 :

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

FORM 팝업 : 답변

덕분에 나는 데이터로 팝업 창을 호출하는 user_command '& IC1'- 더블 클릭을 사용하여 : 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 
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에서 transaction을 호출하지만 아직 작동하지는 않습니다. – miedziopl

+1

lcl_handle_events의 전체 코드와 핸들러 및 콜 그리드를 연결하는 스 니펫을 제공하십시오. – Suncatcher

답변

0

내가 분명히 당신이 당신의 조각을 부르는 순서대로하지 않았다, 그러나 당신의 코드는 다음과 나를 위해 작동 : (210) 그리고이 ALV에 포함

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 메소드를 호출하는 대신, 중 하나를 수행 할 수 있습니다. 팝업 창에서 새 트랜잭션을 시작할 수 없습니다.
유일한 해결 방법은 Z- 트랜잭션 내부에서 모달 창을 호출하거나 팝업에서 표 출력 만 필요하면 POPUP_WITH_TABLE_DISPLAY FM을 사용하는 것입니다.

P. 또한 이벤트를 호출 할 때 selfield-fieldname을 이미 확인 했으므로 IF column EQ 'MATNR'은 중복됩니다.