Handle deletion in an editable alv

Hi,
I have an editable alv . When I delete a record from this editable alv , I also want to delete it from the corresponding database .
Please could someone tell me how we can capture the particular record selected for deletion in this editable alv .
Regards,
Sushanth H.S.

Hello Sushanth
Assuming that you can only delete entire rows but not modify rows (editable cells) you could use a simple approach by storing a PBO image of your data.
For a sample report have a look at report ZUS_SDN_ALV_EDITABLE_1A in Issue with CHECK_CHANGED_DATA  method of CL_GUI_ALV_GRID class
By comparing GT_OUTTAB_PBO and GT_OUTTAB (PAI data) you can simply find out the deleted records.
Alternatively, you may use a more sophisticated approach:
[Comparing Two Internal Tables - A Generic Approach|https://www.sdn.sap.com/irj/sdn/wiki?path=/display/snippets/comparing%2btwo%2binternal%2btables%2b-%2ba%2bgeneric%2bapproach]
This approach will also be helpful if the ALV rows can be modified because in this case you have to find out the MODIFIED rows.
Regards
  Uwe

Similar Messages

  • Undo deleting rows in Editable ALV

    Hi All,
    i have to check something (at event data_changed of cl_gui_alv_grid), after the user click delete row in an editable ALV. If any expression is true, then the deleted row should not be deleted, it should be undo.
    Have anyone a idea to undo this deleting-function.
    Best regards
    Andreas

    hi,
      SAP provides provision for overwriting the functionality of standard buttons displayed in the ALV. You have write a subroutine in which your code has to be executed. That subroutine will be executed during the runtime,
    when a standard button has been clicked.
    if you are using the function module to display the data, you have to pass the program name to I_CALLBACK_PROGRAM  ,subroutine name to I_CALLBACK_USER_COMMAND.  Refer below code.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
    i_callback_program = sy-repid
    * I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
    i_callback_user_command = 'USER_COMMAND1'
    i_callback_top_of_page = 'TOP_OF_PAGE'
    * I_BACKGROUND_ID = 'ALV_BACKGROUND'
    i_grid_title = i_title_vbfa
    is_layout = i_layout
    it_fieldcat = i_fldcat[]
    it_sort = i_sort
    it_events = i_event
    TABLES
    t_outtab = it_so1
    FORM user_command1 USING r_ucomm LIKE sy-ucomm
    rs_selfield TYPE slis_selfield.
    *CASE R_UCOMM .
    * WHEN '&IC1' .
    * IF rs_selfield-FIELDNAME = 'VBELN' .
    * ENDIF .
    * WHEN OTHERS .
    * ENDCASE .
    CLEAR wa_so.
    REFRESH: it_del1 .
    IF r_ucomm = '&IC1' AND rs_selfield-fieldname = 'VBELN' AND
    rs_selfield-value IS NOT INITIAL.
    READ TABLE it_so1 INTO wa_so INDEX rs_selfield-tabindex.
    IF sy-subrc = 0.
    LOOP AT it_vbfa INTO wa_vbfa WHERE vbelv = wa_so-vbeln
    AND posnv = wa_so-posnr.
    READ TABLE it_del_ful INTO wa_it_del_ful
    WITH KEY vbeln = wa_vbfa-vbelv
    posnr = wa_vbfa-posnn.
    IF sy-subrc = 0.
    CLEAR wa_del.
    MOVE wa_it_del_ful TO wa_del.
    APPEND wa_del TO it_del1.
    ENDIF.
    ENDLOOP.
    ENDIF.
    ENDIF.
    ********* SECOND ALV GRID DISPLAY ***********************************
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
    i_callback_program = sy-repid
    * I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
    i_callback_user_command = 'USER_COMMAND2'
    i_callback_top_of_page = 'TOP_OF_PAGE'
    * I_BACKGROUND_ID = 'ALV_BACKGROUND'
    i_grid_title = i_title_vbpa
    it_fieldcat = i_fldcat2[]
    it_sort = i_sort
    TABLES
    t_outtab = it_del_ful
    * IF sy-subrc <> 0.
    ** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    ** WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    * ENDIF.
    ENDFORM . "USER_COMMAND1
    Regards,
    Veersh
    Edited by: veereshbabu ponnada on Feb 11, 2009 3:04 PM

  • Handling Enter Key in Editable ALV Grid using REUSE_ALV_GRID_DISPLAY

    Hello All,
    I have seen a number of threads on captioned issue and everyone of them say to create FCODE for Enter in the Screen's PF Status and then handle the event.
    But the catch is when you hit Enter key in ALV Grid, it will not trigger any FCODE at all because the FCODE Enter you have created is for the screen and not for the GRID. Can anyone please let me know if SAP has given any standard utility in REUSE_ALV_GRID_DISPLAY FM for handling the Enter key event.
    Thanks and regards,
    Mahesh

    Hi,
    Set the PF-status for OK key and use the FCODE or u can usethe dynamic ok_code generated .
    Also try 'ENTE' .
    Hope thishelps.

  • Table Maintenance using Editable ALV

    Hi all,
    Could anyone give me the code for doing the ZTable maintenance (like Insert, Modify, Append, Delete records) using Editable ALV. I referred all BCALV_EDIT* programs but there  is no code for saving the details in database after the changes. Please help it is urgent, will surely reward points.
    thanks in advance

    Pl. see this sample code. May be it will help u.
    REPORT zmodtab NO STANDARD PAGE HEADING.
    TYPE-POOLS: rsds.
    DATA: is_x030l  TYPE x030l,
          it_dfies  TYPE TABLE OF dfies,
          is_dfies  TYPE dfies,
          it_fdiff  TYPE TABLE OF field_dif,
          is_fdiff  TYPE field_dif.
    DATA: w_selid   TYPE rsdynsel-selid,
          it_tables TYPE TABLE OF rsdstabs,
          is_tables TYPE rsdstabs,
          it_fields TYPE TABLE OF rsdsfields,
          it_expr   TYPE rsds_texpr,
          it_ranges TYPE rsds_trange,
          it_where  TYPE rsds_twhere,
          is_where  TYPE rsds_where,
          w_active  TYPE i.
    DATA: it_content TYPE REF TO data,
          it_modif   TYPE REF TO data,
          it_fcat    TYPE lvc_t_fcat.
    DATA: w_okcode   TYPE sy-ucomm.
    FIELD-SYMBOLS: <itab> TYPE STANDARD TABLE,
                   <ntab> TYPE STANDARD TABLE.
    Macros
    DEFINE table_error.
      message e398(00) with 'Table' p_table &1.
    END-OF-DEFINITION.
    DEFINE fixed_val.
      is_fdiff-fieldname = is_dfies-fieldname.
      is_fdiff-fixed_val = &1.
      is_fdiff-no_input  = 'X'.
      append is_fdiff to it_fdiff.
    END-OF-DEFINITION.
    Selection screen
    SELECTION-SCREEN: BEGIN OF BLOCK b01 WITH FRAME.
    PARAMETERS: p_table TYPE tabname OBLIGATORY                    "table
                                     MEMORY ID dtb
                                     MATCHCODE OBJECT dd_dbtb_16.
    SELECTION-SCREEN: BEGIN OF LINE,
                      PUSHBUTTON 33(20) selopt USER-COMMAND sel,
                      COMMENT    55(15) selcnt,
                      END OF LINE.
    SELECTION-SCREEN: SKIP.
    PARAMETERS: p_rows  TYPE i.                                    "rows
    SELECTION-SCREEN: END OF BLOCK b01,
                      SKIP,
                      BEGIN OF BLOCK b02 WITH FRAME.
    PARAMETERS: p_displ TYPE c AS CHECKBOX.                        "display
    SELECTION-SCREEN: END OF BLOCK b02.
    Initialization
    INITIALIZATION.
      MOVE '@4G@ Filter records' TO selopt.
    PBO
    AT SELECTION-SCREEN OUTPUT.
      IF w_active IS INITIAL.
        CLEAR: selcnt.
      ELSE.
        WRITE w_active TO selcnt LEFT-JUSTIFIED.
      ENDIF.
    PAI
    AT SELECTION-SCREEN.
      IF p_table NE is_x030l-tabname.
        CALL FUNCTION 'DDIF_NAMETAB_GET'
             EXPORTING
                  tabname   = p_table
             IMPORTING
                  x030l_wa  = is_x030l
             TABLES
                  dfies_tab = it_dfies
             EXCEPTIONS
                  OTHERS    = 1.
        IF is_x030l IS INITIAL.
          table_error 'does not exist or is not active'.
        ELSEIF is_x030l-tabtype NE 'T'.
          table_error 'is not selectable'.
        ELSEIF is_x030l-align NE 0.
          table_error 'has alignment - cannot continue'.
        ENDIF.
      Default values for system fields
        REFRESH: it_fdiff.
        is_fdiff-tabname = p_table.
        LOOP AT it_dfies INTO is_dfies.
          IF is_dfies-datatype = 'CLNT'.
            fixed_val sy-mandt.
          ELSEIF is_dfies-rollname = 'ERDAT'
              OR is_dfies-rollname = 'ERSDA'
              OR is_dfies-rollname = 'AEDAT'
              OR is_dfies-rollname = 'LAEDA'.
            fixed_val sy-datum.
          ELSEIF is_dfies-rollname = 'ERTIM'
              OR is_dfies-rollname = 'AETIM'.
            fixed_val sy-uzeit.
          ELSEIF is_dfies-rollname = 'ERNAM'
              OR is_dfies-rollname = 'AENAM'.
            fixed_val sy-uname.
          ENDIF.
        ENDLOOP.
      Prepare free selection on table
        REFRESH it_tables.
        is_tables-prim_tab = p_table.
        APPEND is_tables TO it_tables.
        CLEAR: w_selid.
      ENDIF.
      IF sy-ucomm = 'SEL'.
        IF w_selid IS INITIAL.
        Init free selection dialog
          CALL FUNCTION 'FREE_SELECTIONS_INIT'
               EXPORTING
                    expressions  = it_expr
               IMPORTING
                    selection_id = w_selid
                    expressions  = it_expr
               TABLES
                    tables_tab   = it_tables
               EXCEPTIONS
                    OTHERS       = 1.
        ENDIF.
      Display free selection dialog
        CALL FUNCTION 'FREE_SELECTIONS_DIALOG'
             EXPORTING
                  selection_id            = w_selid
                  title                   = 'Selection'
                  status                  = 1
                  as_window               = 'X'
             IMPORTING
                  expressions             = it_expr
                  field_ranges            = it_ranges
                  number_of_active_fields = w_active
             TABLES
                  fields_tab              = it_fields
             EXCEPTIONS
                  OTHERS                  = 1.
      ENDIF.
    Start of processing
    START-OF-SELECTION.
      PERFORM f_create_table USING p_table.
      PERFORM f_select_table.
      PERFORM f_display_table.
          FORM f_create_table                                           *
    FORM f_create_table USING in_tabname.
      FIELD-SYMBOLS: <fcat> TYPE lvc_s_fcat.
      CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
           EXPORTING
                i_structure_name = in_tabname
           CHANGING
                ct_fieldcat      = it_fcat
           EXCEPTIONS
                OTHERS           = 1.
      IF sy-subrc = 0.
      Complete field catalog
        LOOP AT it_fcat ASSIGNING <fcat>.
          <fcat>-tabname = in_tabname.
        ENDLOOP.
        CALL FUNCTION 'LVC_FIELDCAT_COMPLETE'
             CHANGING
                  ct_fieldcat = it_fcat
             EXCEPTIONS
                  OTHERS      = 1.
      ELSE.
        WRITE: 'Error building field catalog'.
        STOP.
      ENDIF.
    Create dynamic table for data
      CALL METHOD cl_alv_table_create=>create_dynamic_table
        EXPORTING
          it_fieldcatalog = it_fcat
        IMPORTING
          ep_table        = it_content.
      IF sy-subrc = 0.
        ASSIGN it_content->* TO <itab>.
      ELSE.
        WRITE: 'Error creating internal table'.
        STOP.
      ENDIF.
    Create dynamic table for modif
      CALL METHOD cl_alv_table_create=>create_dynamic_table
        EXPORTING
          it_fieldcatalog = it_fcat
        IMPORTING
          ep_table        = it_modif.
      IF sy-subrc = 0.
        ASSIGN it_modif->* TO <ntab>.
      ELSE.
        WRITE: 'Error creating internal table'.
        STOP.
      ENDIF.
    ENDFORM.
          FORM f_select_table                                           *
    FORM f_select_table.
      IF w_active = 0.
        SELECT * FROM (p_table)
                 INTO CORRESPONDING FIELDS OF TABLE <itab>
                UP TO p_rows ROWS.
      ELSE.
      Selection with parameters
        CALL FUNCTION 'FREE_SELECTIONS_RANGE_2_WHERE'
             EXPORTING
                  field_ranges  = it_ranges
             IMPORTING
                  where_clauses = it_where.
        READ TABLE it_where INTO is_where WITH KEY tablename = p_table.
        SELECT * FROM (p_table)
                 INTO CORRESPONDING FIELDS OF TABLE <itab>
                UP TO p_rows ROWS
                WHERE (is_where-where_tab).
      ENDIF.
      IF sy-dbcnt = 0.
        WRITE: 'No record selected'.
        STOP.
      ENDIF.
    ENDFORM.
          FORM f_display_table                                          *
    FORM f_display_table.
      DATA: l_answer TYPE c,
            l_eflag  TYPE c.
      CLEAR: w_okcode.
      REFRESH: <ntab>.
    Display table contents
      CALL FUNCTION 'STC1_FULLSCREEN_TABLE_CONTROL'
           EXPORTING
                header       = p_table
                tabname      = p_table
                display_only = p_displ
                endless      = 'X'
                no_button    = space
           IMPORTING
                okcode       = w_okcode
           TABLES
                nametab      = it_dfies
                table        = <itab>
                fielddif     = it_fdiff
                modif_table  = <ntab>
           EXCEPTIONS
                OTHERS       = 1.
      IF sy-subrc = 0.
        IF p_displ IS INITIAL AND w_okcode = 'SAVE'.
        Confirm update
          CALL FUNCTION 'POPUP_TO_CONFIRM'
               EXPORTING
                    titlebar              = p_table
                    text_question         = 'Do you want to update table ?'
                    default_button        = '2'
                    display_cancel_button = ' '
               IMPORTING
                    answer                = l_answer
               EXCEPTIONS
                    OTHERS                = 1.
          IF l_answer = '1'.
          Apply modifications
            IF NOT <ntab>[] IS INITIAL.
              PERFORM f_add_system USING space.
              MODIFY (p_table) FROM TABLE <ntab>.
              IF sy-subrc NE 0.
                l_eflag = 'X'.
              ENDIF.
            ENDIF.
          Apply deletions
            IF l_eflag IS INITIAL.
              REFRESH: <ntab>.
              CALL FUNCTION 'STC1_GET_DATA'
                   TABLES
                        deleted_data = <ntab>
                   EXCEPTIONS
                        OTHERS       = 1.
              IF NOT <ntab>[] IS INITIAL.
                DELETE (p_table) FROM TABLE <ntab>.
                IF sy-subrc NE 0.
                  ROLLBACK WORK.
                  l_eflag = 'X'.
                ENDIF.
              ENDIF.
            ENDIF.
          Apply creations
            IF l_eflag IS INITIAL.
              REFRESH: <ntab>.
              CALL FUNCTION 'STC1_GET_DATA'
                   TABLES
                        new_data = <ntab>
                   EXCEPTIONS
                        OTHERS   = 1.
              IF NOT <ntab>[] IS INITIAL.
                PERFORM f_add_system USING 'X'.
                INSERT (p_table) FROM TABLE <ntab>.
                IF sy-subrc NE 0.
                  ROLLBACK WORK.
                  l_eflag = 'X'.
                ENDIF.
              ENDIF.
            ENDIF.
            IF l_eflag IS INITIAL.
              COMMIT WORK.
              MESSAGE s261(53).
            ELSE.
              MESSAGE s075(3i).
              PERFORM f_select_table.
            ENDIF.
          ENDIF.
        Display table again
          PERFORM f_display_table.
        ENDIF.
      ENDIF.
    ENDFORM.
          FORM f_add_system                                             *
    FORM f_add_system USING new TYPE c.
      FIELD-SYMBOLS: <irec> TYPE ANY,
                     <upd>  TYPE ANY.
      LOOP AT it_fdiff INTO is_fdiff.
        READ TABLE it_dfies INTO is_dfies
                        WITH KEY fieldname = is_fdiff-fieldname.
        LOOP AT <ntab> ASSIGNING <irec>.
          ASSIGN COMPONENT is_fdiff-fieldname OF STRUCTURE <irec> TO <upd>.
          IF is_dfies-datatype = 'CLNT'.
            <upd> = sy-mandt.
          ELSE.
            CASE is_dfies-rollname.
              WHEN 'AENAM'.
                <upd> = sy-uname.
              WHEN 'AEDAT' OR 'LAEDA'.
                <upd> = sy-datum.
              WHEN 'AETIM'.
                <upd> = sy-uzeit.
              WHEN OTHERS.
            ENDCASE.
          ENDIF.
        ENDLOOP.
      ENDLOOP.
    ENDFORM.
    Regards,
    Joy.

  • Event Handling in Editable ALV

    Hi all,
    I am having 4 to 5 fields in my module pool screen and at the same time i am having a custom container wherein, there is editable ALV [using OOPS Editable ALV inside a custom container].
    Here in editable ALV, i am having an editable field called dealer code.When i enter dealer code in editable ALV and press enter
    my dealer name and dealer address in editable ALV inside Custom Container should get populated.
    But when the cursor is inside the custom container in that editable field none of my screen eventsModule pool events
    are getting triggered [Hence my values are not getting populated.When the cursor is outside the custom container all my module pool events are working fine, hence values are getting populated....
    *I am handling the event in my program.But i don't know where exactly i should create object and handle this as
    nothing is getting triggered[pai or pbo] when my cursor is inside the custom container.
    Could you suggest me anything...*
    Waiting for your repiles...

    Hi
    First of all you need to creat object in PBO.
    You must be calling method SET_TABLE_FOR_FIRST_DISPLAY.After this call method REGISTER_EDIT_EVENT.And then REFRESH_TABLE_DISPLAY.
    In OK code create an OK code with name "OK".This is for ENTER key.
    And in that call method CHECK_CHANGED_DATA.
    Sample code for REGISTER_EDIT_EVENT is given below:
    *--event to detect if data gets edited
      CALL METHOD OBJ_ALV2->REGISTER_EDIT_EVENT
        EXPORTING
          I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED
        EXCEPTIONS
          ERROR      = 1
          OTHERS     = 2.
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                   WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    Sample code for CHECK_CHANGED_DATA
    *--when alv is edited and ENTER button is clicked then data
    *will be saved in internal table and edited data will
    *be displayed on alv
      IF V_OK_CODE = 'OK'.
    *--metohd to detect if data was changed in oops alv
        CALL METHOD OBJ_ALV2->CHECK_CHANGED_DATA
         IMPORTING
           E_VALID   =
         CHANGING
           C_REFRESH = 'X'
      ENDIF.
    Hope this solves your problem.
    Thanks
    Khushboo

  • Editable ALV- Disable Add, delete row buttons

    Hi,
    I have an editable ALV using OO Grid. Some columns are editable and some are not using field catalog. I want to disable the 'add new row' and 'delete row' buttons. How to go about it ?
    Regards,
    Vin

    You can simply add them to the "Exclude" table and pass them to the SET_TABLE_FOR_FIRST_DISPLAY method.
       data: iexclude type ui_functions,
       data: xexclude type ui_func.
        define macro_exclude.
         xexclude = &1.
          append xexclude to iexclude.
        end-of-definition.
        macro_exclude cl_gui_alv_grid=>mc_fc_loc_copy_row.
        macro_exclude cl_gui_alv_grid=>mc_fc_loc_delete_row.
        macro_exclude cl_gui_alv_grid=>mc_fc_loc_append_row.
        macro_exclude cl_gui_alv_grid=>mc_fc_loc_insert_row.
        macro_exclude cl_gui_alv_grid=>mc_fc_loc_move_row.
        macro_exclude cl_gui_alv_grid=>mc_fc_loc_copy.
        macro_exclude cl_gui_alv_grid=>mc_fc_loc_cut.
        macro_exclude cl_gui_alv_grid=>mc_fc_loc_paste.
        macro_exclude cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
        macro_exclude cl_gui_alv_grid=>mc_fc_loc_undo.
        call method alv_grid->set_table_for_first_display(
            exporting
                 it_toolbar_excluding  = iexclude     "<--- Right HEre
                 is_layout             = xlayout
            changing
                 it_outtab       =  izcmptrans[]
                 it_fieldcatalog = ifc[] ).
    Regards,
    Rich Heilman

  • Editable ALV: value transport before event handling

    Hi everybody,
    I'm really going crazy over this one: I'm developing an editable ALV using CL_GUI_ALV_GRID and I'm trying to check the entered data both on pressing enter and on pressing SAVE.
    Since I want to use the error log protocol I'm doing all of these check in the data_changed event handling. Now this is where it gets tricky: When a user enters a value and presses the SAVE button without pressing enter first, the following code is executed:
    CALL METHOD GOB_D1100_ALV02_GRID->CHECK_CHANGED_DATA
    So since I registered the data_changed event, will trigger the event handling BEFORE transporting the value from the GUI to the internal table. The value is only transfered after the data_changed event (where I want to make my checks because of the error protocol) is executed.
    How do I get my internal table updated before event handling?
    Best wishes,
    Ben

    YEHAW! I found a solution to my problem in this thread: editable alv: add custom validation and display "errors" in protocol list
    What you need to do is change your internal table yourself accordingly to the changes that you did on the ALV GRID.
    You can find the modified rows in table MP_MOD_ROWS of object P_ER_DATA_CHANGED.
    Then all you need to do is modify your internal table accordingly. Works like a charm (:
    FORM ALV_EVENT_DATA_CHANGED  USING P_ER_DATA_CHANGED TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL
                                                                              P_SENDER.
      DATA: LTA_MOD_CELLS TYPE LVC_T_MODI.
      DATA: LST_MOD_CELLS TYPE LVC_S_MODI.
      FIELD-SYMBOLS: <LFS_MOD_ROWS> TYPE TABLE.
      LOOP AT P_ER_DATA_CHANGED->MT_MOD_CELLS INTO LST_MOD_CELLS.
        ASSIGN P_ER_DATA_CHANGED->MP_MOD_ROWS->* TO <LFS_MOD_ROWS>.
        READ TABLE <LFS_MOD_ROWS> ASSIGNING <FS_D1100_ALV02_DATA> INDEX LST_MOD_CELLS-TABIX.
        MODIFY GTA_D1100_ALV02_DATA FROM <FS_D1100_ALV02_DATA> INDEX LST_MOD_CELLS-ROW_ID.
      ENDLOOP.
    Thank you very much for your assitance
    Ben

  • ABAP WebDynpro: Handling the ON_ENTER Event in editable ALVs

    Sub: ABAP WebDynpro : Handling the ON_ENTER Event in editable ALVs
    Hi,
    I would like to know if there exists an event to handle TABout (i.e, when user navigates out of the cell with a TAB key-press) for a cell of an editable ALV.
    Alternatively, any help on how to handle ON_ENTER event and how it is triggered when data is entered by user into a cell of an editable ALV, would be really appreciated.
    Thanks,
    Adithya

    Hi
    I had one similar problem where user enter something into the editable cell and press enter. to handle this scenario i used WDDOBEFOREACTION  method of my view to call alv interface method check_data.
    if there is any change in the any table cell, it will fire an event on_data_check..which has paramater column name, row index and new and old value of the cell.
    you can handle this event and write your business logic in event handler method.
    hope it will help
    Regards
    Saurabh Garg

  • Add(Copy)/Change/Delete in editable ALV list

    I want to add a column to my ALV list where the user can enter an 'A' to Copy, 'C' to Change or 'D' to Delete. If the user enters an 'A', the code needs to insert a new line into the ALV list.  After the user makes the changes on the screen and selects Save, I need the program to perform different functions depending on whether the user entered an 'A', 'C' or 'D' in the column.  I have never used an editable ALV list and would like to have some sample code to get started.  Does anyone have any code similar to what I am trying to do?
    Thanks.
    Sandy

    Hi,
    check this code... if you trying with ALV FM, and editable grid then check this code.
    REPORT  ZTESTDFALV1                             .
    *Data Declaration
    DATA: BEGIN OF T_EKKO,
      EBELN TYPE EKPO-EBELN,
      EBELP TYPE EKPO-EBELP,
    *  FLAG TYPE C,
    *  HANDLE_STYLE TYPE LVC_T_STYL,
    END OF T_EKKO.
      DATA: GD_REPID LIKE SY-REPID, "Exists
      REF_GRID TYPE REF TO CL_GUI_ALV_GRID. "new
    DATA: BEGIN OF IT_EKKO OCCURS 0.
            INCLUDE STRUCTURE T_EKKO.
    DATA: END OF IT_EKKO.
    DATA: BEGIN OF IT_BACKUP OCCURS 0.
            INCLUDE STRUCTURE T_EKKO.
    DATA: END OF IT_BACKUP.
    *ALV data declarations
    TYPE-POOLS: SLIS.                                 "ALV Declarations
    DATA: FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
          GD_LAYOUT    TYPE SLIS_LAYOUT_ALV.
    *Start-of-selection.
    START-OF-SELECTION.
      PERFORM DATA_RETRIEVAL.
      PERFORM BUILD_FIELDCATALOG.
      PERFORM BUILD_LAYOUT.
      IT_BACKUP[] = IT_EKKO[].
      PERFORM DISPLAY_ALV_REPORT.
    *&      Form  build_fieldcatalog
    *       text
    FORM BUILD_FIELDCATALOG.
      REFRESH FIELDCATALOG.
      CLEAR FIELDCATALOG.
      FIELDCATALOG-FIELDNAME   = 'EBELN'.
      FIELDCATALOG-SELTEXT_M   = 'Purchase Order'.
      FIELDCATALOG-INPUT     = 'X'.
      FIELDCATALOG-EDIT     = 'X'.
      FIELDCATALOG-COL_POS     = 2.
      APPEND FIELDCATALOG.
      CLEAR  FIELDCATALOG.
      FIELDCATALOG-FIELDNAME   = 'EBELP'.
      FIELDCATALOG-SELTEXT_M   = 'PO Item'.
      FIELDCATALOG-COL_POS     = 3.
      APPEND FIELDCATALOG.
      CLEAR  FIELDCATALOG.
    ENDFORM.                    " BUILD_FIELDCATALOG
    *&      Form  BUILD_LAYOUT
    *       Build layout for ALV grid report
    FORM BUILD_LAYOUT.
      "Permet d'ajuster les colonnes au text
    *  gd_layout-colwidth_optimize = 'X'.
    *  GD_LAYOUT-TOTALS_TEXT       = 'Totals'(201).
    *  gd_layout-box_fieldname = 'SELECT'.
    *  gd_layout-box_tabname   = 'IT_EKKO'.
    ENDFORM.                    " BUILD_LAYOUT
    *&      Form  DISPLAY_ALV_REPORT
    *       Display report using ALV grid
    FORM DISPLAY_ALV_REPORT .
      GD_REPID = SY-REPID.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
           EXPORTING
                I_CALLBACK_PROGRAM        = GD_REPID
    *            i_callback_top_of_page   = 'TOP-OF-PAGE'
                I_CALLBACK_PF_STATUS_SET  = 'SET_PF_STATUS'
                I_CALLBACK_USER_COMMAND   = 'USER_COMMAND'
    *            i_grid_title             = 'My Title'
                IS_LAYOUT                 = GD_LAYOUT
                IT_FIELDCAT               = FIELDCATALOG[]
           TABLES
                T_OUTTAB                  = IT_EKKO
           EXCEPTIONS
                PROGRAM_ERROR             = 1
                OTHERS                    = 2.
      IF SY-SUBRC <> 0.
        WRITE:/ SY-SUBRC.
      ENDIF.
    ENDFORM.                    " DISPLAY_ALV_REPORT
    *&      Form  DATA_RETRIEVAL
    *       Retrieve data form EKPO table and populate itab it_ekko
    FORM DATA_RETRIEVAL.
      SELECT EBELN EBELP
       UP TO 10 ROWS
        FROM EKPO
        INTO CORRESPONDING FIELDS OF TABLE  IT_EKKO.
    ENDFORM.                    " DATA_RETRIEVAL
    *                      FORM SET_PF_STATUS                              *
    FORM SET_PF_STATUS USING RT_EXTAB   TYPE  SLIS_T_EXTAB.
      SET PF-STATUS 'STANDARD_FULLSCREEN1' EXCLUDING RT_EXTAB.
    ENDFORM.                    "set_pf_status
    *&      Form  user_command
    *       text
    *      -->R_UCOMM    text
    *      -->RS_SELFIELDtext
    FORM USER_COMMAND  USING R_UCOMM LIKE SY-UCOMM
                             RS_SELFIELD TYPE SLIS_SELFIELD.
    <b>
    *then insert the following code in your USER_COMMAND routine...
      IF REF_GRID IS INITIAL.
        CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
          IMPORTING
            E_GRID = REF_GRID.
      ENDIF.
      IF NOT REF_GRID IS INITIAL.
        CALL METHOD REF_GRID->CHECK_CHANGED_DATA
      ENDIF.</b>*modify
      CASE R_UCOMM.
        WHEN '&IC1'.
          CHECK RS_SELFIELD-TABINDEX > 0.
          IF RS_SELFIELD-VALUE EQ '6000000001'.
            CALL TRANSACTION 'ZDF2'.
          ENDIF.
        WHEN 'REFRESH'.
          READ TABLE IT_EKKO INDEX  RS_SELFIELD-TABINDEX.
          IF SY-SUBRC = 0.
            READ TABLE IT_BACKUP INDEX RS_SELFIELD-TABINDEX.
            IF SY-SUBRC = 0.
              IF IT_EKKO <> IT_BACKUP.
    *  then do your check
              ENDIF.
            ENDIF.
          ENDIF.
          PERFORM DATA_RETRIEVAL.
          RS_SELFIELD-REFRESH = 'X'.
      ENDCASE.
    ENDFORM.                    "user_command
    regards
    vijay

  • Editable ALV issue: When Delete/Modify a row, ztable doesnt reflect changes

    Greeting Fellow Abapers,.
    I have been running into an issue that I need some advice on.  I am allowing users to edit a Ztable via ALV.  When the quantity field is updated everything is fine. However, when the field "lic_plate" is edited the code appends another row into the Ztable instead of modifying it.  Also, when the delete row functionality of the grid is used the row is not deleted from the Ztable.
    Here is the ztable structure. The fields I allow to be edited are in BOLD...
    ZPALLET-VBELN
    ZPALLET-MATNR
    ZPALLET-LINE_NUM
    ZPALLET-LIC_PLATE
    ZPALLET-LOT_NUMBER
    ZPALLET-PAL_TYPE
    ZPALLET-MAN_DATE
    ZPALLET-QUANTITY
    ZPALLET-PROC_DATE
    Here is the source code that the APPEND is taking place...
    FORM save_database .
    Getting the selected rows index*
      CALL METHOD o_grid->get_selected_rows
        IMPORTING
          et_index_rows = i_selected_rows.
    Through the index capturing the values of selected rows*
      LOOP AT i_selected_rows INTO w_selected_rows.
        READ TABLE itab INTO wa INDEX w_selected_rows-index.
        IF sy-subrc EQ 0.
          MOVE-CORRESPONDING wa TO w_modified.
          APPEND w_modified TO i_modified.
        ENDIF.
      ENDLOOP.
    IF sy-subrc = 0.
        MODIFY zpallet FROM TABLE i_modified.
    ENDIF.
    ENDFORM.
    Please help. I am in your debt.
    ...as always, points will be awarded.
    Best,
    Dan

    Hello Dan
    When you are using an editable ALV for table maintenance you have to take care that the users
    - cannot edit the key fields of existing DB records   and
    - every new record (row) does not match any existing record (i.e. has identical key field values)
    Instead of relying on selected rows for the DB update I would recommend to store a "PBO image" of your data and compare this with the "PAI image" of the data as soon as the user pushes the SAVE button.
    Example:
    DATA:
      gt_outtab_pbo    TYPE   < your table type>,  " PBO image
      gt_outtab           TYPE   < your table type>.  " PAI image
    " 1. Select data from DB table and store in both itabs:
      SELECT * ... INTO TABLE gt_outtab.
      gt_outtab_pbo = gt_outtab.
    " 2. Display editable ALV list -> user modifies gt_outtab
    " 3. SAVE function requested
    " ... compare gt_outtab vs. gt_outtab_pbo
    " .... INSERT, UPDATE, or DELETE DB records
    " Finally set:
      gt_outtab_pbo = gt_outtab.
    " 2. User continues with editing
    In order to compare PBO vs. PAI data you may have a look at my sample coding:
    [Comparing Two Internal Tables - A Generic Approach|https://www.sdn.sap.com/irj/sdn/wiki?path=/display/snippets/comparing%2btwo%2binternal%2btables%2b-%2ba%2bgeneric%2bapproach]
    Regards,
      Uwe

  • My changes edited on editable ALV report are not transferring back to itab?

    Hello
    I was developed a heirarchila editable ALV by using FM 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'. The user will do some changes in the ITEMs (Z_VBAP_TABLE) on this heirarchila ALV report and presses the SAVE button.
    In my program am handling this SAVE command and even my break point is also triggering at SAVE, but my ITAB is not having the CHANGED/new data!! still it has the old data in it! How to capture the user changes done on the report? those changes are not tranferring back to my itab/prog! because, ineed to update Z_VBAP_TABLE with those changes
    Thank you

    Hi Raju,
    it is possible . But i know about your code.
       WHEN 'SAVE'(003).
        Lock the table
          CALL FUNCTION 'ENQUEUE_E_TABLE'
            EXPORTING
              mode_rstable   = 'E'
              tabname        = viewname
            EXCEPTIONS
              foreign_lock   = 1
              system_failure = 2
              OTHERS         = 3.
          IF sy-subrc <> 0.
            MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
          ENDIF.
          IF NOT grid1 IS INITIAL .
            CALL METHOD grid1->check_changed_data .
          ENDIF .
          SORT i_mod BY row.
          DELETE ADJACENT DUPLICATES  FROM i_mod COMPARING row.
          lh_norec = LINES( i_mod ).
          lh_total = lh_norec.
          SHIFT lh_total LEFT DELETING LEADING space.
    Standard Table Update
          IF i_mod[] IS NOT INITIAL.
            LOOP AT i_mod INTO lwa_mod.
              READ TABLE <i_itab> INTO <wa_tab> INDEX lwa_mod-row.
              IF sy-subrc = 0 .
                IF lh_flag NE 'X'.
                  MODIFY (viewname) FROM <wa_tab>.
                ELSE.
                  INSERT (viewname) FROM <wa_tab>.
                  IF sy-subrc NE 0.
                    MESSAGE 'DATA NOT SAVED' type 'I'.
                  ENDIF.
                ENDIF.
              ENDIF.
            ENDLOOP.
            CONCATENATE lh_total '  ' text-s01 INTO lh_succ SEPARATED BY space.
            MESSAGE 'Data Saved' TYPE 'I'.
    This i did a long back. Check your code . I created an alv that will display data from my table . In this the user can click in any line item and he can change any value and press save  that will save the value .
    Regards,
    Madhu.

  • Editable alv: add custom validation and display "errors" in protocol list

    Hi,
    What I want to do:
    PAI validation of editable alv with displaying error's in the protocol list by adding custom entries to the existing protocol object.
    What is my problem:
    After registering "data_changed event", the protocol list don't appear.
    My understanding is, that the object "er_data_changed" is passed by the event "data_changed"
    an so I thought I can add some more entries to the protocol list.
    After "de-registering" the "data_changed" event, the protocol appears with the standard errros messages (e.g. "input to numeric" by enter charachters)
    One more hint:
    By creating a new object "er_data_changed" in the handler method the protocol list works, but I would like to append entries to the object that was passed with the event.
    Probably I've misunderstand something, please help !
    My coding:
    PAI:
    trigger event "data_changed" -> calls handler method
      CALL METHOD r_myalv->check_changed_data
        IMPORTING
          e_valid = is_valid.
    stop processing
      IF is_valid NE 'X'.
        MESSAGE 'invalid input' TYPE 'E' .
      ENDIF.
    handler method:
    handle_data_changed FOR EVENT data_changed  OF cl_gui_alv_grid  IMPORTING e_ucomm
                                                                                    er_data_changed.
    METHOD handle_data_changed.
        data: ls_mod_cell type lvc_s_modi.
         CALL METHOD er_data_changed->add_protocol_entry
                    EXPORTING
                           i_msgid     = 'SU'
                           i_msgty     = 'E'
                           i_msgno     = '000'
                           i_msgv1     = 'This is a test !'
                           i_fieldname = ls_mod_cell-fieldname.
         er_data_changed->refresh_protocol( ).
         er_data_changed->DISPLAY_PROTOCOL( ).
    ENDMETHOD.                    "handle_data_changed

    Dear Olaf,
        If understood correctly, you want to Edit an ALV and do some data validations when some data is changed in an ALV.   To do this follow the following steps:
    1.   Before displaying ALV, Register the edit event.
    * Set cell modified to trigger data_changed
    CALL METHOD go_alv_grid->register_edit_event
    EXPORTING
    i_event_id = cl_gui_alv_grid=>mc_evt_modified.
    2.  Register the event DATA_CHANGED of class CL_GUI_ALV_GRID & handle the event.
    SET HANDLER lo_event_receiver->handle_data_changed FOR go_alv_grid.
    The event DATA_CHANGED of class CL_GUI_ALV_GRID has a parameter ER_DATA_CHANGED which is of type CL_ALV_CHANGED_DATA_PROTOCOL.
    This er_data_changed has internal table MT_MOD_CELLS(contains index of records changed ) & MP_MOD_ROWS(contains the changed row), using these update your internal table accordingly.
    DATA : wa_mod_cell TYPE lvc_s_modi.
    FIELD-SYMBOLS: <fs> TYPE table.
    LOOP AT er_data_changed->mt_mod_cells INTO wa_mod_cell.
    ASSIGN er_data_changed->mp_mod_rows->* TO <fs>.
    READ TABLE <fs> INTO wa_output INDEX wa_mod_cell-tabix.
    MODIFY lt_output FROM wa_output INDEX wa_mod_cell-row_id.
    ENDLOOP.
    3.   Here it self you can do the required data validations(No need of any PAI modules) as below.
    IF wa_orders-zfstfirmtyp = c_9.
    MESSAGE s288(zcsp).
    DELETE er_data_changed->mt_mod_cells.
    EXIT.
    ENDIF.
    Regards
    Kesava

  • Editable ALV with SAVE option

    Hi experts,
    Could you plz provede me an example for an EDITABLE ALV with the SAVE option. i.e. i could edit the ALV output and after the changes i should save the changes i made by clicking SAVE button.
    Thanks in advance
    Regards,
    Ram

    hi,
    check the sample code
    REPORT ZLAXMI_REPORT6 NO STANDARD PAGE HEADING
    MESSAGE-ID ZZ
    LINE-SIZE 132
    LINE-COUNT 65 .
    TABLES: MARA.
    TYPE-POOLS: SLIS.
    TYPES: BEGIN OF T_MARA,
    MATNR TYPE MARA-MATNR, "Material Number
    ERSDA TYPE MARA-ERSDA, "Creation date
    BRGEW TYPE MARA-BRGEW, "Gross weight
    NTGEW TYPE MARA-NTGEW, "Net weight
    MTART TYPE MARA-MTART, "Material type
    MBRSH TYPE MARA-MBRSH, "Industry Sector
    REC_SEL TYPE C , "checkbox
    END OF T_MARA.
    V A R I A B L E S
    DATA: V_REPID LIKE SY-REPID,
    V_FLAG(1) TYPE C.
    CONSTANTS :
    C_X(1) TYPE C VALUE 'X',
    C_PF_STATUS TYPE SLIS_FORMNAME VALUE 'F_SET_PF_STATUS',
    C_FC_DELETE(6) TYPE C VALUE 'DELETE',
    C_FC_MODIFY(6) TYPE C VALUE 'MODIFY',
    C_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'F_USER_COMMAND',
    C_USER_COMMAND_MODIFY TYPE SLIS_FORMNAME
    VALUE 'F_USER_COMMAND_MODIFY',
    C_ICON_DELETE TYPE ICON-NAME VALUE 'ICON_DELETE', " Icon,Delete'
    C_ICON_CANCEL TYPE ICON-NAME VALUE 'ICON_CANCEL', " Icon,Cancel'
    C_FC_SAVE(4) TYPE C VALUE 'SAVE'.
    *internal table declarations.
    DATA: IT_MARA TYPE STANDARD TABLE OF T_MARA WITH HEADER LINE,
    IT_MODIFY TYPE STANDARD TABLE OF T_MARA WITH HEADER LINE,
    IT_TEMP TYPE STANDARD TABLE OF MARA WITH HEADER LINE,
    *-ALV Internal Tables.
    *--Field Catalog
    IT_FIELDCAT TYPE STANDARD TABLE OF
    SLIS_FIELDCAT_ALV WITH HEADER LINE,
    *--Layout
    WA_LAYOUT TYPE SLIS_LAYOUT_ALV,
    *--Sort
    IT_SORT TYPE SLIS_T_SORTINFO_ALV,
    WA_SORT TYPE SLIS_SORTINFO_ALV ,
    **-Structure for excluding function codes
    WA_EXTAB TYPE SLIS_EXTAB,
    **-To hold function codes to be excluded in ALV toolbar
    IT_EXTAB TYPE SLIS_T_EXTAB.
    *selection screen.
    SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
    SELECT-OPTIONS: S_MATNR FOR MARA-MATNR,
    S_ERSDA FOR MARA-ERSDA.
    SELECTION-SCREEN: END OF BLOCK B1.
    *--Radio buttons to select either Display/Delete/Modify
    SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME
    TITLE TEXT-002.
    SELECTION-SCREEN : BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(20) TEXT-003.
    PARAMETERS: P_DISP RADIOBUTTON GROUP RAD1 DEFAULT 'X'.
    SELECTION-SCREEN : END OF LINE.
    SELECTION-SCREEN : BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(20) TEXT-005.
    PARAMETERS: P_UPD RADIOBUTTON GROUP RAD1.
    SELECTION-SCREEN : END OF LINE.
    SELECTION-SCREEN : BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(20) TEXT-004.
    PARAMETERS: P_DEL RADIOBUTTON GROUP RAD1.
    SELECTION-SCREEN : END OF LINE.
    SELECTION-SCREEN END OF BLOCK B2 .
    AT SELECTION-SCREEN.
    PERFORM VALIDATE_SCREEN.
    *start of selection
    START-OF-SELECTION.
    *clear the internal tables to be used.
    CLEAR: IT_MARA,IT_MARA[],
    V_FLAG.
    *get the data
    PERFORM GET_DATA.
    *end of selection
    END-OF-SELECTION.
    IF IT_MARA[] IS INITIAL.
    MESSAGE I000 WITH
    'No Records found for the given Selection Criteria'(012).
    ELSE.
    *do alv process
    V_REPID = SY-REPID.
    *--Sort the Output Fields
    PERFORM SORT_FIELDS.
    *--Build Field catalog for the Output fields
    PERFORM BUILD_FIELDCAT.
    *--Set the Layout for ALV
    PERFORM SET_LAYOUT.
    IF P_DISP = C_X.
    *--Exclude any Buttons on the Appn tool bar
    perform change_default_pf_status.
    MOVE C_FC_DELETE TO WA_EXTAB-FCODE. " DELETE button on ALV
    APPEND WA_EXTAB TO IT_EXTAB.
    MOVE C_FC_MODIFY TO WA_EXTAB-FCODE. " MODIFY button on ALV
    APPEND WA_EXTAB TO IT_EXTAB.
    ELSEIF P_UPD = C_X.
    *--Exclude DELETE Button on the appn tool bar
    MOVE C_FC_DELETE TO WA_EXTAB-FCODE. " DELETE button on ALV
    APPEND WA_EXTAB TO IT_EXTAB.
    ELSEIF P_DEL = C_X.
    *--Exclude MODIFY button on appn tool bar
    MOVE C_FC_MODIFY TO WA_EXTAB-FCODE. " MODIFY button on ALV
    APPEND WA_EXTAB TO IT_EXTAB.
    ENDIF.
    *--Exclude SAVE button for all options
    MOVE 'SAVE' TO WA_EXTAB-FCODE. " SAVE button on ALV
    APPEND WA_EXTAB TO IT_EXTAB.
    *--Display ALV output
    PERFORM LIST_DISPLAY TABLES IT_MARA
    USING C_USER_COMMAND.
    ENDIF.
    *& Form get_data
    text
    --> p1 text
    <-- p2 text
    FORM GET_DATA .
    SELECT MATNR
    ERSDA
    BRGEW
    NTGEW
    MTART
    MBRSH
    FROM MARA
    INTO TABLE IT_MARA
    WHERE MATNR IN S_MATNR
    AND ERSDA IN S_ERSDA.
    IF SY-SUBRC <> 0.
    *no records selected leave processing
    STOP.
    ENDIF.
    SORT IT_MARA.
    ENDFORM. " get_data
    *& Form sort_fields
    text
    --> p1 text
    <-- p2 text
    FORM SORT_FIELDS .
    CLEAR WA_SORT.
    WA_SORT-FIELDNAME = 'MATNR'.
    WA_SORT-SPOS = '1'.
    WA_SORT-UP = 'X'.
    APPEND WA_SORT TO IT_SORT.
    CLEAR WA_SORT.
    WA_SORT-FIELDNAME = 'ERSDA'.
    WA_SORT-SPOS = '2'.
    WA_SORT-UP = 'X'.
    APPEND WA_SORT TO IT_SORT.
    ENDFORM. " sort_fields
    *& Form build_fieldcat
    text
    --> p1 text
    <-- p2 text
    FORM BUILD_FIELDCAT .
    IT_FIELDCAT-COL_POS = '1'.
    IT_FIELDCAT-FIELDNAME = 'MATNR'.
    IT_FIELDCAT-KEY = 'X'.
    IT_FIELDCAT-OUTPUTLEN = '15'.
    IT_FIELDCAT-SELTEXT_L = 'Material number'(022).
    APPEND IT_FIELDCAT.
    CLEAR IT_FIELDCAT.
    IT_FIELDCAT-COL_POS = '2'.
    IT_FIELDCAT-FIELDNAME = 'ERSDA'.
    IT_FIELDCAT-KEY = 'X'.
    IT_FIELDCAT-OUTPUTLEN = '10'.
    IT_FIELDCAT-SELTEXT_L = 'Created on'(023).
    APPEND IT_FIELDCAT.
    CLEAR IT_FIELDCAT.
    IT_FIELDCAT-COL_POS = '3'.
    IT_FIELDCAT-FIELDNAME = 'BRGEW'.
    IT_FIELDCAT-OUTPUTLEN = '10'.
    IT_FIELDCAT-SELTEXT_L = 'GROSS WEIGHT'(024).
    APPEND IT_FIELDCAT.
    CLEAR IT_FIELDCAT.
    IT_FIELDCAT-COL_POS = '4'.
    IT_FIELDCAT-FIELDNAME = 'NTGEW'.
    IT_FIELDCAT-OUTPUTLEN = '15'.
    IT_FIELDCAT-SELTEXT_L = 'NET WEIGHT'(025).
    APPEND IT_FIELDCAT.
    CLEAR IT_FIELDCAT.
    IT_FIELDCAT-COL_POS = '5'.
    IT_FIELDCAT-FIELDNAME = 'MTART'.
    IT_FIELDCAT-OUTPUTLEN = '3'.
    IT_FIELDCAT-SELTEXT_L = 'Material type'(026).
    APPEND IT_FIELDCAT.
    CLEAR IT_FIELDCAT.
    IT_FIELDCAT-COL_POS = '6'.
    IT_FIELDCAT-FIELDNAME = 'MBRSH'.
    IT_FIELDCAT-OUTPUTLEN = '25'.
    IT_FIELDCAT-SELTEXT_L = 'Industry sector'(027).
    APPEND IT_FIELDCAT.
    CLEAR IT_FIELDCAT.
    IT_FIELDCAT-FIELDNAME = 'REC_SEL'.
    IT_FIELDCAT-NO_OUT = C_X.
    APPEND IT_FIELDCAT.
    CLEAR IT_FIELDCAT.
    ENDFORM. " build_fieldcat
    *& Form list_display
    text
    -->P_IT_MARA text
    -->P_C_USER_COMMAND text
    FORM LIST_DISPLAY TABLES P_IT_MARA
    USING P_USER_COMMAND TYPE SLIS_FORMNAME.
    CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
    EXPORTING
    I_CALLBACK_PROGRAM = V_REPID
    I_CALLBACK_PF_STATUS_SET = C_PF_STATUS
    I_CALLBACK_USER_COMMAND = P_USER_COMMAND
    IS_LAYOUT = WA_LAYOUT
    IT_FIELDCAT = IT_FIELDCAT[]
    IT_EXCLUDING = IT_EXTAB[]
    IT_SORT = IT_SORT[]
    TABLES
    T_OUTTAB = P_IT_MARA
    EXCEPTIONS
    PROGRAM_ERROR = 1
    OTHERS = 2.
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    ENDFORM. " list_display
    *& Form F_SET_PF_STATUS
    Set PF_STATUS STANDARD modifying the standard toolbar
    by excluding some buttons
    -->P_IT_EXTAB -- TABLE OF EXCLUDING FUNCTIONS
    FORM F_SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
    CLEAR : WA_EXTAB,
    IT_EXTAB.
    *--Set the Modified PF status for the ALV.
    SET PF-STATUS 'ALV_STATUS_01' EXCLUDING RT_EXTAB.
    ENDFORM. " SET_PF_STATUS
    *& Form f_user_command
    Handle user action on ALV toolbar
    FORM F_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
    RS_SELFIELD TYPE SLIS_SELFIELD.
    RS_SELFIELD-REFRESH = C_X.
    IF R_UCOMM = C_FC_DELETE.
    *--User Selected DELETE button.
    PERFORM DELETE_SELECTED_RECORDS.
    ELSEIF R_UCOMM = C_FC_MODIFY.
    *--If user selects MODIFY button.
    PERFORM CHANGE_RECORDS.
    ENDIF.
    ENDFORM. "F_USER_COMMAND
    *& Form POP_UP_CONFIRMATION
    text
    <--P_ANSWER text
    FORM POP_UP_CONFIRMATION
    CHANGING P_ANSWER TYPE C.
    DATA:
    L_TITLE(14) TYPE C, " Title of pop-up
    L_TXT_QUESTION(52) TYPE C, " Text displayed in pop-up
    L_DISP_CANCEL TYPE C, " Display 'Cancel' button?
    L_BTN1 TYPE ICON-NAME, " Icon on button 1
    L_BTN2 TYPE ICON-NAME. " Icon on button 2
    L_TITLE = 'Delete'(017). " delete
    L_TXT_QUESTION = 'Are you sure to delete?'(018).
    L_BTN1 = C_ICON_DELETE.
    L_BTN2 = C_ICON_CANCEL.
    **-Display pop-up asking user for confirmation
    CALL FUNCTION 'POPUP_TO_CONFIRM'
    EXPORTING
    TITLEBAR = L_TITLE
    TEXT_QUESTION = L_TXT_QUESTION
    TEXT_BUTTON_1 = 'Yes'
    ICON_BUTTON_1 = L_BTN1
    TEXT_BUTTON_2 = 'No'
    ICON_BUTTON_2 = L_BTN2
    DEFAULT_BUTTON = '2'
    DISPLAY_CANCEL_BUTTON = 'X'
    IMPORTING
    ANSWER = P_ANSWER
    EXCEPTIONS
    TEXT_NOT_FOUND = 1
    OTHERS = 2.
    IF SY-SUBRC <> 0.
    MESSAGE E000 WITH 'Error executing function module:'(019)
    'POPUP_TO_CONFIRM'.
    ENDIF.
    ENDFORM. "pop_up_confirmation
    *& Form set_layout
    text
    --> p1 text
    <-- p2 text
    FORM SET_LAYOUT .
    IF P_DEL = C_X OR P_UPD = C_X.
    *--Allow Input only if user choose 'UPDATE'/ 'DELETE' radio buttons
    WA_LAYOUT-BOX_FIELDNAME = 'REC_SEL'.
    WA_LAYOUT-BOX_TABNAME = 'IT_MARA'.
    ENDIF.
    *--Display Header based on the user selection
    IF P_DISP = C_X.
    WA_LAYOUT-WINDOW_TITLEBAR =
    'Display '(036).
    ELSEIF P_DEL = C_X.
    WA_LAYOUT-WINDOW_TITLEBAR =
    'Delete '(037).
    ELSEIF P_UPD = C_X.
    WA_LAYOUT-WINDOW_TITLEBAR =
    'Change '(038).
    ENDIF.
    ENDFORM. " set_layout
    *& Form change_default_pf_status
    text
    --> p1 text
    <-- p2 text
    FORM CHANGE_DEFAULT_PF_STATUS .
    MOVE C_FC_DELETE TO WA_EXTAB-FCODE. " DELETE button on ALV
    APPEND WA_EXTAB TO IT_EXTAB.
    MOVE C_FC_MODIFY TO WA_EXTAB-FCODE. " MODIFY button on ALV
    APPEND WA_EXTAB TO IT_EXTAB.
    ENDFORM. " change_default_pf_status
    *& Form f_user_command
    Handle user action on ALV toolbar
    FORM F_USER_COMMAND_MODIFY USING R_UCOMM LIKE SY-UCOMM "#EC *
    RS_SELFIELD TYPE SLIS_SELFIELD.
    DATA : L_ANSWER TYPE C. "#EC *
    IF R_UCOMM = C_FC_SAVE.
    *user selected save button
    READ TABLE IT_MODIFY WITH KEY REC_SEL = 'X'.
    *check if user selected atleast one line.
    IF SY-SUBRC <> 0.
    MESSAGE I000 WITH 'No record(s) Selected to Modify'(016).
    EXIT.
    ENDIF.
    LOOP AT IT_MODIFY WHERE REC_SEL = 'X'.
    *--Check the entered values are valid or not.
    IF NOT ( it_modify-status = 'A' OR
    it_modify-status = 'C' OR
    it_modify-status = 'E' ).
    *--User Entered invalid value for STATUS field,so Display Error Msg
    CLEAR R_UCOMM.
    MESSAGE e000 WITH 'Invalid value '''(031)
    '' for Status in the Record # '(032)
    sy-tabix.
    ENDIF.
    ENDLOOP.
    CLEAR: IT_TEMP,
    IT_TEMP[].
    LOOP AT IT_MODIFY WHERE REC_SEL = 'X'.
    MOVE-CORRESPONDING IT_MODIFY TO IT_TEMP.
    APPEND IT_TEMP.
    CLEAR IT_TEMP.
    ENDLOOP.
    *--start new code
    DATA : IT_TEMP2 LIKE STANDARD TABLE OF MARA WITH HEADER LINE.
    SELECT * FROM MARA
    INTO TABLE IT_TEMP2
    FOR ALL ENTRIES IN IT_TEMP
    WHERE MATNR = IT_TEMP-MATNR.
    IF SY-SUBRC = 0.
    LOOP AT IT_MODIFY WHERE REC_SEL = 'X'.
    READ TABLE IT_TEMP2 WITH KEY MATNR = IT_MODIFY-MATNR.
    IF SY-SUBRC = 0.
    IT_TEMP2-NTGEW = IT_MODIFY-NTGEW.
    IT_TEMP2-BRGEW = IT_MODIFY-BRGEW.
    MODIFY IT_TEMP2 INDEX SY-TABIX.
    ENDIF.
    ENDLOOP.
    ENDIF.
    *modify mara table with the changed values
    MODIFY MARA FROM TABLE IT_TEMP2 .
    *--end new code
    IF SY-SUBRC = 0.
    COMMIT WORK AND WAIT.
    *--Display message with Success in Updating database
    MESSAGE I000 WITH SY-DBCNT
    ' Record(s) has been Updated'(020).
    CLEAR :
    IT_MARA,
    IT_MARA[].
    *get-data again from database.
    PERFORM GET_DATA.
    RS_SELFIELD-REFRESH = C_X.
    ELSE.
    *--Error occurred
    MESSAGE I000 WITH 'Error occured in Modifying the database'(021).
    ENDIF.
    ENDIF.
    ENDFORM. "f_user_command_modify
    *& Form validate_screen
    text
    --> p1 text
    <-- p2 text
    FORM VALIDATE_SCREEN .
    DATA : LV_MATNR LIKE MARA-MATNR.
    *--validate product
    IF NOT S_MATNR[] IS INITIAL.
    SELECT MATNR
    INTO MARA-MATNR
    FROM MARA
    WHERE MATNR IN S_MATNR.
    ENDSELECT.
    IF SY-SUBRC <> 0.
    *--Error
    MESSAGE E000 WITH 'Invalid Material'(034).
    ENDIF.
    ENDIF.
    ENDFORM. " validate_screen
    *& Form delete_records
    text
    --> p1 text
    <-- p2 text
    FORM DELETE_RECORDS .
    LOOP AT IT_MARA.
    MOVE-CORRESPONDING IT_MARA TO IT_TEMP.
    APPEND IT_TEMP.
    CLEAR IT_TEMP.
    ENDLOOP.
    DELETE MARA FROM TABLE IT_TEMP.
    IF SY-SUBRC = 0.
    *--Successfully selected records Deleted.
    COMMIT WORK AND WAIT.
    *--Display Success Message to the user
    MESSAGE I000 WITH SY-DBCNT
    ' Record(s) deleted Successfully'(010).
    ELSE.
    *--Error occured in deletion
    MESSAGE I000 WITH 'Error occured in Deleting the Record(s)'(011).
    ENDIF.
    CLEAR: IT_MARA,
    IT_MARA[],
    IT_TEMP,
    IT_TEMP[].
    V_FLAG = C_X.
    STOP.
    ENDFORM. " delete_records
    *& Form delete_selected_records
    text
    --> p1 text
    <-- p2 text
    FORM DELETE_SELECTED_RECORDS .
    DATA : L_ANSWER(1) TYPE C.
    READ TABLE IT_MARA WITH KEY REC_SEL = C_X.
    IF SY-SUBRC <> 0.
    MESSAGE I000 WITH 'No record(s) Selected to Delete'(013).
    EXIT.
    ELSE.
    *--Ask for delete confirmation
    PERFORM POP_UP_CONFIRMATION
    CHANGING L_ANSWER.
    IF L_ANSWER = '1'. " 'Yes'
    CLEAR: IT_TEMP,
    IT_TEMP[].
    LOOP AT IT_MARA WHERE REC_SEL = 'X'.
    MOVE-CORRESPONDING IT_MARA TO IT_TEMP.
    APPEND IT_TEMP.
    CLEAR IT_TEMP.
    ENDLOOP.
    DELETE MARA FROM TABLE IT_TEMP.
    IF SY-SUBRC = 0.
    *--Successfully selected records Deleted.
    COMMIT WORK AND WAIT.
    *--Display completed work information to the user
    MESSAGE I000 WITH SY-DBCNT
    ' Record(s) deleted Successfully'(014).
    *--Clear the Internal tables
    CLEAR: IT_MARA,
    IT_MARA[].
    *--Reselects entries from Database again & display in ALV
    PERFORM GET_DATA.
    ELSE.
    *--Error occured
    MESSAGE I000 WITH
    'Error occured in Deleting the Record(s)'(015).
    ENDIF.
    ENDIF.
    ENDIF.
    ENDFORM. " delete_selected_records
    *& Form change_records
    text
    --> p1 text
    <-- p2 text
    FORM CHANGE_RECORDS .
    READ TABLE IT_MARA WITH KEY REC_SEL = 'X'.
    *--check user selected at least 1 record to MODIFY or not
    IF SY-SUBRC <> 0.
    MESSAGE I000 WITH 'No record(s) Selected to Modify'(016).
    EXIT.
    ELSE.
    CLEAR : IT_MODIFY,
    IT_MODIFY[].
    LOOP AT IT_MARA WHERE REC_SEL = 'X'.
    IT_MODIFY = IT_MARA.
    APPEND IT_MODIFY.
    CLEAR IT_MODIFY.
    ENDLOOP.
    *--Change PF status for this new ALV list.
    PERFORM CHANGE_PF_STATUS_AGAIN.
    *--Change Field Catalog to make INPUT enabled.
    READ TABLE IT_FIELDCAT WITH KEY FIELDNAME = 'NTGEW'.
    IT_FIELDCAT-INPUT = C_X.
    MODIFY IT_FIELDCAT INDEX SY-TABIX.
    *--Call ALV LIST DISPLAY with this new values.
    PERFORM LIST_DISPLAY TABLES IT_MODIFY
    USING C_USER_COMMAND_MODIFY.
    ENDIF.
    ENDFORM. " change_records
    *& Form change_pf_status_again
    text
    --> p1 text
    <-- p2 text
    FORM CHANGE_PF_STATUS_AGAIN .
    MOVE C_FC_DELETE TO WA_EXTAB-FCODE. " DELETE button on ALV
    APPEND WA_EXTAB TO IT_EXTAB.
    MOVE C_FC_MODIFY TO WA_EXTAB-FCODE. " MODIFY button on ALV
    APPEND WA_EXTAB TO IT_EXTAB.
    ENDFORM. " change_pf_status_again

  • Save data in editable ALV

    Hi all,
    I am using an editable ALV in webdynpro using which I would like to save some data to a table. In the list of standard functions, I see only options like 'Insert row', 'Delete row' etc. There is no option to Save the edited data.
    Even if I declare a user defined function, how do I specify the action it would trigger? Any help would be greatly appreciated. Thanks in advance.
    Regards,
    Nithya

    Hi Nithya,
    Once you edit an ALV, the data is automatically updated to the context node, you map in the DATA field of controller usage (of the component usage).
    If you want to trigger event for change in ALV, see the below tutorial.
    <a href="https://www.sdn.sap.comhttp://www.sdn.sap.comhttp://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/bd28494a-0801-0010-45a3-fc359d82d3e8">Using Events with ALV Tables
    in Web Dynpro for ABAP</a>
    If you want to trigger a event for user defined function,
    Create a event handler method in the view. Specify event,  
       ON_FUNCTION of the interface controller of ALV for the event handler method.
    The importing parameter r_param of the method contains unique ID of the
       function for which the UI element is assigned.
    For reference see the below tutorial. It will be useful.
    <a href="https://www.sdn.sap.comhttp://www.sdn.sap.comhttp://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/uuid/101df93f-4b5c-2910-14aa-9eb0338c2110">Generating Self-Defined Functions for ALV in Web Dynpro for ABAP</a>
    Hope it Helps
    Rakesh

  • Doubt in Editable ALV

    Dear Friends,
    I have editable ALV and capturing there save event its working properly.
    so my problem is..
    when i change there cell values can i capture that event like follows.
    in my editable column only can be change 0-100 value cant be <0 or >100 values.
    is it possible ....
    please reply me....if possible give some sample plz....
    Thanks in Advance

    Hi Nelson,
    Check out this code.
    *& Report  ZST_ALV_DATA_CHANGE_EVENT
    REPORT  ZST_ALV_DATA_CHANGE_EVENT.
          CLASS lcl_grid DEFINITION
    class lcl_grid DEFINITION.
      PUBLIC SECTION.
        methods: handle_data_changed
                 for event data_changed of cl_gui_alv_grid
                 IMPORTING er_data_changed.
    endclass.                    "lcl_grid DEFINITION
          CLASS lcl_grid IMPLEMENTATION
    class lcl_grid IMPLEMENTATION.
      method handle_data_changed.
        perform validation using er_data_changed.
      endmethod.                    "handle_data_changed
    endclass.                    "lcl_grid IMPLEMENTATION
    types: begin of ty_itab,
           vbeln  TYPE vbap-vbeln,
           posnr  TYPE vbap-posnr,
           netwr  TYPE vbap-netwr,
          end of ty_itab.
    data: lt_itab TYPE TABLE OF ty_itab,
          lw_itab TYPE ty_itab.
    data: lt_fcat type lvc_t_fcat,
          lw_fcat TYPE lvc_s_fcat.
    data: l_grid    TYPE REF TO cl_gui_alv_grid,
          l_custom  TYPE REF TO cl_gui_custom_container,
          l_class   TYPE ref to lcl_grid.
    start-of-selection.
      select vbeln
             posnr
             netwr
             from vbap
             into table lt_itab
             up to 50 rows.
      delete lt_itab where posnr ne '000010'.
      perform build_fieldcatalog.
      call screen 200.
    *&      Module  STATUS_0200  OUTPUT
          text
    MODULE STATUS_0200 OUTPUT.
      SET PF-STATUS 'ZST_GUI'.
    SET TITLEBAR 'xxx'.
      if l_custom is initial.
        CREATE OBJECT L_CUSTOM
          EXPORTING
           PARENT                      =
            CONTAINER_NAME              = 'CUSTOM'
           STYLE                       =
           LIFETIME                    = lifetime_default
           REPID                       =
           DYNNR                       =
           NO_AUTODEF_PROGID_DYNNR     =
          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.
          MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                     WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
        CREATE OBJECT L_GRID
          EXPORTING
       I_SHELLSTYLE      = 0
       I_LIFETIME        =
            I_PARENT          = l_custom
       I_APPL_EVENTS     = space
       I_PARENTDBG       =
       I_APPLOGPARENT    =
       I_GRAPHICSPARENT  =
       I_NAME            =
       I_FCAT_COMPLETE   = SPACE
    EXCEPTIONS
       ERROR_CNTL_CREATE = 1
       ERROR_CNTL_INIT   = 2
       ERROR_CNTL_LINK   = 3
       ERROR_DP_CREATE   = 4
       others            = 5
        IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
        CALL METHOD L_GRID->SET_TABLE_FOR_FIRST_DISPLAY
    EXPORTING
       I_BUFFER_ACTIVE               =
       I_BYPASSING_BUFFER            =
       I_CONSISTENCY_CHECK           =
       I_STRUCTURE_NAME              =
       IS_VARIANT                    =
       I_SAVE                        =
       I_DEFAULT                     = 'X'
       IS_LAYOUT                     =
       IS_PRINT                      =
       IT_SPECIAL_GROUPS             =
       IT_TOOLBAR_EXCLUDING          =
       IT_HYPERLINK                  =
       IT_ALV_GRAPHICS               =
       IT_EXCEPT_QINFO               =
       IR_SALV_ADAPTER               =
          CHANGING
            IT_OUTTAB                     = lt_itab[]
            IT_FIELDCATALOG               = lt_fcat[]
       IT_SORT                       =
       IT_FILTER                     =
    EXCEPTIONS
       INVALID_PARAMETER_COMBINATION = 1
       PROGRAM_ERROR                 = 2
       TOO_MANY_LINES                = 3
       others                        = 4
        IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
        create OBJECT l_class.
      endif.
    ENDMODULE.                 " STATUS_0200  OUTPUT
    *&      Module  USER_COMMAND_0200  INPUT
          text
    MODULE USER_COMMAND_0200 INPUT.
      if sy-ucomm = 'EXIT'.
        leave program.
      elseif sy-ucomm = 'SAVE'.
        set HANDLER l_class->handle_data_changed for l_grid.
        data: l_char TYPE c.
        CALL METHOD L_GRID->CHECK_CHANGED_DATA
          IMPORTING
            E_VALID = l_char.
      endif.
    ENDMODULE.                 " USER_COMMAND_0200  INPUT
    *&      Form  BUILD_FIELDCATALOG
          text
    -->  p1        text
    <--  p2        text
    FORM BUILD_FIELDCATALOG .
      clear lw_fcat.
      lw_fcat-fieldname = 'VBELN'.
      lw_fcat-scrtext_l = 'Sales document'.
      append lw_fcat to lt_fcat.
      clear lw_fcat.
      lw_fcat-fieldname = 'POSNR'.
      lw_fcat-scrtext_l = 'Sales document'.
      append lw_fcat to lt_fcat.
      clear lw_fcat.
      lw_fcat-fieldname = 'NETWR'.
      lw_fcat-scrtext_l = 'Quantity'.
      lw_fcat-edit      = 'X'.
      append lw_fcat to lt_fcat.
    ENDFORM.                    " BUILD_FIELDCATALOG
    *&      Form  VALIDATION
          text
         -->P_ER_DATA_CHANGED  text
    FORM VALIDATION  USING    er_data_changed TYPE REF TO
    cl_alv_changed_data_protocol.
      data: temp type vbap-netwr.
      DATA: ls_good TYPE lvc_s_modi.
    DATA wa LIKE LINE OF lt_good_cells.
      CALL METHOD l_grid->register_edit_event
        EXPORTING
          i_event_id = cl_gui_alv_grid=>mc_evt_modified.
      LOOP AT er_data_changed->mt_good_cells INTO ls_good.
        CASE ls_good-fieldname.
          WHEN 'NETWR'. "Your fieldname
          CALL METHOD er_data_changed->get_cell_value "Get the changed value
          EXPORTING
          i_row_id = ls_good-row_id
          i_fieldname = ls_good-fieldname
          IMPORTING
          e_value = temp. "Your temp variable
            if temp > 1000000.
    message e000(8i) with 'amount should not be greater than 200'.
            endif.
            "Make your validations here.
        ENDCASE.
      endloop.
    ENDFORM.                    " VALIDATION
    in the ZST_GUI
    there are two function code 'SAVE' and 'EXIT'.
    regards,
    Santosh Thorat

Maybe you are looking for

  • Problem with adding text area in scroll pane

    hi , i have been facing this funny problem , but cant able to get solution. the problem is i am trying to add text area in scroll pane , but when i add textarea in scroll pane using scrollpane.add(textarea) that text area remain disable always. i tri

  • Help with DSP settings in TDM

    Can anyone help me figure out the different settings? In ProTools everything is clear but in Logic I don't understand which setting that correspond to which sample rate etc ... And yes.... I've read the manuals.... 16 Tracks (1 DSP) 32 Tracks (1 DSP)

  • ICM_HTTP_CONNECTION_FAILED Fehlercode: 400

    Hi , I get the error  ICM_HTTP_CONNECTION_FAILED Fehlercode: 400 when I try to send the XML contents.could somebody tell me what could be wrong?I have set up the HTTP connection and it seems to be ok. Please provide your comments. <?xml version="1.0"

  • Window position problem

    Hi everyone, I am having problems with window position. If my portal is set to english language, there are no problem. If my portal is set to hebrew language, I have troubles with position of windows. Some windows are moved to left, some are moved to

  • Jar file name Required for IApplicationPropertiesService class file

    Hi    I am using EP6 SP15, Please let me know the jar file name for IApplicationPropertiesService.class Regards Ganesan S