Abap 将只读变量传递给正在更改的参数

Abap 将只读变量传递给正在更改的参数,abap,Abap,我想使用CL_SALV_table显示类实例中的表。但是,我的表是只读的,它要传递给一个不断变化的参数,我不允许这样做 如何将动态引用复制到可以传递的对象?属性的数据类型可以由任何表定义 类CL_SALV_表的方法工厂调用失败;这个 T_表的实际参数是写保护的 您可以使用来生成动态变量 要生成具有相同类型原始数据的动态内部表,请执行以下操作: DATA: lo_table_desc TYPE REF TO cl_abap_tabledescr, " RTTS table descriptor

我想使用CL_SALV_table显示类实例中的表。但是,我的表是只读的,它要传递给一个不断变化的参数,我不允许这样做

如何将动态引用复制到可以传递的对象?属性的数据类型可以由任何表定义

类CL_SALV_表的方法工厂调用失败;这个 T_表的实际参数是写保护的

您可以使用来生成动态变量

要生成具有相同类型原始数据的动态内部表,请执行以下操作:

DATA: lo_table_desc TYPE REF TO cl_abap_tabledescr, " RTTS table descriptor
      lrt_copy      TYPE REF TO DATA.               " temp data ref
FIELD-SYMBOLS:
               <lt_copy> TYPE ANY TABLE.

" original type determination
lo_table_desc ?= cl_abap_tabledescr=>describe_by_data( {HERE_GOES_THE_MEMBER_TABLE} ).

" dynamic allocation
CREATE DATA lrt_copy TYPE HANDLE lo_table_desc.
ASSIGN lrt_copy->* TO <lt_copy>.

" {NOW_USE_<lt_copy>}
您可以使用来生成动态变量

要生成具有相同类型原始数据的动态内部表,请执行以下操作:

DATA: lo_table_desc TYPE REF TO cl_abap_tabledescr, " RTTS table descriptor
      lrt_copy      TYPE REF TO DATA.               " temp data ref
FIELD-SYMBOLS:
               <lt_copy> TYPE ANY TABLE.

" original type determination
lo_table_desc ?= cl_abap_tabledescr=>describe_by_data( {HERE_GOES_THE_MEMBER_TABLE} ).

" dynamic allocation
CREATE DATA lrt_copy TYPE HANDLE lo_table_desc.
ASSIGN lrt_copy->* TO <lt_copy>.

" {NOW_USE_<lt_copy>}

没有运行时键入:

ASSIGN lr_appclass->('MT_ATTRIBUTE') TO FIELD-SYMBOL(<member>).
DATA(copied_member) = copy( <member> ).
ASSIGN copied_member->* TO FIELD-SYMBOL(<table>).

cl_salv_table=>factory(
  IMPORTING
    r_salv_table = DATA(lr_salv_table)
  CHANGING
    t_table      = <table> ).


我添加了方法副本以澄清发生了什么。其代码也可以添加到主函数。

无需运行时键入:

ASSIGN lr_appclass->('MT_ATTRIBUTE') TO FIELD-SYMBOL(<member>).
DATA(copied_member) = copy( <member> ).
ASSIGN copied_member->* TO FIELD-SYMBOL(<table>).

cl_salv_table=>factory(
  IMPORTING
    r_salv_table = DATA(lr_salv_table)
  CHANGING
    t_table      = <table> ).


我添加了方法副本以澄清发生了什么。它的代码也可以添加到主函数中。

最好键入任何表,这样就可以使用LOOP AT之类的语句。另外请注意,该代码适用于标准表、排序表和哈希表,但所有ALV API都需要一个标准表。感谢@SandraRossi提供的启发性评论。谢谢你!工作起来很有魅力。小编辑:这是带有r的cl_abap_tabledescr。谢谢@MikaelG。固定的。最好键入任何表,这样就可以使用像LOOP AT这样的语句。另外请注意,该代码适用于标准表、排序表和哈希表,但所有ALV API都需要一个标准表。感谢@SandraRossi提供的启发性评论。谢谢你!工作起来很有魅力。小编辑:这是带有r的cl_abap_tabledescr。谢谢@MikaelG。修正了。这个失败,因为当前语句不支持动态属性声明。你说得对,我忘了。我对答案进行了修改并测试了代码。为了使复制成为一个可重用的方法,我将在方法之外进行赋值,以便您可以复制任何内容,签名将成为复制导入数据\u对象类型ANY returning valueresult TYPE ref To DATA+方法内部的一些适当更改。好主意。好的,很好。谢谢。这个失败了,因为当前语句不支持动态属性声明。你说得对,我忘了。我对答案进行了修改并测试了代码。为了使复制成为一个可重用的方法,我将在方法之外进行赋值,以便您可以复制任何内容,签名将成为复制导入数据\u对象类型ANY returning valueresult TYPE ref To DATA+方法内部的一些适当更改。好主意。好的,很好。非常感谢。