在ALV中我们经常会遇到超链接列的问题,如点击列中的某个值然后跳向不同的地址,
超链接列的实现如下:
(1)首先在内表中加一列,该列为INT4类型的,用于控制超链接列。
(2)定义超链接内表(Type lvc_t_hype)和对内表操作的工作区(Type lvc_s_hype)
(3)给超链接内表赋值
(4)在调用ALV时指定超链接内表
代码如下:
DATA:BEGIN OF gt_mara OCCURS 0,
matnr LIKE mara-matnr,
ersda LIKE mara-ersda,
ernam LIKE mara-ernam,
laeda LIKE mara-laeda,
vpsta LIKE mara-vpsta,
mtart LIKE mara-mtart,
color(4),”control the row color
cellclor TYPE lvc_t_scol,”control the cell color
site(10),”超链接列
handle_site TYPE int4,”用于控制超链接列的句柄列
END OF gt_mara.
*添加超链接内表数据
DATA:gt_hype TYPE lvc_t_hype.
DATA:gs_hype TYPE lvc_s_hype.
*向超链接内表中添加数据
FORM set_hype.
REFRESH gt_hype.
CLEAR gs_hype.
gs_hype-handle = ‘1′.
gs_hype-href = ‘http://www.baidu.com’.
APPEND gs_hype TO gt_hype.
CLEAR gs_hype.
gs_hype-handle = ‘2′.
gs_hype-href = ‘http://www.sina.com’.
APPEND gs_hype TO gt_hype.
ENDFORM.
*构建字段目录
form build_filedcat.
…
‘S’ ‘TABNAME’ ‘GT_MARA’ ,
” ’SCRTEXT_M’ ‘SITE’ ,
” ’WEB_FIELD’ ‘HANDLE_SITE’,
” ’EMPHASIZE’ ‘C510′,
‘E’ ‘FIELDNAME’ ‘SITE’ .
…
endform.
FORM p_data .
DATA:a TYPE i.
LOOP AT gt_mara.
IF gt_mara-matnr = ‘100-100′.
gt_mara-color = ‘C310′.
ENDIF.
IF gt_mara-matnr = ‘100-401′.
CLEAR gt_mara-cellclor.
CLEAR gs_cellcolor.
gs_cellcolor-fname = ‘MTART’.
gs_cellcolor-color-col = ‘6′.
APPEND gs_cellcolor TO gt_mara-cellclor.
gs_cellcolor-fname = ‘ERSDA’.
gs_cellcolor-color-col = ‘7′.
APPEND gs_cellcolor TO gt_mara-cellclor.
ENDIF.
a = sy-tabix MOD 2.
IF a = 0.
gt_mara-site = ‘Baidu’.
gt_mara-handle_site = 1.
ELSE.
gt_mara-site = ‘Sina’.
gt_mara-handle_site = 2.
ENDIF.
MODIFY gt_mara.
ENDLOOP.
ENDFORM.
*最后在调用ALV时:
CALL METHOD gs_alv->set_table_for_first_display
EXPORTING
is_layout = gs_layout
it_toolbar_excluding = g_toolbar
it_hyperlink = gt_hype
CHANGING
it_outtab = gt_mara[]
it_fieldcatalog = gt_fieldcat.
最终效果图: