Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

ALV output save

Former Member
0 Kudos

Hi everyone,

I m very new to ABAP objects and i have never worked on this.

I have one requirment, In my ALV(Normal not Oops) output there r some records. If i select one record and click on save it shud be saved.The user shud select only one at a time.

This requirment i want to do in oops. So can anybody tell me r give me sample code(in a simple way) . so that i can understand it and do it.

regards

Sameer

1 ACCEPTED SOLUTION

former_member480923
Active Contributor
0 Kudos

*&---------------------------------------------------------------------*
*& Report  ZGRID_SAMPLE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zgrid_sample.

TABLES: vbak.

TYPE-POOLS: abap.

TYPES: BEGIN OF types_vbak,
       check TYPE boole_d,
       vbeln TYPE vbeln,
       vkorg TYPE vkorg,
       netwr TYPE netwr,
       END OF types_vbak,

       types_t_vbak TYPE STANDARD TABLE OF types_vbak.


DATA: gc_grid TYPE REF TO cl_gui_alv_grid,
      gt_vbak TYPE types_t_vbak,
      gt_fcat TYPE lvc_t_fcat,
      gw_count(2) TYPE n.


*----------------------------------------------------------------------*
*       CLASS lc_levent DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS: lc_levent DEFINITION.

  PUBLIC SECTION.

    CLASS-METHODS: lc_click FOR EVENT hotspot_click
                                OF cl_gui_alv_grid
                                IMPORTING e_row_id
                                          e_column_id
                                          es_row_no.

ENDCLASS.                    "lc_levent DEFINITION


*----------------------------------------------------------------------*
*       CLASS lc_event  IMPLMENATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS: lc_levent IMPLEMENTATION.

  METHOD: lc_click.
    PERFORM sub_catch_event USING e_row_id
                                  e_column_id
                                  es_row_no.
  ENDMETHOD.                    "lc_click

ENDCLASS.                    "lc_event  IMPLMENATION

SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.
SELECT-OPTIONS: s_vbeln FOR vbak-vbeln.
SELECTION-SCREEN: END OF BLOCK b1.


START-OF-SELECTION.

  SELECT vbeln
         vkorg
         netwr
         FROM vbak INTO CORRESPONDING FIELDS
                             OF TABLE gt_vbak
                       WHERE vbeln IN s_vbeln.

  IF sy-subrc NE 0.
    MESSAGE 'No Data found' TYPE 'E'.
  ELSE.
**  set  the initial row.
    PERFORM set_initial_row.
** Call the Screen
    CALL SCREEN '9001'.
  ENDIF.
*&---------------------------------------------------------------------*
*&      Module  STATUS_9001  OUTPUT
*&---------------------------------------------------------------------*
*       Show Grid Output
*----------------------------------------------------------------------*
MODULE status_9001 OUTPUT.

  SET PF-STATUS 'MAIN'.
  SET TITLEBAR 'MAIN'.

ENDMODULE.                 " STATUS_9001  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9001  INPUT
*&---------------------------------------------------------------------*
*       Handle Command
*----------------------------------------------------------------------*
MODULE user_command_9001 INPUT.

  CASE sy-ucomm.

    WHEN 'BACK' OR
         '%EX'  OR
         'CANC'.
      LEAVE TO SCREEN 0.
    WHEN 'INSR'.
      PERFORM sub_insert_row.
  ENDCASE.

ENDMODULE.                 " USER_COMMAND_9001  INPUT
*&---------------------------------------------------------------------*
*&      Module  SET_GRID  OUTPUT
*&---------------------------------------------------------------------*
*       Set Grid Display
*----------------------------------------------------------------------*
MODULE set_grid OUTPUT.

  DATA: ls_layo TYPE lvc_s_layo.


  CREATE OBJECT gc_grid
    EXPORTING
      i_parent          = cl_gui_container=>screen0
    EXCEPTIONS
      error_cntl_create = 1
      error_cntl_init   = 2
      error_cntl_link   = 3
      error_dp_create   = 4
      OTHERS            = 5.
  IF sy-subrc = 0.
** create the FCAT
    PERFORM sub_create_fcat CHANGING gt_fcat.
** Display GRID
    CALL METHOD gc_grid->set_table_for_first_display
      EXPORTING
        i_default                     = 'X'
        is_layout                     = ls_layo
      CHANGING
        it_outtab                     = gt_vbak
        it_fieldcatalog               = gt_fcat
*        it_sort                       =
*        it_filter                     =
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error                 = 2
        too_many_lines                = 3
        OTHERS                        = 4
            .
    IF sy-subrc <> 0.
      MESSAGE 'No Grid Displayed' TYPE 'E'.
    ELSE.
      SET HANDLER lc_levent=>lc_click FOR gc_grid.
    ENDIF.
  ENDIF.



ENDMODULE.                 " SET_GRID  OUTPUT
*&---------------------------------------------------------------------*
*&      Form  SUB_CREATE_FCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM sub_create_fcat CHANGING ct_fcat TYPE lvc_t_fcat.

  DATA: ls_fcat TYPE lvc_s_fcat.

  CLEAR: ls_fcat.
  ls_fcat-col_pos = 1.
  ls_fcat-fieldname = 'CHECK'.
  ls_fcat-tabname = 'GT_VBAK'.
  ls_fcat-checkbox = abap_true.
  ls_fcat-hotspot = abap_true.
  APPEND ls_fcat TO ct_fcat.

  CLEAR: ls_fcat.
  ls_fcat-col_pos = 2.
  ls_fcat-fieldname = 'VBELN'.
  ls_fcat-tabname = 'GT_VBAK'.
  ls_fcat-rollname = 'VBELN'.
  APPEND ls_fcat TO ct_fcat.

  CLEAR: ls_fcat.
  ls_fcat-col_pos = 3.
  ls_fcat-fieldname = 'VKORG'.
  ls_fcat-tabname = 'GT_VBAK'.
  ls_fcat-rollname = 'VKORG'.
  APPEND ls_fcat TO ct_fcat.

  CLEAR: ls_fcat.
  ls_fcat-col_pos = 4.
  ls_fcat-fieldname = 'NETWR'.
  ls_fcat-tabname = 'GT_VBAK'.
  ls_fcat-rollname = 'NETWR'.
  APPEND ls_fcat TO ct_fcat.


ENDFORM.                    " SUB_CREATE_FCAT
*&---------------------------------------------------------------------*
*&      Form  SUB_INSERT_ROW
*&---------------------------------------------------------------------*
*       Insert New Row
*----------------------------------------------------------------------*
FORM sub_insert_row .



ENDFORM.                    " SUB_INSERT_ROW
*&---------------------------------------------------------------------*
*&      Form  SET_INITIAL_ROW
*&---------------------------------------------------------------------*
*       Set Initial Row
*----------------------------------------------------------------------*
FORM set_initial_row .




ENDFORM.                    " SET_INITIAL_ROW
*&---------------------------------------------------------------------*
*&      Form  SUB_CATCH_EVENT
*&---------------------------------------------------------------------*
*       Catch Click event of a Hotspot
*----------------------------------------------------------------------*
FORM sub_catch_event  USING uw_row_id     TYPE lvc_s_row
                            uw_column_id  TYPE lvc_s_col
                            us_row_no     TYPE lvc_s_roid.
  FIELD-SYMBOLS: <l_vbak> TYPE types_vbak.

  IF uw_column_id = 'CHECK'.
    gw_count = gw_count + 1.
    IF gw_count > 1.
      MESSAGE e003(z1) WITH 'Please Select Only one row'.
    ELSE.
      READ TABLE gt_vbak ASSIGNING <l_vbak>
                         INDEX uw_row_id.
      IF sy-subrc EQ 0.
        IF <l_vbak>-check = abap_true.
          <l_vbak>-check = abap_false.
        ELSE.
          <l_vbak>-check = abap_true.
        ENDIF.
        gc_grid->refresh_table_display( ).
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                    " SUB_CATCH_EVENT

The above code is a simple example for handling check-boxes in OO-ALV, use this to populate the final table value for Checkboxes and then hadle the sy-ucomm event of the Screen to process them

Hope That Helps

Anirban M.

1 REPLY 1

former_member480923
Active Contributor
0 Kudos

*&---------------------------------------------------------------------*
*& Report  ZGRID_SAMPLE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zgrid_sample.

TABLES: vbak.

TYPE-POOLS: abap.

TYPES: BEGIN OF types_vbak,
       check TYPE boole_d,
       vbeln TYPE vbeln,
       vkorg TYPE vkorg,
       netwr TYPE netwr,
       END OF types_vbak,

       types_t_vbak TYPE STANDARD TABLE OF types_vbak.


DATA: gc_grid TYPE REF TO cl_gui_alv_grid,
      gt_vbak TYPE types_t_vbak,
      gt_fcat TYPE lvc_t_fcat,
      gw_count(2) TYPE n.


*----------------------------------------------------------------------*
*       CLASS lc_levent DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS: lc_levent DEFINITION.

  PUBLIC SECTION.

    CLASS-METHODS: lc_click FOR EVENT hotspot_click
                                OF cl_gui_alv_grid
                                IMPORTING e_row_id
                                          e_column_id
                                          es_row_no.

ENDCLASS.                    "lc_levent DEFINITION


*----------------------------------------------------------------------*
*       CLASS lc_event  IMPLMENATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS: lc_levent IMPLEMENTATION.

  METHOD: lc_click.
    PERFORM sub_catch_event USING e_row_id
                                  e_column_id
                                  es_row_no.
  ENDMETHOD.                    "lc_click

ENDCLASS.                    "lc_event  IMPLMENATION

SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.
SELECT-OPTIONS: s_vbeln FOR vbak-vbeln.
SELECTION-SCREEN: END OF BLOCK b1.


START-OF-SELECTION.

  SELECT vbeln
         vkorg
         netwr
         FROM vbak INTO CORRESPONDING FIELDS
                             OF TABLE gt_vbak
                       WHERE vbeln IN s_vbeln.

  IF sy-subrc NE 0.
    MESSAGE 'No Data found' TYPE 'E'.
  ELSE.
**  set  the initial row.
    PERFORM set_initial_row.
** Call the Screen
    CALL SCREEN '9001'.
  ENDIF.
*&---------------------------------------------------------------------*
*&      Module  STATUS_9001  OUTPUT
*&---------------------------------------------------------------------*
*       Show Grid Output
*----------------------------------------------------------------------*
MODULE status_9001 OUTPUT.

  SET PF-STATUS 'MAIN'.
  SET TITLEBAR 'MAIN'.

ENDMODULE.                 " STATUS_9001  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9001  INPUT
*&---------------------------------------------------------------------*
*       Handle Command
*----------------------------------------------------------------------*
MODULE user_command_9001 INPUT.

  CASE sy-ucomm.

    WHEN 'BACK' OR
         '%EX'  OR
         'CANC'.
      LEAVE TO SCREEN 0.
    WHEN 'INSR'.
      PERFORM sub_insert_row.
  ENDCASE.

ENDMODULE.                 " USER_COMMAND_9001  INPUT
*&---------------------------------------------------------------------*
*&      Module  SET_GRID  OUTPUT
*&---------------------------------------------------------------------*
*       Set Grid Display
*----------------------------------------------------------------------*
MODULE set_grid OUTPUT.

  DATA: ls_layo TYPE lvc_s_layo.


  CREATE OBJECT gc_grid
    EXPORTING
      i_parent          = cl_gui_container=>screen0
    EXCEPTIONS
      error_cntl_create = 1
      error_cntl_init   = 2
      error_cntl_link   = 3
      error_dp_create   = 4
      OTHERS            = 5.
  IF sy-subrc = 0.
** create the FCAT
    PERFORM sub_create_fcat CHANGING gt_fcat.
** Display GRID
    CALL METHOD gc_grid->set_table_for_first_display
      EXPORTING
        i_default                     = 'X'
        is_layout                     = ls_layo
      CHANGING
        it_outtab                     = gt_vbak
        it_fieldcatalog               = gt_fcat
*        it_sort                       =
*        it_filter                     =
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error                 = 2
        too_many_lines                = 3
        OTHERS                        = 4
            .
    IF sy-subrc <> 0.
      MESSAGE 'No Grid Displayed' TYPE 'E'.
    ELSE.
      SET HANDLER lc_levent=>lc_click FOR gc_grid.
    ENDIF.
  ENDIF.



ENDMODULE.                 " SET_GRID  OUTPUT
*&---------------------------------------------------------------------*
*&      Form  SUB_CREATE_FCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM sub_create_fcat CHANGING ct_fcat TYPE lvc_t_fcat.

  DATA: ls_fcat TYPE lvc_s_fcat.

  CLEAR: ls_fcat.
  ls_fcat-col_pos = 1.
  ls_fcat-fieldname = 'CHECK'.
  ls_fcat-tabname = 'GT_VBAK'.
  ls_fcat-checkbox = abap_true.
  ls_fcat-hotspot = abap_true.
  APPEND ls_fcat TO ct_fcat.

  CLEAR: ls_fcat.
  ls_fcat-col_pos = 2.
  ls_fcat-fieldname = 'VBELN'.
  ls_fcat-tabname = 'GT_VBAK'.
  ls_fcat-rollname = 'VBELN'.
  APPEND ls_fcat TO ct_fcat.

  CLEAR: ls_fcat.
  ls_fcat-col_pos = 3.
  ls_fcat-fieldname = 'VKORG'.
  ls_fcat-tabname = 'GT_VBAK'.
  ls_fcat-rollname = 'VKORG'.
  APPEND ls_fcat TO ct_fcat.

  CLEAR: ls_fcat.
  ls_fcat-col_pos = 4.
  ls_fcat-fieldname = 'NETWR'.
  ls_fcat-tabname = 'GT_VBAK'.
  ls_fcat-rollname = 'NETWR'.
  APPEND ls_fcat TO ct_fcat.


ENDFORM.                    " SUB_CREATE_FCAT
*&---------------------------------------------------------------------*
*&      Form  SUB_INSERT_ROW
*&---------------------------------------------------------------------*
*       Insert New Row
*----------------------------------------------------------------------*
FORM sub_insert_row .



ENDFORM.                    " SUB_INSERT_ROW
*&---------------------------------------------------------------------*
*&      Form  SET_INITIAL_ROW
*&---------------------------------------------------------------------*
*       Set Initial Row
*----------------------------------------------------------------------*
FORM set_initial_row .




ENDFORM.                    " SET_INITIAL_ROW
*&---------------------------------------------------------------------*
*&      Form  SUB_CATCH_EVENT
*&---------------------------------------------------------------------*
*       Catch Click event of a Hotspot
*----------------------------------------------------------------------*
FORM sub_catch_event  USING uw_row_id     TYPE lvc_s_row
                            uw_column_id  TYPE lvc_s_col
                            us_row_no     TYPE lvc_s_roid.
  FIELD-SYMBOLS: <l_vbak> TYPE types_vbak.

  IF uw_column_id = 'CHECK'.
    gw_count = gw_count + 1.
    IF gw_count > 1.
      MESSAGE e003(z1) WITH 'Please Select Only one row'.
    ELSE.
      READ TABLE gt_vbak ASSIGNING <l_vbak>
                         INDEX uw_row_id.
      IF sy-subrc EQ 0.
        IF <l_vbak>-check = abap_true.
          <l_vbak>-check = abap_false.
        ELSE.
          <l_vbak>-check = abap_true.
        ENDIF.
        gc_grid->refresh_table_display( ).
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                    " SUB_CATCH_EVENT

The above code is a simple example for handling check-boxes in OO-ALV, use this to populate the final table value for Checkboxes and then hadle the sy-ucomm event of the Screen to process them

Hope That Helps

Anirban M.