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