SALV Table — Настройка PF-STATUS

На этапе создания экземпляра объекта (фабричным методом) мы определяем, как мы хотим использовать объект ALV таблицы, будет ли это полноэкранный режим, либо мы хотим поместить объект в подготовленный заранее контейнер. Данный выбор влияет на способ установки GUI статуса для ALV таблицы.

В полноэкранном режиме для установки GUI статуса необходимо использовать метод SET_SCREEN_STATUS, параметр REPORT отвечает за то из какой программы будет взят GUI статус, PFSTATUS – имя GUI статуса, SET_FUNCTIONS – определяет какие стандартные функции будут использованы в программе. Может принимать значения: C_FUNCTIONS_DEFAULT – сортировки, фильтры, выбор формата. C_FUNCTIONS_ALL – все функции ALV, C_FUNCTIONS_NONE – по умолчанию, только пользовательские функции. Константы определены в классе: CL_SALV_MODEL_BASE

Стандартный GUI статус можно взять в группе функций: SALV_METADATA_STATUS – статус: SALV_TABLE_STANDARD или  SALV_TABLE_STDPOPUP, скопировать в свою программу и расширить необходимыми функциями.

Для того чтобы динамически исключить какую либо функцию можно применить класс cl_salv_functions, но вместо метода remove_function использовать метод set_function, параметр name определяет какую функцию будем скрывать, boolean — определяет скрыта она или нет, если скрываем ставим в abap_true. Метод remove_function не работает для полно-экранного грида.

Пример измененного GUI статуса (функции начинающиеся с & являются стандартными):

Когда ALV объект создается в контейнере, для настройки функций используется класс: cl_salv_functions.  Получить экземпляр этого класса можно используя метод — get_functions( ) главного объекта ALV. Для установки функций по умолчанию можно воспользоваться методом set_default( ) или set_all( ) – для установки всех функций ALV объекта. Чтобы добавить свою функцию существует метод add_function. Ниже пример того как это сделать:

10 комментариев

  1. Не работает если событие не INITIALIZATION. Что можно использовать вместо r_container = cl_gui_container=>screen0 ? Все вроде нормально, но просто ничего не выводит на экран.

  2. Это я понимаю. Мне охото воспользоватся вот этим:

    go_functions->add_function(
    EXPORTING
    NAME = ‘ADDFUNC’
    icon = ‘@01@’
    text = ‘ДопКнопка’
    tooltip = ‘Всплывающая подсказка’
    POSITION = if_salv_c_function_position=>right_of_salv_functions ).

    А это без контейнера не работает.
    А если создавать контейнер как у Вас указано и событие не INITIALIZATION, а например после сел. экрана то тогда go_alv->display( ) ничего не показывает. Без контейнера и добавление кнопки все корректно.

      1. Попробуйте следующий код:

        PARAMETERS p_dummy.
        DATA:
        gt_data TYPE spfli_tab, » Таблица с данными
        go_functions TYPE REF TO cl_salv_functions,
        go_alv TYPE REF TO cl_salv_table.

        START-OF-SELECTION.
        WRITE ».

        SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE gt_data.
        » Фабричный метод возвращяет экзмепляр ALV объекта
        TRY.
        cl_salv_table=>factory(
        EXPORTING
        r_container = cl_gui_container=>default_screen
        IMPORTING
        r_salv_table = go_alv
        CHANGING
        t_table = gt_data ).
        CATCH cx_salv_msg .
        MESSAGE ‘Ошибка при создании ALV’ TYPE ‘E’.
        ENDTRY.

        » Установка функций (кнопок)
        go_functions = go_alv->get_functions( ).

        IF go_functions IS BOUND.
        go_functions->set_all( abap_true ).
        go_functions->add_function(
        EXPORTING
        NAME = ‘ADDFUNC’
        icon = ‘@01@’
        text = ‘ДопКнопка’
        tooltip = ‘Всплывающая подсказка’
        POSITION = if_salv_c_function_position=>right_of_salv_functions ).
        ENDIF.

        » показать alv
        go_alv->display( ).

  3. Добрый день.
    А есть ли в классе cl_salv_table возможность вывести функциональную кнопку при нажатии на которую будет раскрываться меню с выбором команд. В классе cl_gui_alv_grid такое реализуемо, а тут не могу найти никак возможность сделать это.

  4. Добрый день! А каким образом можно вывести стандартные кнопки «выделить» и «снять выделение»? методом set_all они почему то не выводятся.

    1. Добрый! Попробуйте поменять способ выделения строк:

      DATA: go_selections TYPE REF TO cl_salv_selections.

      go_selections = go_alv->get_selections( ).

      go_selections->set_selection_mode( if_salv_c_selection_mode=>row_column ).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *