Для настройки колонок в ALV первым делом необходимо получить ссылку на объект класса: CL_SALV_COLUMNS. Данный класс отвечает за общие для всех колонок настройки, такие как: оптимизация ширины, порядок колонок. Получить ссылку на объект можно методом get_columns главного объекта ALV. Для изменения индивидуальных колонок необходимо получить ссылку на объект требуемой колонки. Для этого воспользоваться методом get_column( ‘ИмяКолонки’ ) из объекта отвечающего за все колонки, полученного ранее.
В случае если удалось найти колонку с указанным именем, метод возвращает объект класса CL_SALV_COLUMN, отвечающий за индивидуальные параметры указанной колонки. Обратите внимание что метод get_column в случае не верно указанного имени колонки порождает исключение cx_salv_not_found, которое необходимо обработать.
Пример настройки колонок:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
REPORT ZALV_COLUMNS. DATA: gt_data TYPE spfli_tab, " Таблица с данными go_columns TYPE REF TO cl_salv_columns, go_column TYPE REF TO cl_salv_column, go_alv TYPE REF TO cl_salv_table. START-OF-SELECTION. SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE gt_data. " Фабричный метод возвращяет экзмепляр ALV объекта TRY. cl_salv_table=>factory( IMPORTING r_salv_table = go_alv CHANGING t_table = gt_data ). CATCH cx_salv_msg . MESSAGE 'Ошибка при создании ALV' TYPE 'E'. ENDTRY. go_alv->set_screen_status( EXPORTING REPORT = 'SAPLSALV_METADATA_STATUS' pfstatus = 'SALV_TABLE_STANDARD' set_functions = CL_SALV_MODEL_BASE=>C_FUNCTIONS_ALL ). " Получаем ссылку на объект настройки колонок go_columns = go_alv->get_columns( ). " Включаем оптимизацию колонок go_columns->set_optimize( abap_true ). " Получаем ссылку на объект настройки колонки отвечающей за город отправления TRY. go_column = go_columns->get_column( 'CITYFROM' ). " настраиваем текст go_column->set_long_text( 'Long long text' ). go_column->set_medium_text( 'Medium text' ). go_column->set_short_text( 'Short' ). CATCH cx_salv_not_found. ENDTRY. " Отобразить ALV представление go_alv->display( ). |
Результат работы программы:
Колонки могут иметь разные типы: ссылки, кнопки, символы, иконки. Стандартная программа для демонстрации возможностей колонок: SALV_DEMO_TABLE_COLUMNS. Классы cl_salv_columns и cl_salv_columns являются общими для всех типов ALV объектов. Для настройки индивидуальных особенностей таблиц можно использовать классы: cl_salv_columns_table и cl_salv_column_table соответственно. Все эти классы описаны в пакете SALV_METADATA.
Пример использования Exception поля в SALV Table:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
REPORT ZALV_EXCEPTION_COLUMN. TYPES BEGIN OF ty_spfli. TYPES exception TYPE char1. INCLUDE TYPE spfli. TYPES END OF ty_spfli. DATA: gt_data TYPE STANDARD TABLE OF ty_spfli, " Таблица с данными go_columns TYPE REF TO cl_salv_columns_table, go_alv TYPE REF TO cl_salv_table. FIELD-SYMBOLS: <fs> LIKE LINE OF gt_data. START-OF-SELECTION. SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE gt_data. " Фабричный метод возвращяет экзмепляр ALV объекта TRY. cl_salv_table=>factory( IMPORTING r_salv_table = go_alv CHANGING t_table = gt_data ). CATCH cx_salv_msg . MESSAGE 'Ошибка при создании ALV' TYPE 'E'. ENDTRY. LOOP AT gt_data ASSIGNING <fs>. IF <fs>-CARRID = '003'. <fs>-exception = '1'. "red ELSEIF <fs>-CARRID = '002'. <fs>-exception = '2'. "yellow ELSE. <fs>-exception = '3'. "green ENDIF. ENDLOOP. " Подключаем стандартные функции go_alv->set_screen_status( EXPORTING REPORT = 'SAPLSALV_METADATA_STATUS' pfstatus = 'SALV_TABLE_STANDARD' set_functions = CL_SALV_MODEL_BASE=>C_FUNCTIONS_ALL ). " Получаем ссылку на объект настройки колонок go_columns = go_alv->get_columns( ). " Указываем на поле которое будет счетчиком go_columns->set_exception_column( 'EXCEPTION' ). " Отобразить ALV представление go_alv->display( ). |
Определение типа для конкретной ячейки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
REPORT ZALV_CELL_TYPE_COLUMN. TYPES BEGIN OF ty_spfli. TYPES t_cell_type TYPE SALV_T_INT4_COLUMN. INCLUDE TYPE spfli. TYPES END OF ty_spfli. DATA: gt_data TYPE STANDARD TABLE OF ty_spfli, " Таблица с данными go_columns TYPE REF TO cl_salv_columns_table, gs_type TYPE SALV_S_INT4_COLUMN, go_alv TYPE REF TO cl_salv_table. FIELD-SYMBOLS: <fs> LIKE LINE OF gt_data. START-OF-SELECTION. SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE gt_data. " Фабричный метод возвращяет экзмепляр ALV объекта TRY. cl_salv_table=>factory( IMPORTING r_salv_table = go_alv CHANGING t_table = gt_data ). CATCH cx_salv_msg . MESSAGE 'Ошибка при создании ALV' TYPE 'E'. ENDTRY. LOOP AT gt_data ASSIGNING <fs>. gs_type-COLUMNNAME = 'CITYFROM'. IF <fs>-CARRID = '003'. gs_type-VALUE = IF_SALV_C_CELL_TYPE=>CHECKBOX. ELSEIF <fs>-CARRID = '002'. gs_type-VALUE = IF_SALV_C_CELL_TYPE=>HOTSPOT. ELSE. gs_type-VALUE = IF_SALV_C_CELL_TYPE=>BUTTON. ENDIF. APPEND gs_type TO <fs>-t_cell_type. ENDLOOP. " Подключаем стандартные функции go_alv->set_screen_status( EXPORTING REPORT = 'SAPLSALV_METADATA_STATUS' pfstatus = 'SALV_TABLE_STANDARD' set_functions = CL_SALV_MODEL_BASE=>C_FUNCTIONS_ALL ). " Получаем ссылку на объект настройки колонок go_columns = go_alv->get_columns( ). " Указываем на поле которое будет счетчиком go_columns->set_cell_type_column( 'T_CELL_TYPE' ). " Отобразить ALV представление go_alv->display( ). |