基于ALV下的URL链接实现

最近应业务要求,需要在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.

DATABEGIN OF ih_out,
        carrid_handle TYPE int4,
        connid_handle TYPE int4.
        INCLUDE STRUCTURE likp.
DATAEND OF ih_out,
it_out LIKE TABLE OF ih_out.
DATAg_alv_grid TYPE REF TO cl_gui_alv_grid.
DATAgh_layout   TYPE lvc_s_layo,
      gh_fieldcat TYPE lvc_s_fcat,
      gt_fieldcat TYPE lvc_t_fcat.

DATAit_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.
  DATAlt_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 .

 

posted @ 2015-12-16 10:52  林中白狼-LBG  阅读(321)  评论(2编辑  收藏  举报