Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Saving editable column contents in Std. Table using ALV

Former Member
0 Kudos

Hi All,

I developed a ALV report which displays list of sales orders of particular customer, in this report created by name is editable column. Now i want to save the created by name after user changes the contents of this column and click on save button. I am getting all the data to be saved in field "RS_SELFIELD" (RS_SELFIELD TYPE SLIS_SELFIELD) Kindly help me to get out of this issue.

Advance thanks for your response.

2 REPLIES 2

mithun_shetty4
Contributor
0 Kudos

Try this code.


FORM user_command  USING    r_ucomm LIKE sy-ucomm
        			    rs_selfield TYPE slis_selfield.

* Local data declaration
  DATA: li_tab TYPE REF TO data,
        l_line TYPE REF TO data.

* Local field-symbols
  FIELD-SYMBOLS:<l_tab> TYPE table,
                <l_wa>  TYPE ANY.

* Create table
  CREATE DATA li_tab TYPE STANDARD TABLE OF (p_table).
  ASSIGN li_tab->* TO <l_tab>.

* Create workarea
  CREATE DATA l_line LIKE LINE OF <l_tab>.
  ASSIGN l_line->* TO <l_wa>.

  CASE r_ucomm.

*   When a record is selected
    WHEN '&IC1'.

*     Read the selected record
      READ TABLE <dyn_table> ASSIGNING <dyn_wa> INDEX
      rs_selfield-tabindex.

      IF sy-subrc = 0.

*       Store the record in an internal table
        APPEND <dyn_wa> TO <l_tab>.

*       Fetch the field catalog info
        CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
          EXPORTING
            i_program_name         = 'Z_DEMO_ALV'
            i_structure_name       = p_table
          CHANGING
            ct_fieldcat            = i_fieldcat
          EXCEPTIONS
            inconsistent_interface = 1
            program_error          = 2
            OTHERS                 = 3.
        IF sy-subrc = 0.

*         Make all the fields input enabled except key fields
          w_field-input = 'X'.

          MODIFY i_fieldcat FROM w_field TRANSPORTING input
          WHERE key IS INITIAL.

        ENDIF.

*       Display the record for editing purpose
        CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
          EXPORTING
            i_callback_program    = sy-repid
            i_structure_name      = p_table
            it_fieldcat           = i_fieldcat
            i_screen_start_column = 10
            i_screen_start_line   = 15
            i_screen_end_column   = 200
            i_screen_end_line     = 20
          TABLES
            t_outtab              = <l_tab>
          EXCEPTIONS
            program_error         = 1
            OTHERS                = 2.

        IF sy-subrc = 0.

*         Read the modified data
          READ TABLE <l_tab> INDEX 1 INTO <l_wa>.

*         If the record is changed then track its index no.
*         and populate it in an internal table for future
*         action
          IF sy-subrc = 0 AND <dyn_wa> <> <l_wa>.
            <dyn_wa> = <l_wa>.
            i_index = rs_selfield-tabindex.
            APPEND i_index.
          ENDIF.
        ENDIF.

      ENDIF.

*   When save button is pressed
    WHEN 'SAVE'.

*     Sort the index table
      SORT i_index.

*     Delete all duplicate records
      DELETE ADJACENT DUPLICATES FROM i_index.

      LOOP AT i_index.

*       Find out the changes in the internal table
*       and populate these changes in another internal table
        READ TABLE <dyn_table> ASSIGNING <dyn_wa> INDEX i_index.
        IF sy-subrc = 0.
          APPEND <dyn_wa> TO <dyn_tab_temp>.
        ENDIF.

      ENDLOOP.

*     Lock the table
      CALL FUNCTION 'ENQUEUE_E_TABLE'
        EXPORTING
          mode_rstable   = 'E'
          tabname        = p_table
        EXCEPTIONS
          foreign_lock   = 1
          system_failure = 2
          OTHERS         = 3.

      IF sy-subrc = 0.

*       Modify the database table with these changes
        MODIFY (p_table) FROM TABLE <dyn_tab_temp>.

        REFRESH <dyn_tab_temp>.

*       Unlock the table
        CALL FUNCTION 'DEQUEUE_E_TABLE'
          EXPORTING
            mode_rstable = 'E'
            tabname      = p_table.

      ENDIF.
  ENDCASE.

  rs_selfield-refresh = 'X'.

ENDFORM.                    "user_command

Former Member
0 Kudos

From your post I understand that changed data on the ALV is now available in the RS_SELFIELD structure.

Now you can update the standard table(Here VBAK as sales orders are displayed) through a BAPI.

BAPI that can be used for updating created by Name field in the sales order is 'BAPI_SALESORDER_CHANGE'.

Here you can pass the sales order number and update the header strucute with fields which needs to be updated(Here created by Name).

Hope this post will help you to solve the issue.

Let me know does this solved your problem.

Regards

Ashesh