• SE38 程序/事务码修改日志报表


    场景:
    查看程序修改日志,修改次数

    在这里插入图片描述
    在这里插入图片描述
    源码
    REPORT zcp.


    • 事务代码: ZCP
    • 程序名称: ZCP
    • 程序目的: ZCP-程序修改日志
    • 开发人员:
      *(修改日志)--------------------------------------------------------
    • 日志号 修改人 修改时间 修改说明 传输号码

    • 001

    ======================================================================

    • INCLUDE
      ======================================================================
      INCLUDE zcp_top.
      INCLUDE zcp_f01.

    ======================================================================

    • AT SELECTION-SCREEN.
      ======================================================================
      AT SELECTION-SCREEN OUTPUT.

    ======================================================================

    • INITIALIZATION
      ======================================================================
      INITIALIZATION.
      "修改日期默认30天内
      s_datum-sign = ‘I’. s_datum-option = ‘BT’.
      s_datum-low = sy-datum - 30 .s_datum-high = sy-datum.APPEND s_datum.

    ======================================================================

    • START-OF-SELECTION.
      ======================================================================
      START-OF-SELECTION.

    PERFORM frm_get_data."取数

    ======================================================================

    • END-OF-SELECTION.
      ======================================================================
      END-OF-SELECTION.

    PERFORM frm_alv_fieldcat."修改设置字段属性
    PERFORM frm_alv_layout."设置输出格式
    PERFORM frm_alv_display."ALV显示

    &---------------------------------------------------------------------
    *& 包含 ZCP_TOP
    &---------------------------------------------------------------------
    TABLES:vrsd,tstc.

    TYPES:BEGIN OF ty_alv_a,
    tcode TYPE char100, "事务码
    ttext TYPE char100, "事务码描述
    trkorr TYPE korrnum, "请求号
    pgmna TYPE vrsd-objname, "程序名
    type TYPE char20, "程序名
    uname TYPE uname, "账号
    uname_text TYPE tr_as4user, "账号名称
    as4user_text TYPE as4text, "请求或任务的所有者
    as4date_dev TYPE as4date, "最后更改的日期
    as4time_dev TYPE as4time, "上次更改时间
    as4text TYPE as4text, "资源库对象的简短描述
    rels TYPE versrels, "版本管理: 版本
    END OF ty_alv_a.
    DATA:gs_alv TYPE ty_alv_a,
    gt_alv_a TYPE STANDARD TABLE OF ty_alv_a,
    gt_alv_b TYPE STANDARD TABLE OF ty_alv_a.

    TYPES:BEGIN OF ty_alv,
    tcode TYPE char100, "事务码
    ttext TYPE char100, "事务码描述
    type TYPE char20, "程序名
    xgcs TYPE i, "修改次数
    uname TYPE uname, "账号
    uname_text TYPE tr_as4user, "账号名称
    as4user_text TYPE as4text, "请求或任务的所有者
    as4date_dev TYPE as4date, "最后更改的日期
    as4time_dev TYPE as4time, "上次更改时间
    rels TYPE versrels, "版本管理: 版本
    END OF ty_alv.
    DATA:gt_alv TYPE STANDARD TABLE OF ty_alv.

    DATA:gt_fieldcat TYPE lvc_t_fcat, "字段目录内表
    gt_fieldcat2 TYPE lvc_t_fcat, "字段目录内表
    gs_fieldcat TYPE lvc_s_fcat, "字段目录工作区
    gs_layout TYPE lvc_s_layo. "用于定义ALV表单的相关格式、属性

    DATA:go_docking TYPE REF TO cl_gui_docking_container, "全屏自适应
    go_alvgrid_dt TYPE REF TO cl_gui_alv_grid. "全屏自适应

    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
    SELECT-OPTIONS:
    s_tcode FOR tstc-pgmna,

    •            s_pgmna  FOR tstc-pgmna,
                s_datum  FOR vrsd-datum,
                s_author FOR vrsd-author,
      
      • 1
      • 2
      • 3
    •            s_zeit FOR vrsd-zeit,
                s_tr FOR vrsd-korrnum.
      
      • 1
      • 2

    SELECTION-SCREEN END OF BLOCK b1.

    &---------------------------------------------------------------------
    *& 包含 ZCP_F01
    &---------------------------------------------------------------------
    &---------------------------------------------------------------------
    *& Form FRM_GET_DATA
    &---------------------------------------------------------------------

    •   取数
      
      • 1

    ----------------------------------------------------------------------
    FORM frm_get_data .

    DATA:lv_objname TYPE versobjnam.
    DATA:lt_alv_a TYPE STANDARD TABLE OF ty_alv_a.
    DATA:ls_alv TYPE ty_alv.

    IF s_tcode[] IS NOT INITIAL.

    "事务码
    SELECT
      tcode,
      pgmna
      FROM tstc
      INTO TABLE @DATA(lt_tstc)
      WHERE tcode IN @s_tcode.
    
    LOOP AT lt_tstc INTO DATA(ls_tstc) .
    
      lv_objname = '%' && ls_tstc-pgmna && '%'.
    
      SELECT
      objname AS pgmna    "版本管理:对象名称
      korrnum AS trkorr     "版本管理: 版本请求号
      author  AS uname      "版本管理: 版本创建者
      datum  AS as4date_dev       "版本管理: 版本创建日期
      zeit   AS as4time_dev       "版本管理: 版本创建时间
      rels          "版本管理: 版本
      FROM vrsd
      APPENDING CORRESPONDING FIELDS OF TABLE gt_alv_a
      WHERE korrnum <> ''
      AND objname LIKE lv_objname
      AND author IN s_author
      AND korrnum IN s_tr
      AND datum IN s_datum.
    
    ENDLOOP.
    
    LOOP AT s_tcode.
    
      IF s_tcode-low IS NOT INITIAL.
        lv_objname = '%' && s_tcode-low && '%'.
    
        SELECT
        objname AS pgmna    "版本管理:对象名称
        korrnum AS trkorr     "版本管理: 版本请求号
        author  AS uname      "版本管理: 版本创建者
        datum  AS as4date_dev       "版本管理: 版本创建日期
        zeit   AS as4time_dev       "版本管理: 版本创建时间
        rels          "版本管理: 版本
        FROM vrsd
        APPENDING CORRESPONDING FIELDS OF TABLE gt_alv_a
        WHERE korrnum <> ''
        AND objname LIKE lv_objname
        AND author IN s_author
        AND korrnum IN s_tr
        AND datum IN s_datum.
    
      ELSEIF s_tcode-high IS NOT INITIAL.
        lv_objname = '%' && s_tcode-high && '%'.
    
        SELECT
        objname AS pgmna    "版本管理:对象名称
        korrnum AS trkorr     "版本管理: 版本请求号
        author  AS uname      "版本管理: 版本创建者
        datum  AS as4date_dev       "版本管理: 版本创建日期
        zeit   AS as4time_dev       "版本管理: 版本创建时间
        rels          "版本管理: 版本
        FROM vrsd
        APPENDING CORRESPONDING FIELDS OF TABLE gt_alv_a
        WHERE korrnum <> ''
        AND objname LIKE lv_objname
        AND author IN s_author
        AND korrnum IN s_tr
        AND datum IN s_datum.
    
      ENDIF.
    ENDLOOP.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69

    ELSE.

    SELECT
    objname AS pgmna    "版本管理:对象名称
    korrnum AS trkorr     "版本管理: 版本请求号
    author  AS uname      "版本管理: 版本创建者
    datum  AS as4date_dev       "版本管理: 版本创建日期
    zeit   AS as4time_dev       "版本管理: 版本创建时间
    rels          "版本管理: 版本
    FROM vrsd
    APPENDING CORRESPONDING FIELDS OF TABLE gt_alv_a
    WHERE author IN s_author
      AND korrnum IN s_tr
      AND datum IN s_datum.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    ENDIF.

    SORT gt_alv_a.
    DELETE ADJACENT DUPLICATES FROM gt_alv_a COMPARING ALL FIELDS.

    IF gt_alv_a[] IS INITIAL.
    MESSAGE ‘没有符合条件的数据’ TYPE ‘S’ DISPLAY LIKE ‘E’.
    LEAVE LIST-PROCESSING.

    ELSE.
    SELECT
    trkorr,
    as4text
    FROM e07t
    INTO TABLE @DATA(lt_e07t)
    FOR ALL ENTRIES IN @gt_alv_a
    WHERE langu = ‘1’
    AND trkorr = @gt_alv_a-trkorr.
    SORT lt_e07t BY trkorr.

    SELECT
      name_textc,
      bname
      FROM user_addr
      INTO TABLE @DATA(lt_user_addr) "完整的人员名称
      FOR ALL ENTRIES IN @gt_alv_a
      WHERE bname = @gt_alv_a-uname.
    SORT lt_user_addr BY bname.
    
    SELECT
      tcode,
      ttext
      FROM tstcv
      INTO TABLE @DATA(lt_tstcv)
      WHERE sprsl = '1'
        AND tcode LIKE 'Z%'.
    SORT lt_tstcv BY tcode.
    
    SELECT
      *
      FROM trdirt
      INTO TABLE @DATA(lt_trdirt)
      WHERE sprsl = '1'
        AND name LIKE 'Z%'.
    SORT lt_trdirt BY name.
    
    SELECT
      *
      FROM dd02t
      INTO TABLE @DATA(lt_dd02t)
      WHERE ddlanguage = '1'
        AND tabname LIKE 'Z%'.
    SORT lt_dd02t BY tabname.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    ENDIF.

    "类型判断
    LOOP AT gt_alv_a INTO gs_alv.

    READ TABLE lt_e07t INTO DATA(ls_e07t) WITH KEY trkorr = gs_alv-trkorr BINARY SEARCH.
    IF sy-subrc = 0.
      gs_alv-as4text = ls_e07t-as4text.
    ENDIF.
    
    READ TABLE lt_user_addr INTO DATA(ls_user_addr) WITH KEY bname = gs_alv-uname BINARY SEARCH.
    IF sy-subrc = 0.
      gs_alv-uname_text = ls_user_addr-name_textc.
    ENDIF.
    
    IF gs_alv-tcode IS INITIAL.
      LOOP AT lt_tstcv INTO DATA(ls_tstcv) .
    
        DATA(lv_len) = strlen( ls_tstcv-tcode ).
    
        IF ls_tstcv-tcode = gs_alv-pgmna+0(lv_len).
          gs_alv-tcode = ls_tstcv-tcode.
          gs_alv-ttext = ls_tstcv-ttext.
          gs_alv-type = '事务码'.
          APPEND gs_alv TO lt_alv_a.
        ENDIF.
    
      ENDLOOP.
    ENDIF.
    
    IF gs_alv-tcode IS INITIAL.
      SELECT SINGLE stext
        INTO gs_alv-ttext
        FROM tftit
        WHERE spras = '1'
          AND funcname = gs_alv-pgmna.
      IF sy-subrc = 0.
        IF gs_alv-ttext IS NOT INITIAL.
          gs_alv-tcode = gs_alv-pgmna.
          gs_alv-type = '接口'.
          APPEND gs_alv TO lt_alv_a.
        ENDIF.
      ENDIF.
    ENDIF.
    
    IF gs_alv-tcode IS INITIAL.
      READ TABLE lt_trdirt INTO DATA(ls_trdirt) WITH KEY name = gs_alv-pgmna BINARY SEARCH.
      IF sy-subrc = 0.
        gs_alv-tcode = ls_trdirt-name.
        gs_alv-ttext = ls_trdirt-text.
        gs_alv-type = '程序'.
        APPEND gs_alv TO lt_alv_a.
      ENDIF.
    ENDIF.
    
    IF gs_alv-tcode IS INITIAL.
      READ TABLE lt_dd02t INTO DATA(ls_dd02t) WITH KEY tabname = gs_alv-pgmna BINARY SEARCH.
      IF sy-subrc = 0.
        gs_alv-tcode = ls_dd02t-tabname.
        gs_alv-ttext = ls_dd02t-ddtext.
        gs_alv-type = '自荐表'.
        APPEND gs_alv TO lt_alv_a.
      ENDIF.
    ENDIF.
    
    IF gs_alv-tcode IS INITIAL.
      gs_alv-tcode = gs_alv-pgmna.
      gs_alv-ttext = gs_alv-pgmna.
      APPEND gs_alv TO lt_alv_a.
    ENDIF.
    
    MODIFY gt_alv_a FROM gs_alv.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67

    ENDLOOP.

    "保留最准确的一条数据
    SORT lt_alv_a BY pgmna
    uname
    uname_text
    trkorr
    as4user_text
    as4date_dev
    as4time_dev
    as4text
    rels
    tcode DESCENDING

    •             ttext
      
      • 1

      .

      DELETE ADJACENT DUPLICATES FROM lt_alv_a COMPARING pgmna
      uname
      uname_text
      trkorr
      as4user_text
      as4date_dev
      as4time_dev
      as4text
      rels .

      gt_alv_a[] = lt_alv_a[].

      "去重
      SORT gt_alv_a BY tcode trkorr.
      DELETE ADJACENT DUPLICATES FROM gt_alv_a COMPARING tcode trkorr.

      "汇总
      CLEAR ls_alv.
      REFRESH gt_alv.
      DATA:lv_xgcs TYPE i.

      LOOP AT gt_alv_a INTO DATA(ls_alv_a).
      MOVE-CORRESPONDING ls_alv_a TO ls_alv.
      lv_xgcs = lv_xgcs + 1.
      AT END OF tcode.
      ls_alv-xgcs = lv_xgcs.
      APPEND ls_alv TO gt_alv.
      CLEAR ls_alv.
      CLEAR lv_xgcs.
      ENDAT.
      ENDLOOP.

      SORT gt_alv BY xgcs DESCENDING tcode.

    ENDFORM.
    &---------------------------------------------------------------------
    *& Form frm_fieldcat_alv
    &---------------------------------------------------------------------

    •   设置ALV字段属性
      
      • 1

    ----------------------------------------------------------------------
    FORM frm_alv_fieldcat .

    REFRESH gt_fieldcat.
    DEFINE init_fieldcat.
    CLEAR gs_fieldcat.
    gs_fieldcat-fieldname = &1.
    gs_fieldcat-coltext = &2.
    gs_fieldcat-datatype = &3.
    gs_fieldcat-ref_table = &4.
    gs_fieldcat-ref_field = &5.
    gs_fieldcat-inttype = &6.
    gs_fieldcat-ICON = &7.
    gs_fieldcat-EDIT = &8.
    gs_fieldcat-HOTSPOT = &9.
    APPEND gs_fieldcat TO gt_fieldcat.
    END-OF-DEFINITION.

    init_fieldcat ‘TCODE’ ‘事务码’ ‘’ ‘TSTCV’ ‘TCODE’ ‘’ ‘’ ‘’ ‘’ .
    init_fieldcat ‘TTEXT’ ‘事务码描述’ ‘’ ‘TSTCV’ ‘TTEXT’ ‘’ ‘’ ‘’ ‘’ .
    init_fieldcat ‘TYPE’ ‘类型’ ‘’ ‘TSTCV’ ‘TTEXT’ ‘’ ‘’ ‘’ ‘’ .
    init_fieldcat ‘XGCS’ ‘修改次数’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ .
    init_fieldcat ‘UNAME’ ‘最后账号名称’ ‘’ ‘E070’ ‘AS4USER’ ‘’ ‘’ ‘’ ‘’ .
    init_fieldcat ‘UNAME_TEXT’ ‘最后账号名称’ ‘’ ‘USER_ADDR’ ‘NAME_TEXTC’ ‘’ ‘’ ‘’ ‘’ .
    init_fieldcat ‘AS4DATE_DEV’ ‘300-最后更改的日期’ ‘’ ‘E070’ ‘AS4DATE’ ‘’ ‘’ ‘’ ‘’ .
    init_fieldcat ‘AS4TIME_DEV’ ‘300-最后更改时间’ ‘’ ‘E070’ ‘AS4TIME’ ‘’ ‘’ ‘’ ‘’ .
    init_fieldcat ‘RELS’ ‘版本号’ ‘’ ‘VRSD’ ‘VERSRELS’ ‘’ ‘’ ‘’ ‘’ .

    ENDFORM.

    &---------------------------------------------------------------------
    *& Form frm_layout_alv
    &---------------------------------------------------------------------
    *& 设置ALV输出格式
    &---------------------------------------------------------------------
    FORM frm_alv_layout .

    CLEAR gs_layout.

    gs_layout-zebra = ‘X’ . " 使ALV界面呈现颜色交替
    gs_layout-sel_mode = ‘D’ . " 选择模式,"A"在最左端有选择按钮
    gs_layout-cwidth_opt = ‘X’ . " 自动优化列宽

    ENDFORM.

    &---------------------------------------------------------------------
    *& Form frm_alv_display
    &---------------------------------------------------------------------
    *& ALV显示
    &---------------------------------------------------------------------
    FORM frm_alv_display .

    • DATA: i_grid_settings TYPE lvc_s_glay.

    DATA ls_title TYPE lvc_title.
    DESCRIBE TABLE gt_alv LINES DATA(li_lines).
    ls_title = ‘条目数:’ && li_lines.

    • i_grid_settings-edt_cll_cb = ‘X’."ALV 控制: 退出可编辑单元格时回调

    CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC’
    EXPORTING
    i_save = ‘A’
    i_callback_program = sy-repid "当前程序
    is_layout_lvc = gs_layout “界面格式”
    it_fieldcat_lvc = gt_fieldcat “字段属性”

    • i_callback_pf_status_set = 'FRM_SET_PF_STATUS'    "状态
      i_callback_user_command = 'FRM_USER_COMMAND_ALV' "控制指令
      
      • 1
      • 2
    • it_event_exit           = gt_event_exit
      i_grid_title            = ls_title
      
      • 1
      • 2
    • i_grid_settings         = i_grid_settings
      
      • 1
      TABLES
      t_outtab = gt_alv
      EXCEPTIONS
      program_error = 1
      OTHERS = 2.
      IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE ‘S’ NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE ‘E’.
      LEAVE LIST-PROCESSING.
      ENDIF.

    ENDFORM.

    *&---------------------------------------------------------------------
    **& Form frm_set_pf_status
    *&---------------------------------------------------------------------
    ** ALV状态
    *----------------------------------------------------------------------
    *FORM frm_set_pf_status USING extab TYPE slis_t_extab.
    ** SET PF-STATUS ‘XXXX_STATUS’. "EXCLUDING FCODE.
    ** SET TITLEBAR ‘XXXXX’.
    *ENDFORM. "frm_set_pf_status

    &---------------------------------------------------------------------
    *& Form frm_user_command_alv
    &---------------------------------------------------------------------

    •   ALV按钮功能
      
      • 1

    ----------------------------------------------------------------------
    FORM frm_user_command_alv USING r_ucomm LIKE sy-ucomm
    rs_selfield TYPE slis_selfield.

    DATA ls_title TYPE lvc_title.

    开始******** 这段代码加上之后,才能对数据进行实时更新
    DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
    CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
    IMPORTING
    e_grid = lr_grid.
    CALL METHOD lr_grid->check_changed_data.
    rs_selfield-refresh = ‘X’.
    rs_selfield-col_stable = ‘X’.
    rs_selfield-row_stable = ‘X’.
    结束******** 这段代码加上之后,才能对数据进行实时更新

    *'&IC1’单击双击命令, ‘1-ENMNG’ 双击栏位,默认1-字段名组合
    IF r_ucomm = ‘&IC1’ ."AND rs_selfield-sel_tab_field = ‘1-ENMNG’.

    REFRESH gt_alv_b.
    READ TABLE gt_alv INTO DATA(ls_alv) INDEX rs_selfield-tabindex.
    IF sy-subrc = 0.
    
      IF rs_selfield-fieldname = 'TYPE'.
    
        "双击事务码
        CASE ls_alv-type.
          WHEN '程序'.
            SET PARAMETER ID 'RID' FIELD ls_alv-tcode. "指参数ID
            CALL TRANSACTION 'SE38'. "调用其它事务
    
          WHEN '接口'.
            SET PARAMETER ID 'LIB' FIELD ls_alv-tcode. "指参数ID
            CALL TRANSACTION 'SE37'. "调用其它事务
    
          WHEN '事务码'.
            SET PARAMETER ID 'TCD' FIELD ls_alv-tcode. "指参数ID
            CALL TRANSACTION 'SE93'. "调用其它事务
    
          WHEN '自荐表'.
            SET PARAMETER ID 'DTB' FIELD ls_alv-tcode. "指参数ID
            CALL TRANSACTION 'SE11'. "调用其它事务
    
          WHEN OTHERS.
            SET PARAMETER ID 'RID' FIELD ls_alv-tcode. "指参数ID
            CALL TRANSACTION 'SE38'. "调用其它事务
    
        ENDCASE.
    
      ELSE.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    *处理新ALV显示的数据
    gt_alv_b[] = gt_alv_a[].
    DELETE gt_alv_b WHERE tcode <> ls_alv-tcode.

        "分屏显示
        IF gt_alv_b IS NOT INITIAL.
          PERFORM frm_display_alv2.
        ELSE.
          MESSAGE '没有符合条件的数据' TYPE 'S' DISPLAY LIKE 'E'.
        ENDIF.
      ENDIF.
    
    ENDIF.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ENDIF.

    ENDFORM.

    &---------------------------------------------------------------------
    *& Form FRM_DISPLAY_ALV2
    &---------------------------------------------------------------------
    *& 分屏
    &---------------------------------------------------------------------
    FORM frm_display_alv2.

    IF go_docking IS INITIAL. "分屏
    *创建一个cl_gui_alv_grid类的实例
    CREATE OBJECT go_alvgrid_dt
    EXPORTING
    i_parent = go_docking.

    PERFORM frm_init_container.
    PERFORM frm_fieldcat2.
    PERFORM frm_output_dt.
    
    • 1
    • 2
    • 3

    ELSE.
    PERFORM frm_refresh_alv.
    ENDIF.

    ENDFORM.

    &---------------------------------------------------------------------
    *& Form FRM_INIT_CONTAINER
    &---------------------------------------------------------------------
    *& 子屏幕
    &---------------------------------------------------------------------
    FORM frm_init_container .

    • 创建停靠容器
      CREATE OBJECT go_docking
      EXPORTING
      repid = ‘SAPLSLVC_FULLSCREEN’ "g_repid_alv "新ALV显示的程序名称(屏幕)
      dynnr = sy-dynnr "新ALV显示的程序名称(屏幕)编号
      side = cl_gui_docking_container=>dock_at_bottom "“下方显示
    • side      = cl_gui_docking_container=>dock_at_right   "右方显示
      
      • 1
    • side      = cl_gui_docking_container=>property_floating "左方显示
      extension = 100. "高度
      
      • 1
      • 2

    *ALV界面存入容器
    CREATE OBJECT go_alvgrid_dt
    EXPORTING
    i_parent = go_docking
    EXCEPTIONS
    error_cntl_create = 1
    error_cntl_init = 2
    error_cntl_link = 3
    error_dp_create = 4
    OTHERS = 5.
    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.
    &---------------------------------------------------------------------
    *& Form FRM_FIELDCAT2
    &---------------------------------------------------------------------
    *& 明显ALV列描述
    &---------------------------------------------------------------------
    FORM frm_fieldcat2 .

    REFRESH gt_fieldcat.
    DEFINE init_fieldcat.
    CLEAR gs_fieldcat.
    gs_fieldcat-fieldname = &1.
    gs_fieldcat-coltext = &2.
    gs_fieldcat-datatype = &3.
    gs_fieldcat-ref_table = &4.
    gs_fieldcat-ref_field = &5.
    gs_fieldcat-inttype = &6.
    gs_fieldcat-ICON = &7.
    gs_fieldcat-EDIT = &8.
    gs_fieldcat-HOTSPOT = &9.
    APPEND gs_fieldcat TO gt_fieldcat2.
    END-OF-DEFINITION.

    init_fieldcat ‘TCODE’ ‘事务码’ ‘’ ‘TSTCV’ ‘TCODE’ ‘’ ‘’ ‘’ ‘’ .
    init_fieldcat ‘TTEXT’ ‘事务码描述’ ‘’ ‘TSTCV’ ‘TTEXT’ ‘’ ‘’ ‘’ ‘’ .
    init_fieldcat ‘PGMNA’ ‘程序名’ ‘’ ‘VRSD’ ‘OBJNAME’ ‘’ ‘’ ‘’ ‘’ .
    init_fieldcat ‘TYPE’ ‘类型’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ .
    init_fieldcat ‘UNAME’ ‘账号名称’ ‘’ ‘E070’ ‘AS4USER’ ‘’ ‘’ ‘’ ‘’ .
    init_fieldcat ‘UNAME_TEXT’ ‘账号名称’ ‘’ ‘USER_ADDR’ ‘NAME_TEXTC’ ‘’ ‘’ ‘’ ‘’ .
    init_fieldcat ‘TRKORR’ ‘请求号’ ‘’ ‘VRSD’ ‘KORRNUM’ ‘’ ‘’ ‘’ ‘’ .
    init_fieldcat ‘AS4TEXT’ ‘资源库对象的简短描述’ ‘’ ‘E07T’ ‘AS4TEXT’ ‘’ ‘’ ‘’ ‘’ .
    init_fieldcat ‘AS4DATE_DEV’ ‘300-更改的日期’ ‘’ ‘E070’ ‘AS4DATE’ ‘’ ‘’ ‘’ ‘’ .
    init_fieldcat ‘AS4TIME_DEV’ ‘300-更改时间’ ‘’ ‘E070’ ‘AS4TIME’ ‘’ ‘’ ‘’ ‘’ .
    init_fieldcat ‘RELS’ ‘版本号’ ‘’ ‘VRSD’ ‘VERSRELS’ ‘’ ‘’ ‘’ ‘’ .

    ENDFORM.
    &---------------------------------------------------------------------
    *& Form FRM_OUTPUT_DT
    &---------------------------------------------------------------------
    *& 显示
    &---------------------------------------------------------------------
    FORM frm_output_dt.

    DATA:lr_alvgrid TYPE REF TO cl_gui_alv_grid.

    • 得到当前屏幕上的ALV的句柄
      CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
      IMPORTING
      e_grid = lr_alvgrid.

    • 监听ALV数据的详细的改变信息
      CALL METHOD lr_alvgrid->check_changed_data.

    SORT gt_alv_b BY as4date_dev DESCENDING
    as4time_dev DESCENDING.

    *ALV显示
    CALL METHOD go_alvgrid_dt->set_table_for_first_display
    EXPORTING
    i_save = ‘A’

    • i_default                     = 'X'
      is_layout                     = gs_layout
      
      • 1
      • 2
      CHANGING
      it_outtab = gt_alv_b
      it_fieldcatalog = gt_fieldcat2
      EXCEPTIONS
      invalid_parameter_combination = 1
      program_error = 2
      too_many_lines = 3
      OTHERS = 4.
      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.
    &---------------------------------------------------------------------
    *& Form FRM_REFRESH_ALV
    &---------------------------------------------------------------------
    *& 刷新
    &---------------------------------------------------------------------
    FORM frm_refresh_alv .
    DATA:lr_alvgrid TYPE REF TO cl_gui_alv_grid,
    ls_stable TYPE lvc_s_stbl.

    • 得到当前屏幕上的ALV的句柄
      CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
      IMPORTING
      e_grid = lr_alvgrid.

    • 监听ALV数据的详细的改变信息
      CALL METHOD lr_alvgrid->check_changed_data.

    *刷新后保存ALVx显示位置不变
    ls_stable-row = ‘X’.
    ls_stable-col = ‘X’.

    *刷新ALV内表
    CALL METHOD go_alvgrid_dt->refresh_table_display
    EXPORTING
    is_stable = ls_stable
    EXCEPTIONS
    finished = 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.

  • 相关阅读:
    docker容器的设置本地时间(/etc/localtime)和本地时区(/etc/timezone)
    【Java】线程常用方法的使用及方法作用演示
    大数据个性化推荐,AWS终端用户解决方案
    Qt线程的几种使用方法
    千访丨1篇笔记涨粉5万?小红书博主运营心得
    【scikit-learn基础】--『监督学习』之 随机森林分类
    Linux基础开发工具快速入门
    txt大文件拆分(批量版)
    5.使用日志+自定义全局异常过滤器
    JVM基本概念、命令、参数、GC日志总结
  • 原文地址:https://blog.csdn.net/FQHX_116/article/details/126618273