Quantcast
Channel: SCN: Message List
Viewing all articles
Browse latest Browse all 2740

Re: ALV Factory Method Deletion functionality

$
0
0

Hi!

 

In ALV OO model it is pretty simple.

 

Here is an example. It is not suitable for copy and paste, but it is good for understanding.

 

 

CLASS lcl_app DEFINITION CREATE PRIVATE FINAL.

 

  PUBLIC SECTION.

 

  PRIVATE SECTION.

 

    CONSTANTS: btn_delete TYPE salv_de_function VALUE 'BTN_DELETE'.

 

 

    DATA: salv_table  TYPE REF TO cl_salv_table.

 

    METHODS:

  

    METHODS:

     handle_added_function FOR EVENT added_function OF cl_salv_events_table

        IMPORTING

            e_salv_function.

 

    METHODS:

      handle_btn_delete.

 

ENDCLASS.

 

 

CLASS lcl_app IMPLEMENTATION.

 

 

  METHOD display_report.

 

   DATA: lr_events  TYPE REF TO cl_salv_events_table.

 

    TRY.

       cl_salv_table=>factory(

          IMPORTING

            r_salv_table = me->salv_table

          CHANGING

            t_table      = me->report_data ).

      CATCH cx_salv_msg .

      

    ENDTRY.

 

*   Event handling

    lr_events = me->salv_table->get_event( ).

    SET HANDLER me->handle_added_function FOR lr_events.

 

    me->salv_table->display( ).

 

  ENDMETHOD.

 

  METHOD handle_added_function.

 

        CASE e_salv_function.

 

 

          WHEN btn_delete.

            me->handle_btn_delete( ).

        ENDCASE.

 

  ENDMETHOD.

 

 

  METHOD handle_btn_delete.

 

    DATA: lr_selections  TYPE REF TO cl_salv_selections,

          lt_sel_rows    TYPE salv_t_row,

          lv_sel_row     LIKE LINE OF lt_sel_rows,

          lv_n_rows      TYPE i,

          lv_answer      TYPE c LENGTH 1.

 

   lr_selections = me->salv_table->get_selections( ).

    lt_sel_rows = lr_selections->get_selected_rows( ).

 

    lv_n_rows = lines( lt_sel_rows ).

    CASE lv_n_rows.

      WHEN 1. " ok

      WHEN OTHERS.

        MESSAGE ... " Please select exactly 1 row!

    ENDCASE.

 

*   Get the record to delete

    READ TABLE lt_sel_rows INTO lv_sel_row INDEX 1.

    IF sy-subrc <> 0.

      MESSAGE " something goes wrong!

    ENDIF.

 

    READ TABLE me->report_data INTO ls_del_rpt_rec INDEX lv_sel_row.

    IF sy-subrc <> 0.

      MESSAGE ... " something is wrong!

    ENDIF.

 

*   Delete record from the table

    delete  me->report_data index lv_sel_row.

 

 

*   Refresh ALV

    me->salv_table->refresh( refresh_mode = if_salv_c_refresh=>full ).

 

 

  ENDMETHOD.

 

ENDCLASS.


Viewing all articles
Browse latest Browse all 2740

Trending Articles