<?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: Validation in Editable ALV in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157855#M1977671</link>
    <description>&lt;P&gt;Hi sir&lt;/P&gt;&lt;P&gt;Thank you , it worked with all your logic inserted in the update method.&lt;/P&gt;</description>
    <pubDate>Mon, 18 May 2020 16:24:34 GMT</pubDate>
    <dc:creator>Former Member</dc:creator>
    <dc:date>2020-05-18T16:24:34Z</dc:date>
    <item>
      <title>Validation in Editable ALV</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157843#M1977659</link>
      <description>&lt;P&gt;Hi, currently im trying to add some validation to my editable ALV report. &lt;/P&gt;
  &lt;P&gt;This is what i am trying to do:&lt;/P&gt;
  &lt;P&gt;1. Make EBELN field mandatory in header and line item&lt;/P&gt;
  &lt;P&gt;2. When append (method: CREATE_PURCHASE_ORDERS, in url below) a new record in header, once key in ebeln in header, press enter, it will auto populate sy-datum in header (bedat field) and ebeln in line item, &lt;/P&gt;
  &lt;P&gt;&lt;IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/attachments/storage/7/attachments/1806829-kf-should-be-populated.png" /&gt;&lt;/P&gt;
  &lt;P&gt;Any appropriate source for me to look into? couldnt find a suitable one&lt;/P&gt;
  &lt;P&gt;Looked through BCALV_EDIT_04&lt;/P&gt;
  &lt;P&gt;My source code can be seen in this url, in the comment section:&lt;/P&gt;
  &lt;P&gt;&lt;A href="https://answers.sap.com/questions/13047333/sorting-issue-for-alv-splitter.html?childToView=13047697#answer-13047697"&gt;https://answers.sap.com/questions/13047333/sorting-issue-for-alv-splitter.html?childToView=13047697#answer-13047697&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 14 May 2020 16:46:35 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157843#M1977659</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2020-05-14T16:46:35Z</dc:date>
    </item>
    <item>
      <title>Re: Validation in Editable ALV</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157844#M1977660</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;You should be able to solve this by implementing logic in the data_changed event of the ALV.&lt;/P&gt;&lt;P&gt;An example can be found in following question:&lt;/P&gt;&lt;P&gt;&lt;A href="https://answers.sap.com/questions/6638943/how-to-validate-editable-field-in-alv.html"&gt;https://answers.sap.com/questions/6638943/how-to-validate-editable-field-in-alv.html&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;&lt;P&gt;Geert-Jan Klaps&lt;/P&gt;</description>
      <pubDate>Thu, 14 May 2020 17:00:25 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157844#M1977660</guid>
      <dc:creator>geert-janklaps</dc:creator>
      <dc:date>2020-05-14T17:00:25Z</dc:date>
    </item>
    <item>
      <title>Re: Validation in Editable ALV</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157845#M1977661</link>
      <description>&lt;P&gt;I wanted to add the error in SAVE_DATABASE_APPEND subroutine in my program to make ebeln as mandatory field, anything that i have missed?&lt;/P&gt;</description>
      <pubDate>Fri, 15 May 2020 04:23:00 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157845#M1977661</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2020-05-15T04:23:00Z</dc:date>
    </item>
    <item>
      <title>Re: Validation in Editable ALV</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157846#M1977662</link>
      <description>&lt;P&gt;Hi, &lt;/P&gt;&lt;P&gt;When Append (&amp;amp;LOCAL&amp;amp;APPEND), key in PO header details in a new entry.&lt;/P&gt;&lt;P&gt;If without entering ebeln field in PO header and click 'save' button, it will prompt error message 'Please enter PO number hdr'&lt;/P&gt;&lt;P&gt;How do i apply this data_change subroutine in PAI on the 'save', it prompts the following error when i added it on PAI 'save'.&lt;/P&gt;&lt;P&gt;&lt;IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/attachments/storage/7/attachments/1806859-error.png" /&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 15 May 2020 08:36:06 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157846#M1977662</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2020-05-15T08:36:06Z</dc:date>
    </item>
    <item>
      <title>Re: Validation in Editable ALV</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157847#M1977663</link>
      <description>&lt;P&gt;This is the program source code with data_changed added&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;CLASS LCL_EVENTHANDLER DEFINITION DEFERRED.

DATA: GT_ZHEADER TYPE TABLE OF ZEKKO03,     ""global variable for ZEKKO03
      GT_ZITEMS  TYPE TABLE OF ZEKPO03.     ""global variable for ZEKPO03

DATA: GS_ZHEADER TYPE ZEKKO03,
      GS_ZITEMS  LIKE LINE OF GT_ZITEMS.

DATA: SPLITTER        TYPE REF TO CL_GUI_SPLITTER_CONTAINER,
      GRAPHIC_PARENT1 TYPE REF TO CL_GUI_CONTAINER,
      GRAPHIC_PARENT2 TYPE REF TO CL_GUI_CONTAINER.

DATA: G_GRID_LEFT  TYPE REF TO CL_GUI_ALV_GRID,   "" instance for left grid
      G_GRID_RIGHT TYPE REF TO CL_GUI_ALV_GRID,    "" instance for right grid
      GS_LAYOUT    TYPE LVC_S_LAYO,           "" global structure for layout
      GT_FIELDCAT  TYPE LVC_T_FCAT,           "" global variable for fieldcat
      GS_FIELDCAT  TYPE LVC_S_FCAT,            "" global structure for fieldcat
      CHECK,
      GT_SORT TYPE LVC_T_SORT,
      GS_SORT TYPE LVC_S_SORT.

DATA: BAPIRET2 TYPE BAPIRET2.

CONSTANTS: IV_MAX_ROWS TYPE I VALUE 100.

***  Alv toolbar
DATA: EVENT_HANDLER TYPE REF TO LCL_EVENTHANDLER.

*---------------------------------------------------------------------*
*       CLASS lcl_eventhandler DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*

CLASS LCL_EVENTHANDLER DEFINITION." class definition

  PUBLIC SECTION.

    CLASS-METHODS:
      HANDLE_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
        IMPORTING
          E_ROW
          E_COLUMN
          ES_ROW_NO
          SENDER.

******
    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.
******

ENDCLASS.                    "LCL_EVENT_RECEIVER DEFINITION


START-OF-SELECTION.

  CALL SCREEN 100.

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  read_data
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM READ_DATA_HEADER.
  DATA:
    LT_ZHEADER TYPE TABLE OF ZEKKO03,
    LS_ZHEADER TYPE ZEKKO03.

  CALL METHOD ZCL_03_DATA_MODEL=&amp;gt;SELECT_PURCHASE_ORDERS
    EXPORTING
      IV_MAX_ROWS = IV_MAX_ROWS
    IMPORTING
      IT_ZHEADER  = GT_ZHEADER.

ENDFORM.


*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  display_grid
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM DISPLAY_GRID.

  DATA: SPLITTER           TYPE REF TO CL_GUI_SPLITTER_CONTAINER,
        GRAPHIC_PARENT1    TYPE REF TO CL_GUI_CONTAINER,
        GRAPHIC_PARENT2    TYPE REF TO CL_GUI_CONTAINER.

*----------------------------------------------------------------------*
*                       FOR VARIANT
*----------------------------------------------------------------------*
  DATA LS_VARIANT TYPE DISVARIANT .
  DATA SAVE TYPE C.
  SAVE = 'A'.

  CREATE OBJECT SPLITTER
    EXPORTING
      PARENT  = CL_GUI_CONTAINER=&amp;gt;DEFAULT_SCREEN
      ROWS    = 1
      COLUMNS = 2
      ALIGN   = 15.

  CALL METHOD SPLITTER-&amp;gt;GET_CONTAINER
    EXPORTING
      ROW       = 1
      COLUMN    = 1
    RECEIVING
      CONTAINER = GRAPHIC_PARENT1.

  CALL METHOD SPLITTER-&amp;gt;GET_CONTAINER
    EXPORTING
      ROW       = 1
      COLUMN    = 2
    RECEIVING
      CONTAINER = GRAPHIC_PARENT2.


  CREATE OBJECT G_GRID_LEFT
    EXPORTING
      I_PARENT = GRAPHIC_PARENT1.

  CREATE OBJECT G_GRID_RIGHT
    EXPORTING
      I_PARENT = GRAPHIC_PARENT2.

  LS_VARIANT-REPORT   = SY-REPID.

    PERFORM FIELDCAT.
  PERFORM SORT.
  GS_LAYOUT-EDIT = ABAP_TRUE. 
  gs_layout-sel_mode = 'D'.                
  CALL METHOD G_GRID_LEFT-&amp;gt;SET_TABLE_FOR_FIRST_DISPLAY
    EXPORTING
      IS_VARIANT                    = LS_VARIANT
      I_STRUCTURE_NAME              = 'ZEKKO03'
      I_SAVE                        = SAVE
      IS_LAYOUT                     = GS_LAYOUT

    CHANGING
      IT_OUTTAB                     = GT_ZHEADER
      IT_FIELDCATALOG               = GT_FIELDCAT
      IT_SORT                       = GT_SORT
    EXCEPTIONS
      INVALID_PARAMETER_COMBINATION = 1
      PROGRAM_ERROR                 = 2
      TOO_MANY_LINES                = 3
      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.


  PERFORM FIELDCAT.
  CALL METHOD G_GRID_RIGHT-&amp;gt;SET_TABLE_FOR_FIRST_DISPLAY
    EXPORTING
      IS_VARIANT                    = LS_VARIANT
      I_STRUCTURE_NAME              = 'ZEKPO03'
      IS_LAYOUT                     = GS_LAYOUT
      I_SAVE                        = SAVE
    CHANGING
      IT_OUTTAB                     = GT_ZITEMS
      IT_FIELDCATALOG               = GT_FIELDCAT
      IT_SORT                       = GT_SORT
    EXCEPTIONS
      INVALID_PARAMETER_COMBINATION = 1
      PROGRAM_ERROR                 = 2
      TOO_MANY_LINES                = 3
      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.


ENDFORM.                  "display_grid


*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  sort
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FIELDCAT.

  DATA: NO TYPE I VALUE 1.

  IF G_GRID_LEFT IS NOT INITIAL.

    CLEAR GT_FIELDCAT.
    GS_FIELDCAT-ROW_POS = NO.
    GS_FIELDCAT-FIELDNAME = 'EBELN'.
    GS_FIELDCAT-TABNAME = 'ZEKKO03'.
    GS_FIELDCAT-OUTPUTLEN = 20.
    APPEND GS_FIELDCAT TO GT_FIELDCAT.

  ELSEIF G_GRID_RIGHT IS NOT INITIAL.

    APPEND GS_FIELDCAT TO GT_FIELDCAT.

  ENDIF.



ENDFORM.                  "fieldname


FORM SORT.

   DATA: NO TYPE I VALUE 1.

  IF G_GRID_LEFT IS NOT INITIAL.
    CLEAR gt_sort.
    no = no + 1.
    GS_SORT-SPOS = NO.
    GS_SORT-FIELDNAME = 'EBELN'.
    GS_SORT-DOWN = 'X'.
    APPEND GS_SORT TO GT_SORT.


  ELSEIF g_grid_right IS NOT INITIAL.
    CLEAR gt_sort.
    GS_SORT-SPOS = NO.
    GS_SORT-FIELDNAME = 'EBELN'.
    GS_SORT-DOWN = 'X'.
    APPEND GS_SORT TO GT_SORT.

  ENDIF.
ENDFORM.


*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Module  STATUS_0100  OUTPUT
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.

  SET PF-STATUS 'MAIN'.
  SET TITLEBAR 'ZPROJ03_ALV'.

  IF G_GRID_LEFT IS INITIAL.

    PERFORM READ_DATA_HEADER.
    PERFORM DISPLAY_GRID.
    PERFORM SWITCH_EDIT_MODE.

    CREATE OBJECT EVENT_HANDLER.
    SET HANDLER EVENT_HANDLER-&amp;gt;HANDLE_DOUBLE_CLICK FOR G_GRID_LEFT.

  ENDIF.


ENDMODULE.                 " STATUS_0100  OUTPUT

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Module  USER_COMMAND_0100  INPUT
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.

  CALL METHOD CL_GUI_CFW=&amp;gt;DISPATCH.

  CASE SY-UCOMM.

    WHEN 'BACK'.
      SET SCREEN 0. LEAVE SCREEN.
    WHEN 'EXIT'.
      SET SCREEN 0. LEAVE SCREEN.
    WHEN 'CANCEL'.
      LEAVE PROGRAM. LEAVE SCREEN.
    WHEN 'DELETE'.
      PERFORM SAVE_DATABASE_DELETE.
    WHEN 'SAVE'.
      PERFORM SAVE_DATABASE_UPDATE.
      PERFORM data_changed.
    WHEN '&amp;amp;LOCAL&amp;amp;APPEND'.
      PERFORM SAVE_DATABASE_APPEND.
    WHEN 'SWITCH'.
      PERFORM SWITCH_EDIT_MODE.
    WHEN OTHERS.
*     do nothing

  ENDCASE.


ENDMODULE.                 " USER_COMMAND_0100  INPUT


*  ===============================================================
*   LOCAL CLASSES: IMPLEMENTATION
*  ===============================================================
CLASS LCL_EVENTHANDLER IMPLEMENTATION." implementation
  METHOD  HANDLE_DOUBLE_CLICK.

*   define local data
    DATA:
      LT_ZHEADER TYPE TABLE OF ZEKKO03,
      LT_ZITEMS2 TYPE TABLE OF ZEKPO03,
      LS_ZHEADER TYPE ZEKKO03,
      LS_ZITEMS2 LIKE LINE OF LT_ZITEMS2.       """ like line of applicable to structure for ztables

    IF e_row-index gt 0.


           READ TABLE GT_ZHEADER INDEX e_row-index INTO LS_ZHEADER.   """use ALV internal table to perform read data

          CALL METHOD ZCL_03_DATA_MODEL=&amp;gt;SELECT_PURCHASE_ORDERS           """""select line items based on header
            EXPORTING
              IV_KEY    = LS_Zheader-EBELN
*             IV_MAX_ROWS =
            IMPORTING
*             IT_ZHEADER  =
              IT_ZITEMS = LT_ZITEMS2
*             ES_BAPIRET2 =
            .
     ENDIF.

        GT_ZITEMS = LT_ZITEMS2.
        G_GRID_RIGHT-&amp;gt;REFRESH_TABLE_DISPLAY( ). 

  ENDMETHOD.

******
    METHOD handle_data_changed.
    PERFORM data_changed USING er_data_changed.
  ENDMETHOD.
*
*******

ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATION

&amp;lt;br&amp;gt;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 15 May 2020 08:53:21 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157847#M1977663</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2020-05-15T08:53:21Z</dc:date>
    </item>
    <item>
      <title>Re: Validation in Editable ALV</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157848#M1977664</link>
      <description>&lt;P&gt;Continuing program source code, Ive attached respective methods &lt;/P&gt;&lt;P&gt;Sorry for the trouble&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;FORM data_changed USING p_er_data_changed TYPE REF TO cl_alv_changed_data_protocol.

DATA: ls_mod_cells TYPE lvc_s_modi,
      lv_ebeln TYPE zebeln_emnt.

  DATA:
    LT_ZHEADER_MOD TYPE TABLE OF ZEKKO03,
    LT_ZITEMS_mod  TYPE TABLE OF ZEKPO03,
    LS_ZHEADER_mod TYPE ZEKKO03,
    LS_ZITEMS_mod LIKE LINE OF LT_ZITEMS_mod.

loop at p_er_data_changed-&amp;gt;mt_good_cells INTO ls_mod_cells.

  CASE ls_mod_cells-fieldname.

    WHEN 'EBELN'.
          CALL METHOD p_er_data_changed-&amp;gt;get_cell_value
          EXPORTING
            i_row_id    = ls_mod_cells-row_id
            i_fieldname = 'EBELN'
          IMPORTING
            e_value     = lv_ebeln.

          CALL METHOD ZCL_03_DATA_MODEL=&amp;gt;SELECT_PURCHASE_ORDERS
            EXPORTING
*              IV_KEY      =
              IV_MAX_ROWS = IV_MAX_ROWS
            IMPORTING
              IT_ZHEADER  = lt_zheader_mod   .

          CALL METHOD ZCL_03_DATA_MODEL=&amp;gt;SELECT_PURCHASE_ORDERS
            EXPORTING
              IV_KEY      = lv_ebeln
*              IV_MAX_ROWS = 0
            IMPORTING
              IT_ZHEADER  = lt_zheader_mod
              .

          gt_zheader = lt_zheader_mod.

        PERFORM save_database_update.

        if lv_ebeln IS INITIAL.

            CALL METHOD p_er_data_changed-&amp;gt;add_protocol_entry
            EXPORTING
              i_msgid     = 'ZMM'
              i_msgno     = '999'
              i_msgty     = 'E'
              i_msgv1     = 'Please enter PO number hdr'
              i_fieldname = ls_mod_cells-fieldname
              i_row_id    = ls_mod_cells-row_id.
          EXIT.

        endif.

        g_grid_left-&amp;gt;refresh_table_display( ).

  ENDCASE.

ENDLOOP.

ENDFORM.

*****

FORM SWITCH_EDIT_MODE.


  IF G_GRID_LEFT-&amp;gt;IS_READY_FOR_INPUT( ) EQ 0.

    CALL METHOD G_GRID_LEFT-&amp;gt;SET_READY_FOR_INPUT
      EXPORTING
        I_READY_FOR_INPUT = 1.
  ELSE.
    CALL METHOD G_GRID_LEFT-&amp;gt;SET_READY_FOR_INPUT
      EXPORTING
        I_READY_FOR_INPUT = 0.
  ENDIF.



ENDFORM.                               " SWITCH_EDIT_MODE



*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  SAVE TO DB
*&amp;amp;---------------------------------------------------------------------*
*       text : saving into DDIC from internal table
*----------------------------------------------------------------------*
*  --&amp;gt;  p1        text
*  &amp;lt;--  p2        text
*----------------------------------------------------------------------*
FORM SAVE_DATABASE_APPEND.

  DATA:
    LT_ZHEADER_APP TYPE TABLE OF ZEKKO03,
    LT_ZITEMS_APP  TYPE TABLE OF ZEKPO03,
    LS_ZHEADER_APP TYPE ZEKKO03,
    LS_ZITEMS_APP  LIKE LINE OF LT_ZITEMS_APP.


  CALL METHOD G_GRID_LEFT-&amp;gt;CHECK_CHANGED_DATA
    IMPORTING
      E_VALID = CHECK.

  CALL METHOD G_GRID_RIGHT-&amp;gt;CHECK_CHANGED_DATA
    IMPORTING
      E_VALID = CHECK.

  CALL METHOD ZCL_03_DATA_MODEL=&amp;gt;CREATE_PURCHASE_ORDERS
    EXPORTING
      IT_ZHEADER = LT_ZHEADER_APP
      IT_ZITEMS  = LT_ZITEMS_APP.

  GT_ZHEADER = LT_ZHEADER_APP.
  GT_ZITEMS = LT_ZITEMS_APP.

ENDFORM.


*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  SAVE TO DB
*&amp;amp;---------------------------------------------------------------------*
*       text : saving into DDIC from internal table
*----------------------------------------------------------------------*
*  --&amp;gt;  p1        text
*  &amp;lt;--  p2        text
*----------------------------------------------------------------------*
FORM SAVE_DATABASE_UPDATE.

  CALL METHOD G_GRID_LEFT-&amp;gt;CHECK_CHANGED_DATA
    IMPORTING
      E_VALID = CHECK.

  CALL METHOD G_GRID_RIGHT-&amp;gt;CHECK_CHANGED_DATA
    IMPORTING
      E_VALID = CHECK.

  CALL METHOD ZCL_03_DATA_MODEL=&amp;gt;UPDATE_PURCHASE_ORDERS
    EXPORTING
      IT_ZHEADER  = GT_ZHEADER
      IT_ZITEMS   = GT_ZITEMS
    IMPORTING
      ES_BAPIRET2 = BAPIRET2.
ENDFORM.

FORM SAVE_DATABASE_DELETE.

  DATA:
    LT_ZHEADER_DEL TYPE TABLE OF ZEKKO03,
    LT_ZITEMS2_DEL TYPE TABLE OF ZEKPO03,
    LS_ZHEADER_DEL TYPE ZEKKO03,
    LS_ZITEMS2_DEL LIKE LINE OF LT_ZITEMS2_DEL.

   DATA:
    LT_ZHEADER_DEL_01 TYPE TABLE OF ZEKKO03,
    LT_ZITEMS2_DEL_01 TYPE TABLE OF ZEKPO03.

  DATA: LT_ROWID_DEL TYPE LVC_T_ROID,
        LS_ROWIN_DEL LIKE LINE OF LT_ROWID_DEL.


  CALL METHOD G_GRID_LEFT-&amp;gt;GET_SELECTED_ROWS
    IMPORTING
      ET_ROW_NO     = LT_ROWID_DEL.

*--- Through the index capturing the values of selected rows
  LOOP AT LT_ROWID_DEL INTO LS_ROWIN_DEL.                       """" to get a row

    CALL METHOD ZCL_03_DATA_MODEL=&amp;gt;SELECT_PURCHASE_ORDERS     """get all data for header
      EXPORTING
*       IV_KEY      =
        IV_MAX_ROWS = IV_MAX_ROWS
      IMPORTING
        IT_ZHEADER  = LT_ZHEADER_DEL    .

    READ TABLE gt_zheader INDEX LS_ROWIN_DEL-ROW_ID INTO LS_ZHEADER_DEL.  

    CLEAR LT_ZHEADER_DEL.

    CALL METHOD ZCL_03_DATA_MODEL=&amp;gt;SELECT_PURCHASE_ORDERS
      EXPORTING
        IV_KEY      = LS_ZHEADER_DEL-EBELN
*        IV_MAX_ROWS = 0
      IMPORTING
        IT_ZHEADER  = LT_ZHEADER_DEL
*        IT_ZITEMS   =
*        ES_BAPIRET2 =
        .


    CALL METHOD ZCL_03_DATA_MODEL=&amp;gt;SELECT_PURCHASE_ORDERS             """get a row of line item based on key
      EXPORTING
        IV_KEY    = LS_ZHEADER_DEL-EBELN
*       IV_MAX_ROWS =
      IMPORTING
*       IT_ZHEADER  =
        IT_ZITEMS = LT_ZITEMS2_DEL
*       ES_BAPIRET2 =
      .

    CALL METHOD ZCL_03_DATA_MODEL=&amp;gt;DELETE_PURCHASE_ORDERS
      EXPORTING
        IT_ZHEADER = LT_ZHEADER_DEL
        IT_ZITEMS  = LT_ZITEMS2_DEL    .

  ENDLOOP.

  CALL METHOD ZCL_03_DATA_MODEL=&amp;gt;SELECT_PURCHASE_ORDERS   
    EXPORTING
      IV_MAX_ROWS = IV_MAX_ROWS
    IMPORTING
      IT_ZHEADER  = LT_ZHEADER_DEL_01   .

  CALL METHOD ZCL_03_DATA_MODEL=&amp;gt;SELECT_PURCHASE_ORDERS 
    EXPORTING
      IV_KEY    = LS_ZHEADER_DEL-EBELN
*     IV_MAX_ROWS =
    IMPORTING
*     IT_ZHEADER =
      IT_ZITEMS = LT_ZITEMS2_DEL_01
*     ES_BAPIRET2 =
    .

  GT_ZHEADER = LT_ZHEADER_DEL_01.
  GT_ZITEMS  = LT_ZITEMS2_DEL_01.

  G_GRID_LEFT-&amp;gt;REFRESH_TABLE_DISPLAY( ).
  G_GRID_RIGHT-&amp;gt;REFRESH_TABLE_DISPLAY( ).

  CLEAR LT_ZITEMS2_DEL.
  CLEAR LT_ZHEADER_DEL_01.
  CLEAR LT_ZITEMS2_DEL_01.


ENDFORM.                    " SAVE_DATABASE&amp;lt;br&amp;gt;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 15 May 2020 09:02:02 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157848#M1977664</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2020-05-15T09:02:02Z</dc:date>
    </item>
    <item>
      <title>Re: Validation in Editable ALV</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157849#M1977665</link>
      <description>&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;In your METHOD UPDATE_PURCHASE_ORDERS., you may add a validation routine &lt;/P&gt;&lt;P&gt;Perform Validate - in that loop through it_header table and if any ebeln is initial set the flag ok_to_save to 'N'.&lt;/P&gt;&lt;P&gt;In the method put if statement as IF ok_to_save = 'Y'......&lt;/P&gt;&lt;P&gt;else display the message.&lt;/P&gt;</description>
      <pubDate>Fri, 15 May 2020 09:06:19 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157849#M1977665</guid>
      <dc:creator>venkateswaran_k</dc:creator>
      <dc:date>2020-05-15T09:06:19Z</dc:date>
    </item>
    <item>
      <title>Re: Validation in Editable ALV</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157850#M1977666</link>
      <description>&lt;P&gt;Rest of the methods attached&lt;/P&gt;</description>
      <pubDate>Fri, 15 May 2020 09:14:20 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157850#M1977666</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2020-05-15T09:14:20Z</dc:date>
    </item>
    <item>
      <title>Re: Validation in Editable ALV</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157851#M1977667</link>
      <description>&lt;P&gt;Hi sorry dont get you&lt;/P&gt;&lt;P&gt;Is it something like this? Please correct me&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;value( IT_ZHEADER )      TYPE ZEKKO03_TT          PO Header Table Type
value( IT_ZITEMS )         TYPE ZEKPO03_TT       PO Item Table Type
IV_SAVE                     TYPE BOOLEAN          Boolean Variable (X = True, - = False, Space = Unknown)
value( ES_BAPIRET2 )      TYPE BAPIRET2          Return Parameter




  METHOD UPDATE_PURCHASE_ORDERS.

DATA: ls_zheader LIKE LINE OF it_zheader,
      lv_ebeln TYPE zekko03-ebeln.

if it_zheader IS NOT INITIAL.

        modify zekko03 FROM TABLE it_zheader .
        IF SY-SUBRC = 0.
          COMMIT WORK.
          ES_BAPIRET2-TYPE = 'S'.
          ES_BAPIRET2-MESSAGE = 'Successfully updated for table ZEKKO03'.

        ELSE.
          ROLLBACK WORK.
          ES_BAPIRET2-TYPE = 'E'.
          ES_BAPIRET2-MESSAGE = 'Error updating table ZEKKO03'.
        ENDIF.

        modify zekpo03 FROM TABLE it_zitems .
        IF SY-SUBRC = 0.
          COMMIT WORK.
          ES_BAPIRET2-TYPE = 'S'.
          ES_BAPIRET2-MESSAGE = 'Successfully updated for table ZEKKO03'.

        ELSE.
          ROLLBACK WORK.
          ES_BAPIRET2-TYPE = 'E'.
          ES_BAPIRET2-MESSAGE = 'Error updating table ZEKKO03'.
        ENDIF.

endif.



LOOP AT it_zheader INTO ls_zheader.

  IF lv_ebeln IS INITIAL.

    if iv_save = '-'.
      MESSAGE 'Please enter PO number' TYPE 'E'.

    elseif iv_save = 'X'.


    endif.

  ENDIF.

ENDLOOP.&amp;lt;br&amp;gt;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 15 May 2020 10:41:11 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157851#M1977667</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2020-05-15T10:41:11Z</dc:date>
    </item>
    <item>
      <title>Re: Validation in Editable ALV</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157852#M1977668</link>
      <description>&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;Please as below&lt;/P&gt;&lt;P&gt;Declare a global variable iv_save type c length 1 default space.&lt;/P&gt;&lt;P&gt;In your method, include statement as below&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;METHOD UPDATE_PURCHASE_ORDERS.
DATA: ls_zheader LIKE LINE OF it_zheader,
     lv_ebeln TYPE zekko03-ebeln.
     
     PERFORM VALIDATE_IT.   &amp;lt;===== ADD STATEMENT LINE HERE
     IF IV_SAVE = 'Y'       &amp;lt;== add if statement to validate if the flag is okay
         if it_zheader IS NOT INITIAL.
         ....
         .....
     ENDIF.
     ELSE.
       MESSAGE 'IN INTERNAL TABLE PO NUMBER IS MISSING'.. TYPE 'S' DISPLAY LIKE 'S'.
     ENDIF&amp;lt;br&amp;gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;and in the subroutine&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;FORM VALIDATE_IT.
   IV_SAVE = 'Y'.
   LOOP IT_HEADER INTO LS_HEADER.
     IF LS_HEADER-EBELN = ''.
       IV_SAVE = 'N'.
     ENDIF.
   ENDLOOP.
ENDFORM


&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 15 May 2020 11:21:56 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157852#M1977668</guid>
      <dc:creator>venkateswaran_k</dc:creator>
      <dc:date>2020-05-15T11:21:56Z</dc:date>
    </item>
    <item>
      <title>Re: Validation in Editable ALV</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157853#M1977669</link>
      <description>&lt;P&gt;Hi sir, cant actually include perform in method, perform can only be included in program, else it will prompt this error&lt;/P&gt;&lt;P&gt;&lt;IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/attachments/storage/7/attachments/1806878-error-perform.png" /&gt;&lt;/P&gt;&lt;P&gt;Im doing it this way instead, not sure if its correct logically. When the code is added, it affects the update, meaning update not reflected&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;value( IT_ZHEADER )	TYPE ZEKKO03_TT	PO Header Table Type
value( IT_ZITEMS )	TYPE ZEKPO03_TT	PO Item Table Type
value( IV_SAVE )	TYPE C OPTIONAL	
value( ES_BAPIRET2 )	TYPE BAPIRET2	Return Parameter

   METHOD UPDATE_PURCHASE_ORDERS.

DATA: ls_zheader LIKE LINE OF it_zheader,
      lv_ebeln TYPE zekko03-ebeln.

if iv_save = 'Y'.
if it_zheader IS NOT INITIAL.

        modify zekko03 FROM TABLE it_zheader .
        IF SY-SUBRC = 0.
          COMMIT WORK.
          ES_BAPIRET2-TYPE = 'S'.
          ES_BAPIRET2-MESSAGE = 'Successfully updated for table ZEKKO03'.

        ELSE.
          ROLLBACK WORK.
          ES_BAPIRET2-TYPE = 'E'.
          ES_BAPIRET2-MESSAGE = 'Error updating table ZEKKO03'.
        ENDIF.

        modify zekpo03 FROM TABLE it_zitems .
        IF SY-SUBRC = 0.
          COMMIT WORK.
          ES_BAPIRET2-TYPE = 'S'.
          ES_BAPIRET2-MESSAGE = 'Successfully updated for table ZEKKO03'.

        ELSE.
          ROLLBACK WORK.
          ES_BAPIRET2-TYPE = 'E'.
          ES_BAPIRET2-MESSAGE = 'Error updating table ZEKKO03'.
        ENDIF.

endif.
else.
  MESSAGE 'Please enter PO number' TYPE 'S' DISPLAY LIKE 'S'.
  endif.



  ENDMETHOD.
&amp;lt;br&amp;gt;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;&lt;CODE&gt;DATA: GT_ZHEADER TYPE TABLE OF ZEKKO03,     ""global variable for ZEKKO03
      GT_ZITEMS  TYPE TABLE OF ZEKPO03.     ""global variable for ZEKPO03

DATA: GS_ZHEADER TYPE ZEKKO03,
      GS_ZITEMS  LIKE LINE OF GT_ZITEMS,
      gv_save TYPE c LENGTH 1 VALUE ' '.


*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Module  USER_COMMAND_0100  INPUT
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
  CASE SY-UCOMM.
WHEN 'SAVE'.
      PERFORM SAVE_DATABASE_UPDATE.
      PERFORM validate_update.

  ENDCASE.


ENDMODULE.   



*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  SAVE TO DB
*&amp;amp;---------------------------------------------------------------------*
*       text : saving into DDIC from internal table
*----------------------------------------------------------------------*
*  --&amp;gt;  p1        text
*  &amp;lt;--  p2        text
*----------------------------------------------------------------------*
FORM SAVE_DATABASE_UPDATE.

  CALL METHOD G_GRID_LEFT-&amp;gt;CHECK_CHANGED_DATA
    IMPORTING
      E_VALID = CHECK.

  CALL METHOD G_GRID_RIGHT-&amp;gt;CHECK_CHANGED_DATA
    IMPORTING
      E_VALID = CHECK.

*  CALL METHOD ZCL_03_DATA_MODEL=&amp;gt;UPDATE_PURCHASE_ORDERS
*    EXPORTING
*      IT_ZHEADER  = GT_ZHEADER
*      IT_ZITEMS   = GT_ZITEMS
*    IMPORTING
*      ES_BAPIRET2 = BAPIRET2.

CALL METHOD ZCL_03_DATA_MODEL=&amp;gt;UPDATE_PURCHASE_ORDERS
  EXPORTING
    IT_ZHEADER  = gt_zheader
    IT_ZITEMS   = gt_zitems
    IV_SAVE     = gv_save
*  IMPORTING
*    ES_BAPIRET2 =
    .
ENDFORM.


FORM validate_update.

gv_save = 'Y'.
LOOP AT gt_zheader INTO gs_zheader.

  IF gs_zheader-ebeln = ' '.
    gv_save = 'N'.

  ENDIF.

endloop.
ENDFORM.&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 15 May 2020 14:35:22 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157853#M1977669</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2020-05-15T14:35:22Z</dc:date>
    </item>
    <item>
      <title>Re: Validation in Editable ALV</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157854#M1977670</link>
      <description>&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;You need to swap as below&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;MODULE USER_COMMAND_0100 INPUT.
  CASE SY-UCOMM.
WHEN 'SAVE'.
      PERFORM validate_update.             &amp;lt;===== first line is this validate 
      IF GV_SAVE = 'Y'.                    &amp;lt;== Add line as below
        PERFORM SAVE_DATABASE_UPDATE.
      ELSE.
        MESSAGE 'Please fillin the PO numbers in the table...' TYPE 'S' DISPLAY LIKE 'S'.
      ENDIF.

  ENDCASE.
ENDMODULE.   &lt;BR /&gt;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 15 May 2020 19:58:31 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157854#M1977670</guid>
      <dc:creator>venkateswaran_k</dc:creator>
      <dc:date>2020-05-15T19:58:31Z</dc:date>
    </item>
    <item>
      <title>Re: Validation in Editable ALV</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157855#M1977671</link>
      <description>&lt;P&gt;Hi sir&lt;/P&gt;&lt;P&gt;Thank you , it worked with all your logic inserted in the update method.&lt;/P&gt;</description>
      <pubDate>Mon, 18 May 2020 16:24:34 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/validation-in-editable-alv/m-p/12157855#M1977671</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2020-05-18T16:24:34Z</dc:date>
    </item>
  </channel>
</rss>

