2016-06-14 14 views
0

削除された行のALV OOPSインスタンスのセル値にアクセスしたいとします。削除された行のdata_changed - ABAP

LOOP AT er_data_changed->mt_deleted_rows INTO ls_del. 
    CALL METHOD er_data_changed->get_cell_value 
    EXPORTING 
     i_row_id = ls_del-row_id 
     i_fieldname = 'FIPEX' 
    IMPORTING 
     e_value  = lv-fipex. 
ENDLOOP. 

しかしlv-fipexは常に空白です。なぜget_cell_valueが削除された行で動作しないのですか?これには何が使えますか?

+1

誰もが問題を再現できるように完全な作業例を追加してください。 – vwegert

答えて

1

このメソッドは、特定のセルまたは行のセルを変更した場合にのみデータを返すように見えます。達成するためには、メソッドSET_TABLE_FOR_FIRST_DISPLAYの呼び出しでCHANGINGパラメータとして使用される内部テーブルから直接読み取る必要があります。実際の削除は、イベントDATA_CHANGEDの後に実行されます。削除するデータが内部テーブルに残っているため、削除することができます。

この例を見てください(自分で画面とステータス100を作成する必要があります)。

REPORT ZZZ. 

CLASS lcl_main DEFINITION FINAL CREATE PRIVATE. 
    PUBLIC SECTION. 
    CLASS-METHODS: 
     main, 
     on_data_changed FOR EVENT data_changed OF cl_gui_alv_grid 
     IMPORTING 
      er_data_changed, 
     on_double_click FOR EVENT double_click OF cl_gui_alv_grid 
     IMPORTING 
      es_row_no. 
    PRIVATE SECTION. 
    CLASS-DATA: 
     st_t000 TYPE STANDARD TABLE OF t000 WITH EMPTY KEY. 
ENDCLASS. 

MODULE status_0100 OUTPUT. 
    SET PF-STATUS '100'. 
    lcl_main=>main(). 
ENDMODULE. 

MODULE user_command_0100 INPUT. 
    IF sy-ucomm = 'BACK'. 
    LEAVE TO SCREEN 0. 
    ENDIF. 
ENDMODULE. 

CLASS lcl_main IMPLEMENTATION. 
    METHOD on_double_click. 
    ASSERT 1 = 1. 
    ENDMETHOD. 

    METHOD on_data_changed. 
    DATA: l_value TYPE t000-ort01. 
    LOOP AT er_data_changed->mt_deleted_rows ASSIGNING FIELD-SYMBOL(<fs_deleted_row>). 
*  er_data_changed->get_cell_value(
*  EXPORTING 
*   i_row_id = <fs_deleted_row>-row_id 
*   i_fieldname = 'ORT01' 
*  IMPORTING 
*   e_value = l_value 
*  ). 
     l_value = st_t000[ <fs_deleted_row>-row_id ]-ort01. 
    ENDLOOP. 
    ENDMETHOD. 

    METHOD main. 
    DATA(lo_gui_container) = NEW cl_gui_custom_container(container_name = 'CONTAINER'). 
    DATA(lo_gui_alv_grid) = NEW cl_gui_alv_grid(i_parent = lo_gui_container). 

    SELECT * FROM t000 INTO TABLE st_t000 UP TO 20 ROWS. 

    lo_gui_alv_grid->set_ready_for_input(1). 

    SET HANDLER on_data_changed FOR lo_gui_alv_grid. 
    SET HANDLER on_double_click FOR lo_gui_alv_grid. 

    lo_gui_alv_grid->set_table_for_first_display(
     EXPORTING 
     i_structure_name = 'T000' 
     CHANGING 
     it_outtab = st_t000 
     EXCEPTIONS 
     invalid_parameter_combination = 1 
     program_error = 2 
     too_many_lines = 3 
     OTHERS = 99 
    ). 
    ASSERT sy-subrc = 0. 
    ENDMETHOD. 
ENDCLASS. 

START-OF-SELECTION. 
    CALL SCREEN 100. 
+0

役に立つ、ありがとう – Darko

+0

あなたは大歓迎です。ハッピーコーディング! – Jagger

関連する問題