REPORT z_modify_user_parameter_id. *---------------------------------------------------------------------* * This program lists the user's Parameter-IDs, These Parameter-IDs * * can be modified and saved via Batch-Input * *---------------------------------------------------------------------* * Author : Michel PIOUD - Updated 21-Nov-07 * * HomePage : http://www.oocities.org/mpioud * *---------------------------------------------------------------------* CONSTANTS : c_x VALUE 'X', c_refresh TYPE syucomm VALUE '&REFRESH'. *---------------------------------------------------------------------* TYPE-POOLS: slis. " ALV Global types TYPES : BEGIN OF ty_s_user, bname TYPE usr04-bname, " User name name_last TYPE addr3_val-name_last," Last name parid TYPE usr05-parid, " Set/Get parameter ID partext TYPE tparat-partext, " Memory ID Text parva TYPE usr05-parva, " Parameter value END OF ty_s_user. *---------------------------------------------------------------------* DATA : g_bname TYPE usr05-bname, g_parid TYPE usr05-parid, gt_user TYPE TABLE OF ty_s_user, gt_user_old TYPE SORTED TABLE OF ty_s_user WITH UNIQUE KEY bname parid. FIELD-SYMBOLS <user> TYPE ty_s_user. *---------------------------------------------------------------------* SELECTION-SCREEN : BEGIN OF LINE, COMMENT 10(20) v_1 FOR FIELD s_bname. "#EC NEEDED SELECT-OPTIONS s_bname FOR g_bname MATCHCODE OBJECT user_addr. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN : BEGIN OF LINE, COMMENT 10(20) v_2 FOR FIELD s_parid. "#EC NEEDED SELECT-OPTIONS s_parid FOR g_parid. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN : SKIP, BEGIN OF LINE,COMMENT 10(20) v_3 FOR FIELD p_dsplay."#EC NEEDED PARAMETERS p_dsplay AS CHECKBOX. SELECTION-SCREEN END OF LINE. *---------------------------------------------------------------------* INITIALIZATION. v_1 = 'User'. v_2 = 'Parameter Id'. v_3 = 'Display only'. *---------------------------------------------------------------------* START-OF-SELECTION. PERFORM f_read_data. *---------------------------------------------------------------------* END-OF-SELECTION. PERFORM f_display_data. *---------------------------------------------------------------------* * Form f_read_data *---------------------------------------------------------------------* FORM f_read_data. TYPES : BEGIN OF ty_name, bname TYPE usr21-bname, name_first TYPE adrp-name_first, name_last TYPE adrp-name_last, END OF ty_name, BEGIN OF ty_tparat, paramid TYPE tparat-paramid, partext TYPE tparat-partext, END OF ty_tparat. DATA : ls_name TYPE ty_name, lt_name TYPE SORTED TABLE OF ty_name WITH UNIQUE KEY bname, ls_tparat TYPE ty_tparat, lt_tparat TYPE SORTED TABLE OF ty_tparat WITH UNIQUE KEY paramid, lt_user TYPE TABLE OF ty_s_user. * Read data SELECT u~bname parid parva INTO CORRESPONDING FIELDS OF TABLE gt_user FROM usr05 AS u JOIN usr01 AS s ON u~bname = s~bname WHERE u~bname IN s_bname AND parid IN s_parid. IF gt_user[] IS NOT INITIAL. lt_user[] = gt_user[]. SORT lt_user BY bname. DELETE ADJACENT DUPLICATES FROM lt_user COMPARING bname. * Read user name SELECT bname name_first name_last INTO TABLE lt_name FROM usr21 AS u JOIN adrp AS a ON u~persnumber = a~persnumber FOR ALL ENTRIES IN lt_user WHERE bname = lt_user-bname. lt_user[] = gt_user[]. SORT lt_user BY parid. DELETE ADJACENT DUPLICATES FROM lt_user COMPARING parid. * Memory ID Texts SELECT paramid partext INTO TABLE lt_tparat FROM tparat FOR ALL ENTRIES IN lt_user WHERE paramid = lt_user-parid AND sprache = sy-langu. ENDIF. LOOP AT gt_user ASSIGNING <user>. * Get the parameter-id texts. READ TABLE lt_tparat WITH KEY paramid = <user>-parid INTO ls_tparat. IF sy-subrc IS INITIAL. <user>-partext = ls_tparat-partext. ELSEIF sy-langu <> 'E'. * Not found, try in English SELECT SINGLE partext INTO <user>-partext FROM tparat WHERE paramid = <user>-parid AND sprache = 'E'. IF sy-subrc IS INITIAL. CLEAR ls_tparat. ls_tparat-paramid = <user>-parid. ls_tparat-partext = <user>-partext. INSERT ls_tparat INTO TABLE lt_tparat. ELSEIF sy-langu <> 'D'. * Not found, try in German SELECT SINGLE partext INTO <user>-partext FROM tparat WHERE paramid = <user>-parid AND sprache = 'D'. IF sy-subrc IS INITIAL. CLEAR ls_tparat. ls_tparat-paramid = <user>-parid. ls_tparat-partext = <user>-partext. INSERT ls_tparat INTO TABLE lt_tparat. ENDIF. ENDIF. ENDIF. * Get user name READ TABLE lt_name WITH KEY bname = <user>-bname INTO ls_name. IF sy-subrc IS INITIAL. CONCATENATE ls_name-name_last ls_name-name_first INTO <user>-name_last SEPARATED BY space. ELSE. <user>-name_last = <user>-bname. ENDIF. ENDLOOP. * Save data gt_user_old[] = gt_user[]. ENDFORM. " F_READ_DATA *---------------------------------------------------------------------* * Form f_display_data *---------------------------------------------------------------------* FORM f_display_data. * Macro definition DEFINE m_fieldcat. add 1 to ls_fieldcat-col_pos. ls_fieldcat-fieldname = &1. ls_fieldcat-ref_tabname = &2. ls_fieldcat-edit = &3. append ls_fieldcat to lt_fieldcat. END-OF-DEFINITION. DEFINE m_sort. add 1 to ls_sort-spos. ls_sort-fieldname = &1. ls_sort-up = c_x. ls_sort-group = &2. append ls_sort to lt_sort. END-OF-DEFINITION. DATA: ls_fieldcat TYPE slis_fieldcat_alv, lt_fieldcat TYPE slis_t_fieldcat_alv, " Field catalog lt_sort TYPE slis_t_sortinfo_alv, ls_sort TYPE slis_sortinfo_alv, lt_event_exit TYPE slis_t_event_exit, ls_event_exit TYPE slis_event_exit, ls_layout TYPE slis_layout_alv. * Build field catalog and sort table m_fieldcat 'BNAME' 'USR05' ''. m_fieldcat 'NAME_LAST' 'ADDR3_VAL' ''. m_fieldcat 'PARID' 'USR05' ''. m_fieldcat 'PARTEXT' 'TPARAT' ''. IF p_dsplay IS INITIAL. m_fieldcat 'PARVA' 'USR05' c_x. " Column alterable ELSE. m_fieldcat 'PARVA' 'USR05' ''. ENDIF. m_sort 'BNAME' 'UL'. " Line break m_sort 'NAME_LAST' ''. m_sort 'PARID' ''. ls_layout-group_change_edit = c_x. ls_layout-colwidth_optimize = c_x. ls_layout-cell_merge = c_x. ls_layout-detail_popup = c_x. ls_layout-get_selinfos = c_x. 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. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-cprog i_callback_user_command = 'USER_COMMAND' is_layout = ls_layout it_fieldcat = lt_fieldcat it_sort = lt_sort it_event_exit = lt_event_exit TABLES t_outtab = gt_user. ENDFORM. " F_DISPLAY_DATA *---------------------------------------------------------------------* * FORM USER_COMMAND * *---------------------------------------------------------------------* FORM user_command USING u_ucomm TYPE sy-ucomm us_selfield TYPE slis_selfield. "#EC CALLED * Macro definition DEFINE m_bdc_dynpro. clear ls_bdcdata. ls_bdcdata-program = &1. ls_bdcdata-dynpro = &2. ls_bdcdata-dynbegin = c_x. ls_bdcdata-fnam = 'BDC_OKCODE'. ls_bdcdata-fval = &3. append ls_bdcdata to lt_bdcdata. END-OF-DEFINITION. DEFINE m_bdc_field. clear ls_bdcdata. ls_bdcdata-fnam = &1. ls_bdcdata-fval = &2. append ls_bdcdata to lt_bdcdata. END-OF-DEFINITION. DATA : l_modif TYPE flag, ls_user TYPE ty_s_user, ls_message TYPE bdcmsgcoll, lt_message TYPE TABLE OF bdcmsgcoll, ls_bdcdata TYPE bdcdata, lt_bdcdata TYPE TABLE OF bdcdata. CASE u_ucomm. WHEN '&IC1'. READ TABLE gt_user INDEX us_selfield-tabindex INTO ls_user. CHECK sy-subrc EQ 0. m_bdc_dynpro 'SAPLSUU5' '0050' '=SHOW'. m_bdc_field 'USR02-BNAME' ls_user-bname. * Tabstrip Parameter-Id m_bdc_dynpro 'SAPLSUU5' '0100' '=PARAM'. * Show user CALL TRANSACTION 'SU01' USING lt_bdcdata MODE 'E' MESSAGES INTO lt_message. READ TABLE lt_message WITH KEY msgid = '01' msgnr = '495' TRANSPORTING NO FIELDS. CHECK sy-subrc EQ 0. * You are not authorized to display users MESSAGE i495(01). WHEN '&DATA_SAVE'. * Update User's Parameter-IDs LOOP AT gt_user INTO ls_user. READ TABLE gt_user_old ASSIGNING <user> WITH KEY bname = ls_user-bname parid = ls_user-parid. CHECK ls_user-parva <> <user>-parva. l_modif = c_x. m_bdc_dynpro 'SAPLSUU5' '0050' '=CHAN'. m_bdc_field 'USR02-BNAME' ls_user-bname. * Tabstrip Parameter-Id m_bdc_dynpro 'SAPLSUU5' '0100' '=PARAM'. * Last page m_bdc_dynpro 'SAPLSUU5' '0100' '=P++'. * Previous page m_bdc_dynpro 'SAPLSUU5' '0100' '=P+'. m_bdc_dynpro 'SAPLSUU5' '0100' '=CHECK'. m_bdc_field 'USPARAM-PARID(10)' ls_user-parid. m_bdc_field 'USPARAM-PARVA(10)' ls_user-parva. * Save m_bdc_dynpro 'SAPLSUU5' '0100' '=UPD'. CALL TRANSACTION 'SU01' USING lt_bdcdata MODE 'E' MESSAGES INTO lt_message. READ TABLE lt_message WITH KEY msgid = '01' msgnr = '492' INTO ls_message. IF sy-subrc EQ 0. * You are not authorized to change users in group & MESSAGE i492(01) WITH ls_message-msgv1. EXIT. ENDIF. REFRESH lt_bdcdata. ENDLOOP. IF l_modif IS INITIAL. MESSAGE i208(00) WITH 'Nothing to do ...'. ELSE. gt_user_old[] = gt_user[]. ENDIF. WHEN '&REFRESH'. PERFORM f_read_data. " Refresh data us_selfield-refresh = c_x. ENDCASE. ENDFORM. " USER_COMMAND ************ END OF PROGRAM Z_MODIFY_USER_PARAMETER_ID ****************