如何在ALV中触发事件

2020-08-17 18:27发布

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

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


您好,我正在使用cl_salv_table来创建带有热点的ALV,所以当我选择一个热点时如何触发事件?

这是我的代码,可以正常工作:

包括zvim_monitor2_top。
 " INCLUDE ZVIM_MONITOR2_scr。

 块标题为text-001的块a的选择屏幕开始。
 参数:p_bukrs类型/opt/vim_1head-bukrs必须," Sociedad
             p_lifnr类型/opt/vim_1head-lifnr," Acreedor
             p_name类型/opt/vim_1head-vend_name," Nombre
             p_ref类型/opt/vim_1head-xblnr," Referencia
             p_ddoc类型/opt/vim_1head-bldat," Fecha documento
             p_dexp类型/opt/vim_1head-zfbdt。  Fecha vencimiento
 选择屏幕的方框a。

 包括zvim_monitor2_f01。
 包括zvim_monitor2_alv。

 选择开始。

   使用sy-tcode执行Authority_check。
   执行get_data。
   执行display_alv。

 选择结束。
 form get_data。

   ls_datos-num_fac ='4789'。
   ls_datos-acree ='678842'。
   ls_datos-name ='Softtek S.A'。
   ls_datos-monto = '12 .099.902,90'。
   ls_datos-id_excp ='1'。
   ls_datos-des_exc ='HES眼镜蛇与眼镜蛇'。
   ls_datos-date_doc = '04 .07.2020'。
   ls_datos-id_hes ='456'。
   ls_datos-moneda ='CLP'。
   ls_datos-visual ='Visualizar'。
   ls_datos-aprob ='Aprobar'。
   ls_datos-rechaz ='Rechazar'。
   将ls_datos附加到t_datos。

   清除:ls_datos。
   ls_datos-num_fac ='6661'。
   ls_datos-acree ='678880'。
   ls_datos-name ='Parque Arauco'。
   ls_datos-monto ='100.145.902,00'。
   ls_datos-id_excp ='3'。
   ls_datos-des_exc ='HES noestáLiberada'。
   ls_datos-date_doc = '01 .01.2022'。
   ls_datos-id_hes ='672'。
   ls_datos-moneda ='YN'。
   ls_datos-visual ='Visualizar'。
   ls_datos-aprob ='Aprobar'。
   ls_datos-rechaz ='Rechazar'。
   将ls_datos附加到t_datos。

   清除:ls_datos。
   ls_datos-num_fac ='9087'。
   ls_datos-acree ='418842'。
   ls_datos-name ='LG'。
   ls_datos-monto ='972.344,01'。
   ls_datos-id_excp ='7'。
   ls_datos-des_exc ='HES与事实上的社会接受者的社会联系'。
   ls_datos-date_doc = '08 .11.2020'。
   ls_datos-id_hes ='982'。
   ls_datos-moneda ='USD'。
   ls_datos-visual ='Visualizar'。
   ls_datos-aprob ='Aprobar'。
   ls_datos-rechaz ='Rechazar'。
   将ls_datos附加到t_datos。

   循环在t_datos分配。
     清除:ls_celltype。
     ls_celltype-columnname ='VISUAL'。
     ls_celltype-value = if_salv_c_cell_type =>热点。
     将ls_celltype附加到lt_celltype。

     清除:ls_celltype。
     ls_celltype-columnname ='APROB'。
     ls_celltype-value = if_salv_c_cell_type =>热点。
     将ls_celltype附加到lt_celltype。

     清除:ls_celltype。
     ls_celltype-columnname ='RECHAZ'。
     ls_celltype-value = if_salv_c_cell_type =>热点。"按钮。
     将ls_celltype附加到lt_celltype。

      -i_celltype = lt_celltype。

     清除:ls_color。
     ls_color-fname ='VISUAL'。
     ls_color-color-col = 4。
     ls_color-color-int = 0。
     ls_color-color-inv = 0。
     将ls_color附加到lt_color。
     清除:ls_color。
     ls_color-fname ='APROB'。
     ls_color-color-col = 5。
     ls_color-color-int = 0。
     ls_color-color-inv = 0。
     将ls_color附加到lt_color。
     清除:ls_color。
     ls_color-fname ='RECHAZ'。
     ls_color-color-col = 6。
     ls_color-color-int = 0。
     ls_color-color-inv = 0。
     将ls_color附加到lt_color。
      -color = lt_color。
   结束循环。
 最终形式。  
 FORM display_alv。
   尝试。
     cl_salv_table =>工厂(
       导入r_salv_table = gr_table
       更改t_table = t_datos)。
   捕捉cx_salv_msg。  " #EC NO_HANDLER
   ENDTRY。

   "身份状态为'STANDARD_FULLSCREEN'的国家或地区的积极性
   gr_table-> set_screen_status(report = sy-repid
                                pfstatus ='STANDARD_FULLSCREEN'
                                set_functions = 2)。  " 2 =全部

   数据:lr_columns类型参考cl_salv_columns。

   lr_columns = gr_table-> get_columns()。
   lr_columns-> set_optimize(abap_true)。

   执行set_columns_technical使用lr_columns。

   gr_table-> display()。


 ENDFORM。

 *&------------------------------------------------  ---------------------
 *&表格set_columns_technical
 *&------------------------------------------------  ---------------------
 *拉斯科鲁莫斯大道
 * -------------------------------------------------  ---------------------
 FORM set_columns_technical使用ir_columns类型参考cl_salv_columns。


   数据:lo_cols类型参考cl_salv_columns_table。
     lo_cols = gr_table-> get_columns()。

 *设置列优化
     lo_cols-> set_optimize('X')。

 *设置单元格类型
     尝试。
         lo_cols-> set_cell_type_column('I_CELLTYPE')。
       捕获cx_salv_data_error。  " #EC NO_HANDLER
     ENDTRY。

   尝试。
       调用方法lo_cols-> set_color_column
         出口
           值="颜色"。
     捕获cx_salv_data_error。
   ENDTRY。
 ENDFORM。  " set_columns_technical 

但是我的问题是我不知道我何时会热点触发一个事件来捕获源信息以做其他事情

我试图创建一个Pai,但是没有被命名

模块的get_hotspot_info输入。
   数据:w_grid类型为cl_gui_alv_grid的引用。
   数据:l_cont类型p。
   数据:t_rowindex类型为lvc_t_row。
   数据:t_row_no类型lvc_t_roid,
         ls_row_no输入lvc_s_roid。
   数据:w_valid类型为char01。

   刷新:t​​_row_no,t_rowindex。 清除:w_valid。
   调用方法w_grid-> check_changed_data
     输入
       e_valid = w_valid。
   调用方法w_grid-> get_selected_rows
     输入
       et_index_rows = t_rowindex
       et_row_no = t_row_no。
   清除:l_cont。
   描述表t_row_no l_cont行。
   如果l_cont eq 0。
     消息"收藏夹",键入" W"。
     出口。
   万一。
   在t_row_no循环到ls_row_no。
     清除:ls_datos。
     将表t_datos读入ls_datos索引ls_row_no-row_id。
   结束循环。
 终端模块。  

(12.6 kB)

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

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


您好,我正在使用cl_salv_table来创建带有热点的ALV,所以当我选择一个热点时如何触发事件?

这是我的代码,可以正常工作:

包括zvim_monitor2_top。
 " INCLUDE ZVIM_MONITOR2_scr。

 块标题为text-001的块a的选择屏幕开始。
 参数:p_bukrs类型/opt/vim_1head-bukrs必须," Sociedad
             p_lifnr类型/opt/vim_1head-lifnr," Acreedor
             p_name类型/opt/vim_1head-vend_name," Nombre
             p_ref类型/opt/vim_1head-xblnr," Referencia
             p_ddoc类型/opt/vim_1head-bldat," Fecha documento
             p_dexp类型/opt/vim_1head-zfbdt。  Fecha vencimiento
 选择屏幕的方框a。

 包括zvim_monitor2_f01。
 包括zvim_monitor2_alv。

 选择开始。

   使用sy-tcode执行Authority_check。
   执行get_data。
   执行display_alv。

 选择结束。
 form get_data。

   ls_datos-num_fac ='4789'。
   ls_datos-acree ='678842'。
   ls_datos-name ='Softtek S.A'。
   ls_datos-monto = '12 .099.902,90'。
   ls_datos-id_excp ='1'。
   ls_datos-des_exc ='HES眼镜蛇与眼镜蛇'。
   ls_datos-date_doc = '04 .07.2020'。
   ls_datos-id_hes ='456'。
   ls_datos-moneda ='CLP'。
   ls_datos-visual ='Visualizar'。
   ls_datos-aprob ='Aprobar'。
   ls_datos-rechaz ='Rechazar'。
   将ls_datos附加到t_datos。

   清除:ls_datos。
   ls_datos-num_fac ='6661'。
   ls_datos-acree ='678880'。
   ls_datos-name ='Parque Arauco'。
   ls_datos-monto ='100.145.902,00'。
   ls_datos-id_excp ='3'。
   ls_datos-des_exc ='HES noestáLiberada'。
   ls_datos-date_doc = '01 .01.2022'。
   ls_datos-id_hes ='672'。
   ls_datos-moneda ='YN'。
   ls_datos-visual ='Visualizar'。
   ls_datos-aprob ='Aprobar'。
   ls_datos-rechaz ='Rechazar'。
   将ls_datos附加到t_datos。

   清除:ls_datos。
   ls_datos-num_fac ='9087'。
   ls_datos-acree ='418842'。
   ls_datos-name ='LG'。
   ls_datos-monto ='972.344,01'。
   ls_datos-id_excp ='7'。
   ls_datos-des_exc ='HES与事实上的社会接受者的社会联系'。
   ls_datos-date_doc = '08 .11.2020'。
   ls_datos-id_hes ='982'。
   ls_datos-moneda ='USD'。
   ls_datos-visual ='Visualizar'。
   ls_datos-aprob ='Aprobar'。
   ls_datos-rechaz ='Rechazar'。
   将ls_datos附加到t_datos。

   循环在t_datos分配。
     清除:ls_celltype。
     ls_celltype-columnname ='VISUAL'。
     ls_celltype-value = if_salv_c_cell_type =>热点。
     将ls_celltype附加到lt_celltype。

     清除:ls_celltype。
     ls_celltype-columnname ='APROB'。
     ls_celltype-value = if_salv_c_cell_type =>热点。
     将ls_celltype附加到lt_celltype。

     清除:ls_celltype。
     ls_celltype-columnname ='RECHAZ'。
     ls_celltype-value = if_salv_c_cell_type =>热点。"按钮。
     将ls_celltype附加到lt_celltype。

      -i_celltype = lt_celltype。

     清除:ls_color。
     ls_color-fname ='VISUAL'。
     ls_color-color-col = 4。
     ls_color-color-int = 0。
     ls_color-color-inv = 0。
     将ls_color附加到lt_color。
     清除:ls_color。
     ls_color-fname ='APROB'。
     ls_color-color-col = 5。
     ls_color-color-int = 0。
     ls_color-color-inv = 0。
     将ls_color附加到lt_color。
     清除:ls_color。
     ls_color-fname ='RECHAZ'。
     ls_color-color-col = 6。
     ls_color-color-int = 0。
     ls_color-color-inv = 0。
     将ls_color附加到lt_color。
      -color = lt_color。
   结束循环。
 最终形式。  
 FORM display_alv。
   尝试。
     cl_salv_table =>工厂(
       导入r_salv_table = gr_table
       更改t_table = t_datos)。
   捕捉cx_salv_msg。  " #EC NO_HANDLER
   ENDTRY。

   "身份状态为'STANDARD_FULLSCREEN'的国家或地区的积极性
   gr_table-> set_screen_status(report = sy-repid
                                pfstatus ='STANDARD_FULLSCREEN'
                                set_functions = 2)。  " 2 =全部

   数据:lr_columns类型参考cl_salv_columns。

   lr_columns = gr_table-> get_columns()。
   lr_columns-> set_optimize(abap_true)。

   执行set_columns_technical使用lr_columns。

   gr_table-> display()。


 ENDFORM。

 *&------------------------------------------------  ---------------------
 *&表格set_columns_technical
 *&------------------------------------------------  ---------------------
 *拉斯科鲁莫斯大道
 * -------------------------------------------------  ---------------------
 FORM set_columns_technical使用ir_columns类型参考cl_salv_columns。


   数据:lo_cols类型参考cl_salv_columns_table。
     lo_cols = gr_table-> get_columns()。

 *设置列优化
     lo_cols-> set_optimize('X')。

 *设置单元格类型
     尝试。
         lo_cols-> set_cell_type_column('I_CELLTYPE')。
       捕获cx_salv_data_error。  " #EC NO_HANDLER
     ENDTRY。

   尝试。
       调用方法lo_cols-> set_color_column
         出口
           值="颜色"。
     捕获cx_salv_data_error。
   ENDTRY。
 ENDFORM。  " set_columns_technical 

但是我的问题是我不知道我何时会热点触发一个事件来捕获源信息以做其他事情

我试图创建一个Pai,但是没有被命名

模块的get_hotspot_info输入。
   数据:w_grid类型为cl_gui_alv_grid的引用。
   数据:l_cont类型p。
   数据:t_rowindex类型为lvc_t_row。
   数据:t_row_no类型lvc_t_roid,
         ls_row_no输入lvc_s_roid。
   数据:w_valid类型为char01。

   刷新:t​​_row_no,t_rowindex。 清除:w_valid。
   调用方法w_grid-> check_changed_data
     输入
       e_valid = w_valid。
   调用方法w_grid-> get_selected_rows
     输入
       et_index_rows = t_rowindex
       et_row_no = t_row_no。
   清除:l_cont。
   描述表t_row_no l_cont行。
   如果l_cont eq 0。
     消息"收藏夹",键入" W"。
     出口。
   万一。
   在t_row_no循环到ls_row_no。
     清除:ls_datos。
     将表t_datos读入ls_datos索引ls_row_no-row_id。
   结束循环。
 终端模块。  

(12.6 kB)
付费偷看设置
发送
2条回答
半个程序猿
1楼 · 2020-08-17 18:57.采纳回答

您好 Naoto Amari

您需要创建一个处理事件的类,并且需要 订阅由ALV实例触发的事件。

 CLASS lcl_handler定义。
   公共部分。
     方法:
       on_link_click
         FOR EVENT link_click OF cl_salv_events_table
           输入
             行
             柱。
 ENDCLASS。

 CLASS lcl_handler的实现。
   方法on_link_click。
     READ TABLE lt_records_table参考引用(ld_record)INDEX行。
     " 做一点事
   终结法。
 ENDCLASS。

 数据:
   " lo_handler应该是全局的,
   "以使其实例保持活动状态
   go_handler类型参考lcl_handler,
   go_events类型参考cl_salv_events_table。

 FORM display_alv。
   。
   。
   。

   创建对象go_handler。
   go_events = gr_alv-> get_event()。
   设置处理程序go_handler-> on_link_click FOR go_events。

   gr_table-> display()。
 ENDFORM。

问候,
Mateusz

何必丶何苦呢
2楼-- · 2020-08-17 19:18

非常欢迎。

问候,
Mateusz

一周热门 更多>