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: 

ABAP ALV REPORT HOW TO EDIT CELLS THEN UPDATE DATABASE?

0 Kudos

Hello experts,

I am working on ALV Reports. I want to update database table from ALV report cells with a button. I added button and i can edit ALV cell but it doesn't update database.

How can i solve?

Database table name: ZDANISMAN.

Here is pieces of codes:

DATA : gt_fcat          TYPE slis_t_fieldcat_alv,
       gs_fcat          TYPE LINE OF slis_t_fieldcat_alv,
       gs_layout        TYPE slis_layout_alv,
       gt_sort          TYPE slis_t_sortinfo_alv,
       gs_sort          TYPE LINE OF slis_t_sortinfo_alv,
       gt_fcat_popup    TYPE slis_t_fieldcat_alv,
       gt_fcat_popup_ok TYPE slis_t_fieldcat_alv,
       gs_variant       TYPE disvariant,
       lt_rows          TYPE lvc_t_row,
       w_selected_rows  TYPE lvc_s_row,   " ALV CONTROL LINE DESCRIPTION
       &EXEC            LIKE SY-UCOMM,
       &UPDATE          LIKE SY-UCOMM,
       lv_tabix         TYPE sy-tabix,
       MY_REPID         LIKE SY-REPID.

* TABLE CONTENTS.
types: BEGIN OF wa_baldat,
         D_ID   TYPE ZDANISMAN-D_ID,
         D_ADI  TYPE ZDANISMAN-D_ADI,
         D_MAIL TYPE ZDANISMAN-D_MAIL,
         box(1) TYPE c,                    "CHECKBOX VARIABLE OF ALV SCREEN.
       END OF wa_baldat.

TYPES it_baldat TYPE STANDARD TABLE OF wa_baldat.
DATA itab TYPE it_baldat.
DATA wa_itab TYPE wa_baldat.
DATA wa_danisman TYPE ZDANISMAN.
data wa_modified      TYPE  ZDANISMAN.
data i_modified      TYPE  STANDARD TABLE OF ZDANISMAN.

FORM USER_COMMAND USING r_ucomm LIKE SY-UCOMM
    rs_selfield TYPE slis_selfield.

DATA : lt_index_rows TYPE lvc_t_row WITH HEADER LINE,
         ref1          TYPE REF TO cl_gui_alv_grid.
  DATA  w_selected_rows  TYPE     lvc_s_row.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = ref1.
  CALL METHOD ref1->get_selected_rows IMPORTING et_index_rows = lt_index_rows[].

* IT GETS SELECTED INDEX FROM CHECKBOX
  LOOP AT lt_index_rows WHERE index > 0 AND rowtype IS INITIAL.
    READ TABLE itab INTO wa_itab INDEX lt_index_rows-index.
  ENDLOOP.

* GETS SELECTED INDEX'S CONTENTS INTO i_modified.
 LOOP AT lt_index_rows INTO w_selected_rows.
 READ TABLE itab INTO wa_danisman INDEX w_selected_rows-index.
     IF sy-subrc EQ 0.
      MOVE-CORRESPONDING wa_danisman TO wa_modified.
        APPEND wa_modified TO i_modified.
    ENDIF.
  ENDLOOP.

* WHEN BUTTTON TRIGGEREDS, IT SHOULD MODIFIED DATABASETABLE.
  IF R_UCOMM = '&UPDATE'.
    MODIFY ZDANISMAN FROM TABLE i_modified.
    ENDIF.
ENDFORM.
1 ACCEPTED SOLUTION

0 Kudos

Hi guys again, problem solved that way:

I added MANDT field into internal table structure and I have deleted UPDATE button then problem solved. Here codes:

Kind Regards

 * INTERNAL TABLE STRUCTURE
types: BEGIN OF wa_baldat,
         MANDT TYPE ZDANISMAN-MANDT,
         D_ID   TYPE ZDANISMAN-D_ID,
         D_ADI  TYPE ZDANISMAN-D_ADI,
         D_MAIL TYPE ZDANISMAN-D_MAIL,
         box(1) TYPE c,
       END OF wa_baldat.

LOOP AT lt_index_rows INTO w_selected_rows.
    READ TABLE itab INTO wa_danisman INDEX w_selected_rows-index.
     IF sy-subrc = 0.
 MOVE-CORRESPONDING wa_danisman TO wa_modified.
 APPEND wa_modified TO i_modified.
    ENDIF.
    MODIFY ZDANISMAN FROM TABLE i_modified.
    COMMIT WORK.
  ENDLOOP.
8 REPLIES 8

matt
Active Contributor
0 Kudos

Have you tried debugging?

0 Kudos

Yes, table didn't update

pokrakam
Active Contributor

COMMIT?

0 Kudos

I have tried after MODIFY statement, it doesnt work

pokrakam
Active Contributor
0 Kudos

So what did debug tell you? What were the contents of i_modified?

What was SY-SUBRC? Return codes should always be checked and exceptions handled.

0 Kudos

I changed selected index's text to different a text. i_modified gets new value but database table doesn't changed.

I think there is a problem about database table fields. So;

D_ID must be: '0003'

D_ADI: 'OZAN'

D_MAIL: 'ccc@ccc.com'

0 Kudos

Hi guys again, problem solved that way:

I added MANDT field into internal table structure and I have deleted UPDATE button then problem solved. Here codes:

Kind Regards

 * INTERNAL TABLE STRUCTURE
types: BEGIN OF wa_baldat,
         MANDT TYPE ZDANISMAN-MANDT,
         D_ID   TYPE ZDANISMAN-D_ID,
         D_ADI  TYPE ZDANISMAN-D_ADI,
         D_MAIL TYPE ZDANISMAN-D_MAIL,
         box(1) TYPE c,
       END OF wa_baldat.

LOOP AT lt_index_rows INTO w_selected_rows.
    READ TABLE itab INTO wa_danisman INDEX w_selected_rows-index.
     IF sy-subrc = 0.
 MOVE-CORRESPONDING wa_danisman TO wa_modified.
 APPEND wa_modified TO i_modified.
    ENDIF.
    MODIFY ZDANISMAN FROM TABLE i_modified.
    COMMIT WORK.
  ENDLOOP.

0 Kudos

You have to write the MODIFY statement outside of the LOOP statement. As you are collecting all modified entries into i_modifed. (We should avoid multiple UPDATES )