среда, 4 февраля 2015 г.

Вставка значений в инфо-пакет

Время от времени возникает задачи загрузки данных из исходной системы по определенным ограничениям. Проблема возникает, когда этих ограничений не пара десятков, а пара тысяч и более... и полная загрузка не возможна \ не желательна.

Можно конечно, создать отдельный признак или DSO откуда Вы будете считывать данные в ABAP рутине, а туда загружать файлом. Но есть путь проще...

Используя OLAP переменную вызвать стандартный диалог ввода значений. После запуска пакета Вы получите диалог ввода значений.


Для универсальности я сделал customer-exit переменную на признаке 0TCTIOBJVAL (из тех.контента и 60CHAR) с следующими настройками.


CMOD:

IF I_STEP = 0 AND I_VNAM = 'ZC_SO_0TCTIOBJVAL'.

  CALL FUNCTION 'COMPLEX_SELECTIONS_DIALOG'
    EXPORTING
*     TITLE                   = ' '
      TEXT                    = 'Enter correct values'
*     SIGNED                  = 'X'
*     LOWER_CASE              = ' '
*     NO_INTERVAL_CHECK       = ' '
*     JUST_DISPLAY            = ' '
      JUST_INCL               = 'X'
*     EXCLUDED_OPTIONS        =
*     DESCRIPTION             =
*     HELP_FIELD              =
*     SEARCH_HELP             =
*     TAB_AND_FIELD           =
    TABLES
      RANGE                   = E_T_RANGE
   EXCEPTIONS
     NO_RANGE_TAB            = 1
     CANCELLED               = 2
     INTERNAL_ERROR          = 3
     INVALID_FIELDNAME       = 4
     OTHERS                  = 5
            .
  IF SY-SUBRC <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDIF.

 

И указать переменную в пакете

Готово.

Плюсы:
- OLAP переменная может быть вставлена на любую характеристику, любого пакета, любого источника - универсальность.
- пакеты обычно измеряемы в прод, т.о. вы готовы
- переменную можно использовать несколько раз в одном пакете
- значения ограничения введенные в ручную и через переменную работают вместе


Минусы:
- из-за универсальности, необходимо следить за форматом значений. т.е. если нужны ведущие нули, будьте добры добавить. Но для спорадических задач по загрузке больших блоков данных этого более чем достаточно.

Особенности: Количество передаваемых ограничений через параметры ограничено и зависит от размера характеристики. Ноту я не нашел.... но 700 значений за раз я передавал.

Доработки:
Можно сделать несколько таких переменных, с преобразованием значения признака и подключенным search help. Для этого при вызове COMPLEX_SELECTIONS_DIALOG использовать параметры:

     SEARCH_HELP
     TAB_AND_FIELD




Комментариев нет: