Время от времени возникает задачи загрузки данных из исходной системы по определенным ограничениям. Проблема возникает, когда этих ограничений не пара десятков, а пара тысяч и более... и полная загрузка не возможна \ не желательна.
Можно конечно, создать отдельный признак или 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