abap - 是否可以使用键创建动态内表?

标签 abap rtti

是否可以使用键创建动态内表?我正在与

    call method cl_alv_table_create=>create_dynamic_table
                     exporting 
                         it_fieldcatalog = lt_fldcat[]
                     importing 
                         ep_table        = lr_new_table

这给出了没有键的结果,所以我无法执行

    read table <ft_itab> from <fs_itab> ....

其中“fs_itab”应该是带有键的“ft_itab”行(在lt_fieldcat[]中指定)。使用上面的方法TABLE_LINE也是一个表键。

最佳答案

要在运行时动态创建任何类型的变量,您可以使用 RTTC 类,后跟语句 CREATE DATA data_reference TYPE HANDLE rtti_instance。

对于其行是结构体(由一个或多个字段组成)的内表,首先使用 RTTC 定义结构体,然后定义内表。

@Allen 在另一个问题中展示了代码示例:Dynamically defined variable in ABAP

要创建具有给定主键的表类型,请使用 CL_ABAP_TABLEDESCR 的方法 CREATE 的参数;下面是 Allen 的 CREATE 的另一种写法,但这一个具有非唯一排序主键,其组件为 SIGN 和 LOW :

lo_table_descr = cl_abap_tabledescr=>create(
      p_line_type  = lo_struc_descr
      p_table_kind = cl_abap_tabledescr=>tablekind_sorted
      p_unique     = abap_false
      p_key        = VALUE #( ( 'SIGN' ) ( 'LOW' ) )
      p_key_kind   = cl_abap_tabledescr=>keydefkind_user
      ).

您还可以创建带有辅助键的类型,但我想您不需要它。

关于abap - 是否可以使用键创建动态内表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48204900/

相关文章:

oop - 是否有可能违反ABAP中的反射封装?

Delphi OTA 和 RTTI 错误

delphi - RTTI 访问 VCL 的私有(private)方法,例如TCustomForm.SetWindowState

c++ - 没有 RTTI 的类标识

c++ - 为什么 C++ RTTI 需要虚拟方法表?

abap - 在选择屏幕禁用参数输入

memory - ABAP 在哪个 session /内存中存储静态属性值?

abap - 双击将输出转发到交易

ABAP 输出超过 255 个字符

c++ - RTTI 是指动态绑定(bind)吗?