2017-02-10 7 views
0

ALVのコールトランザクションに問題があります。 今私は私のポップアップで行をダブルクリックすると、トランザクションを呼び出すしたい。可能かどうか?答えをポップアップウィンドウのCALL TRANSACTION

おかげ 私はuser_commandデータでポップアップウィンドウを呼び出すための '& IC1' - 二重クリックを使用します。

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

FORMポップアップ:私の一番上にある

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のcall tr​​ansactionで作成しますが、それでもまだ動かないことを暗示しました。 – 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...STARTINGon_double_clickメソッドで呼び出すのではなく、のいずれかを実行すると、ポップアップウィンドウで新しいトランザクションを開始することはできません。
ここでの唯一の回避策は、あなたのポップアップでテーブル出力が必要な場合は、Zトランザクション内でモーダルウィンドウを呼び出すか、POPUP_WITH_TABLE_DISPLAY FMを使用することです。

P.S.また、IF column EQ 'MATNR'は、イベントを呼び出すときにすでにselfield-fieldnameをチェックしているので冗長です。