2016-06-14 4 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

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

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