<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic ALV: changing internal table in data_changed event. in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/alv-changing-internal-table-in-data-changed-event/m-p/3040054#M719455</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, ABAP-gurus.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I use OO ALV with editable columns, so I handle data_changes event to check the data, entered in ALV by user. &lt;/P&gt;&lt;P&gt;I need to change data in some other cells, connected with changed.&lt;/P&gt;&lt;P&gt;Chahging internal table directly doesn't work here.&lt;/P&gt;&lt;P&gt;With the cells in the same row method er_data_changed-&amp;gt;modify_cell works fine, but now I need to change data in rows, that haven't been touched upon the changing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;
  LOOP AT er_data_changed-&amp;gt;mt_mod_cells INTO ls_cell.
    READ TABLE gt_bul ASSIGNING &amp;lt;fs_bul&amp;gt; INDEX ls_cell-row_id.
    CHECK sy-subrc = 0.
    CASE ls_cell-fieldname.
      WHEN 'EXTBULNR'.

        LOOP AT gt_bul ASSIGNING &amp;lt;fs_bul_tmp&amp;gt;
                           WHERE prknum = &amp;lt;fs_bul&amp;gt;-prknum AND
                                 wbillnr = &amp;lt;fs_bul&amp;gt;-wbillnr AND
                                 wbillgjahr = &amp;lt;fs_bul&amp;gt;-wbillgjahr AND
                                 shiftnum = &amp;lt;fs_bul&amp;gt;-shiftnum AND
                                 pernr = &amp;lt;fs_bul&amp;gt;-pernr.
          CALL METHOD er_data_changed-&amp;gt;modify_cell
            EXPORTING
              i_fieldname = 'EXTBULNR'
              i_value        = ls_cell-value
              i_row_id     = sy-tabix.
        ENDLOOP.
    ENDCASE.
  ENDLOOP.
&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This peace of code cause dump ( there is no the proper row in the list of changed row in er_data_changed ).&lt;/P&gt;&lt;P&gt;Anybody can help me?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 12 Nov 2007 11:29:16 GMT</pubDate>
    <dc:creator>Former Member</dc:creator>
    <dc:date>2007-11-12T11:29:16Z</dc:date>
    <item>
      <title>ALV: changing internal table in data_changed event.</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/alv-changing-internal-table-in-data-changed-event/m-p/3040054#M719455</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, ABAP-gurus.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I use OO ALV with editable columns, so I handle data_changes event to check the data, entered in ALV by user. &lt;/P&gt;&lt;P&gt;I need to change data in some other cells, connected with changed.&lt;/P&gt;&lt;P&gt;Chahging internal table directly doesn't work here.&lt;/P&gt;&lt;P&gt;With the cells in the same row method er_data_changed-&amp;gt;modify_cell works fine, but now I need to change data in rows, that haven't been touched upon the changing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;
  LOOP AT er_data_changed-&amp;gt;mt_mod_cells INTO ls_cell.
    READ TABLE gt_bul ASSIGNING &amp;lt;fs_bul&amp;gt; INDEX ls_cell-row_id.
    CHECK sy-subrc = 0.
    CASE ls_cell-fieldname.
      WHEN 'EXTBULNR'.

        LOOP AT gt_bul ASSIGNING &amp;lt;fs_bul_tmp&amp;gt;
                           WHERE prknum = &amp;lt;fs_bul&amp;gt;-prknum AND
                                 wbillnr = &amp;lt;fs_bul&amp;gt;-wbillnr AND
                                 wbillgjahr = &amp;lt;fs_bul&amp;gt;-wbillgjahr AND
                                 shiftnum = &amp;lt;fs_bul&amp;gt;-shiftnum AND
                                 pernr = &amp;lt;fs_bul&amp;gt;-pernr.
          CALL METHOD er_data_changed-&amp;gt;modify_cell
            EXPORTING
              i_fieldname = 'EXTBULNR'
              i_value        = ls_cell-value
              i_row_id     = sy-tabix.
        ENDLOOP.
    ENDCASE.
  ENDLOOP.
&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This peace of code cause dump ( there is no the proper row in the list of changed row in er_data_changed ).&lt;/P&gt;&lt;P&gt;Anybody can help me?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 12 Nov 2007 11:29:16 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/alv-changing-internal-table-in-data-changed-event/m-p/3040054#M719455</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2007-11-12T11:29:16Z</dc:date>
    </item>
    <item>
      <title>Re: ALV: changing internal table in data_changed event.</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/alv-changing-internal-table-in-data-changed-event/m-p/3040055#M719456</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In case you need to modify arbitrary no of rows and cells from that event handler you should use a different approach.....&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Assuming that your internal table is gt_bul and your alv grid variable is gr_alv_grid...You need to call...&lt;/P&gt;&lt;P&gt;&amp;lt;b&amp;gt;  CALL METHOD gr_alv_grid-&amp;gt;refresh_table_display&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      i_soft_refresh = 'X'&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      finished       = 1&lt;/P&gt;&lt;P&gt;      OTHERS         = 2.&amp;lt;/b&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;after you have finished updating internal table gt_bul directly, like...&lt;/P&gt;&lt;P&gt;&amp;lt;b&amp;gt;LOOP AT gt_bul ASSIGNING &amp;lt;fs_bul_tmp&amp;gt;&lt;/P&gt;&lt;P&gt;                           WHERE prknum = &amp;lt;fs_bul&amp;gt;-prknum AND&lt;/P&gt;&lt;P&gt;                                 wbillnr = &amp;lt;fs_bul&amp;gt;-wbillnr AND&lt;/P&gt;&lt;P&gt;                                 wbillgjahr = &amp;lt;fs_bul&amp;gt;-wbillgjahr AND&lt;/P&gt;&lt;P&gt;                                 shiftnum = &amp;lt;fs_bul&amp;gt;-shiftnum AND&lt;/P&gt;&lt;P&gt;                                 pernr = &amp;lt;fs_bul&amp;gt;-pernr.&lt;/P&gt;&lt;P&gt;          &amp;lt;fs_bul_tmp&amp;gt; = ls_cell-value&lt;/P&gt;&lt;P&gt;ENDLOOP.&amp;lt;/b&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Manish&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 15 Nov 2007 11:59:26 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/alv-changing-internal-table-in-data-changed-event/m-p/3040055#M719456</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2007-11-15T11:59:26Z</dc:date>
    </item>
    <item>
      <title>Re: ALV: changing internal table in data_changed event.</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/alv-changing-internal-table-in-data-changed-event/m-p/3040056#M719457</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Aleksandr&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The most appropriate event for additional modifications of the output data AFTER having retrieved the changes from the editable ALV list is event &amp;lt;b&amp;gt;DATA_CHANGED_FINISHED&amp;lt;/b&amp;gt;.&lt;/P&gt;&lt;P&gt;&amp;lt;i&amp;gt;Why&amp;lt;/i&amp;gt;?&lt;/P&gt;&lt;P&gt;Because the output itab is already updated with the changes from the editable grid AND the changes are available (&amp;lt;b&amp;gt;ET_GOOD_CELLS&amp;lt;/b&amp;gt;).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For implementing the logic have a look at my sample report &amp;lt;b&amp;gt;ZUS_SDN_ALVGRID_EDITABLE_5.&amp;lt;/b&amp;gt; Depending on the changed value for the delete flag the sort key is modified afterwards:&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;- LOEVM = 'X' -&amp;gt; ZUAWA = ' ' (space)
- LOEVM = ' '  -&amp;gt; ZUAWA = '002'&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;*&amp;amp;---------------------------------------------------------------------*
*&amp;amp; Report  ZUS_SDN_ALVGRID_EDITABLE_5
*&amp;amp;
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;
*&amp;amp;
*&amp;amp;---------------------------------------------------------------------*

REPORT  zus_sdn_alvgrid_editable_5.


TYPE-POOLS: abap.

DATA:
  gd_repid         TYPE syrepid,
  gd_okcode        TYPE ui_func,
*
  gs_layout        TYPE lvc_s_layo,
  gt_fcat          TYPE lvc_t_fcat,
  go_docking       TYPE REF TO cl_gui_docking_container,
  go_grid          TYPE REF TO cl_gui_alv_grid.


TYPES: BEGIN OF ty_s_outtab.
INCLUDE TYPE knb1.
TYPES: END OF ty_s_outtab.

DATA:
  gs_outtab        TYPE ty_s_outtab,
  gt_outtab        TYPE STANDARD TABLE OF ty_s_outtab
                   WITH DEFAULT KEY.



*---------------------------------------------------------------------*
*       CLASS lcl_eventhandler DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler DEFINITION.

  PUBLIC SECTION.

    CLASS-METHODS:
      handle_data_changed
        FOR EVENT data_changed OF cl_gui_alv_grid
        IMPORTING
          er_data_changed
          e_onf4
          e_onf4_before
          e_onf4_after
          e_ucomm
          sender,

      handle_data_changed_finished
        FOR EVENT data_changed_finished OF cl_gui_alv_grid
        IMPORTING
          e_modified
          et_good_cells.


ENDCLASS.                    "lcl_eventhandler DEFINITION


*---------------------------------------------------------------------*
*       CLASS lcl_eventhandler IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler IMPLEMENTATION.

  METHOD handle_data_changed.
*   define local data


  ENDMETHOD.                    "handle_data_changed

  METHOD handle_data_changed_finished.
*   define local data
    DATA:
      ls_outtab      TYPE ty_s_outtab,
      ls_cell        TYPE lvc_s_modi.

    LOOP AT et_good_cells INTO ls_cell
                          WHERE ( fieldname = 'LOEVM' ).

      READ TABLE gt_outtab INTO ls_outtab INDEX ls_cell-row_id.
      "       Delete flag set
      IF ( ls_cell-value = abap_true ).
        ls_outtab-zuawa = space.


        "       Delete flag removed
      ELSE.
        ls_outtab-zuawa = '002'.
      ENDIF.

      MODIFY gt_outtab FROM ls_outtab INDEX ls_cell-row_id.
    ENDLOOP.

  ENDMETHOD.                    "handle_data_changed_finished

ENDCLASS.                    "lcl_eventhandler IMPLEMENTATION




START-OF-SELECTION.


  SELECT * FROM knb1 INTO TABLE gt_outtab UP TO 20 ROWS
    WHERE bukrs = '1000'.





* Create docking container
  CREATE OBJECT go_docking
    EXPORTING
      parent                      = cl_gui_container=&amp;gt;screen0
      ratio                       = 90
    EXCEPTIONS
      OTHERS                      = 6.
  IF sy-subrc &amp;lt;&amp;gt; 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


* Create ALV grid
  CREATE OBJECT go_grid
    EXPORTING
      i_parent          = go_docking
    EXCEPTIONS
      OTHERS            = 5.
  IF sy-subrc &amp;lt;&amp;gt; 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.




* Build fieldcatalog
  PERFORM build_fieldcatalog.

  PERFORM set_layout.

  SET HANDLER:
    lcl_eventhandler=&amp;gt;handle_data_changed          FOR go_grid,
    lcl_eventhandler=&amp;gt;handle_data_changed_finished FOR go_grid.


* Display data
  CALL METHOD go_grid-&amp;gt;set_table_for_first_display
    EXPORTING
      is_layout       = gs_layout
    CHANGING
      it_outtab       = gt_outtab
      it_fieldcatalog = gt_fcat
    EXCEPTIONS
      OTHERS          = 4.
  IF sy-subrc &amp;lt;&amp;gt; 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.



* Link the docking container to the target dynpro
  gd_repid = syst-repid.
  CALL METHOD go_docking-&amp;gt;link
    EXPORTING
      repid                       = gd_repid
      dynnr                       = '0100'
*      CONTAINER                   =
    EXCEPTIONS
      OTHERS                      = 4.
  IF sy-subrc &amp;lt;&amp;gt; 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


* ok-code field = GD_OKCODE
  CALL SCREEN '0100'.
* Flow logic (no elements on screen):
*  PROCESS BEFORE OUTPUT.
*    MODULE STATUS_0100.
**
*  PROCESS AFTER INPUT.
*    MODULE USER_COMMAND_0100.


END-OF-SELECTION.

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Module  STATUS_0100  OUTPUT
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS_0100'.
*  SET TITLEBAR 'xxx'.

  CALL METHOD go_grid-&amp;gt;refresh_table_display
*      EXPORTING
*        IS_STABLE      =
*        I_SOFT_REFRESH =
    EXCEPTIONS
      finished       = 1
      OTHERS         = 2.
  IF sy-subrc &amp;lt;&amp;gt; 0.
*     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDMODULE.                 " STATUS_0100  OUTPUT

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Module  USER_COMMAND_0100  INPUT
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

  TRANSLATE gd_okcode TO UPPER CASE.

* Fetch changes on ALV grid
  go_grid-&amp;gt;check_changed_data( ).

  CASE gd_okcode.
    WHEN 'BACK' OR
         'END'  OR
         'CANC'.
      SET SCREEN 0. LEAVE SCREEN.


    WHEN OTHERS.
  ENDCASE.





  CLEAR: gd_okcode.

ENDMODULE.                 " USER_COMMAND_0100  INPUT


*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  BUILD_FIELDCATALOG_KNB1
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  --&amp;gt;  p1        text
*  &amp;lt;--  p2        text
*----------------------------------------------------------------------*
FORM build_fieldcatalog .
* define local data
  DATA:
    ls_fcat        TYPE lvc_s_fcat.



  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
*     I_BUFFER_ACTIVE              =
      i_structure_name             = 'KNB1'
*     I_CLIENT_NEVER_DISPLAY       = 'X'
*     I_BYPASSING_BUFFER           =
*     I_INTERNAL_TABNAME           =
    CHANGING
      ct_fieldcat                  = gt_fcat
    EXCEPTIONS
      inconsistent_interface       = 1
      program_error                = 2
      OTHERS                       = 3.
  IF sy-subrc &amp;lt;&amp;gt; 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.




" Set all non-keyfields editable
  LOOP AT gt_fcat INTO ls_fcat
                  WHERE ( key = abap_false ).
    ls_fcat-edit    = abap_true.

    MODIFY gt_fcat FROM ls_fcat.
  ENDLOOP.


ENDFORM.                    " BUILD_FIELDCATALOG


*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  SET_LAYOUT
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  --&amp;gt;  p1        text
*  &amp;lt;--  p2        text
*----------------------------------------------------------------------*
FORM set_layout .

  CLEAR: gs_layout.

  gs_layout-cwidth_opt = abap_true.
  gs_layout-zebra      = abap_true.

**  gs_layout-stylefname = 'CELLTAB'.

ENDFORM.                    " SET_LAYOUT&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;  Uwe&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 15 Nov 2007 20:37:54 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/alv-changing-internal-table-in-data-changed-event/m-p/3040056#M719457</guid>
      <dc:creator>uwe_schieferstein</dc:creator>
      <dc:date>2007-11-15T20:37:54Z</dc:date>
    </item>
  </channel>
</rss>

