Передайте переменную только для чтения параметру CHANGING - PullRequest
0 голосов
/ 27 февраля 2019

Я хотел бы отобразить таблицу из экземпляра класса, используя CL_SALV_TABLE.Однако моя таблица доступна только для чтения, и ее нужно передать параметру CHANGING, я не могу этого делать.

Как я могу скопировать динамическую ссылку на то, что я могу передать?Тип данных атрибута может быть любой таблицей.

Ошибка вызова метода FACTORY класса CL_SALV_TABLE;фактический параметр для T_TABLE защищен от записи.

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> ).

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Без времени выполнения:

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, чтобы уточнить, что происходит.Его код также можно добавить в основную функцию.

0 голосов
/ 27 февраля 2019

Вы можете использовать RTTS для генерации динамических переменных.

Для генерации динамической внутренней таблицы с оригиналом того же типа:

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>}
...