<?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 Re: ALV grid abort processing, if wrong value in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/alv-grid-abort-processing-if-wrong-value/m-p/3171242#M754629</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;i need an other way, not the message statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;&lt;P&gt;TomSd&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 13 Dec 2007 09:17:58 GMT</pubDate>
    <dc:creator>Former Member</dc:creator>
    <dc:date>2007-12-13T09:17:58Z</dc:date>
    <item>
      <title>ALV grid abort processing, if wrong value</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/alv-grid-abort-processing-if-wrong-value/m-p/3171240#M754627</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;i've a editable alv grid.&lt;/P&gt;&lt;P&gt;Is it possible to abort at event data_changed/data_changed_finished, if an value is wrong (f.e. to high &amp;lt; 500), and write the old value back.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;&lt;P&gt;TomSd&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 13 Dec 2007 08:10:52 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/alv-grid-abort-processing-if-wrong-value/m-p/3171240#M754627</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2007-12-13T08:10:52Z</dc:date>
    </item>
    <item>
      <title>Re: ALV grid abort processing, if wrong value</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/alv-grid-abort-processing-if-wrong-value/m-p/3171241#M754628</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The ABAP runtime environment handles messages according to the type declared in the MESSAGE statement and the context in which the message was sent.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The behaviour of message type 'W' in a dialog is different from a report program. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Run demo program DEMO_MESSAGES, select Main Program, Type 'W' and execute. You will get an error message instead of warning message.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This behaviour is well documeneted in the on-line help for MESSAGE statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Reward points if found helpful...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Cheers,&lt;/P&gt;&lt;P&gt;Chandra Sekhar.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 13 Dec 2007 08:20:12 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/alv-grid-abort-processing-if-wrong-value/m-p/3171241#M754628</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2007-12-13T08:20:12Z</dc:date>
    </item>
    <item>
      <title>Re: ALV grid abort processing, if wrong value</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/alv-grid-abort-processing-if-wrong-value/m-p/3171242#M754629</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;i need an other way, not the message statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;&lt;P&gt;TomSd&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 13 Dec 2007 09:17:58 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/alv-grid-abort-processing-if-wrong-value/m-p/3171242#M754629</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2007-12-13T09:17:58Z</dc:date>
    </item>
    <item>
      <title>Re: ALV grid abort processing, if wrong value</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/alv-grid-abort-processing-if-wrong-value/m-p/3171243#M754630</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Thomas&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The sample report &amp;lt;b&amp;gt;ZUS_SDN_ALVGRID_EDITABLE_10&amp;lt;/b&amp;gt; provides a possible (perhaps not the most elegant) solution for your problem.&lt;/P&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_10
*&amp;amp;
*&amp;amp; Description: Reset false values entered in editable ALV list
*&amp;amp;              to original values
*&amp;amp; Example:     Column SORT_KEY allows values from '000'-'150'
*               -&amp;gt; reset if value &amp;gt; '010'
*&amp;amp;
*&amp;amp; Thread: ALV grid abort processing, if wrong value
*&amp;amp; Link: https:||&amp;lt;a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="669430"&amp;gt;&amp;lt;/a&amp;gt;
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;
*&amp;amp;
*&amp;amp;---------------------------------------------------------------------*

REPORT  zus_sdn_alvgrid_editable_10.


TYPE-POOLS: abap.

INCLUDE &amp;lt;icon&amp;gt;.  " NOTE: replace by TYPE-POOLS: icon. on &amp;gt;= 6.20

DATA:
  gd_repid         TYPE syrepid,
  gd_okcode        TYPE sy-ucomm,
*
  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.
TYPES: ty_t_outtab    TYPE STANDARD TABLE OF ty_s_outtab
                      WITH DEFAULT KEY.

DATA:
  gt_outtab        TYPE ty_t_outtab,
  gt_outtab_pbo    TYPE ty_t_outtab.



*---------------------------------------------------------------------*
*       CLASS lcl_eventhandler DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler DEFINITION.

  PUBLIC SECTION.
    CLASS-DATA:
      mo_data_changed    TYPE REF TO cl_alv_changed_data_protocol.


    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,

      handle_user_command
        FOR EVENT user_command OF cl_gui_alv_grid
        IMPORTING
          e_ucomm,


      handle_toolbar
        FOR EVENT toolbar OF cl_gui_alv_grid
        IMPORTING
          e_object
          e_interactive.


ENDCLASS.                    "lcl_eventhandler DEFINITION


*---------------------------------------------------------------------*
*       CLASS lcl_eventhandler IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler IMPLEMENTATION.

  METHOD handle_data_changed.
*   define local data
    DATA:
      ld_idx     TYPE i,
      ls_cell    TYPE lvc_s_modi,
      ls_msg     TYPE symsg.


    FIELD-SYMBOLS:
      &amp;lt;lt_outtab&amp;gt;  TYPE ty_t_outtab,
      &amp;lt;ls_outtab&amp;gt;  TYPE ty_s_outtab.


    ASSIGN er_data_changed-&amp;gt;mp_mod_rows-&amp;gt;* TO &amp;lt;lt_outtab&amp;gt;.


    LOOP AT er_data_changed-&amp;gt;mt_mod_cells INTO ls_cell
            WHERE ( fieldname = 'ZUAWA' ).
      ld_idx = syst-tabix.

      IF ( ls_cell-value &amp;lt;= '010' ).
        READ TABLE &amp;lt;lt_outtab&amp;gt; ASSIGNING &amp;lt;ls_outtab&amp;gt; INDEX ld_idx.

        MODIFY gt_outtab FROM &amp;lt;ls_outtab&amp;gt; INDEX ls_cell-row_id. " !!!

      ELSE.
        CLEAR: ls_msg.
        ls_msg-msgv1 = 'Value'.
        ls_msg-msgv2 = ls_cell-value.
        ls_msg-msgv3 = 'too high (&amp;gt; 010)'.

        CALL METHOD er_data_changed-&amp;gt;add_protocol_entry
          EXPORTING
             i_msgid     = '00'
             i_msgty     = 'E'
             i_msgno     = '398'
             i_msgv1     = ls_msg-msgv1
             i_msgv2     = ls_msg-msgv2
             i_msgv3     = ls_msg-msgv3
*             I_MSGV4     =
             i_fieldname = ls_cell-fieldname
             i_row_id    = ls_cell-row_id
             i_tabix     = ls_cell-tabix.



        DELETE er_data_changed-&amp;gt;mt_mod_cells  INDEX ld_idx.
        DELETE er_data_changed-&amp;gt;mt_good_cells INDEX ld_idx.
      ENDIF.
    ENDLOOP.

    IF ( syst-subrc = 0 ).
      er_data_changed-&amp;gt;display_protocol( ).
    ENDIF.



**    cl_gui_cfw=&amp;gt;set_new_ok_code( 'REFRESH' ). " not possible on 4.6c
    CALL METHOD cl_gui_cfw=&amp;gt;set_new_ok_code
      EXPORTING
        new_code = 'DUMMY'
*      IMPORTING
*        RC       =
        .


  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.

  ENDMETHOD.                    "handle_data_changed_finished

  METHOD handle_user_command.

  ENDMETHOD.                    "handle_user_command

  METHOD handle_toolbar.
*   define local data
    DATA:
      ls_button    TYPE stb_button.

    ls_button-function  = 'DEFAULT'.
    ls_button-icon      = icon_mass_change.
    ls_button-quickinfo = 'Set default value for column'.
    APPEND ls_button TO e_object-&amp;gt;mt_toolbar.

  ENDMETHOD.                    "handle_toolbar

ENDCLASS.                    "lcl_eventhandler IMPLEMENTATION




START-OF-SELECTION.


  SELECT * FROM knb1 INTO TABLE gt_outtab UP TO 20 ROWS
    WHERE bukrs = '1000'.

  gt_outtab_pbo = gt_outtab.  " store PBO data



* 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_toolbar               FOR go_grid,
    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.

  go_grid-&amp;gt;set_toolbar_interactive( ).

  CALL METHOD go_grid-&amp;gt;register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=&amp;gt;mc_evt_enter
    EXCEPTIONS
      error      = 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.


* 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 'DUMMY'. " do nothing but pass PAI -&amp;gt; list refresh at PBO

    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 required fields editable
  LOOP AT gt_fcat INTO ls_fcat
                  WHERE ( fieldname = 'ZUAWA'  OR
                          fieldname = 'BUSAB' ).
    ls_fcat-edit    = abap_true.

    MODIFY gt_fcat FROM ls_fcat.
  ENDLOOP.

  DELETE gt_fcat WHERE ( fieldname = 'ZINRT' ).


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, 13 Dec 2007 20:46:25 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/alv-grid-abort-processing-if-wrong-value/m-p/3171243#M754630</guid>
      <dc:creator>uwe_schieferstein</dc:creator>
      <dc:date>2007-12-13T20:46:25Z</dc:date>
    </item>
  </channel>
</rss>

