Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Report zalv

440 views

Published on

Published in: Business, Technology
  • Be the first to comment

Report zalv

  1. 1. *&---------------------------------------------------------------------* *& Report ZALV_D1 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZALV_D1. TYPE-POOLS: slis. * INTERNAL TABLES/WORK AREAS/VARIABLES * ******************************************************************* DATA: i_fieldcat TYPE slis_t_fieldcat_alv, i_index TYPE STANDARD TABLE OF i WITH HEADER LINE, w_field TYPE slis_fieldcat_alv, p_table LIKE dd02l-tabname, dy_table TYPE REF TO data, dy_tab TYPE REF TO data, dy_line TYPE REF TO data. * FIELD-SYMBOLS * ******************************************************************* FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE, <dyn_wa> TYPE ANY, <dyn_field> TYPE ANY, <dyn_tab_temp> TYPE STANDARD TABLE. * SELECTION SCREEN * ******************************************************************* PARAMETERS: tabname(30) TYPE c, lines(5) TYPE n. * START-OF-SELECTION * ******************************************************************* START-OF-SELECTION. p_table = tabname. * entered in the selection screen CREATE DATA dy_table TYPE STANDARD TABLE OF (p_table). ASSIGN dy_table->* TO <dyn_table>. IF sy-subrc <> 0. MESSAGE i000(z_zzz_ca_messages) WITH ' No table found'. LEAVE TO LIST- PROCESSING. ENDIF. * Create workarea for the table CREATE DATA dy_line LIKE LINE OF <dyn_table>. ASSIGN dy_line->* TO <dyn_wa>. CREATE DATA dy_tab TYPE STANDARD TABLE OF (p_table). ASSIGN dy_tab->* TO <dyn_tab_temp>. SORT i_fieldcat BY col_pos. SELECT * FROM (p_table) INTO TABLE <dyn_table> UP TO lines ROWS. REFRESH <dyn_tab_temp>. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callback_program = sy-repid i_structure_name = p_table i_callback_user_command = 'USER_COMMAND' i_callback_pf_status_set = 'SET_PF_STATUS' TABLES t_outtab = <dyn_table> EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. ENDIF. *& Form SET_PF_STATUS *&-----------------------------------------------------------------*
  2. 2. * 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. *& 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. DATA: li_tab TYPE REF TO data, l_line TYPE REF TO data. 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 '&IC1'. READ TABLE <dyn_table> ASSIGNING <dyn_wa> INDEX rs_selfield-tabindex. IF sy-subrc = 0. APPEND <dyn_wa> TO <l_tab>. 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. w_field-input = 'X'. MODIFY i_fieldcat FROM w_field TRANSPORTING input WHERE key IS INITIAL. ENDIF. 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 TABLE <l_tab> INDEX 1 INTO <l_wa>. * 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.
  3. 3. ENDIF. ENDIF. WHEN 'SAVE'. SORT i_index. DELETE ADJACENT DUPLICATES FROM i_index. LOOP AT i_index. * 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. 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 (p_table) FROM TABLE <dyn_tab_temp>. REFRESH <dyn_tab_temp>. CALL FUNCTION 'DEQUEUE_E_TABLE' EXPORTING mode_rstable = 'E' tabname = p_table. ENDIF. ENDCASE. rs_selfield-refresh = 'X'.ENDFORM. "user_command

×