最近应业务要求,需要在ALV上加一个HTTP链接,其中URL是对方已经提供好的
只需要将该链接从表里取出来,展示在界面上,供用户去点击链接
效果如图所示:
我们可以看到上面的http://www.baidu.com/ 链接
具体的实现原理:
对于function alv,我们可以看到里面提供了it_hyperlink参数,所以在调用
**ALV展示
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
is_layout_lvc = gh_layout
it_fieldcat_lvc = gt_fieldcat[]
i_callback_pf_status_set = 'F_SETPF'
it_hyperlink = it_hype[]
i_save = 'X'
TABLES
t_outtab = it_out[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
我们可以看到图中红色字体部分
1、fieldcat 的实现:
FORM frm_set_fieldcat USING p1 p2.
CLEAR gh_fieldcat.
gh_fieldcat-fieldname = p1.
gh_fieldcat-seltext = p2.
IF gh_fieldcat-fieldname = 'VBELN'.
gh_fieldcat-web_field = 'CARRID_HANDLE'.
ENDIF.
APPEND gh_fieldcat TO gt_fieldcat.
ENDFORM. "frm_set_fieldcat
如:我们为字段名vbeln来加载一个hyperlink
1、先得为该字段的web_field添加一个号段
2、在调用ALV之前,对it_hype进行补充
FORM prepare_hyperlinks_table CHANGING pt_hype TYPE lvc_t_hype .
DATA ls_hype TYPE lvc_s_hype .
ls_hype-handle = '1' .
ls_hype-href = 'http://www.baidu.com' .
APPEND ls_hype TO pt_hype .
ENDFORM .
以下是源代码:
REPORT ytest_lbg_http.
DATA: BEGIN OF ih_out,
carrid_handle TYPE int4,
connid_handle TYPE int4.
INCLUDE STRUCTURE likp.
DATA: END OF ih_out,
it_out LIKE TABLE OF ih_out.
DATA: g_alv_grid TYPE REF TO cl_gui_alv_grid.
DATA: gh_layout TYPE lvc_s_layo,
gh_fieldcat TYPE lvc_s_fcat,
gt_fieldcat TYPE lvc_t_fcat.
DATA: it_hype TYPE lvc_t_hype.
START-OF-SELECTION.
PERFORM frm_get_data.
PERFORM frm_data_show.
MODULE status_9001 OUTPUT.
SET PF-STATUS 'F_SETPF'.
ENDMODULE.
MODULE user_command_9001 INPUT.
CASE sy-ucomm.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE.
FORM frm_get_data.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE it_out
FROM likp
WHERE vbeln = '0080000000'.
LOOP AT it_out INTO ih_out.
IF ih_out-vbeln = '0080000000'.
ih_out-carrid_handle = '1'.
ENDIF.
MODIFY it_out FROM ih_out.
ENDLOOP.
ENDFORM.
FORM frm_data_show.
PERFORM prepare_hyperlinks_table CHANGING it_hype[].
CLEAR gh_layout.
gh_layout-zebra = 'X'. "斑马线显示输出
REFRESH gt_fieldcat[].
PERFORM frm_set_fieldcat USING:
'VBELN' '交货单' .
**ALV展示
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
is_layout_lvc = gh_layout
it_fieldcat_lvc = gt_fieldcat[]
i_callback_pf_status_set = 'F_SETPF'
it_hyperlink = it_hype[]
i_save = 'X'
TABLES
t_outtab = it_out[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
FORM frm_set_fieldcat USING p1 p2.
CLEAR gh_fieldcat.
gh_fieldcat-fieldname = p1.
gh_fieldcat-seltext = p2.
IF gh_fieldcat-fieldname = 'VBELN'.
gh_fieldcat-web_field = 'CARRID_HANDLE'.
ENDIF.
APPEND gh_fieldcat TO gt_fieldcat.
ENDFORM. "frm_set_fieldcat
FORM f_setpf USING rt_extab TYPE slis_t_extab.
DATA: lt_extab TYPE slis_t_extab WITH HEADER LINE.
SET PF-STATUS 'F_SETPF'.
ENDFORM.
FORM prepare_hyperlinks_table CHANGING pt_hype TYPE lvc_t_hype .
DATA ls_hype TYPE lvc_s_hype .
ls_hype-handle = '1' .
ls_hype-href = 'http://www.baidu.com' .
APPEND ls_hype TO pt_hype .
ENDFORM .