Code listing for: ZBCTCODE_FRM
Description: Include ZBCTCODE_FRM
*&---------------------------------------------------------------------*
*& 包含 ZBCTCODE_FRM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_MOD_SCREEN
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_mod_screen .
IF p_rb4 IS NOT INITIAL.
LOOP AT SCREEN.
IF screen-group1 = 'S2' OR screen-group1 = 'S4' .
screen-invisible = '1'.
screen-active = '0'.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
IF p_rb5 IS NOT INITIAL.
LOOP AT SCREEN.
IF screen-group1 = 'S1' OR screen-group1 = 'S4' .
screen-invisible = '1'.
screen-active = '0'.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
IF p_rb6 IS NOT INITIAL.
LOOP AT SCREEN.
IF screen-group1 = 'S1' OR screen-group1 = 'S3' .
screen-invisible = '1'.
screen-active = '0'.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_check_data .
ENDFORM.
FORM frm_pf_status USING rt_extab TYPE slis_t_extab .
SET PF-STATUS 'GUI100' EXCLUDING rt_extab.
IF p_rb4 IS NOT INITIAL.
DATA(lv_sum) = lines( gt_data ).
ELSEIF p_rb5 IS NOT INITIAL.
lv_sum = lines( et_user ).
ENDIF.
DATA:lv_title TYPE lvc_title.
lv_title = lv_sum.
CONDENSE lv_title NO-GAPS.
lv_title = '(共' && lv_title && '条数据)'.
SET TITLEBAR 'T001' WITH '业务系统使用情况报表' lv_title.
ENDFORM. " FRM_PF_STATUS
FORM frm_user_command USING r_ucomm TYPE sy-ucomm
rs_selfield TYPE slis_selfield .
CASE r_ucomm.
WHEN '&IC1'.
READ TABLE gt_data INTO DATA(ls_data) INDEX rs_selfield-tabindex.
IF sy-subrc = 0.
SELECT a~account ,b~name_last ,a~count FROM @gt_user AS a LEFT JOIN user_addr AS b ON a~account = b~bname WHERE entry_id = @ls_data-tcode INTO TABLE @DATA(lt_user).
IF sy-subrc = 0.
* cl_demo_output=>display_data( EXPORTING value = lt_user name = '用户列表' ).
DATA:lt_fieldcat TYPE lvc_t_fcat,
ls_layout TYPE lvc_s_layo.
ls_layout = VALUE #( cwidth_opt = 'X' zebra = 'X' sel_mode = 'A' ).
lt_fieldcat = VALUE #(
( fieldname = 'ACCOUNT' coltext = '用户' key = 'X' )
( fieldname = 'NAME_LAST' coltext = '用户姓名' )
( fieldname = 'COUNT' coltext = '访问次数' do_sum = 'X' )
).
DATA:lv_title TYPE lvc_title.
lv_title = ls_data-tcode && '(' && ls_data-sum && '人)'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_grid_title = lv_title
* i_structure_name = ' '
i_callback_pf_status_set = 'FRM_PF_STATUS2'
* i_callback_user_command = 'FRM_USER_COMMAND'
* i_grid_settings = gv_settings
i_screen_start_column = 50
i_screen_start_line = 1
i_screen_end_column = 100
i_screen_end_line = 25
is_layout_lvc = ls_layout
it_fieldcat_lvc = lt_fieldcat[]
i_save = 'A'
TABLES
t_outtab = lt_user[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDIF.
ENDIF.
WHEN OTHERS.
ENDCASE.
ENDFORM.
FORM frm_pf_status2 USING rt_extab TYPE slis_t_extab .
* SET PF-STATUS 'GUI100' EXCLUDING rt_extab.
SET TITLEBAR 'T001' WITH '用户使用详情' .
ENDFORM. " FRM_PF_STATUS
FORM frm_user_command3 USING r_ucomm TYPE sy-ucomm
rs_selfield TYPE slis_selfield .
CASE r_ucomm.
WHEN '&IC1'.
READ TABLE et_user INTO DATA(ls_data) INDEX rs_selfield-tabindex.
IF sy-subrc = 0.
SELECT a~account,a~entry_id AS tcode,b~name_last,c~ttext,SUM( a~count ) AS count FROM @gt_user AS a
LEFT JOIN user_addr AS b ON a~account = b~bname
LEFT JOIN tstct AS c ON a~entry_id = c~tcode AND c~sprsl = @sy-langu
WHERE account = @ls_data-account
GROUP BY a~account,a~entry_id ,b~name_last,c~ttext
INTO TABLE @DATA(lt_user).
IF sy-subrc = 0.
* cl_demo_output=>display_data( EXPORTING value = lt_user name = '用户列表' ).
DATA:lt_fieldcat TYPE lvc_t_fcat,
ls_layout TYPE lvc_s_layo.
ls_layout = VALUE #( cwidth_opt = 'X' zebra = 'X' sel_mode = 'A' ).
lt_fieldcat = VALUE #(
* ( fieldname = 'ACCOUNT' coltext = '用户' key = 'X' )
* ( fieldname = 'NAME_LAST' coltext = '用户姓名' )
( fieldname = 'TCODE' coltext = '事物代码' key = 'X' )
( fieldname = 'TTEXT' coltext = '事物代码名称' )
( fieldname = 'COUNT' coltext = '访问次数' do_sum = 'X' )
).
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
* i_grid_title = lv_title
* i_structure_name = ' '
i_callback_pf_status_set = 'FRM_PF_STATUS2'
* i_callback_user_command = 'FRM_USER_COMMAND'
* i_grid_settings = gv_settings
i_screen_start_column = 50
i_screen_start_line = 1
i_screen_end_column = 150
i_screen_end_line = 25
is_layout_lvc = ls_layout
it_fieldcat_lvc = lt_fieldcat[]
i_save = 'A'
TABLES
t_outtab = lt_user[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDIF.
ENDIF.
WHEN OTHERS.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_LOGON
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_logon .
IF p_back IS INITIAL.
INCLUDE msm20to1.
DATA:
ls_sel_slg TYPE rslgsel,
ls_sel_au TYPE rsausel,
ld_mess TYPE td_mess_tx,
ld_dest_cnt TYPE i,
ld_done_proc TYPE i,
ld_dests_done TYPE i,
ld_file_no TYPE rslgetab-file_no,
ls_rec_cnts TYPE ts_rec_cnts,
ls_recordcnt TYPE rslgreccnt,
lt_entriestab TYPE STANDARD TABLE OF rsauetab2,
lt_audit_file TYPE STANDARD TABLE OF rsaufinfo.
DATA:local_dests TYPE TABLE OF rfchosts.
DATA:go_sal_rf TYPE REF TO cl_sal_read_files.
DATA:ld_rc TYPE sy-subrc.
IF go_sal_rf IS INITIAL.
CREATE OBJECT go_sal_rf EXPORTING id_repid = 'SAPMSM20' .
ENDIF.
DATA:
ls_interval TYPE cl_sal_read_files=>ts_interval,
* ld_max_severity TYPE rslgmsgsev,
ld_msg_class TYPE cl_sal_read_files=>td_rsau_class_x,
ld_failed TYPE boole_d.
DATA:
ls_r_selopt TYPE rsdsselopt,
lt_r_clnt TYPE RANGE OF rsauentr-slgmand,
lt_r_user TYPE RANGE OF rsauentr-slguser,
lt_r_tran TYPE RANGE OF rsauentr-slgtc,
lt_r_reps TYPE RANGE OF rsauentr-slgrepna,
lt_r_term TYPE RANGE OF rsauentr2-slgltrm2,
lt_r_evts TYPE RANGE OF rslgno,
* ld_evts TYPE rslgno,
ld_src_tx TYPE char40,
ld_offset TYPE sy-tabix.
ls_interval-dat_from = s_bedat-low..
ls_interval-dat_to = s_bedat-high.
ls_interval-tim_from = '000000'.
ls_interval-tim_to = '235959'.
ld_msg_class = '00000002'.
ld_src_tx = ta_audit-seltext.
ta_audit-severity = '2'.
IF s_uname-low IS INITIAL .
s_uname = VALUE #( sign = 'I' option = 'CP' low = '*' ).
APPEND s_uname.
lt_r_user = VALUE #( ( sign = 'I' option = 'CP' low = s_uname-low ) ).""用户名
ELSE.
lt_r_user = VALUE #( ( sign = 'I' option = 'EQ' low = s_uname-low ) ).""用户名
ENDIF.
lt_r_clnt = VALUE #( ( sign = 'I' option = 'CP' low = '*' ) ).""客户端
CALL METHOD go_sal_rf->set_selscr_restrictions
EXPORTING
is_interval = ls_interval
id_max_severity = ta_audit-severity
** it_r_server =
it_r_client = lt_r_clnt
it_r_user = lt_r_user
it_r_term = lt_r_term
it_r_tran = lt_r_tran
it_r_reps = lt_r_reps
it_r_evts = lt_r_evts
id_msg_class = ld_msg_class
id_src_txt = ld_src_tx
id_statistic = abap_true
RECEIVING
ed_failed = ld_failed.
* get all RFC destination defined in this system
CALL FUNCTION 'RFC_GET_LOCAL_DESTINATIONS' """服务器
EXPORTING
consistency_check = space
TABLES
localdest = local_dests
EXCEPTIONS
not_available = 1
OTHERS = 0.
CALL FUNCTION 'RSLG_SEL_DUMP'
IMPORTING
itself = ls_sel_slg.
CALL FUNCTION 'RSAU_SEL_DUMP'
IMPORTING
itself = ls_sel_au.
CLEAR:
entriestab, rec_cnts[], audit_file_stat.
ld_file_no = 1. "Start new file sequence
ls_sel_slg-whichlog = 'A'.
ls_sel_slg-rfcdest = 'RFCDEST'.
ls_sel_slg-date = s_bedat-low.
ls_sel_slg-time = '00000000'.
ls_sel_slg-startdate = ls_sel_slg-date && ls_sel_slg-time.
ls_sel_slg-edate = s_bedat-high.
ls_sel_slg-etime = '23595900'.
ls_sel_slg-stop_date = ls_sel_slg-edate && ls_sel_slg-etime.
ls_sel_slg-user = s_uname-low.
ls_sel_au = VALUE #( subclasid = '2' severity = '2' selclient = '*' ).
LOOP AT local_dests ASSIGNING FIELD-SYMBOL(<fs_dests>).
CLEAR:
lt_entriestab, lt_audit_file, ld_mess.
" Use auxiliary table, so that the growing main table is
" not copied to each computer and than back again.
ls_sel_slg-rfcdest = <fs_dests>-rfcdest.
CALL FUNCTION 'RSAU_READ_FILE' DESTINATION <fs_dests>-rfcdest
EXPORTING
selection = ls_sel_slg
selection_audit = ls_sel_au
file_no_old = ld_file_no
IMPORTING
end_reason = end_reason
end_info = end_info
counters = ls_recordcnt
file_no_new = ld_file_no
TABLES
syslog_in_table = lt_entriestab
audit_file_stat = lt_audit_file
EXCEPTIONS
system_failure = 2 MESSAGE ld_mess
communication_failure = 3 MESSAGE ld_mess.
IF sy-subrc <> 0.
ls_rec_cnts-errrc = sy-subrc.
ls_rec_cnts-errmess = ld_mess.
ELSE.
APPEND LINES OF lt_entriestab TO entriestab.
APPEND LINES OF lt_audit_file TO audit_file_stat.
MOVE-CORRESPONDING ls_recordcnt TO ls_rec_cnts.
ENDIF.
APPEND ls_rec_cnts TO rec_cnts.
CLEAR ls_recordcnt.
ENDLOOP.
LOOP AT entriestab ASSIGNING FIELD-SYMBOL(<fs_rec>).
ADD 1 TO ls_recordcnt-total.
ld_rc = go_sal_rf->check_and_collect_record( <fs_rec> ).
ENDLOOP.
TYPES sy_list_outtab TYPE cl_sal_read_files=>ts_out_ext.
TYPES ty_rsau_t_list TYPE STANDARD TABLE OF sy_list_outtab.
DATA: mt_outtab_l TYPE ty_rsau_t_list.
go_sal_rf->get_result_tab( EXPORTING id_reset = abap_false
CHANGING et_out_ext = mt_outtab_l ).
* set start and end of evaluation for header line
SORT mt_outtab_l BY algdate algtime.
IF p_detail IS NOT INITIAL.
DELETE mt_outtab_l WHERE param1 <> 'A' .
DELETE mt_outtab_l WHERE param2 <> '0' .
DELETE mt_outtab_l WHERE param3 <> 'P'.
ENDIF.
IF sy-batch IS NOT INITIAL.
DATA:lt_ztbcrsaulist TYPE TABLE OF ztbcrsaulist,ls_ztbcrsaulist LIKE LINE OF lt_ztbcrsaulist.
MOVE-CORRESPONDING mt_outtab_l TO lt_ztbcrsaulist.
* ls_ztbcrsaulist-zcount = 1.
* MODIFY lt_ztbcrsaulist FROM ls_ztbcrsaulist TRANSPORTING zcount.
LOOP AT lt_ztbcrsaulist ASSIGNING FIELD-SYMBOL(<ls_ztbcrsaulist>).
<ls_ztbcrsaulist>-zcount = 1.
ENDLOOP.
IF lt_ztbcrsaulist[] IS NOT INITIAL.
MODIFY ztbcrsaulist FROM TABLE lt_ztbcrsaulist[].
CLEAR:lt_ztbcrsaulist[].
ENDIF.
MESSAGE s002(zmm01).
RETURN.
ENDIF.
ELSE.
SELECT * FROM ztbcrsaulist INTO CORRESPONDING FIELDS OF TABLE @mt_outtab_l WHERE alguser IN @s_uname AND algdate IN @s_bedat.
ENDIF.
DATA:lv_title TYPE lvc_title.
IF p_times IS NOT INITIAL.
SELECT a~alguser AS user,b~name_last AS name,b~department,alglterm,1 AS times
FROM @mt_outtab_l AS a
LEFT JOIN user_addr AS b
ON a~alguser = b~bname
WHERE param1 = 'A' AND param2 = '0' AND param3 = 'P'
INTO TABLE @DATA(lt_out1).
SELECT user,name,department,SUM( times ) AS count
FROM @lt_out1 AS a
GROUP BY user,name,department
INTO TABLE @DATA(lt_out).
SORT lt_out BY count DESCENDING.
gt_fieldcat = VALUE #(
( fieldname = 'USER' coltext = '用户' key = 'X' )
( fieldname = 'NAME' coltext = '用户姓名' )
( fieldname = 'DEPARTMENT' coltext = '部门' )
( fieldname = 'COUNT' coltext = '总登录次数' do_sum = 'X' )
).
DATA(lv_sum) = lines( lt_out ).
lv_title = lv_sum.
CONDENSE lv_title NO-GAPS.
lv_title = '共' && lv_title && '条数据'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_grid_title = lv_title
* i_structure_name = 'TSTC'
* i_callback_pf_status_set = 'FRM_PF_STATUS'
* i_callback_user_command = 'FRM_USER_COMMAND3'
* i_grid_settings = gv_settings
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat[]
i_save = 'A'
TABLES
t_outtab = lt_out
EXCEPTIONS
program_error = 1
OTHERS = 2.
ELSE.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_buffer_active = 'X'
i_structure_name = 'RSAULIST'
CHANGING
ct_fieldcat = gt_fieldcat[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
DATA(lv_sum2) = lines( mt_outtab_l ).
lv_title = lv_sum2.
CONDENSE lv_title NO-GAPS.
lv_title = '共' && lv_title && '条数据'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_grid_title = lv_title
* i_callback_pf_status_set = 'FRM_SET_STATUS'
* i_callback_user_command = 'FRM_SET_USERCOMMAND'
* i_grid_title = l_title
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat[]
i_save = 'A'
* is_variant = ls_variant
TABLES
t_outtab = mt_outtab_l[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDIF.
ENDFORM.
Extracted by Direct Download Enterprise version 1.3 - E.G.Mellodew. 1998-2004 UK. Sap Release 752