*&---------------------------------------------------------------------*
*& Report ZRTOT_USER_COLLECTOR
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zrtot_user_collector.
***********************************************************************
* Project Name : Tecno SAP Implementation Project
* Program Name : ZRTOT_USER_COLLECTOR
* Description : 报表使用分析
* Date/Autohr : 2015-10-13 15:03:03
* Use Department:
***********************************************************************
* M O D I F I C A T I O N L O G
***********************************************************************
* ChangeDate Programmer Request Description
* ========== ========== ========== =================================
*
***********************************************************************
"引用
TYPE-POOLS : slis.
TABLES:usr02,swncaggusertcode,rs38m, user_addr.
"前端查询的历史记录
TYPES : BEGIN OF ty_alv,
account TYPE swncaggusertcode-account,
name TYPE adrp-name_first,
entry_id TYPE swncaggusertcode-entry_id,
count TYPE swncaggusertcode-count,
dcount TYPE swncaggusertcode-dcount,
ucount TYPE swncaggusertcode-ucount,
bcount TYPE swncaggusertcode-bcount,
ecount TYPE swncaggusertcode-ecount,
scount TYPE swncaggusertcode-scount,
luw_count TYPE swncaggusertcode-luw_count,
tmbytesin TYPE swncaggusertcode-tmbytesin,
tmbytesout TYPE swncaggusertcode-tmbytesout,
respti TYPE swncaggusertcode-respti,
respti_avg TYPE swncaggusertcode-respti,
procti TYPE swncaggusertcode-procti,
procti_avg TYPE swncaggusertcode-procti,
cputi TYPE swncaggusertcode-cputi,
cputi_avg TYPE swncaggusertcode-cputi,
queueti TYPE swncaggusertcode-queueti,
queueti_avg TYPE swncaggusertcode-queueti,
rollwaitti TYPE swncaggusertcode-rollwaitti,
rollwaitti_avg TYPE swncaggusertcode-rollwaitti,
guitime TYPE swncaggusertcode-guitime,
guitime_avg TYPE swncaggusertcode-guitime,
guicnt TYPE swncaggusertcode-guicnt,
guinettime TYPE swncaggusertcode-guinettime,
guinettime_avg TYPE swncaggusertcode-guinettime,
date TYPE sy-datum,
department TYPE user_addr-department,
END OF ty_alv.
DATA:gs_alv TYPE ty_alv,
gt_alv TYPE STANDARD TABLE OF ty_alv.
*data: gt_usertcode type swnc_t_aggusertcode,
* gs_usertcode type swncaggusertcode.
TYPES: BEGIN OF ty_usertcode.
INCLUDE STRUCTURE swncaggusertcode.
TYPES: date TYPE sy-datum,
department TYPE user_addr-department,
END OF ty_usertcode.
DATA: gt_usertcode TYPE TABLE OF ty_usertcode,
gs_usertcode TYPE ty_usertcode.
DATA: gt_fieldcat TYPE lvc_t_fcat WITH HEADER LINE, "ALV字段控制
gw_layout TYPE lvc_s_layo, "ALV格式控制
gt_events TYPE slis_t_event WITH HEADER LINE, "ALV标题
g_title TYPE lvc_title.
*======================================================================*
* Selection Screen
*======================================================================*
SELECTION-SCREEN BEGIN OF BLOCK blk01 WITH FRAME TITLE TEXT-b01.
* parameter: p_month type dats default sy-datum obligatory."查询月份
SELECT-OPTIONS: p_month FOR sy-datum OBLIGATORY."查询月份
SELECT-OPTIONS:s_user FOR usr02-bname DEFAULT sy-uname MODIF ID m1.
SELECT-OPTIONS:s_depart FOR user_addr-department MODIF ID m2 no-DISPLAY."部门
SELECT-OPTIONS:s_tc FOR rs38m-programm.
SELECTION-SCREEN END OF BLOCK blk01.
SELECTION-SCREEN: BEGIN OF BLOCK bl02 WITH FRAME TITLE TEXT-b03.
PARAMETER: "r_deteai RADIOBUTTON GROUP g1 ,
r_daysum RADIOBUTTON GROUP g1 DEFAULT 'X',
r_monsum RADIOBUTTON GROUP g1.
SELECTION-SCREEN: END OF BLOCK bl02.
*SELECTION-SCREEN: BEGIN OF BLOCK bl03 WITH FRAME TITLE TEXT-b04.
* PARAMETER: c_person RADIOBUTTON GROUP g2 DEFAULT 'X' USER-COMMAND u01,
* c_depart RADIOBUTTON GROUP g2 .
*SELECTION-SCREEN: END OF BLOCK bl03.
*
*SELECTION-SCREEN BEGIN OF BLOCK blk02 WITH FRAME TITLE TEXT-b02.
* SELECTION-SCREEN BEGIN OF LINE.
* SELECTION-SCREEN COMMENT 1(79) TEXT-100.
* SELECTION-SCREEN END OF LINE.
* SELECTION-SCREEN BEGIN OF LINE.
* SELECTION-SCREEN COMMENT 1(79) TEXT-101.
* SELECTION-SCREEN END OF LINE.
* SELECTION-SCREEN BEGIN OF LINE.
* SELECTION-SCREEN COMMENT 1(79) TEXT-102.
* SELECTION-SCREEN END OF LINE.
*SELECTION-SCREEN END OF BLOCK blk02.
DEFINE append_fieldcat.
CLEAR gt_fieldcat.
gt_fieldcat-fieldname = &1.
gt_fieldcat-coltext = &2.
gt_fieldcat-scrtext_l = &2.
gt_fieldcat-scrtext_m = &2.
gt_fieldcat-scrtext_s = &2.
gt_fieldcat-no_zero = &3.
gt_fieldcat-outputlen = &4.
gt_fieldcat-edit = &5.
APPEND gt_fieldcat.
END-OF-DEFINITION.
*======================================================================*
* Includes
*======================================================================*
*** Global Data Declear
*INCLUDE <program>_c01. "Class Definition
*INCLUDE <program>_top. "Global Variable
*INCLUDE <program>_o01. "PBO
*INCLUDE <program>_i01. "PAI
*INCLUDE <program>_f01. "Subroutine(FORMS)
*======================================================================*
* Selection Screen Events
*======================================================================*
*** Maintain Selection Screen Output
*AT SELECTION-SCREEN OUTPUT.
*** F4 Value Help
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
* PERFORM frm_f4_path CHANGING p_path.
*** Check Input Data
*AT SELECTION-SCREEN.
*AT SELECTION-SCREEN ON <f>.
*AT SELECTION-SCREEN ON BLOCK <>.
****CHECK ON SELECT SCREEN INPUT
*======================================================================*
* Report events
*======================================================================*
** initial data
INITIALIZATION.
*部门描述EARCH HELP
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_depart-low.
* PERFORM frm_f4_for_s_stext USING 's_depart-low'.
*
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_depart-high.
* PERFORM frm_f4_for_s_stext USING 's_depart-high'.
AT SELECTION-SCREEN OUTPUT.
PERFORM frm_modify_screen.
** Prepare Report Data
START-OF-SELECTION.
PERFORM frm_get_data.
PERFORM frm_data_count.
** Output Report
END-OF-SELECTION.
PERFORM frm_alv_out.
*======================================================================*
* List events
*======================================================================*
*** Page header
*TOP-OF-PAGE.
*** Page Header After First List
*TOP-OF-PAGE during line-selection
*** Page Footer
*END-OF-PAGE.
*** When Double Click
*AT LINE-SELECTION.
*** When Click Some Icon (function code)
*AT USER-COMMAND.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_get_data .
DATA: gt_usertcode_copy TYPE swnc_t_aggusertcode WITH HEADER LINE.
* data: gt_usertcode_copy type swncaggusertcode .
DATA: gt_days TYPE TABLE OF casdayattr WITH HEADER LINE.
IF p_month-high IS INITIAL.
p_month-high = p_month-low.
ENDIF.
"获取详细日期
CALL FUNCTION 'DAY_ATTRIBUTES_GET'
EXPORTING
* FACTORY_CALENDAR = ' '
* HOLIDAY_CALENDAR = ' '
date_from = p_month-low
date_to = p_month-high
language = sy-langu
* NON_ISO = ' '
* IMPORTING
* YEAR_OF_VALID_FROM =
* YEAR_OF_VALID_TO =
* RETURNCODE =
TABLES
day_attributes = gt_days[]
EXCEPTIONS
factory_calendar_not_found = 1
holiday_calendar_not_found = 2
date_has_invalid_format = 3
date_inconsistency = 4
OTHERS = 5.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
LOOP AT gt_days.
REFRESH gt_usertcode_copy.
CALL FUNCTION 'SWNC_COLLECTOR_GET_AGGREGATES'
EXPORTING
component = 'TOTAL'
periodtype = 'D'
periodstrt = gt_days-date
TABLES
usertcode = gt_usertcode_copy
EXCEPTIONS
no_data_found = 1
OTHERS = 2.
DELETE gt_usertcode_copy WHERE tasktype <> '01'.
LOOP AT gt_usertcode_copy.
MOVE-CORRESPONDING gt_usertcode_copy TO gs_usertcode.
gs_usertcode-date = gt_days-date.
APPEND gs_usertcode TO gt_usertcode[].
ENDLOOP.
* APPEND LINES OF gt_usertcode_copy[] to gt_usertcode[].
ENDLOOP.
* call function 'SWNC_COLLECTOR_GET_AGGREGATES'
*
* exporting
* component = 'TOTAL'
* periodtype = 'M'
* periodstrt = p_month
* tables
* usertcode = gt_usertcode
* exceptions
* no_data_found = 1
* others = 2.
*
* delete gt_usertcode where tasktype <> '01'.
LOOP AT gt_usertcode INTO gs_usertcode WHERE entry_id(1) = 'Z'.
gs_usertcode-entry_id = gs_usertcode-entry_id(72).
MODIFY gt_usertcode FROM gs_usertcode.
ENDLOOP.
LOOP AT gt_usertcode INTO gs_usertcode WHERE entry_id(1) = 'Z' AND account IN s_user AND entry_id IN s_tc.
MOVE-CORRESPONDING gs_usertcode TO gs_alv.
SELECT SINGLE adrp~name_last department INTO ( gs_alv-name,gs_alv-department )
FROM adrp INNER JOIN usr21 ON adrp~persnumber = usr21~persnumber
INNER JOIN usr02 ON usr21~bname = usr02~bname
INNER JOIN user_addr ON user_addr~bname = usr21~bname
WHERE usr02~bname = gs_alv-account
AND department IN s_depart.
* gs_alv-respti_avg = gs_alv-respti / gs_alv-count.
* gs_alv-procti_avg = gs_alv-procti / gs_alv-count.
* gs_alv-cputi_avg = gs_alv-cputi / gs_alv-count.
* gs_alv-queueti_avg = gs_alv-queueti / gs_alv-count.
* gs_alv-rollwaitti_avg = gs_alv-rollwaitti / gs_alv-count.
* gs_alv-guitime_avg = gs_alv-guitime / gs_alv-count.
* gs_alv-guinettime_avg = gs_alv-guinettime / gs_alv-count.
APPEND gs_alv TO gt_alv.
CLEAR gs_alv.
ENDLOOP.
DELETE gt_alv WHERE department NOT IN s_depart.
ENDFORM. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form FRM_ALV_OUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_alv_out .
PERFORM frm_fieldcat.
PERFORM frm_layout.
PERFORM frm_output.
ENDFORM. " FRM_ALV_OUT
*&---------------------------------------------------------------------*
*& Form FRM_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_fieldcat .
append_fieldcat 'DEPARTMENT' '部门' '' '' ''.
IF r_daysum = 'X'.
append_fieldcat 'DATE' '日期' '' '' ''.
ENDIF.
IF r_monsum = 'X'.
append_fieldcat 'DATE' '月份' '' '' ''.
ENDIF.
* IF c_person = 'X'.
append_fieldcat 'ACCOUNT' '用户' '' '' ''.
append_fieldcat 'NAME' '用户名' '' '' ''.
* ENDIF.
append_fieldcat 'ENTRY_ID' '事物/报表/作业' '' '' ''.
append_fieldcat 'COUNT' '执行次数' '' '' ''.
*append_fieldcat 'DCOUNT' 'DCount' '' '' ''.
*append_fieldcat 'UCOUNT' 'UCount' '' '' ''.
*append_fieldcat 'BCOUNT' 'BCount' '' '' ''.
*append_fieldcat 'ECOUNT' 'ECount' '' '' ''.
*append_fieldcat 'SCOUNT' 'SCount' '' '' ''.
*append_fieldcat 'LUW_COUNT' 'LUW Count' '' '' ''.
append_fieldcat 'TMBYTESIN' '总输入(字节)' '' '' ''.
append_fieldcat 'TMBYTESOUT' '总输出(字节)' '' '' ''.
append_fieldcat 'RESPTI' '总响应时间' '' '' ''.
append_fieldcat 'RESPTI_AVG' '平均响应时间' '' '' ''.
append_fieldcat 'PROCTI' '总处理时间' '' '' ''.
append_fieldcat 'PROCTI_AVG' '平均处理时间' '' '' ''.
append_fieldcat 'CPUTI' '总CPU' '' '' ''.
append_fieldcat 'CPUTI_AVG' '平均CPU' '' '' ''.
append_fieldcat 'QUEUETI' '总队列时间' '' '' ''.
append_fieldcat 'QUEUETI_AVG' '平均队列时间' '' '' ''.
append_fieldcat 'ROLLWAITTI' '回滚等待时间' '' '' ''.
append_fieldcat 'ROLLWAITTI_AVG' '平均回滚等待时间' '' '' ''.
append_fieldcat 'GUITIME' 'GUI时间' '' '' ''.
append_fieldcat 'GUITIME_AVG' '平均GUI时间' '' '' ''.
append_fieldcat 'GUICNT' '通讯次数' '' '' ''.
append_fieldcat 'GUINETTIME' 'GUI通讯时间' '' '' ''.
append_fieldcat 'GUINETTIME_AVG' '平均GUI通讯时间' '' '' ''.
ENDFORM. " FRM_FIELDCAT
*&---------------------------------------------------------------------*
*& Form FRM_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_layout .
gw_layout-cwidth_opt = 'X'.
gw_layout-zebra = 'X'.
ENDFORM. " FRM_LAYOUT
*&---------------------------------------------------------------------*
*& Form FRM_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_output .
* l_repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
i_callback_program = sy-repid
* i_callback_pf_status_set = 'FRM_SET_STATUS'
* i_callback_user_command = 'FRM_USER_COMMAND'
i_callback_top_of_page = 'TOP-OF-PAGE'
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
is_layout_lvc = gw_layout
it_fieldcat_lvc = gt_fieldcat[]
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS_LVC =
* IT_SORT_LVC =
* IT_FILTER_LVC =
* IT_HYPERLINK =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
i_save = 'A'
* IS_VARIANT =
it_events = gt_events[]
* IT_EVENT_EXIT =
* IS_PRINT_LVC =
* IS_REPREP_ID_LVC =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP =
* I_HTML_HEIGHT_END =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO_LVC =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = gt_alv
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " FRM_OUTPUT
*&---------------------------------------------------------------------*
*& FORM TOP-OF-PAGE
*&---------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
FORM top-of-page .
DATA: l_line TYPE slis_listheader,
l_t_header TYPE slis_t_listheader.
CLEAR l_line.
l_line-typ = 'H'.
* IF P_PARAM1 = 'X'.
l_line-info = '报表使用率分析表'.
* ELSEIF P_PARAM2 = 'X'.
* L_LINE-INFO = '报表访问次数明细'.
* ENDIF.
APPEND l_line TO l_t_header.
l_line-typ = 'H'.
CONCATENATE p_month-low(4) '年' p_month-low+4(2) '月' p_month-low+6(2) '日' '至' p_month-high(4) '年' p_month-high+4(2) '月' p_month-high+6(2) '日' INTO l_line-info.
APPEND l_line TO l_t_header.
l_line-info = '单位:次/毫秒/字节'.
APPEND l_line TO l_t_header.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = l_t_header.
ENDFORM. "TOP-OF-PAGE
*&---------------------------------------------------------------------*
*& Form FRM_DATA_COUNT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_data_count .
DATA: gt_alv_copy TYPE STANDARD TABLE OF ty_alv.
APPEND LINES OF gt_alv[] TO gt_alv_copy[].
REFRESH gt_alv.
"按部门
"按天汇总
if r_daysum = 'X' .
LOOP AT gt_alv_copy INTO gs_alv.
* CLEAR gs_alv-department.
COLLECT gs_alv INTO gt_alv.
ENDLOOP.
"按个人
"按月汇总
ELSEIF r_monsum = 'X' .
LOOP AT gt_alv_copy INTO gs_alv.
* CLEAR gs_alv-department.
gs_alv-date = gs_alv-date(6).
COLLECT gs_alv INTO gt_alv.
ENDLOOP.
ENDIF.
LOOP AT gt_alv INTO gs_alv .
gs_alv-respti_avg = gs_alv-respti / gs_alv-count.
gs_alv-procti_avg = gs_alv-procti / gs_alv-count.
gs_alv-cputi_avg = gs_alv-cputi / gs_alv-count.
gs_alv-queueti_avg = gs_alv-queueti / gs_alv-count.
gs_alv-rollwaitti_avg = gs_alv-rollwaitti / gs_alv-count.
gs_alv-guitime_avg = gs_alv-guitime / gs_alv-count.
gs_alv-guinettime_avg = gs_alv-guinettime / gs_alv-count.
MODIFY gt_alv FROM gs_alv.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_MODIFY_SCREEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_modify_screen .
* LOOP AT SCREEN.
* CASE screen-group1.
* WHEN 'M1'.
* IF c_person = abap_true.
* screen-active = '1'.
* ELSE.
* screen-active = '0'.
* REFRESH s_user.
* ENDIF.
* WHEN 'M2'.
* IF c_depart = abap_true.
* screen-active = '1'.
* ELSE.
* screen-active = '0'.
* REFRESH s_depart.
* ENDIF.
* WHEN OTHERS.
* ENDCASE.
* MODIFY SCREEN.
* ENDLOOP.
ENDFORM.
FORM frm_f4_for_s_stext USING dyfield.
TYPES:BEGIN OF ty_depart,
department TYPE user_addr-department,
END OF ty_depart.
DATA: gt_depart TYPE TABLE OF ty_depart,
gs_depart TYPE ty_depart.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_depart
FROM user_addr.
SORT gt_depart BY department.
DELETE ADJACENT DUPLICATES FROM gt_depart COMPARING department.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'DEPARTMENT'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = dyfield
value_org = 'S'
* callback_program = sy-repid
* callback_form = 'CM_FORM'
TABLES
value_tab = gt_depart
* return_tab = lt_return
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.
SAP 报表使用次数报表
最新推荐文章于 2024-04-02 11:58:51 发布