Professional Documents
Culture Documents
t_outtab
= <dyn_table>
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
IF sy-subrc <> 0.
ENDIF.
*&-----------------------------------------------------------------*
*&
Form SET_PF_STATUS
*&-----------------------------------------------------------------*
*
Setting custom PF-Status
*------------------------------------------------------------------*
*
-->RT_EXTAB
Excluding table
*------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'Z_STANDARD'.
ENDFORM.
"SET_PF_STATUS
*&----------------------------------------------------------------*
*&
Form user_command
*&-----------------------------------------------------------------*
*
Handling custom function codes
*------------------------------------------------------------------*
*
-->R_UCOMM
Function code value
*
-->RS_SELFIELD Info. of cursor position in ALV
*------------------------------------------------------------------*
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_PDF_JG'
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
Selection screen:
Output: