该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
ALV事件双击刷新ALV头部输出的CL_DD_DOCUMENT文档。之所以写这个贴子,是因为发现网上给出的一个博客文档是错误的。它能输出内容,但是双击ALV行项目的时候并没有同步刷新抬头HTML_TOP_OF_PAGE里输出的CL_DD_DOCUMENT的内容。此程序的解释可以参考百度经验。
*&---------------------------------------------------------------------*
*& Report ZTESTXUE505 ALV事件更新HTML_TOP_OF_PAGE的内容
*&---------------------------------------------------------------------*
*& 薛现军创建于 2020-12-25
*&---------------------------------------------------------------------*
REPORT ztestxue505 NO STANDARD PAGE HEADING.
************************************************************************
** 声明数据库表 Declaration of database **
************************************************************************
TABLES:mara.
************************************************************************
** 定义结构类型 Define the structure's type **
************************************************************************
TYPES:BEGIN OF typ_result,
vbeln TYPE lips-vbeln,
posnr TYPE lips-posnr,
matnr TYPE lips-matnr,
maktx TYPE makt-maktx,
matkl TYPE lips-matkl,
wgbez TYPE t023t-wgbez,
lfimg TYPE lips-lfimg,
meins TYPE lips-meins,
mseht TYPE t006a-mseht,
kbetr TYPE konv-kbetr,
netwr TYPE lips-netwr,
waers TYPE likp-waerk,
END OF typ_result.
************************************************************************
** 定义变量与内表 Define the variants and Internal tables **
************************************************************************
DATA:gt_result TYPE TABLE OF typ_result WITH HEADER LINE.
FIELD-SYMBOLS: TYPE typ_result.
DATA cl_document TYPE REF TO cl_dd_document.
*@---------------------------------------------------------------------*
*@ ALV相关的变量与内表
TYPE-POOLS:slis.
DATA: go_grid TYPE REF TO cl_gui_alv_grid, "ALV对象名称
gv_repid LIKE sy-repid, "程序名称
gv_tabkname TYPE tabname, "表名 数据类型
gv_title TYPE lvc_title, "ALV的标题
gs_layout TYPE lvc_s_layo, "格式设置
gs_variant TYPE disvariant,
gt_fieldcat TYPE lvc_t_fcat, "字段目录
gs_fieldcat TYPE lvc_s_fcat,
gv_field TYPE char30, "字段名称
gv_save TYPE c,
gv_length TYPE i,
gv_col TYPE i,
gv_row TYPE i,
gs_color TYPE lvc_s_scol, "字段级的颜色
gv_color TYPE lvc_s_colo,
gs_lvc_style TYPE lvc_s_styl, "字段级的类型设置
gt_lvc_style TYPE lvc_t_styl,
gt_lvc_f4 TYPE lvc_t_f4 , "F4帮助设置
gs_lvc_f4 TYPE lvc_s_f4,
gt_lvc_hype TYPE lvc_t_hype, "超链接内表
gs_lvc_hype TYPE lvc_s_hype,
gv_tabix TYPE sy-tabix,
gs_ddval TYPE lvc_s_drop, "工作区:下拉菜单
gt_ddval TYPE lvc_t_drop. "内表:下拉菜单
FIELD-SYMBOLS: TYPE lvc_s_fcat. "字段目录
************************************************************************
** 宏定义 Define the macro **
************************************************************************
DEFINE mcr_range.
CLEAR &1.
&1-sign = 'I'.
&1-option = &2.
&1-low = &3.
&1-high = &4.
APPEND &1.
END-OF-DEFINITION.
DEFINE mcr_html_field.
g_text = &3.
CALL METHOD document->add_text
EXPORTING
text = g_text
sap_emphasis = &2.
CALL METHOD document->add_gap
EXPORTING
width = &1.
END-OF-DEFINITION.
************************************************************************
** 选择屏幕 Customize the selection-screen **
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK xavery WITH FRAME TITLE TEXT-001.
PARAMETERS:p_matkl TYPE ekpo-matkl OBLIGATORY DEFAULT 'A00001'.
SELECTION-SCREEN END OF BLOCK xavery.
************************************************************************
** 执行程序事件 Executing the program's events **
************************************************************************
START-OF-SELECTION.
PERFORM sub_report_data IN PROGRAM ztestxue501
TABLES gt_result IF FOUND.
DELETE gt_result WHERE matkl NE p_matkl.
CHECK gt_result[] IS NOT INITIAL.
READ TABLE gt_result ASSIGNING INDEX 1.
END-OF-SELECTION.
PERFORM sub_create_fieldcat.
PERFORM sub_init_layout.
PERFORM sub_display_as_alv.
*&---------------------------------------------------------------------*
*& Form SUB_CREATE_FIELDCAT
*&---------------------------------------------------------------------*
* 给输出的结果内表指定输出字段
*----------------------------------------------------------------------*
FORM sub_create_fieldcat .
DEFINE mcr_field.
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = &1.
gs_fieldcat-inttype = &2.
gs_fieldcat-outputlen = &3.
gs_fieldcat-coltext = &4.
gs_fieldcat-seltext = &4.
APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.
REFRESH gt_fieldcat.
mcr_field 'VBELN' 'C' '10' '交货单'.
mcr_field 'POSNR' 'C' '6' '行项目'.
mcr_field 'MATNR' 'C' '' '物料编号' .
mcr_field 'MAKTX' 'C' '' '物料描述' .
mcr_field 'MATKL' 'C' '' '物料组' .
mcr_field 'WGBEZ' 'C' '' '物料组描述'.
mcr_field 'LFIMG' 'C' '' '交货数量'.
mcr_field 'MEINS' 'C' '' '计量单位' .
mcr_field 'MSEHT' 'C' '' '计量单位' .
mcr_field 'KBETR' 'P' '' '单价' .
mcr_field 'NETWR' 'P' '' '总金额' .
mcr_field 'WAERS' 'P' '' '货币' .
ENDFORM. " SUB_CREATE_FIELDCAT
*&---------------------------------------------------------------------*
*& Form SUB_INIT_LAYOUT
*&---------------------------------------------------------------------*
* 设置常用的输出布局参数
*----------------------------------------------------------------------*
FORM sub_init_layout .
gs_layout-zebra = 'X'.
gs_layout-cwidth_opt = 'X'.
gs_layout-sel_mode = 'X'.
CLEAR gs_variant.
gs_variant-report = sy-repid.
gv_repid = sy-repid.
ENDFORM. " SUB_INIT_LAYOUT
*&---------------------------------------------------------------------*
*& Form SUB_DISPLAY_AS_ALV
*&---------------------------------------------------------------------*
* 使用 OO ALV 对象输出结果内表
*----------------------------------------------------------------------*
FORM sub_display_as_alv .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = gv_repid
i_callback_user_command = 'SUB_USER_COMMAND'
i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'
i_save = gv_save
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat
TABLES
t_outtab = gt_result
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc = '1'.
ELSEIF sy-subrc = '2'.
ENDIF.
ENDFORM. " SUB_DISPLAY_AS_ALV
*&---------------------------------------------------------------------*
*& Form SUB_SET_PF_STATUS
*&---------------------------------------------------------------------*
* 给结果屏幕设置工具栏
*----------------------------------------------------------------------*
FORM sub_set_pf_status USING lt_extab TYPE slis_t_extab..
SET PF-STATUS 'XAVERY_HSUEH'.
ENDFORM. " SUB_SET_PF_STATUS
*&---------------------------------------------------------------------*
*& Form SUB_USER_COMMAND
*&---------------------------------------------------------------------*
* ALV事件执行:##
*----------------------------------------------------------------------*
* -->L_UCOMM 功能码
* >--LS_SELFIELD 执行带地来的数据
*----------------------------------------------------------------------*
FORM sub_user_command USING l_ucomm
ls_selfield TYPE slis_selfield.
CASE l_ucomm.
WHEN '&IC1'. "
READ TABLE gt_result ASSIGNING INDEX ls_selfield-tabindex.
PERFORM html_top_of_page USING cl_document.
WHEN OTHERS.
ENDCASE.
ls_selfield-refresh = 'X'.
ENDFORM. "sub_user_command
*&---------------------------------------------------------------------*
*& Form html_top_of_page
*&---------------------------------------------------------------------*
FORM html_top_of_page USING document TYPE REF TO cl_dd_document.
DATA: g_text TYPE sdydo_text_element.
CALL METHOD document->initialize_document.
SEARCH document->html_table FOR document->cursor.
IF sy-subrc = 0.
mcr_html_field 20 'Strong' '测试ALV Header响应刷新 HTML'.
CALL METHOD document->new_line.
mcr_html_field 2 'Strong' '物料编号: '.
mcr_html_field 10 'Key' -matnr.
mcr_html_field 2 'Strong' '物料描述 '.
mcr_html_field 10 'Key' -maktx.
ENDIF.
CHECK cl_document IS INITIAL.
cl_document = document.
ENDFORM. "HTML_TOP_OF_PAGE