REPORT z_alv_rsusr200. *---------------------------------------------------------------------* * List of Users According to Logon Date and Password Change * * Copy of standard program RSUSR200 * *---------------------------------------------------------------------* * Author : Michel PIOUD - Updated 24-Apr-09 * * HomePage : http://www.oocities.org/mpioud/Abap_programs.html * *---------------------------------------------------------------------* CONSTANTS : c_typdia VALUE 'A', " Dialog users c_typbatch VALUE 'B', " Batch users c_typcpic VALUE 'C', " System users c_typsim VALUE 'S', " Service users c_yulock TYPE x VALUE '80'," Incorrect logons. c_yusloc TYPE x VALUE '40'," Administrator lock c_yugloc TYPE x VALUE '20'," Global lock c_x VALUE 'X', c_refresh TYPE syucomm VALUE '&REFRESH'. *---------------------------------------------------------------------* TYPE-POOLS : icon, " Icons slis. " ALV Global types *---------------------------------------------------------------------* TYPES : BEGIN OF ty_s_usr02. INCLUDE TYPE usr02. " Logon data TYPES : name_text TYPE ad_namtext, icon_pwd(30) TYPE c, icon_lock(30) TYPE c, text_lock(40) TYPE c, icon_con(40) TYPE c, checkbox(1) TYPE c, END OF ty_s_usr02. TYPES: ty_t_uinfo TYPE STANDARD TABLE OF uinfo. *---------------------------------------------------------------------* DATA: gs_usr02 TYPE usr02, gt_data TYPE TABLE OF ty_s_usr02. *---------------------------------------------------------------------* FIELD-SYMBOLS : <data> TYPE ty_s_usr02. *---------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK main WITH FRAME TITLE text_021. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(31) text_100 FOR FIELD s_mandt. SELECT-OPTIONS s_mandt FOR gs_usr02-mandt DEFAULT sy-mandt MATCHCODE OBJECT ddsef4clnt. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(31) text_101 FOR FIELD s_bname. SELECT-OPTIONS s_bname FOR gs_usr02-bname MATCHCODE OBJECT user_comp. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(31) text_102 FOR FIELD s_class. SELECT-OPTIONS s_class FOR gs_usr02-class. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(34) text_103 FOR FIELD p_dtrdat. PARAMETER p_dtrdat TYPE i. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(34) text_104 FOR FIELD p_dbcda1. PARAMETER p_dbcda1 TYPE i. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK main. SELECTION-SCREEN BEGIN OF BLOCK validity WITH FRAME TITLE text_036. SELECTION-SCREEN BEGIN OF LINE. PARAMETER p_valid AS CHECKBOX DEFAULT c_x. SELECTION-SCREEN COMMENT 2(40) text_034 FOR FIELD p_valid. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. PARAMETER notvalid AS CHECKBOX DEFAULT c_x. SELECTION-SCREEN COMMENT 2(40) text_035 FOR FIELD notvalid. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK validity. SELECTION-SCREEN BEGIN OF BLOCK activity WITH FRAME TITLE text_022. SELECTION-SCREEN BEGIN OF LINE. PARAMETER unlocked AS CHECKBOX DEFAULT c_x. SELECTION-SCREEN COMMENT 2(40) text_009 FOR FIELD unlocked. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. PARAMETER locked AS CHECKBOX DEFAULT c_x. SELECTION-SCREEN COMMENT 2(40) text_020 FOR FIELD locked. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. PARAMETER faillog AS CHECKBOX DEFAULT c_x. SELECTION-SCREEN COMMENT 2(40) text_019 FOR FIELD faillog. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK activity. SELECTION-SCREEN BEGIN OF BLOCK type WITH FRAME TITLE text_023. SELECTION-SCREEN BEGIN OF LINE. PARAMETER diaguser AS CHECKBOX DEFAULT c_x. SELECTION-SCREEN COMMENT 2(40) text_015 FOR FIELD diaguser. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. PARAMETER commuser AS CHECKBOX DEFAULT c_x. SELECTION-SCREEN COMMENT 2(40) text_030 FOR FIELD commuser. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. PARAMETER sysuser AS CHECKBOX DEFAULT c_x. SELECTION-SCREEN COMMENT 2(40) text_029 FOR FIELD sysuser. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. PARAMETER servuser AS CHECKBOX DEFAULT c_x. SELECTION-SCREEN COMMENT 2(40) text_032 FOR FIELD servuser. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK type. SELECTION-SCREEN BEGIN OF BLOCK pass WITH FRAME TITLE text_024. SELECTION-SCREEN BEGIN OF LINE. PARAMETER defpass AS CHECKBOX DEFAULT c_x. SELECTION-SCREEN COMMENT 2(40) text_033 FOR FIELD defpass. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. PARAMETER initpass AS CHECKBOX DEFAULT c_x. SELECTION-SCREEN COMMENT 2(40) text_008 FOR FIELD initpass. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK pass. SELECTION-SCREEN BEGIN OF BLOCK filter WITH FRAME TITLE text_025. SELECTION-SCREEN BEGIN OF LINE. PARAMETER p_filter AS CHECKBOX DEFAULT c_x. SELECTION-SCREEN COMMENT 2(40) text_026 FOR FIELD p_filter. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK filter. *---------------------------------------------------------------------* AT SELECTION-SCREEN. IF ( unlocked IS INITIAL AND locked IS INITIAL AND faillog IS INITIAL ) OR ( p_valid IS INITIAL AND notvalid IS INITIAL ) OR ( diaguser IS INITIAL AND commuser IS INITIAL AND sysuser IS INITIAL AND servuser IS INITIAL ) OR ( initpass IS INITIAL AND defpass IS INITIAL ). * Please make a selection MESSAGE e609(00). ENDIF. *---------------------------------------------------------------------* INITIALIZATION. text_008 = 'Users with initial password '(008). text_009 = 'Not locked users '(009). text_015 = 'Dialog users '(015). text_019 = 'Users with failed logon '(019). text_020 = 'Locked users '(020). text_021 = 'Standard selection '(021). text_022 = 'Selection by users status '(022). text_023 = 'Selection by user type '(023). text_024 = 'Selection by password status '(024). text_025 = 'Users logged today '(025). text_026 = 'Only users logged today '(026). text_029 = 'System users '(029). text_030 = 'Communication users '(030). text_032 = 'Service users '(032). text_033 = 'Users with defined password '(033). text_034 = 'Users valid today '(034). text_035 = 'Users not valid today '(035). text_036 = 'Users Validity '(036). text_100 = 'Client '(100). text_101 = 'User '(101). text_102 = 'Users group '(102). text_103 = 'No. days since last logon '(103). text_104 = 'No. days since password change '(104). *---------------------------------------------------------------------* START-OF-SELECTION. * Check authorization AUTHORITY-CHECK OBJECT 'S_USER_GRP' ID 'CLASS' DUMMY ID 'ACTVT' FIELD '03'. " Display IF sy-subrc NE 0. * You are not authorized to use function & MESSAGE e150(00) WITH 'Display user'(014). ENDIF. PERFORM f_read_data. *---------------------------------------------------------------------* END-OF-SELECTION. PERFORM f_display_data. *---------------------------------------------------------------------* * Form f_read_data *---------------------------------------------------------------------* FORM f_read_data. DATA : l_usr02flag TYPE x, lt_uinfo TYPE ty_t_uinfo. gs_usr02-trdat = sy-datum - p_dtrdat. gs_usr02-bcda1 = sy-datum - p_dbcda1. * Read data SELECT u~mandt u~bname gltgb gltgv class trdat bcda1 ltime locnt uflag ustyp aname erdat name_text INTO CORRESPONDING FIELDS OF TABLE gt_data FROM usr02 AS u JOIN usr21 AS s ON u~mandt = s~mandt AND u~bname = s~bname JOIN adrp AS a ON a~client = s~mandt AND a~persnumber = s~persnumber CLIENT SPECIFIED WHERE u~mandt IN s_mandt AND u~bname IN s_bname AND class IN s_class AND trdat LE gs_usr02-trdat AND bcda1 LE gs_usr02-bcda1. * Get connected users PERFORM get_users CHANGING lt_uinfo. LOOP AT gt_data ASSIGNING <data>. l_usr02flag = <data>-uflag. * Valid users IF ( NOT p_valid IS INITIAL AND ( ( <data>-gltgb GE sy-datum AND <data>-gltgv LE sy-datum ) OR ( <data>-gltgv IS INITIAL AND <data>-gltgb IS INITIAL ) OR ( <data>-gltgv LE sy-datum AND <data>-gltgb IS INITIAL ) ) ) * Not valid users OR ( NOT notvalid IS INITIAL AND ( <data>-gltgv GT sy-datum OR ( <data>-gltgb LT sy-datum AND NOT <data>-gltgb IS INITIAL ) ) ). ELSE. DELETE gt_data. CONTINUE. ENDIF. * Active users IF ( NOT unlocked IS INITIAL AND NOT ( l_usr02flag O c_yulock OR l_usr02flag O c_yusloc OR l_usr02flag O c_yugloc ) ) OR * Locked users ( NOT locked IS INITIAL AND ( l_usr02flag O c_yulock OR l_usr02flag O c_yusloc OR l_usr02flag O c_yugloc ) ) * Users with failed logon OR ( NOT faillog IS INITIAL AND <data>-locnt GT 0 ). ELSE. DELETE gt_data. CONTINUE. ENDIF. * Dialog users IF ( NOT diaguser IS INITIAL AND <data>-ustyp EQ c_typdia ) OR * System users ( NOT sysuser IS INITIAL AND <data>-ustyp EQ c_typbatch ) OR * Communication users ( NOT commuser IS INITIAL AND <data>-ustyp EQ c_typcpic ) OR * Service users ( NOT servuser IS INITIAL AND <data>-ustyp EQ c_typsim ). ELSE. DELETE gt_data. CONTINUE. ENDIF. * Users with initial password IF ( NOT initpass IS INITIAL AND <data>-ltime IS INITIAL ) * Users with defined password OR ( NOT defpass IS INITIAL AND <data>-codvn NE c_x AND NOT <data>-ltime IS INITIAL ). ELSE. DELETE gt_data. CONTINUE. ENDIF. IF <data>-codvn = c_x. <data>-icon_pwd = icon_deactivate. ELSE. IF <data>-ltime IS INITIAL. <data>-icon_pwd = icon_cancel. ELSE. <data>-icon_pwd = icon_checked. ENDIF. ENDIF. * Type of lock IF l_usr02flag O c_yulock OR l_usr02flag O c_yusloc OR l_usr02flag O c_yugloc. <data>-icon_lock = icon_locked. ENDIF. * Message lock IF l_usr02flag O c_yulock. <data>-text_lock = 'Incorrect logons'(011). ELSEIF l_usr02flag O c_yusloc. <data>-text_lock = 'Administrator'(012). ELSEIF l_usr02flag O c_yugloc. <data>-text_lock = 'Global lock'(017). ELSEIF <data>-locnt GT 0. WRITE: <data>-locnt NO-SIGN LEFT-JUSTIFIED TO <data>-text_lock. CONCATENATE 'No. of Incorrect Logons:'(018) <data>-text_lock INTO <data>-text_lock. ENDIF. READ TABLE lt_uinfo WITH KEY mandt = <data>-mandt bname = <data>-bname TRANSPORTING NO FIELDS. IF sy-subrc EQ 0. <data>-icon_con = icon_dimension. ENDIF. 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. clear ls_fieldcat. add 1 to l_pos. ls_fieldcat-col_pos = l_pos. ls_fieldcat-fieldname = &1. ls_fieldcat-ref_tabname = &2. append ls_fieldcat to lt_fieldcat. END-OF-DEFINITION. DATA: l_pos TYPE i, ls_print TYPE slis_print_alv, ls_layout TYPE slis_layout_alv, ls_filter TYPE slis_filter_alv, lt_filter TYPE slis_t_filter_alv, ls_sort TYPE slis_sortinfo_alv, lt_sort TYPE slis_t_sortinfo_alv, ls_fieldcat TYPE slis_fieldcat_alv, lt_fieldcat TYPE slis_t_fieldcat_alv, ls_event_exit TYPE slis_event_exit, lt_event_exit TYPE slis_t_event_exit. * Layout ls_layout-zebra = c_x. ls_layout-cell_merge = c_x. ls_layout-colwidth_optimize = c_x. ls_layout-group_change_edit = c_x. ls_layout-allow_switch_to_list = c_x. ls_layout-box_fieldname = 'CHECKBOX'. * Build sort table m_sort 'TRDAT' '' c_x 'UL'. m_sort 'LTIME' '' c_x ''. * Build field catalog table CLEAR ls_fieldcat. ADD 1 TO l_pos. ls_fieldcat-col_pos = l_pos. ls_fieldcat-fieldname = 'ICON_CON'. ls_fieldcat-icon = c_x. ls_fieldcat-seltext_s = 'C'. ls_fieldcat-seltext_l = 'Connected'. APPEND ls_fieldcat TO lt_fieldcat. m_fieldcat 'MANDT' 'USR02'. m_fieldcat 'BNAME' 'USR02'. m_fieldcat 'NAME_TEXT' 'ADDR3_DATA'. m_fieldcat 'CLASS' 'USR02'. m_fieldcat 'USTYP' 'USR02'. m_fieldcat 'ANAME' 'USR02'. m_fieldcat 'ERDAT' 'USR02'. m_fieldcat 'TRDAT' 'USR02'. m_fieldcat 'LTIME' 'USR02'. m_fieldcat 'GLTGB' 'USR02'. CLEAR ls_fieldcat. ADD 1 TO l_pos. ls_fieldcat-col_pos = l_pos. ls_fieldcat-fieldname = 'ICON_PWD'. ls_fieldcat-icon = c_x. ls_fieldcat-seltext_s = 'P.'. ls_fieldcat-seltext_l = 'icon password'. APPEND ls_fieldcat TO lt_fieldcat. m_fieldcat 'BCDA1' 'USR02'. CLEAR ls_fieldcat. ADD 1 TO l_pos. ls_fieldcat-col_pos = l_pos. ls_fieldcat-fieldname = 'ICON_LOCK'. ls_fieldcat-icon = c_x. ls_fieldcat-seltext_s = 'L.'. ls_fieldcat-seltext_l = 'icon lock'. APPEND ls_fieldcat TO lt_fieldcat. m_fieldcat 'TEXT_LOCK' ''. ls_fieldcat-seltext_s = 'Creat.date'. "#EC NOTEXT MODIFY lt_fieldcat FROM ls_fieldcat TRANSPORTING seltext_s WHERE fieldname EQ 'ERDAT'. ls_fieldcat-seltext_s = 'Logon date'. "#EC NOTEXT MODIFY lt_fieldcat FROM ls_fieldcat TRANSPORTING seltext_s WHERE fieldname EQ 'TRDAT'. ls_fieldcat-seltext_s = 'Log.time'. "#EC NOTEXT MODIFY lt_fieldcat FROM ls_fieldcat TRANSPORTING seltext_s WHERE fieldname EQ 'LTIME'. ls_fieldcat-seltext_m = 'Message lock'. "#EC NOTEXT MODIFY lt_fieldcat FROM ls_fieldcat TRANSPORTING seltext_m WHERE fieldname EQ 'TEXT_LOCK'. * 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. * Print options ls_print-no_print_selinfos = c_x. " Display no selection infos ls_print-no_print_listinfos = c_x. " Display no listinfos * Filter IF p_filter IS NOT INITIAL. CLEAR ls_filter. ls_filter-fieldname = 'TRDAT'. ls_filter-valuf_int = sy-datum. ls_filter-sign0 = 'I'. ls_filter-optio = 'EQ'. APPEND ls_filter TO lt_filter. ENDIF. * 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 is_print = ls_print it_fieldcat = lt_fieldcat it_sort = lt_sort it_filter = lt_filter 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 CASE u_ucomm. WHEN '&IC1'. " Pick READ TABLE gt_data INDEX us_selfield-tabindex ASSIGNING <data>. CHECK sy-subrc EQ 0. IF NOT <data>-bname IS INITIAL AND <data>-mandt = sy-mandt. CALL FUNCTION 'AUTHORITY_CHECK_TCODE' EXPORTING tcode = 'SU01D' EXCEPTIONS ok = 1 not_ok = 2 OTHERS = 3. IF sy-subrc NE 1. * You are not authorized to use Transaction & MESSAGE e172(00) WITH 'SU01D'. ENDIF. * User name SET PARAMETER ID 'XUS' FIELD <data>-bname. CALL TRANSACTION 'SU01D'. ENDIF. 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 get_users * *---------------------------------------------------------------------* * Get a list of all logged in users in all instances * *---------------------------------------------------------------------* FORM get_users CHANGING ut_uinfo TYPE ty_t_uinfo. DATA : l_msg(80) TYPE c, "#EC NEEDED ls_desti TYPE rfchosts, lt_uinfo TYPE ty_t_uinfo, lt_desti TYPE TABLE OF rfchosts. CALL FUNCTION 'RFC_GET_LOCAL_DESTINATIONS' TABLES localdest = lt_desti. IF lt_desti IS INITIAL. APPEND 'NONE' TO lt_desti. ENDIF. LOOP AT lt_desti INTO ls_desti. REFRESH lt_uinfo. CALL FUNCTION 'THUSRINFO' DESTINATION ls_desti TABLES usr_tabl = lt_uinfo EXCEPTIONS communication_failure = 17 MESSAGE l_msg system_failure = 17 MESSAGE l_msg. IF sy-subrc = 0. APPEND LINES OF lt_uinfo TO ut_uinfo. ENDIF. ENDLOOP. ENDFORM. " GET_USERS ******************** END OF PROGRAM Z_ALV_RSUSR200 ********************