ABAP:根据TCODE查找增强自开发程序

根据TCODE查找增强:
在这里插入图片描述

*&---------------------------------------------------------------------*
*& Report ZSY_ZM_TEST21
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zsy_zm_test21.
"定义使用的内表
TABLES : tstc,tadir,modsapt,modact,trdir,tfdir,enlfdir, sxs_attrt ,tstct.
DATA : v_devclass LIKE tadir-devclass.
DATA : jtab LIKE tadir OCCURS 0 WITH HEADER LINE.
"定义需要使用的类型池
TYPE-POOLS:slis,truxs.
"引入Alv常用的变量、
DATA: gwa_field TYPE slis_fieldcat_alv." 相当于工作区
DATA: git_field LIKE TABLE OF gwa_field.
DATA: gwa_layout TYPE slis_layout_alv.
DATA: gd_repid TYPE sy-repid.
DATA: lit_sort TYPE slis_t_sortinfo_alv.
DATA: lwa_sort          TYPE slis_sortinfo_alv,
      gc_grid_title(50) TYPE c.
"定义要显示的结构及内表
DATA: BEGIN OF it_display OCCURS 0.
DATA: system(50)   TYPE c, "系统
      type(5)      TYPE c, "类型
      name(20)     TYPE c, "名称
      describe(20) TYPE c. "描述
DATA: END OF it_display.
"开始时候屏幕上显示的 查询条件的 输入框
SELECT-OPTIONS:
p_tcode FOR tstc-tcode OBLIGATORY NO INTERVALS NO-EXTENSION.
"设定屏幕事件

START-OF-SELECTION.
  "定义frm_getdata方法
  PERFORM frm_getdata.
  "判断it_display表中的行数
  IF lines( it_display ) > 0.
    "定义frm_show方法
    PERFORM frm_show.
  ELSE.
    MESSAGE '未查询到数据' TYPE 'I'.
  ENDIF.
  "编写数据查询方法
*&---------------------------------------------------------------------*
*&      Form  frm_getdata
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_getdata.
  SELECT SINGLE *
  FROM tstc
  WHERE tcode IN p_tcode.
  IF sy-subrc = 0.
    SELECT SINGLE * FROM tadir
    WHERE pgmid = 'R3TR'
    AND object = 'PROG'
    AND obj_name = tstc-pgmna.
    MOVE : tadir-devclass TO v_devclass.
    IF sy-subrc NE 0.
      SELECT SINGLE * FROM trdir
      WHERE name = tstc-pgmna.
      IF trdir-subc EQ 'F'.
        SELECT SINGLE * FROM tfdir
        WHERE pname = tstc-pgmna.
        SELECT SINGLE * FROM enlfdir
        WHERE funcname = tfdir-funcname.
        SELECT SINGLE * FROM tadir
        WHERE pgmid = 'R3TR'
        AND object = 'FUGR'
        AND obj_name EQ enlfdir-area.
        MOVE : tadir-devclass TO v_devclass.
      ENDIF.
    ENDIF.
    SELECT * FROM tadir INTO TABLE jtab
    WHERE pgmid = 'R3TR'
    AND object IN ('SMOD', 'SXSD')
    AND devclass = v_devclass.
    SELECT SINGLE * FROM tstct
    WHERE sprsl EQ sy-langu
    AND tcode IN p_tcode.
    IF tstct-tcode IS NOT INITIAL.
      it_display-type =  tstct-tcode.
      it_display-name =  '双击下面任意一行即可进入响应的前台界面!'.
      it_display-describe =  tstct-ttext.
      APPEND it_display.
    ENDIF.
    LOOP AT  jtab.
      CLEAR it_display.
      it_display-system =  jtab-pgmid.
      it_display-type =  jtab-object.
      it_display-name =  jtab-obj_name.
      IF jtab-object = 'SMOD'.
        SELECT SINGLE modtext INTO it_display-describe
        FROM modsapt
        WHERE sprsl = sy-langu
        AND name = jtab-obj_name.
      ELSEIF jtab-object = 'SXSD'.
        SELECT SINGLE text INTO it_display-describe
        FROM sxs_attrt
        WHERE sprsl = sy-langu
        AND exit_name = jtab-obj_name.
      ENDIF.
      APPEND it_display.
    ENDLOOP.
  ENDIF.

ENDFORM.                    "frm_getdata
"创建ALV
*&---------------------------------------------------------------------*
*&      Form  frm_show
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_show.
  gd_repid = sy-repid.
  gwa_layout-info_fieldname = ' COLOR'.
  gwa_layout-colwidth_optimize = 'X'.
  PERFORM frm_fieldcat_init USING git_field[].
  SET TITLEBAR '100' WITH gc_grid_title.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_pf_status_set = 'ALV_STATUS_SET'
      i_callback_user_command  = 'ALV_USER_COMMAND'
      i_callback_program       = gd_repid
      is_layout                = gwa_layout
      it_fieldcat              = git_field[]
    TABLES
      t_outtab                 = it_display[].
ENDFORM.   "frm_show

" 创建ALV列结构
*&---------------------------------------------------------------------*
*&      Form  frm_fieldcat_init
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GIT_FIELD  text
*----------------------------------------------------------------------*
FORM frm_fieldcat_init USING p_git_field TYPE slis_t_fieldcat_alv.

  CLEAR gwa_field.
  gwa_field-fieldname = 'SYSTEM'.
  gwa_field-seltext_l ='系统'.
  APPEND gwa_field TO git_field.

  CLEAR gwa_field.
  gwa_field-fieldname = 'TYPE'.
  gwa_field-seltext_l ='类型'.
  APPEND gwa_field TO git_field.

  CLEAR gwa_field.
  gwa_field-fieldname = 'NAME'.
  gwa_field-seltext_l ='名称'.
  APPEND gwa_field TO git_field.

  CLEAR gwa_field.
  gwa_field-fieldname = 'DESCRIBE'.
  gwa_field-seltext_l ='描述'.
  APPEND gwa_field TO git_field.
ENDFORM.                    "frm_fieldcat_init

"创建工具栏
*&---------------------------------------------------------------------*
*&      Form  alv_status_set
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM alv_status_set USING rt_extab TYPE slis_t_extab..
  SET TITLEBAR'ZZQ001_ALV_ITLE'."双击引号内文本进入标题创建界面
  SET PF-STATUS'ZZQ001_ALV_LIST'."双击引号内文本进入工具栏创建界面
ENDFORM.  " ALV_STATUS_SET
"界面内工具栏默认为空,点击顶部菜单栏中的Extras —> Adjust template,选择一个工具栏模板。

" 创建点击事件
*&---------------------------------------------------------------------*
*&      Form  alv_user_command
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->C_UCOMM    text
*      -->C_SELFIELD text
*----------------------------------------------------------------------*
FORM alv_user_command USING c_ucomm LIKE sy-ucomm
      c_selfield TYPE slis_selfield.
  CASE c_ucomm.
      "&IC1双击响应事件
    WHEN '&IC1' .
      READ TABLE  it_display INDEX    c_selfield-tabindex.
      "调用SMOD 事务代码屏幕
      IF it_display-type = 'SMOD'.
        SET PARAMETER ID 'MON' FIELD it_display-name.
        CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.
        "调用SXSD 事务代码屏幕
      ELSEIF it_display-type = 'SXSD'.
        SET PARAMETER ID 'EXN' FIELD it_display-name.
        CALL TRANSACTION 'SE18' AND SKIP FIRST SCREEN.
      ENDIF.
    WHEN '&F03' OR '&F12' OR '&F15'."事件编码与工具栏中对应图标一致
      LEAVE TO SCREEN 100."只有当数字0被用于分支到下一个屏幕时,离开屏幕才会终止屏幕序列。
  ENDCASE.
ENDFORM.   " ALV_USER_COMMAND
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值