SAP中ABAP中根据前台事务代码TCODE查找增强(源代码)
SAP中ABAP中根据前台事务代码TCODE查找增强(源代码)
一:效果图
二:源代码:
*&---------------------------------------------------------------------*
*& Report ZZQ001
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zzq001.
"定义使用的内表
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 0."只有当数字0被用于分支到下一个屏幕时,离开屏幕才会终止屏幕序列。
ENDCASE.
ENDFORM. " ALV_USER_COMMAND