REPORT z_alv_sapscripts. *---------------------------------------------------------------------* * ALV List of Sapscript Forms * *---------------------------------------------------------------------* * Author : Michel PIOUD - Updated 05-Feb-09 * * HomePage : http://www.oocities.org/mpioud/Abap_programs.html * *---------------------------------------------------------------------* * Macro definition DEFINE mac_line. selection-screen : begin of line, comment 10(20) v_&1 for field &2. select-options &2 for &3. selection-screen end of line. END-OF-DEFINITION. *---------------------------------------------------------------------* TYPE-POOLS slis. " ALV Global types *---------------------------------------------------------------------* CONSTANTS : c_x VALUE 'X', c_refresh TYPE syucomm VALUE '&REFRESH'. *---------------------------------------------------------------------* TYPES : BEGIN OF ty_s_data. INCLUDE TYPE stxh. TYPES : devclass TYPE tadir-devclass, tdline TYPE tline-tdline, checkbox TYPE xfeld, END OF ty_s_data. DATA : gs_dummy_data TYPE ty_s_data, gt_data TYPE TABLE OF ty_s_data. *---------------------------------------------------------------------* * Select-Options / Parameters SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 10(20) v_1 FOR FIELD s_mandt. "#EC NEEDED SELECT-OPTIONS s_mandt FOR gs_dummy_data-mandt DEFAULT sy-mandt MATCHCODE OBJECT ddsef4clnt. SELECTION-SCREEN END OF LINE. mac_line 2 s_fname gs_dummy_data-tdname. "#EC NEEDED SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 10(20) v_3 FOR FIELD s_luser. "#EC NEEDED SELECT-OPTIONS s_luser FOR gs_dummy_data-tdluser MATCHCODE OBJECT user_comp. SELECTION-SCREEN END OF LINE. mac_line 4 s_ldate gs_dummy_data-tdldate. "#EC NEEDED SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 10(20) v_5 FOR FIELD s_fuser. "#EC NEEDED SELECT-OPTIONS s_fuser FOR gs_dummy_data-tdfuser MATCHCODE OBJECT user_comp. SELECTION-SCREEN END OF LINE. mac_line 6 s_fdate gs_dummy_data-tdfdate. "#EC NEEDED mac_line 7 s_dvclss gs_dummy_data-devclass. "#EC NEEDED mac_line 8 s_spras gs_dummy_data-tdspras. "#EC NEEDED SELECTION-SCREEN : SKIP, BEGIN OF LINE, COMMENT 1(35) v_21 FOR FIELD p_string. "#EC NEEDED PARAMETERS p_string TYPE tdtitle. SELECTION-SCREEN :END OF LINE, SKIP, BEGIN OF LINE, COMMENT 1(35) v_20 FOR FIELD p_max. "#EC NEEDED PARAMETERS p_max(3) TYPE n DEFAULT '200' OBLIGATORY. SELECTION-SCREEN END OF LINE. *---------------------------------------------------------------------* INITIALIZATION. PERFORM f_initialization. *---------------------------------------------------------------------* START-OF-SELECTION. PERFORM f_read_data. *---------------------------------------------------------------------* END-OF-SELECTION. PERFORM f_display_data. *---------------------------------------------------------------------* * Form F_INITIALIZATION *---------------------------------------------------------------------* FORM f_initialization. DATA : ls_fname LIKE LINE OF s_fname, ls_dvclss LIKE LINE OF s_dvclss. v_1 = 'Client'. v_2 = 'Sapscript Form Name'. v_3 = 'Last changed by'. v_4 = 'Changed on'. v_5 = 'Created by'. v_6 = 'Created on'. v_7 = 'Devlopment Class'. v_8 = 'Language'. v_20 = 'Maximum number of selected entries'. v_21 = 'String'. CONCATENATE 'ICP' 'Z*' INTO ls_fname. APPEND ls_fname TO s_fname. CONCATENATE 'ICP' 'Z*' INTO ls_dvclss. APPEND ls_dvclss TO s_dvclss. ENDFORM. " F_INITIALIZATION *---------------------------------------------------------------------* * Form F_READ_DATA *---------------------------------------------------------------------* FORM f_read_data. DATA ls_address TYPE addr3_val. FIELD-SYMBOLS : <ls_data> TYPE ty_s_data. * Read data from STXH SELECT * UP TO p_max ROWS INTO CORRESPONDING FIELDS OF TABLE gt_data FROM tadir AS t JOIN stxh AS s ON t~obj_name = s~tdname CLIENT SPECIFIED WHERE pgmid = 'R3TR' AND object = 'FORM' AND tdobject = 'FORM' AND tdid <> 'DEF' AND tdname IN s_fname AND tdluser IN s_luser AND tdfuser IN s_fuser AND tdldate IN s_ldate AND devclass IN s_dvclss AND tdspras IN s_spras AND mandt IN s_mandt. * Sort to improve performance of FM SUSR_USER_ADDRESS_READ SORT gt_data BY tdluser. LOOP AT gt_data ASSIGNING <ls_data>. * Get user address data CALL FUNCTION 'SUSR_USER_ADDRESS_READ' EXPORTING user_name = <ls_data>-tdluser "#EC IMPORTING user_address = ls_address EXCEPTIONS user_address_not_found = 1 OTHERS = 2. IF sy-subrc = 0. CONCATENATE ls_address-name_last ls_address-name_first INTO <ls_data>-tdluser SEPARATED BY space. ENDIF. * Get user address data CALL FUNCTION 'SUSR_USER_ADDRESS_READ' EXPORTING user_name = <ls_data>-tdfuser "#EC IMPORTING user_address = ls_address EXCEPTIONS user_address_not_found = 1 OTHERS = 2. IF sy-subrc = 0. CONCATENATE ls_address-name_last ls_address-name_first INTO <ls_data>-tdfuser SEPARATED BY space. ENDIF. PERFORM fill_firstline CHANGING <ls_data>. ENDLOOP. ENDFORM. " F_READ_DATA *---------------------------------------------------------------------* * Form f_display_data *---------------------------------------------------------------------* FORM f_display_data. * Macro definition DEFINE m_sort. add 1 to ls_sort-spos. ls_sort-fieldname = &1. ls_sort-up = &2. ls_sort-down = &3. ls_sort-group = &4. append ls_sort to lt_sort. END-OF-DEFINITION. * Macro definition DEFINE m_fieldcat. add 1 to ls_fieldcat-col_pos. ls_fieldcat-fieldname = &1. ls_fieldcat-ref_tabname = &2. append ls_fieldcat to lt_fieldcat. END-OF-DEFINITION. DATA: ls_fieldcat TYPE slis_fieldcat_alv, lt_fieldcat TYPE slis_t_fieldcat_alv, lt_sort TYPE slis_t_sortinfo_alv, ls_sort TYPE slis_sortinfo_alv, ls_layout TYPE slis_layout_alv, lt_event_exit TYPE slis_t_event_exit, ls_event_exit TYPE slis_event_exit. ls_layout-zebra = c_x. ls_layout-cell_merge = c_x. ls_layout-group_change_edit = c_x. ls_layout-colwidth_optimize = c_x. ls_layout-box_fieldname = 'CHECKBOX'. * Build sort table m_sort 'TDLDATE' '' c_x ''. m_sort 'TDLTIME' '' c_x ''. * * Build field catalog table m_fieldcat 'MANDT' 'STXH'. m_fieldcat 'TDNAME' 'STXH'. m_fieldcat 'TDSPRAS' 'STXH'. m_fieldcat 'TDTITLE' 'STXH'. m_fieldcat 'TDLDATE' 'STXH'. m_fieldcat 'TDLTIME' 'STXH'. m_fieldcat 'TDLUSER' 'STXH'. m_fieldcat 'TDFUSER' 'STXH'. m_fieldcat 'TDFDATE' 'STXH'. m_fieldcat 'TDFTIME' 'STXH'. m_fieldcat 'DEVCLASS' 'TADIR'. m_fieldcat 'TDLINE' 'TLINE'. * Activate refresh button CLEAR ls_event_exit. ls_event_exit-ucomm = c_refresh. " Refresh ls_event_exit-after = c_x. APPEND ls_event_exit TO lt_event_exit. * Display data CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-cprog i_callback_user_command = 'USER_COMMAND' i_callback_pf_status_set = 'PF_STATUS_SET' is_layout = ls_layout it_fieldcat = lt_fieldcat it_sort = lt_sort it_event_exit = lt_event_exit i_save = 'A' TABLES t_outtab = gt_data. ENDFORM. " F_DISPLAY_DATA *---------------------------------------------------------------------* * FORM USER_COMMAND * *---------------------------------------------------------------------* FORM user_command USING u_ucomm TYPE syucomm us_selfield TYPE slis_selfield. "#EC CALLED DATA : l_spras(2), ls_data TYPE ty_s_data. CASE u_ucomm. WHEN '&IC1'. " Pick READ TABLE gt_data INDEX us_selfield-tabindex INTO ls_data. CHECK sy-subrc EQ 0. CHECK ls_data-mandt EQ sy-mandt. * SAPscript form name SET PARAMETER ID 'TXF' FIELD ls_data-tdform. WRITE ls_data-tdspras TO l_spras. * SAPscript form and style language SET PARAMETER ID 'TXL' FIELD l_spras. * SAPscript form CALL TRANSACTION 'SE71'. WHEN c_refresh. PERFORM f_read_data. us_selfield-refresh = c_x. ENDCASE. ENDFORM. " USER_COMMAND *---------------------------------------------------------------------* * FORM PF_STATUS_SET * *---------------------------------------------------------------------* FORM pf_status_set USING ut_extab TYPE slis_t_extab. "#EC CALLED * Display refresh button DELETE ut_extab WHERE fcode = c_refresh. SET PF-STATUS 'STANDARD_FULLSCREEN' OF PROGRAM 'SAPLKKBL' EXCLUDING ut_extab. ENDFORM. " PF_STATUS_SET *---------------------------------------------------------------------* * Form FILL_FIRSTLINE *---------------------------------------------------------------------* FORM fill_firstline CHANGING us_data TYPE ty_s_data. DATA: ls_lines TYPE tline, lt_lines TYPE tline_t. CALL FUNCTION 'READ_FORM' EXPORTING client = us_data-mandt form = us_data-tdform language = us_data-tdspras TABLES form_lines = lt_lines. LOOP AT lt_lines INTO ls_lines WHERE NOT tdline IS INITIAL. us_data-tdline = ls_lines-tdline. EXIT. ENDLOOP. IF NOT p_string IS INITIAL. LOOP AT lt_lines INTO ls_lines WHERE NOT tdline IS INITIAL. IF ls_lines-tdline CS p_string. us_data-tdline = ls_lines-tdline. EXIT. ENDIF. ENDLOOP. ENDIF. ENDFORM. " FILL_FIRSTLINE ******************* END OF PROGRAM Z_ALV_SAPSCRIPTS *******************