abap - 如何在动态内部表上循环?

标签 abap

我正在 ZXMBCU10 上进行增强植入,它在执行路径下的几个级别的自定义程序中调用。在 ZXMBCU10 内部,我想访问父程序中的一个表,我在下面的方法中进行;

  1. 声明父程序名;

    DATA: ex_tbl_name TYPE char100 VALUE '(ZPROGRAM)G_TAB'.

  2. 通过字段符号赋值获取值。

    FIELD-SYMBOLS: <fs> TYPE any.

    ASSIGN (ex_tbl_name) TO <fs>.

然后我检查是否成功分配(这是真的)。​​

IF <fs> IS ASSIGNED.

Accessing parent table

我遇到的问题是如何读取 <fs> 中的数据字段符号。

我尝试了 LOOP 和 READ TABLE,但得到了以下结果;

Loop and Read table sample

这里添加了 Read Table 和 Loop 只是为了进行语法检查

循环;

内表“<FS>”没有标题行 - 添加的内容之一“INTO wa”,“分配”,“引用”,“不运输任何字段”。 需要。

阅读表格;

您不能对表使用显式或隐式索引操作 输入“HASHED TABLE”或“ANY TABLE”。 “<FS> ”的类型为“ANY TABLE”。 有可能之前没有指定“TABLE”添加 “<FS>”。

最佳答案

循环在

关于LOOP AT的错误(内部表“<FS>”没有标题行 - 需要添加“INTO wa”、“ASSIGNING”、“REFERENCE INTO”、“TRANSPORTING NO FIELDS”之一),是不是't 表示 LOOP AT 的“结果”部分即 ASSIGNING, REFERENCE INTO...(如消息中所述)。

对于字段符号,LOOP AT 单独 总是无效的,如果它是变量而不是字段符号,则它已过时,因为这将暗示使用标题行。

LOOP AT <fs>. " always invalid !

有效语法如下:您必须将字段符号声明为内部表(至少包含单词 TABLE ,或引用“表类型”),支持任何类别的内部表LOOP AT(散列、排序、标准),因此您可以使用 TYPE ANY TABLE :

DATA: ex_tbl_name TYPE char100 VALUE '(ZPROGRAM)G_TAB'.
FIELD-SYMBOLS: <fs> TYPE ANY TABLE.

ASSIGN (ex_tbl_name) TO <fs>.
LOOP AT <fs> ASSIGNING FIELD-SYMBOL(<line>).
ENDLOOP.

阅读表格

关于READ TABLE的错误(您不能对类型为“HASHED TABLE”或“ANY TABLE”的表使用显式或隐式索引操作。“<FS>”的类型为“ANY TABLE”。可能未添加“TABLE”在“<FS>”之前指定)是您使用了READ TABLE ... INDEX ...其 INDEX 意味着它只能与类别为 SORTED 的内部表一起使用或 STANDARD .

由于 ANY TABLE 和 READ TABLE INDEX 的组合,下一个代码无效,因为 <FS>最终可能是一个哈希内部表(谁知道),那么 READ TABLE INDEX 将失败,因此编译器错误:

DATA: ex_tbl_name TYPE char100 VALUE '(ZPROGRAM)G_TAB'.
FIELD-SYMBOLS: <fs> TYPE ANY TABLE. " <=== impossible with READ TABLE INDEX !

ASSIGN (ex_tbl_name) TO <fs>.
READ TABLE <fs> ASSIGNING FIELD-SYMBOL(<line>) INDEX 1. " <=== impossible with ANY TABLE !

解决方案:使用READ TABLE <fs> INDEX ...您可以将字段符号声明为 SORTED、STANDARD 或 INDEX(后者是对应于 SORTED 和 STANDARD 的通用名称)。

此代码有效:

DATA: ex_tbl_name TYPE char100 VALUE '(ZPROGRAM)G_TAB'.
FIELD-SYMBOLS: <fs> TYPE INDEX TABLE.

ASSIGN (ex_tbl_name) TO <fs>.
READ TABLE <fs> ASSIGNING FIELD-SYMBOL(<line>) INDEX 1.

当然,这里假设G_TAB是一个“索引”表,而不是哈希表!

PS:在您的代码中,您使用了 INTO DATA(lv_fs)但通常如果你有一个通用的内部表 ASSIGNING是首选。

关于abap - 如何在动态内部表上循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54181729/

相关文章:

string - 从字符串中删除/提取最后一个字符

serialization - 如何序列化 SAP 业务对象?

abap - 如何在 ABAP CDS View 中获取当前年份

abap - 如何在ALV网格中选择整行?

adobe - 如何查找 SAP Adob​​e Form 中使用的所有 SO10 文本模块?

abap - 在 DF16_DEC 列中插入 "Infinity"值

date - 将 ABAP 日期转换为 HANA 日期,如果为空则返回 NULL

ABAP 输出超过 255 个字符

abap - 获取方法调用的值(如 sy-subrc)- WebDynpro

abap - ABAP中的内表声明