Monday, June 15, 2015

ABAP - Program to list user profile

ABAP - Program to list user profile

REPORT z_list_user_profiles.
*---------------------------------------------------------------------*
* This program lists the user's auth. profiles.
*---------------------------------------------------------------------*
TABLES : ust04,
usr10.

TYPE-POOLS: slis.

SELECTION-SCREEN : BEGIN OF LINE, COMMENT 20(10) v_1 FOR FIELD s_bname.
SELECT-OPTIONS s_bname FOR ust04-bname.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN : BEGIN OF LINE, COMMENT 20(10) v_2 FOR FIELD s_profil.
SELECT-OPTIONS s_profil FOR ust04-profile.
SELECTION-SCREEN END OF LINE.

DATA :
BEGIN OF gt_user OCCURS 0,
bname     LIKE usr04-bname,
name_last LIKE addr3_val-name_last,
profile   LIKE ust04-profile,
ptext     LIKE usr11-ptext,
samprof,
END OF gt_user.

*---------------------------------------------------------------------*
INITIALIZATION.

v_1 = 'User'.
v_2 = 'Profile'.

*---------------------------------------------------------------------*
START-OF-SELECTION.

PERFORM f_read_data.

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'.

DATA l_adresse LIKE addr3_val.

FIELD-SYMBOLS LIKE LINE OF gt_user.

SELECT t~bname profile 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.

* Sorting to improve performance with FM 'SUSR_USER_ADDRESS_READ'
SORT gt_user BY bname.

LOOP AT gt_user ASSIGNING .
CLEAR usr10.
SELECT SINGLE * FROM usr10
WHERE profn = -profile
AND aktps = lc_aktivated.
IF usr10-typ = lc_colectprof.
-samprof = 'X'.
ELSEIF usr10-typ = lc_generprof.
-samprof = lc_generprof.
ENDIF.

*   Get the profile texts.
SELECT SINGLE ptext FROM usr11
INTO -ptext
WHERE langu = sy-langu
AND profn = -profile
AND aktps = lc_aktivated.

CALL FUNCTION 'SUSR_USER_ADDRESS_READ'
EXPORTING
user_name              = -bname
*       READ_DB_DIRECTLY       = ' '
IMPORTING
user_address           = l_adresse
*       USER_USR03             =
EXCEPTIONS
user_address_not_found = 1
OTHERS                 = 2.

IF sy-subrc = 0.
CONCATENATE l_adresse-name_last l_adresse-name_first
INTO -name_last SEPARATED BY space.
ELSE.
-name_last = -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 'PROFILE'   'UST04'.
m_fieldcat 'PTEXT'     'USR11'.
m_fieldcat 'SAMPROF'   'USR10'.

m_sort 'BNAME'     'X' 'UL'.
m_sort 'NAME_LAST' 'X' ''.
m_sort 'PROFILE'   'X' ''.

ls_layout-group_change_edit = 'X'.
ls_layout-colwidth_optimize = 'X'.
ls_layout-zebra             = 'X'.
ls_layout-cell_merge        = 'X'.
ls_layout-detail_popup      = 'X'.
ls_layout-get_selinfos      = '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     LIKE sy-ucomm
us_selfield TYPE slis_selfield.     "#EC CALLED

DEFINE m_bdc_dynpro.
clear lt_bdcdata.
lt_bdcdata-program  = &1.
lt_bdcdata-dynpro   = &2.
lt_bdcdata-dynbegin = 'X'.
lt_bdcdata-fnam     = 'BDC_OKCODE'.
lt_bdcdata-fval     = &3.
append lt_bdcdata.
END-OF-DEFINITION.

DEFINE m_bdc_field.
clear lt_bdcdata.
lt_bdcdata-fnam = &1.
lt_bdcdata-fval = &2.
append lt_bdcdata.
END-OF-DEFINITION.

DATA :
lt_message TYPE STANDARD TABLE OF bdcmsgcoll WITH HEADER LINE,
lt_bdcdata TYPE STANDARD TABLE OF bdcdata WITH HEADER LINE.

CASE u_ucomm.
WHEN '&IC1'.
READ TABLE gt_user INDEX us_selfield-tabindex.
CHECK sy-subrc EQ 0.
CASE us_selfield-fieldname.
WHEN 'PROFILE'.
CALL FUNCTION 'SUSR_PROF_DISPLAY_WITH_AUTHS'
EXPORTING
profile         = gt_user-profile
EXCEPTIONS
prof_dont_exist = 1
OTHERS          = 2.
WHEN OTHERS.
m_bdc_dynpro 'SAPLSUU5' '0050' '=SHOW'.
m_bdc_field  'USR02-BNAME' gt_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'.
CHECK sy-subrc EQ 0.
*         You are not authorized to display users
MESSAGE i495(01).
ENDCASE.
ENDCASE.

ENDFORM.
***************** END OF PROGRAM Z_LIST_USER_PROFILES *****************

No comments:

Post a Comment