同一ALV报表上有多个热点

2020-08-13 18:08发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


您好,
有人可以在同一ALV报告中为多个热点字段提供一个代码示例吗?

这会很简单,但会有些卡住,
非常感谢

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


您好,
有人可以在同一ALV报告中为多个热点字段提供一个代码示例吗?

这会很简单,但会有些卡住,
非常感谢

付费偷看设置
发送
6条回答
me_for_i
1楼-- · 2020-08-13 18:52

由于您似乎正在使用REUSE_ALV_GRID_DISPLAY,并且已经在一个字段中使用它,因此如果在其他列上启用了热点,则很容易测试它涉及的哪一列:

 FORM f_user_command使用r_ucomm LIKE sy  -ucomm rs_selfield TYPE slis_selfield。

   案例r_ucomm。
     当"&IC1"时。 双击/热点
       案例rs_selfield-fieldname。
         当'TKNUM'。
           设置参数ID'TNR'FIELD rs_selfield-value。
           呼叫交易" VT03N"并跳过第一屏。
         当" VBELN"。
           ...
       结束。
   结束。

 ENDFORM。
半个程序猿
2楼-- · 2020-08-13 18:51

用户B

请告诉我们您在哪里 坚持不懈,您使用的是什么ALV框架? 是工厂方法还是网格方法等。

请注意!

zZ12138
3楼-- · 2020-08-13 18:43

这就是使用简单ALV(CL_SALV_TABLE)的方式。

使用ALV列表查看器(CL_GUI_ALV_GRID),它可以正常工作。 您可以订阅事件HOTSPOT_CLICK,该事件具有行和列的参数(E_ROW_ID/ES_ROW_NO,E_COLUMN_ID)。 处理事件时,这些参数使您知道按下了哪个单元格。

CL_SALV_TABLE的概述:

  1. 声明类" CL_SALV_EVENTS_TABLE"的事件" LINK_CLICK"的方法(例如on_link_click)
  2. 订阅ALV对象的事件
  3. 将列定义为HOTSPOTS(' ALV对象的超链接)
  4. 调用该事件并将其传递到已声明的方法(on_link_click)时,参数ROW和COLUMN将使您知道已单击了哪个单元格

详细信息:

1。 为类" CL_SALV_EVENTS_TABLE"的事件" LINK_CLICK"声明一个方法(例如on_link_click)

 CLASS lcl_application DEFINITION FINAL。

   公共部分。

     CLASS_METHODS on_link_click事件链接_click of cl_salv_events_table IMPORTING行列。

   " ...

 ENDCLASS。

2。 订阅ALV对象的事件
3。 将列定义为ALV对象的HOTSPOTS("超链接")

 DATA my_alv类型引用至cl_salv_table。

 数据lr_column类型参考cl_salv_column_table。
 数据lr_columns类型参考cl_salv_columns_table。
 数据lr_events类型参考cl_salv_events_table。

 设置ALV
 cl_salv_table =>工厂(正在导入r_salv_table = my_alv
                         更改t_table = my_table。

 " ...

 " 2订阅ALV对象的事件
 lr_events = my_alv-> get_event()。
 设置处理程序lcl_application => on_link_click FOR lr_events。

 " ...

 " 3.将列定义为ALV对象的HOTSPOTS("超链接")
 lr_columns = my_alv-> get_columns()。

 lr_column?= lr_columns-> get_column('MYCOL1')。
 lr_column-> set_cell_type(if_salv_c_cell_type => hotspot)。

 lr_column?= lr_columns-> get_column('MYCOL2')。
 lr_column-> set_cell_type(if_salv_c_cell_type => hotspot)。

 " ...

 "显示ALV
 my_alv-> display()。
 

4。 当事件被调用并传递给已声明的方法(on_link_click)时,参数ROW和COLUMN将使您知道已单击了哪个单元格,而使用ROW则将知道在这种情况下该怎么做。

  CLASS lcl_application

   " ...

   方法on_link_click。
    行
    栏

     READ TABLE my_table ASSIGNING FIELD-SYMBOL()INDEX行。
     将结构的ASSIGN COMPONENT列分配到FIELD-SYMBOL()。

     CASE栏。
       当" MYCOL1"时。
         " ...
       当" MYCOL2"时。
         " ...
     结束。

   终结法。

 ENDCLASS。

(我省略了对异常的处理,以使必要的编码更加明显。)

哎,真难
4楼-- · 2020-08-13 18:28

嗨,Satish,
这是ALV网格报表< br>直到现在,当我有一个hotsdpot字段时,我都以一种非常简单的方式编写了它:

如果sy-subrc =0。
从wa_fldcat的运输热点中修改it_fldcat,而字段名='TKNUM'。
ENDIF。

并在表单上:

FORM f_user_command使用类似于sy-ucomm的r_ucomm
rs_selfield类型slis_selfield。

设置参数ID'TNR'字段rs_selfield-value。
呼叫交易'VT03N'和跳过第一屏。 >
ENDFORM。

尝试添加另一个热点字段时,

有点卡住了。 和主意好吗? (看到了用长代码建议的那个问题的一些老答案,并想知道也许有更简单的方法),
再次非常感谢您

暮风yp
5楼-- · 2020-08-13 18:30

如果解决了, 请标记您问题的"最佳答案"("已接受标记"),然后关闭问题。

灬番茄
6楼-- · 2020-08-13 18:43

非常感谢!

一周热门 更多>