繁体   English   中英

如何删除与内部表中行号不同的 DDIC 表记录?

[英]How to delete DDIC table records which have different id than row number in internal table?

我有一个两行的 ALV。 我也想删除内部表和字典表中的这些行。 为了获得我选择的 alv 中的哪些行,我使用了一种方法

go_selections = go_salv->get_selections( ).
go_rows = go_selections->get_selected_rows( )

接下来,我将遍历结果LOOP AT go_rows INTO gv_row.

在上面的循环中,我有另一个循环,它将内部表中的数据存储到工作区中。 然后,我设置保存字典表 id 的计数器变量并删除相应的行。

LOOP AT gr_data INTO lr_znewfdkey6.
     counter2 = lr_znewfdkey6-id.
              IF counter2 EQ gv_row.
                DELETE FROM znew_fdkey01 WHERE id EQ lr_znewfdkey6-id.
                MESSAGE 'Row deleted .' TYPE 'I'.

但不幸的是,这仅在字典表的 id 等于 alv 中选择的行号时才有效。 如果我在字典表中有lr_znewfdkey6-id ,例如等于 5, get_selected_rows()返回值以 1 等开头,这将导致不等式。

如何解决这个问题?

获取选定行返回行号表。

lt_rows = lo_selections->get_selected_rows( ).

这些数字直接对应于您加载到 ALV 中的 itab。 无论它是否已排序或过滤。 它不对应于数据库中的任何字段,例如 ID 字段或任何内容。

假设gr_data是分配给 ALV 的 itab。 让我们循环lt_rows并在索引处读取gr_data

  LOOP AT lt_rows ASSIGNING FIELD-SYMBOL(<row>).
    READ TABLE gr_data INTO ls_data INDEX <row>.
    IF sy-subrc = 0.
      APPEND ls_data TO lt_selected.
    ENDIF.
  ENDLOOP.

执行后会将选定gr_data行收集到lt_selected itab。 删除

LOOP AT lt_selected ASSIGNING FIELD-SYMBOL(<row>).
   DELETE TABLE gr_data FROM <row>.
ENDLOOP.

你也可以简单地做:

  LOOP AT lt_rows ASSIGNING FIELD-SYMBOL(<row>).
    DELETE gr_data INDEX <row>.
  ENDLOOP.

之后刷新您的 ALV。 应该不错。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM