SAP BI-IP в BW/4HANA часть 5. User exit переменные.

Другие статьи цикла:

О чем эта статья

При работе с BEx запросами периодически возникает потребность фильтровать открываемые данные. Обычно это можно сделать через Input Ready переменные – когда пользователь самостоятельно выбирает значение фильтра. Однако в реальных бизнес задачах существует потребность автоматически с помощью ABAP кода рассчитывать значения фильтра (например, считывать значение фильтра из настроечной таблицы). Для этого SAP BW / BI-IP предлагает функционал User exit (иногда их называют Customer Exit) переменных.

В этой статье мы разработаем User exit переменную, которая будет фильтровать поле BRAND по MERCEDES (да это простой кейс, но его суть в том, что бы это сделаем ABAP кодом, а не простым ограничением признака).

Было

Стало

Немного теории

Из интернета я могу порекомендовать следующие ресурсы:

Для обработки User Exit переменной необходимо создать в точке расширения RSROA_VARIABLES_EXIT реализацию расширения на классе, который должен использовать интерфейс IF_RSROA_VARIABLES_EXIT_BADI.

В классе необходимо переопределить метод PROCESS, в котором необходимо заполнить таблицу C_T_RANGE.

Это все мы сделаем в статье ниже.

Практика

Шаг 1. Создаем переменную ZZE0001_VAR01 для инфо-объекта BRAND

Для начала создадим переменную ZZP_CARS_BRAND, которую будем ограничивать. Нажимаем на признак BRAND правой кнопкой мыши и выбираем New -> Variable.

Вводим название и описание переменной, выбираем тип – Customer Exit,

Убираем Input-Ready и сохраняем переменную. Должно получиться как на рисунке ниже.

Шаг 2. Добавляем переменную в BEx запрос ZZLICAR01_QP01

Открываем вкладку Filter в BEx запросе, нажимаем правой кнопкой мыши и выбираем “Add Characteristics“, выбираем признак BRAND и добавляем его.

Нажимаем на признак BRAND правой кнопкой мыши и выбираем Restrict.

В открывшемся окне переходим на вкладку Variables и переносим переменную ZZE0001_VAR01 в правую часть окна, после чего нажимаем на ОК.

Шаг 3. Проверяем существует ли реализация расширения RSROA_VARIABLES_EXIT

На данном шаге важно проверить существует ли уже в системе реализация расширения RSROA_VARIABLES_EXIT. Это нужно, т.к. если вы сделаете несколько реализация одного раширения, то система будет искать обработку переменной в каждой реализации расширения, что приведет к путанице.

BEST PRACTISE иметь одну реализацию расширения.

Необходимо зайти в транзакцию SE18 и ввести в поле Enhancement Spot значение RSROA_VARIABLES_EXIT.

В появившемся окне проверим есть ли уже Z* реализация расширения (на скриншоте ниже есть).

В таком случае необходимо проанализировать существующую реализацию – скорее всего она определяет как должен называться ABAP класс что бы была обработка перменной. На скриншотах ниже видно, что данная реализация будет считывать все классы с названием “ZCL_VAR_” + название переменной, т.е. в нашем случае ZCL_VAR_ZZE0001_VAR01

Шаг 4. Создаем ABAP класс для обработки переменной.

Создадим свой класс (я специально называю его ZZCL_RSROA_BRAND_01, а не ZCL_VAR_ZZE0001_VAR01, что бы в следующем шаге создать свою реализацию расширения что бы показать как это делается. Но на боевых проектах надо использовать уже созданную реализацию расширения).

Открываем транзакцию SE24, вводим название класса и нажимаем “Создать”.

В появившихся окных указываем что это класс, а не интефрейс и указываем его описание.

Указываем что сохринам в темповом пакете

В появившемся окне переходим на вкладку “Интерфейсы” и вводим IF_RSROA_VARIABLES_EXIT_BADI, нажимаем enter.

Система автоматически подтянет еще один интерфейс IF_BADI_INTERFACE, необходимый для работы с BADI.

Переходим на вкладу Методы и два раза кликаем на метод Process.

Вводим текст как на скриншоте ниже

method IF_RSROA_VARIABLES_EXIT_BADI~PROCESS.
    DATA l_s_range LIKE LINE OF c_t_range.
    IF I_STEP = 1.
      l_s_range-SIGN = 'I'.
      l_s_range-OPT = 'EQ'.
      l_s_range-LOW = 'MERCEDES'.
      APPEND l_s_range to c_t_range.
    ENDIF.
  endmethod.

Сохраняем и активируем

Шаг 5. Создаем реализацию расширения точки расширения RSROA_VARIABLES_EXIT

Еще раз – крайне не рекомендуется создавать свою реализацию расширения, если она уже существует в системе. На данном шаге мы ее создаем исключительно в учебных целях.

Заходим в транзакцию SE19 и вводим RSROA_VARIABLES_EXIT и нажимаем Create.

Вводим описание реализации расширения.

Указываем пакет

Теперь нужно указать на каком классе мы реализуем расширение. Можем закрыть это окно не заполняя его. К нему мы вернемся позднее.

Нажимаем на создать

И заполняем

Должно получиться вот так

Сразу добавляем фильтр, которйы будет говорить, что данная реализация будет обрабатывать только нашу пермененую.

В моем случае в транзакции se18 мы видим 2 реализации расширения – это плохо, я потом удалю то, которое создали в этом шаге (для того, что бы показать как это делать).

Шаг 6. Проверяем результат

Открываем транзакцию RSRT, вводим наш BEx запрос и нажимаем Execute.

Проверяем, что теперь отображаются только значения MERCEDES

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

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