REPORT z_list_user_profiles. *---------------------------------------------------------------------* * This program lists the user's auth. profiles. * *---------------------------------------------------------------------* * Author : Michel PIOUD - Updated 20-Nov-07 * * HomePage : http://www.oocities.org/mpioud * *---------------------------------------------------------------------* CONSTANTS : c_x VALUE 'X'. *---------------------------------------------------------------------* TYPE-POOLS: slis. " ALV Global types TYPES : BEGIN OF ty_user, bname TYPE usr04-bname, " SAP User name name_last TYPE addr3_val-name_last," User name class TYPE usr02-class, " User group profile TYPE ust04-profile, " Profile ptext TYPE usr11-ptext, " Texts authorizations samprof TYPE char1, END OF ty_user. *---------------------------------------------------------------------* DATA: g_bname type ust04-bname, " User Name g_class type usr02-class, " User group g_profn type ust10c-profn, " Profile gt_user TYPE TABLE OF ty_user. *---------------------------------------------------------------------* SELECTION-SCREEN : BEGIN OF LINE, COMMENT 20(10) v_1 FOR FIELD s_bname. "#EC NEEDED SELECT-OPTIONS s_bname FOR g_bname. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN : BEGIN OF LINE, COMMENT 20(10) v_2 FOR FIELD s_profil. "#EC NEEDED SELECT-OPTIONS s_profil FOR g_profn. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN : BEGIN OF LINE, COMMENT 20(10) v_3 FOR FIELD s_class. "#EC NEEDED SELECT-OPTIONS s_class FOR g_class. SELECTION-SCREEN END OF LINE. *---------------------------------------------------------------------* INITIALIZATION. v_1 = 'User'. v_2 = 'Profile'. v_3 = 'User group'. *---------------------------------------------------------------------* START-OF-SELECTION. PERFORM f_read_data. *---------------------------------------------------------------------* END-OF-SELECTION. PERFORM f_display_data. *---------------------------------------------------------------------* * Form f_read_data *---------------------------------------------------------------------* FORM f_read_data. CONSTANTS : lc_aktivated VALUE 'A', lc_generprof VALUE 'G', lc_colectprof VALUE 'C'. TYPES : BEGIN OF ty_usr10, profn TYPE usr10-profn, " Profile typ TYPE usr10-typ, " Type of Profile END OF ty_usr10, BEGIN OF ty_usr11, profn TYPE usr11-profn, " Profile ptext TYPE usr11-ptext, " Profile text END OF ty_usr11, BEGIN OF ty_name, bname TYPE usr21-bname, name_first TYPE adrp-name_first, name_last TYPE adrp-name_last, END OF ty_name. DATA : ls_usr10 TYPE ty_usr10, lt_usr10 TYPE SORTED TABLE OF ty_usr10 WITH NON-UNIQUE KEY profn, ls_usr11 TYPE ty_usr11, lt_usr11 TYPE SORTED TABLE OF ty_usr11 WITH NON-UNIQUE KEY profn, ls_name TYPE ty_name, lt_name TYPE SORTED TABLE OF ty_name WITH UNIQUE KEY bname, lt_user TYPE TABLE OF ty_user. FIELD-SYMBOLS <user> TYPE ty_user. * Read user data SELECT t~bname profile class INTO CORRESPONDING FIELDS OF TABLE gt_user FROM ust04 AS t JOIN usr02 AS r ON t~bname = r~bname WHERE t~bname IN s_bname AND profile IN s_profil AND class IN s_class. IF gt_user[] IS NOT INITIAL. lt_user[] = gt_user[]. SORT lt_user BY profile. DELETE ADJACENT DUPLICATES FROM lt_user COMPARING profile. * Read profile SELECT profn typ INTO TABLE lt_usr10 FROM usr10 FOR ALL ENTRIES IN lt_user WHERE profn = lt_user-profile AND aktps = lc_aktivated. * Read profile text SELECT profn ptext INTO TABLE lt_usr11 FROM usr11 FOR ALL ENTRIES IN lt_user WHERE profn = lt_user-profile AND langu = sy-langu AND aktps = lc_aktivated. 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. ENDIF. LOOP AT gt_user ASSIGNING <user>. * Get profile type READ TABLE lt_usr10 WITH KEY profn = <user>-profile INTO ls_usr10. IF sy-subrc IS INITIAL. IF ls_usr10-typ = lc_colectprof. <user>-samprof = c_x. ELSEIF ls_usr10-typ = lc_generprof. <user>-samprof = lc_generprof. ENDIF. ENDIF. * Get the profile texts. READ TABLE lt_usr11 WITH KEY profn = <user>-profile INTO ls_usr11. IF sy-subrc IS INITIAL. <user>-ptext = ls_usr11-ptext. 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. ENDFORM. " F_READ_DATA *---------------------------------------------------------------------* * Form f_display_data *---------------------------------------------------------------------* FORM f_display_data. 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. DEFINE m_sort. add 1 to ls_sort-spos. ls_sort-fieldname = &1. ls_sort-up = &2. ls_sort-group = &3. append ls_sort to lt_sort. 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. m_fieldcat 'BNAME' 'UST04'. m_fieldcat 'NAME_LAST' 'ADDR3_VAL'. m_fieldcat 'CLASS' 'USR02'. m_fieldcat 'PROFILE' 'UST04'. m_fieldcat 'PTEXT' 'USR11'. m_fieldcat 'SAMPROF' 'USR10'. m_sort 'BNAME' c_x 'UL'. m_sort 'NAME_LAST' c_x ''. m_sort 'PROFILE' c_x ''. ls_layout-group_change_edit = c_x. ls_layout-colwidth_optimize = c_x. ls_layout-zebra = c_x. ls_layout-cell_merge = c_x. ls_layout-detail_popup = c_x. ls_layout-get_selinfos = c_x. 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 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 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 : ls_user TYPE ty_user, 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. CASE us_selfield-fieldname. WHEN 'PROFILE'. CALL FUNCTION 'SUSR_PROF_DISPLAY_WITH_AUTHS' EXPORTING profile = ls_user-profile. WHEN OTHERS. m_bdc_dynpro 'SAPLSUU5' '0050' '=SHOW'. m_bdc_field 'USR02-BNAME' ls_user-bname. m_bdc_dynpro 'SAPLSUU5' '0100' '=PROF'. 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). ENDCASE. ENDCASE. ENDFORM. " USER_COMMAND ***************** END OF PROGRAM Z_LIST_USER_PROFILES *****************