1 .Introduction
可以直接展示内表(全局内表/局部内表支持)。方便我们把数据过程展示给用户看,不用每次都用debug看运行时内表情况,是按照可见即所得思想设计。
2 Example
&---------------------------------------------------------------------*
*& Form FRM_DETAIL_SHOW
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> text
*----------------------------------------------------------------------*
FORM FRM_DETAIL_SHOW TABLES T_SHOW.
DATA: ES_EXIT_CAUSED_BY_USER TYPE SLIS_EXIT_BY_USER.
DATA: LS_FIELDCAT TYPE LVC_S_FCAT,
LT_FIELDCAT TYPE LVC_T_FCAT.
DATA: LS_LAYOUT TYPE LVC_S_LAYO.
"动态字段名称赋值
DATA: LO_TABDESCR TYPE REF TO CL_ABAP_STRUCTDESCR.
DATA: LS_FIELD_IN TYPE DFIES,
LT_DFIES TYPE DDFIELDS.
LO_TABDESCR ?= CL_ABAP_STRUCTDESCR=>DESCRIBE_BY_DATA( T_SHOW ).
CALL METHOD CL_SALV_DATA_DESCR=>READ_STRUCTDESCR
EXPORTING
R_STRUCTDESCR = LO_TABDESCR
RECEIVING
T_DFIES = LT_DFIES.
"===自动赋值fieldcat===
LOOP AT LT_DFIES INTO LS_FIELD_IN.
CLEAR: LS_FIELDCAT.
MOVE-CORRESPONDING LS_FIELD_IN TO LS_FIELDCAT.
LS_FIELDCAT-REF_FIELD = LS_FIELD_IN-FIELDNAME. "参照类型字段
LS_FIELDCAT-REF_TABLE = LS_FIELD_IN-TABNAME. "参照类型的表,搜索帮助,域控制
IF LS_FIELDCAT-COLTEXT IS INITIAL. "当COLTEXT不存在显示FILEDTEXT,如字段没域,只有手工描述的情况
LS_FIELDCAT-COLTEXT = LS_FIELD_IN-FIELDTEXT.
ENDIF.
CASE LS_FIELD_IN-FIELDNAME.
WHEN 'MANDT' OR 'SEL'.
CONTINUE.
WHEN 'MEINS'. LS_FIELDCAT-COLTEXT = '基本单位'.
WHEN OTHERS.
ENDCASE.
IF LS_FIELD_IN-INTTYPE = 'P'.
LS_FIELDCAT-DO_SUM = 'X'.
ENDIF.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
ENDLOOP.
"其他特殊处理
loop at lt_fieldcat into ls_fieldcat.
if ls_fieldcat-fieldname cs 'ICON'.
ls_fieldcat-icon = 'X'.
endif.
modify lt_fieldcat from ls_fieldcat.
endloop.
LS_LAYOUT-ZEBRA = 'X'.
LS_LAYOUT-CWIDTH_OPT = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
* I_CALLBACK_PROGRAM = SY-REPID "弹框消息不需要处理可以删除
* I_CALLBACK_PF_STATUS_SET = 'SUB_STATUS_SET_POPUP' "弹框消息不需要处理可以删除
* I_CALLBACK_USER_COMMAND = 'SUB_USER_COMMAND_POPUP' "弹框消息不需要处理可以删除
IS_LAYOUT_LVC = LS_LAYOUT
IT_FIELDCAT_LVC = LT_FIELDCAT
I_SCREEN_START_COLUMN = 1
I_SCREEN_START_LINE = 1
I_SCREEN_END_COLUMN = 130
I_SCREEN_END_LINE = 15
IMPORTING
ES_EXIT_CAUSED_BY_USER = ES_EXIT_CAUSED_BY_USER
TABLES
T_OUTTAB = T_SHOW
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SUB_STATUS_SET
*&---------------------------------------------------------------------*
* "弹框消息不需要处理可以删除
*----------------------------------------------------------------------*
FORM SUB_STATUS_SET_POPUP USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'STATUS01_D'.
SET TITLEBAR 'TITLE_D'.
ENDFORM. "SUB_STATUS_SET
*&---------------------------------------------------------------------*
*& Form SUB_USER_COMMAND
*&---------------------------------------------------------------------*
* "弹框消息不需要处理可以删除
*----------------------------------------------------------------------*
FORM SUB_USER_COMMAND_POPUP USING S_UCOMM TYPE SY-UCOMM
RE_SELFIELD TYPE SLIS_SELFIELD.
CASE S_UCOMM.
WHEN 'TEST'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDFORM. "SUB_USER_COMMAND