cancel
Showing results for 
Search instead for 
Did you mean: 

ALV GRID Problem with reading contents

Former Member
0 Kudos

Hi there! I'm quite new with ABAP and I have some problems with the syntax of it. Maybe I should first describe my aim and then I'll show you my code.

1. I read contents from two database tables, called 'zbc_dan_registry' and 'zbc_dan_category'.

'zbc_dan_registry' has 2 columns: name, value.
zbc_dan_category' has 1 column: category.

Now I want to have an ALV Grid, that displays the contents of 'zbc_dan_registry' and one additional column with dropdown fields, where the user can select a category for each row. This is, what my code already does.

Now I want to save the contents of the whole table in a new table 'zbc_dan_registrz' (you see: 'registrz', not 'registry'!) with 3 columns:

name, category, value.

My problem is, how can I read the contents of the ALV Grid, with the user selected category for each row, and save them in an internal table? I've tried to adapt the code of "BCALV_EDIT_04", but I don't get it running.

Some detailled help would be great, you know, I'm really working hard to understand ABAP, but it's really hard for me. Thanks for your support and help!!

Here's my code so far:

*&---------------------------------------------------------------------*
*& Report  ZBC400_DAN_TESTNO4
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZBC400_DAN_TESTNO4.
DATA: lt_registrz TYPE TABLE OF zbc_dan_regstrz WITH HEADER LINE,
      lt_category TYPE TABLE OF zbc_dan_category WITH HEADER LINE,
      ls_category TYPE zbc_dan_category, "Struktur Kategorie
      ok_code LIKE sy-ucomm,
      container_r TYPE REF TO cl_gui_custom_container,
      grid_r TYPE REF TO cl_gui_alv_grid,
      gc_custom_control_name TYPE scrfname VALUE 'CONTAINER_REG',
      fieldcat_r TYPE lvc_t_fcat,
      layout_r TYPE lvc_s_layo,
      lt_ddval TYPE lvc_t_drop,
      ls_ddval TYPE lvc_s_drop,
      c TYPE i.

CLASS lcl_event_receiver DEFINITION DEFERRED.
************************************
  DATA g_verifier TYPE REF TO lcl_event_receiver.
  DATA: BEGIN OF gt_outtab OCCURS 0.
    INCLUDE STRUCTURE zbc_dan_regstrz.
    DATA: celltab TYPE lvc_t_styl.
  DATA: END OF gt_outtab.
************************************

CLASS lcl_event_receiver DEFINITION.
************************************
  PUBLIC SECTION.
  TYPES: BEGIN OF lt_registrz_key.         "Struktur mit den Schlüsseln der Tabelle 'Registry'
    TYPES:  name TYPE zbc_dan_name,
            value TYPE zbc_dan_value,
            category TYPE zbc_dan_cat.
  TYPES: END OF lt_registrz_key.
  TYPES:  ls_registrz_keys TYPE STANDARD TABLE OF lt_registrz_key,
          ls_registrz_table TYPE STANDARD TABLE OF zbc_dan_regstrz.
  METHODS: get_inserted_rows EXPORTING inserted_rows TYPE ls_registrz_keys.
  METHODS: refresh_delta_tables.
  METHODS: handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid IMPORTING er_data_changed.
*  METHODS: get_inserted_rows EXPORTING inserted_rows TYPE registrz_keys.
*  METHODS: refresh_delta_tables.
  PRIVATE SECTION.
  DATA: inserted_rows TYPE ls_registrz_keys.
  DATA: error_in_data TYPE c.
  METHODS: get_cell_values IMPORTING row_id TYPE int4 pr_data_changed TYPE REF TO cl_alv_changed_data_protocol EXPORTING key TYPE lt_registrz_key.
************************************
ENDCLASS.

CLASS lcl_event_receiver IMPLEMENTATION.
************************************
  METHOD handle_data_changed.
    DATA: ls_good TYPE lvc_s_modi,
          ls_new TYPE lvc_s_moce.
    error_in_data = space.
    IF error_in_data = 'X'.
      CALL METHOD er_data_changed->display_protocol.
    ENDIF.
  ENDMETHOD.

  METHOD get_cell_values.
    CALL METHOD pr_data_changed->get_cell_value
      EXPORTING i_row_id = row_id i_fieldname = 'NAME'
        IMPORTING e_value = key-name.
    CALL METHOD pr_data_changed->get_cell_value
      EXPORTING i_row_id = row_id i_fieldname = 'VALUE'
        IMPORTING e_value = key-value.
    CALL METHOD pr_data_changed->get_cell_value
      EXPORTING i_row_id = row_id i_fieldname = 'CATEGORY'
        IMPORTING e_value = key-category.
  ENDMETHOD.

  METHOD get_inserted_rows.
    inserted_rows = me->inserted_rows.
  ENDMETHOD.

  METHOD refresh_delta_tables.
    clear me->inserted_rows[].
  ENDMETHOD.
************************************
ENDCLASS.

START-OF-SELECTION.
    SELECT client name value
      INTO CORRESPONDING FIELDS OF TABLE lt_registrz FROM zbc_dan_regstry.
    SELECT category INTO CORRESPONDING FIELDS OF TABLE lt_category FROM zbc_dan_category.

CALL SCREEN 0100.

MODULE user_command_0100 INPUT.
  CASE ok_code.
    WHEN 'BACK'.
      SET SCREEN 0.
      MESSAGE ID 'BC400' TYPE 'S' NUMBER '057'.
    WHEN 'SAVE'.
      PERFORM save_data.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.

MODULE clear_ok_code OUTPUT.
  CLEAR ok_code.
ENDMODULE.

MODULE status_0100 OUTPUT.
  SET PF-STATUS 'DYNPRO100'.
  SET TITLEBAR 'D0100'.
ENDMODULE.

MODULE display_alv OUTPUT.
  PERFORM display_alv.
ENDMODULE.

FORM display_alv.
IF grid_r IS INITIAL.
*----Creating custom container instance
  CREATE OBJECT container_r
  EXPORTING
    container_name = gc_custom_control_name
  EXCEPTIONS
    cntl_error = 1
    cntl_system_error = 2
    create_error = 3
    lifetime_error = 4
    lifetime_dynpro_dynpro_link = 5
    others = 6.
    IF sy-subrc <> 0.
*--Exception handling
    ENDIF.
*----Creating ALV Grid instance
    CREATE OBJECT grid_r
    EXPORTING
      i_parent = container_r
    EXCEPTIONS
      error_cntl_create = 1
      error_cntl_init = 2
      error_cntl_link = 3
      error_dp_create = 4
      others = 5.
      IF sy-subrc <> 0.
*--Exception handling
      ENDIF.

      CREATE OBJECT g_verifier.
      SET HANDLER g_verifier->handle_data_changed FOR grid_r.

*----Preparing field catalog.
      PERFORM prepare_field_catalog CHANGING fieldcat_r.
*----Preparing layout structure
      PERFORM prepare_layout CHANGING layout_r.
*----Here will be additional preparations
*--e.g. initial sorting criteria, initial filtering criteria, excluding
*--functions
      CALL METHOD grid_r->set_table_for_first_display
      EXPORTING
* I_BUFFER_ACTIVE =
* I_CONSISTENCY_CHECK =
* I_STRUCTURE_NAME =
* IS_VARIANT =
* I_SAVE =
* I_DEFAULT = 'X'
        is_layout = layout_r
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
      CHANGING
        it_outtab = lt_registrz[]
        it_fieldcatalog = fieldcat_r
* IT_SORT =
* IT_FILTER =
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error = 2
        too_many_lines = 3
        OTHERS = 4.
      IF sy-subrc <> 0.
*--Exception handling
      ENDIF.
      ELSE.
        CALL METHOD grid_r->refresh_table_display
* EXPORTING
* IS_STABLE =
* I_SOFT_REFRESH =
      EXCEPTIONS
        finished = 1
        OTHERS = 2.
      IF sy-subrc <> 0.
*--Exception handling
      ENDIF.
    ENDIF.

    CALL METHOD grid_r->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_enter.
    CALL METHOD grid_r->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_modified.

ENDFORM.

FORM prepare_field_catalog CHANGING pt_fieldcat TYPE lvc_t_fcat.
  DATA ls_fcat TYPE lvc_s_fcat.
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
  EXPORTING
    i_structure_name = 'ZBC_DAN_REGSTR2'
  CHANGING
    ct_fieldcat = pt_fieldcat[]
  EXCEPTIONS
    inconsistent_interface = 1
    program_error = 2
    OTHERS = 3.
  IF sy-subrc <> 0.
*--Exception handling
  ENDIF.
  LOOP AT pt_fieldcat INTO ls_fcat.
    CASE ls_fcat-fieldname.
      WHEN 'NAME'.
        ls_fcat-coltext = 'Name'.
        ls_fcat-outputlen = '40'.
        MODIFY pt_fieldcat FROM ls_fcat.
      WHEN 'VALUE'.
        ls_fcat-coltext = 'Wert'.
        ls_fcat-outputlen = '30'.
        MODIFY pt_fieldcat FROM ls_fcat.
      WHEN 'CATEGORY'.
          LOOP AT lt_category into ls_category.
            ls_ddval-handle = 1.
            ls_ddval-value = ls_category-category.
*            ls_ddval-style = cl_gui_alv_grid=>mc_style_enabled.
            APPEND ls_ddval TO lt_ddval.
         ENDLOOP.
         CALL METHOD grid_r->set_drop_down_table
            EXPORTING it_drop_down = lt_ddval.
        ls_fcat-edit = 'X'.
        ls_fcat-drdn_hndl = '1'.
        ls_fcat-coltext = 'Kategorie'.
        MODIFY pt_fieldcat FROM ls_fcat.
    ENDCASE.
  ENDLOOP.
ENDFORM.

FORM prepare_layout CHANGING ps_layout TYPE lvc_s_layo.
  ps_layout-zebra = 'X'.
  ps_layout-grid_title = 'Kategorie zur Registry hinzufügen'.
  ps_layout-smalltitle = 'X'.
ENDFORM.

FORM save_data.
  DATA: ls_ins_keys TYPE g_verifier->ls_registrz_keys,
        ls_ins_key TYPE g_verifier->lt_registrz_key,
        ls_registrz TYPE zbc_dan_regstrz,
        ls_outtab LIKE LINE OF gt_outtab,
        lt_instab TYPE TABLE OF zbc_dan_regstrz.
  CALL METHOD g_verifier->get_inserted_rows IMPORTING inserted_rows = ls_ins_keys.
  LOOP AT ls_ins_keys INTO ls_ins_key.
    READ TABLE gt_outtab INTO ls_outtab
    WITH KEY  name = ls_ins_key-name
              value = ls_ins_key-value
              category = ls_ins_key-category.
    IF sy-subrc = 0.
      MOVE-CORRESPONDING ls_outtab TO ls_registrz.
      APPEND ls_registrz TO lt_instab.
    ENDIF.
  ENDLOOP.

  INSERT zbc_dan_regstrz FROM TABLE lt_instab.

  CALL METHOD g_verifier->refresh_delta_tables.

  ENDFORM.

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

Hi Hans,

You raised the Question in the Webdynpro ABAP forum. Here its very diffcult to get the answer from this forum. Please close it here and raise the same question in ABAP General Forum there you will get faster and so many anwsers.

Please close the question here.

Warm Regards,

Vijay

Former Member
0 Kudos

Ok, thanks for the hint, Vijay!