Формат ALV определяет: сортировки, группировки, внешний вид, настройку оптимизации колонок и т.п. Для выбора форматов служит класс cl_salv_layout_service. Для настройки сохранения и привязки к ALV объекту класс cl_salv_layout. Первое что необходимо при работе с форматами дать пользователю возможность его выбрать на экране выбора.
Для выбора формата необходимо использовать статический метод f4_layouts класса cl_salv_layout_service. На вход необходимо подать структуру отвечающую за идентификацию объекта ALV к которому необходимо получить формат, структура S_KEY имеет тип SALV_S_LAYOUT_KEY. Основное что необходимо заполнить в этой структуре это id отчёта (report). Остальные параметры необходимы когда вы используете несколько ALV объектов в программе и для каждого необходимо выбирать свои форматы. Еще один параметр метода — restrict, он определяет какие форматы будут показаны пользователю. Может принимать следующие значения: if_salv_c_layout=>restrict_none — без ограничений, if_salv_c_layout=>restrict_user_dependant — только форматы своего пользователя, if_salv_c_layout=>restrict_user_independant — только общие форматы.
Для того чтобы пользователь смог сохранять (создавать) форматы, необходимо указать ALV объекту идентификатор формата (тот самый s_key), формат по умолчанию и ограничение при сохранении. Указанные параметры задаются с помощью класса: cl_salv_layout. Пример программы ниже продемонстрирует каким образом с ним работать:
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 51 52 53 54 55 56 57 58 59 60 61 |
REPORT ZALV_SIMPLE. PARAMETERS: p_format TYPE disvariant-variant. DATA: gt_data TYPE spfli_tab, " Таблица с данными go_alv TYPE REF TO cl_salv_table. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_format. PERFORM get_format. 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 ). PERFORM setup_layout. " Отобразить ALV представление go_alv->display( ). " Выбор формата FORM get_format. DATA: ls_key TYPE salv_s_layout_key, ls_layout_info TYPE salv_s_layout_info. ls_key-REPORT = sy-repid. ls_layout_info = cl_salv_layout_service=>f4_layouts( s_key = ls_key restrict = if_salv_c_layout=>restrict_user_independant ). p_format = ls_layout_info-LAYOUT. ENDFORM. " Настройка ALV объекта FORM setup_layout. DATA: ls_key TYPE salv_s_layout_key, lo_layout TYPE REF TO cl_salv_layout. TRY. lo_layout = go_alv->get_layout( ). ls_key-REPORT = sy-repid. lo_layout->set_key( ls_key ). lo_layout->set_save_restriction( cl_salv_layout=>restrict_none ). lo_layout->set_initial_layout( p_format ). CATCH cx_salv_msg. ENDTRY. ENDFORM. |
Для определения прав пользователей относительно форматов, можно воспользоваться объектом полномочий: F_IT_ALV. Следует так же отметить что:
- Имена общих форматов начинаются на /
- Имена пользовательских форматов начинаются с A-Z (А-Я)
- Имена стандартных форматов SAP начинаются с 0-9