将只读变量传递给 CHANGING 参数
Pass a read-only variable to a CHANGING parameter
我想使用 CL_SALV_TABLE 从 class 实例显示 table。但是,我的 table 是只读的,它要传递给一个 CHANGING 参数,我不允许这样做。
如何将我的动态引用复制到我可以传递的内容?属性的数据类型可以是任意table.
Call of method FACTORY of the class CL_SALV_TABLE has failed; the
actual parameter for T_TABLE is write-protected.
DATA(lv_attribute) = 'mt_attribute'. "Dynamic name of class attribute
ASSIGN lr_appclass->(lv_attribute) TO FIELD-SYMBOL(<lt_table>).
cl_salv_table=>factory(
IMPORTING r_salv_table = DATA(lr_salv_table)
CHANGING t_table = <lt_table> ).
您可以使用RTTS生成动态变量。
要生成与原始类型相同的动态内部 table:
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> ).
与
METHODS copy
IMPORTING
data TYPE any
RETURNING
VALUE(result) TYPE REF TO data.
METHOD copy.
CREATE DATA result LIKE data.
ASSIGN result->* TO FIELD-SYMBOL(<result>).
<result> = data.
ENDMETHOD.
我添加了方法 copy
来阐明发生了什么。它的代码也可以添加到main函数中。
我想使用 CL_SALV_TABLE 从 class 实例显示 table。但是,我的 table 是只读的,它要传递给一个 CHANGING 参数,我不允许这样做。
如何将我的动态引用复制到我可以传递的内容?属性的数据类型可以是任意table.
Call of method FACTORY of the class CL_SALV_TABLE has failed; the actual parameter for T_TABLE is write-protected.
DATA(lv_attribute) = 'mt_attribute'. "Dynamic name of class attribute
ASSIGN lr_appclass->(lv_attribute) TO FIELD-SYMBOL(<lt_table>).
cl_salv_table=>factory(
IMPORTING r_salv_table = DATA(lr_salv_table)
CHANGING t_table = <lt_table> ).
您可以使用RTTS生成动态变量。
要生成与原始类型相同的动态内部 table:
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> ).
与
METHODS copy
IMPORTING
data TYPE any
RETURNING
VALUE(result) TYPE REF TO data.
METHOD copy.
CREATE DATA result LIKE data.
ASSIGN result->* TO FIELD-SYMBOL(<result>).
<result> = data.
ENDMETHOD.
我添加了方法 copy
来阐明发生了什么。它的代码也可以添加到main函数中。