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