ALV 筛选后数据获取

 背景:报表ALV显示数据后,需要将过滤后的数据推送到另一个系统。

实现:通过类CL_GUI_ALV_GRID的方法GET_FILTERED_ENTRIES获取被过滤掉的内表数据行号,筛选后的ALV内表数据=内表数据-被过滤掉的内表数据。

  DATA: lt_filter TYPE lvc_t_fidx,
        ls_filter TYPE int4.
  DATA: lo_grid      TYPE REF TO cl_gui_alv_grid,

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
       IMPORTING
          e_grid = lo_grid.

  CALL METHOD lo_grid->get_filtered_entries
       IMPORTING
          et_filtered_entries = lt_filter.
  
  CASE e_ucomm.
    WHEN 'SELALL'.
      CLEAR gs_item.
      LOOP AT gt_item INTO gs_item.
        CLEAR ls_filter.
        READ TABLE lt_filter INTO ls_filter WITH  KEY table_line = sy-tabix.
        IF sy-subrc EQ 0.
          gs_item-sel = 'X'.
          MODIFY gt_item FROM gs_item.
          CLEAR gs_item.
          CLEAR ls_filter.
        ENDIF.
      ENDLOOP.
    WHEN 'DELALL'.
      CLEAR gs_item.
      LOOP AT gt_item INTO gs_item.
        CLEAR ls_filter.
        READ TABLE lt_filter INTO ls_filter WITH  KEY table_line = sy-tabix.
        IF sy-subrc EQ 0.
          CLEAR gs_item-sel.
          MODIFY gt_item FROM gs_item.
          CLEAR gs_item.
          CLEAR ls_filter.
        ENDIF.
      ENDLOOP.
  ENDCASE.

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Alv报表中,要标记已选中的数据获取被选中的行,可以按照以下步骤进行操作: 1. 首先,需要在Alv报表的代码中定义一个内部表来保存被选中的行数据,可以命名为"lt_selected_rows"。 2. 监听用户的选择事件,可以通过ALV的事件"USER_COMMAND"来实现。这个事件会在报表发生用户操作时触发。 3. 在事件代码中,判断用户操作的类型,如果是选择操作(例如按下Enter键或点击选中某一行),则获取当前选中行的行号。 4. 通过行号获取被选中的行数据,并将其添加到定义的内部表"lt_selected_rows"中。 5. 标记已选中的行,可以设置一个标记字段,在示例中命名为"isChecked"。将被选中行的该字段设置为'X',以便在界面上显示不同的标记效果。 6. 最后,可以在需要的地方使用该内部表"lt_selected_rows"来获取被选中的行数据,以便进行后续处理。 示例代码如下: DATA: lt_selected_rows TYPE TABLE OF t_data, "定义内部表保存选中行数据 ls_selected_row TYPE t_data, "定义单条选中行数据结构体 lv_selected_rownum TYPE sy-tabix. "定义选中行的行号 "在用户命令事件 USER_COMMAND 中执行以下代码 CASE sy-ucomm. WHEN 'ENTER' OR 'FLIPDELETE'. "获取当前选中行的行号 CALL METHOD r_alv->get_selected_rows IMPORTING et_row_no = lt_selected_rowno. LOOP AT lt_selected_rowno INTO lv_selected_rownum. "通过行号获取选中行的数据 READ TABLE gt_data INTO ls_selected_row INDEX lv_selected_rownum. IF sy-subrc = 0. "标记已选中的行 ls_selected_row-isChecked = 'X'. "将选中行数据添加到内部表 APPEND ls_selected_row TO lt_selected_rows. ENDIF. ENDLOOP. ENDCASE. 这样,通过以上步骤,我们就可以在Alv报表中标记已选中的行并将选中行的数据保存到内部表中,以便进行后续的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值