二维码

[ooalv] 在ALV Grid中插入超链接

Twilight发表于 2014-09-04 10:06Twilight 最后回复于 2014-09-04 10:06 [复制链接] 3895 0

插入超链接是通过一个含有超级链接和句柄的表来实现的.这个表类型为"LVC_T_HYPE" ,句柄是一个INT4类型的字段,我们需要在数据显示的内表中,加入这样的字段,来告诉ALV,我们的字段指定的句柄,从而找到对应的超级链接.在字段目录中,WEB_FIELD是用来指定对应的句柄名的.

1、创建screen 9000 定义container(CONT) 、ok_code和逻辑流
2、程序代码:
  1. TYPES : BEGIN OF y_dataset,
  2.           product   TYPE char100,
  3.           variant   TYPE char100,
  4.           price     TYPE char100,
  5.           pd_handle TYPE int4,"内表结构定义,我们加入2个句柄字段
  6.           vr_handle TYPE int4,"内表结构定义,我们加入2个句柄字段
  7.         END OF y_dataset.

  8. DATA : ts_data TYPE STANDARD TABLE OF y_dataset,
  9.        e_fcat  TYPE lvc_s_fcat,
  10.        ts_fcat TYPE lvc_t_fcat,
  11.        e_data  TYPE y_dataset,
  12.        e_hype  TYPE lvc_s_hype,
  13.        ts_hype TYPE lvc_t_hype.

  14. DATA : ref_grid TYPE REF TO cl_gui_custom_container,
  15.        ref_alv  TYPE REF TO cl_gui_alv_grid.

  16. START-OF-SELECTION.

  17.   PERFORM f_fill_data.
  18.   PERFORM f_fill_fieldcat.
  19.   PERFORM f_fill_hyperlink.

  20.   CALL SCREEN 9000.
  21. *&-------------------------------------------------------------------
  22. *&      Form  F_FILL_DATA
  23. *&-------------------------------------------------------------------
  24. *       Populate the list data
  25. *--------------------------------------------------------------------

  26. FORM f_fill_data .
  27.   CLEAR e_data.
  28.   MOVE : 'iPhone'   TO e_data-product,
  29.          'iPhone5'  TO e_data-variant,
  30.          '$599'     TO e_data-price,
  31.          '1'        TO e_data-pd_handle,
  32.          '2'        TO e_data-vr_handle.
  33.   APPEND e_data  TO ts_data.

  34.   CLEAR e_data.
  35.   MOVE : 'iPhone'    TO e_data-product,
  36.          'iPhone 4S' TO e_data-variant,
  37.          '$399'      TO e_data-price,
  38.          '1'         TO e_data-pd_handle,
  39.          '2'         TO e_data-vr_handle.
  40.   APPEND e_data TO ts_data.

  41.   CLEAR e_data.
  42.   MOVE : 'iPhone'   TO e_data-product,
  43.          'iPhone 4' TO e_data-variant,
  44.          '$299'     TO e_data-price,
  45.          '1'        TO e_data-pd_handle,
  46.          '2'        TO e_data-vr_handle.
  47.   APPEND e_data TO ts_data.
  48. ENDFORM.                    " F_FILL_DATA
  49. *&-------------------------------------------------------------------
  50. *&      Form  F_FILL_FIELDCAT
  51. *&-------------------------------------------------------------------
  52. *       Populate field catalog
  53. *--------------------------------------------------------------------
  54. FORM f_fill_fieldcat .
  55.   FREE ts_fcat.
  56.   CLEAR : e_fcat.
  57.   MOVE : 'TS_DATA'   TO e_fcat-tabname,
  58.          'product'   TO e_fcat-fieldname,
  59.          1           TO e_fcat-col_pos,
  60.          1           TO e_fcat-indx_field,
  61.          20          TO e_fcat-outputlen,
  62.          'Product'   TO e_fcat-coltext,
  63.          'PD_HANDLE' TO e_fcat-web_field."通过字段目录FIELDCATLOG来指定相应的句柄字段
  64.   APPEND e_fcat TO ts_fcat.

  65.   CLEAR : e_fcat.
  66.   MOVE : 'TS_DATA'   TO e_fcat-tabname,
  67.          'variant'   TO e_fcat-fieldname,
  68.          2           TO e_fcat-col_pos,
  69.          2           TO e_fcat-indx_field,
  70.          20          TO e_fcat-outputlen,
  71.          'Variant'   TO e_fcat-coltext,
  72.          'VR_HANDLE' TO e_fcat-web_field."通过字段目录FIELDCATLOG来指定相应的句柄字段
  73.   APPEND e_fcat TO ts_fcat.

  74.   MOVE : 'TS_DATA'  TO e_fcat-tabname,
  75.          'Price'    TO e_fcat-fieldname,
  76.          3          TO e_fcat-col_pos,
  77.          3          TO e_fcat-indx_field,
  78.          20         TO e_fcat-outputlen,
  79.          'Price'    TO e_fcat-coltext,
  80. *"       Handle from the previous field catalog is carried here
  81. *"       in order to prevent this handle to continue here pass a null
  82. *"       value here.
  83.          ''         TO e_fcat-web_field.
  84.   APPEND e_fcat TO ts_fcat.

  85. ENDFORM.                    " F_FILL_FIELDCAT
  86. *&-------------------------------------------------------------------
  87. *&      Module  STATUS_9000  OUTPUT
  88. *&-------------------------------------------------------------------
  89. *       PBO for screen 9000
  90. *--------------------------------------------------------------------
  91. MODULE status_9000 OUTPUT.
  92.   SET PF-STATUS 'STATUS'.

  93.   CREATE OBJECT ref_grid
  94.     EXPORTING
  95.       container_name              = 'CONT'
  96.     EXCEPTIONS
  97.       cntl_error                  = 1
  98.       cntl_system_error           = 2
  99.       create_error                = 3
  100.       lifetime_error              = 4
  101.       lifetime_dynpro_dynpro_link = 5
  102.       OTHERS                      = 6.

  103.   CREATE OBJECT ref_alv
  104.     EXPORTING
  105.       i_parent          = ref_grid
  106.     EXCEPTIONS
  107.       error_cntl_create = 1
  108.       error_cntl_init   = 2
  109.       error_cntl_link   = 3
  110.       error_dp_create   = 4
  111.       OTHERS            = 5.

  112.   CALL METHOD ref_alv->set_table_for_first_display
  113.     EXPORTING
  114.       it_hyperlink                  = ts_hype
  115.     CHANGING
  116.       it_outtab                     = ts_data
  117.       it_fieldcatalog               = ts_fcat
  118.     EXCEPTIONS
  119.       invalid_parameter_combination = 1
  120.       program_error                 = 2
  121.       too_many_lines                = 3
  122.       OTHERS                        = 4.
  123. ENDMODULE.                 " STATUS_9000  OUTPUT
  124. *&-------------------------------------------------------------------
  125. *&      Module  USER_COMMAND_9000  INPUT
  126. *&-------------------------------------------------------------------
  127. *       PAI for screen 9000
  128. *--------------------------------------------------------------------
  129. MODULE user_command_9000 INPUT.
  130.   DATA ok_code TYPE sy-ucomm.
  131.   CASE ok_code.
  132.     WHEN 'BACK'.
  133.       LEAVE TO SCREEN 0.
  134.     WHEN OTHERS.
  135.   ENDCASE.
  136. ENDMODULE.                 " USER_COMMAND_9000  INPUT
  137. *&-------------------------------------------------------------------
  138. *&      Form  F_FILL_HYPERLINK
  139. *&-------------------------------------------------------------------
  140. *  建立一个超级链接内表,里面存放句柄所对应的超级链接.
  141. *  创建的时候注意,它参考的表类型,一定是"LVC_T_HYPE"
  142. *--------------------------------------------------------------------
  143. FORM f_fill_hyperlink .
  144.   FREE ts_hype.
  145.   CLEAR e_hype.
  146.   MOVE : '1' TO e_hype-handle,
  147.          'http://www.apple.com' TO e_hype-href.
  148.   APPEND e_hype TO ts_hype.

  149.   CLEAR e_hype.
  150.   MOVE : '2' TO e_hype-handle,
  151.          'http://www.apple.com/iphone' TO e_hype-href.
  152.   APPEND e_hype TO ts_hype.
  153. ENDFORM.                    " F_FILL_HYPERLINK
复制代码

程序执行效果:
hyperlink in ALV Grid.png
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表