Порядок столбцов ALV (с CL_SALV_TABLE) - PullRequest
0 голосов
/ 26 января 2020

У меня есть программа, которая отображает простую таблицу на основе класса CL_SALV_TABLE, и я бы хотел разместить столбец CURRCODE на пятой позиции вместо 4 в настоящее время (порядок по умолчанию определен в таблице базы данных SCARR), как показано здесь:

Simple ALV output with column to be moved

Как я могу это сделать?

Вот текущий исходный код (компилируется с ABAP версия 7.40):

  SELECT * FROM scarr INTO TABLE @DATA(scarr_s).

  cl_salv_table=>factory(
    IMPORTING
      r_salv_table = DATA(salv)
    CHANGING
      t_table      = scarr_s ).

  salv->display( ).

Примечание: если вы хотите воспроизвести и таблица SCARR пуста, запустите программу SAPBC_DATA_GENERATOR для ее заполнения.

1 Ответ

1 голос
/ 26 января 2020

Вы должны сделать это в два шага, до вызова метода display:

  • Вызвать метод GET_COLUMNS экземпляра ALV (класса CL_SALV_TABLE), чтобы получить экземпляр класса CL_SALV_COLUMNS_TABLE, соответствующего всем столбцам.

  • Последний класс имеет метод SET_COLUMN_POSITION для изменения позиции заданного столбца, имя которого передается в качестве аргумента.

Вот исходный код:

  SELECT * FROM scarr INTO TABLE @DATA(scarr_s).

  cl_salv_table=>factory(
    IMPORTING
      r_salv_table = DATA(salv)
    CHANGING
      t_table      = scarr_s ).

  salv->get_columns( )->set_column_position( columnname = 'CURRCODE' position = 5 ). " <== ADD THIS LINE

  salv->get_columns( )->set_optimize( ).
  salv->display( ).

Результат :

Simple ALV output with column moved as expected

Примечание: я также использую метод SET_OPTIMIZE, так что ширина всех столбцов автоматически подстраивается под их содержимое (но это не связано к вопросу).

...