Хранилище данных персонализации
В стандарте есть такой функционал как центральный репозиторий для данных персонализации. Основная его идея- предоставить унифицированный интерфейс для хранения каких-либо данных на нескольких уровнях:
- На уровне пользователя (на рисунке транзакция SU01)
- На уровне роли (на рисунке транзакция PCFG)
- На глобальном уровне (вне зависимости от роли/пользователя)
Используя данный функционал, мы можем сохранять данные как в общем репозитарии (набор заранее созданных в системе таблиц), так и переключать его работу на собственные таблицы. Заранее предоставляется и интерфейс ведения этих данных.
Ключ персонализации
Для того чтобы что-то куда-то сохранить, мы должны зарегистрировать объект персонализации (ключ), делается это в транзакции PERSREG.
На рисунке ниже демо пример объекта персонализации:
Тут мы отмечаем что хотим использовать общий репозитарий (не свои таблицы), объект персонализации должен быть виден в транзакции ведения пользователей, а так же указываем тип данных.
Типы данных могут быть: элементарные, структуры без вложенных таблиц и других структур, табличный тип с простыми структурами.
В нашем случае это простая структура вида:
После сохранения объекта персонализации, мы уже можем вести данные на уровне пользователя, тр. SU01:
API для работы с данными персонализации
На уровне кода работать с объектами персонализации мы можем через класс — cl_pers_admin.
Простой пример для записи/чтения данных:
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 |
CONSTANTS: gc_pers_key TYPE spers_key VALUE 'ZDEMO_KEY'. DATA: ls_data TYPE zsm_some_data. ls_data-carrid = 'DD'. cl_pers_admin=>set_data( EXPORTING p_pers_key = gc_pers_key p_pers_data = ls_data p_uname = '' p_write_through = 'X' EXCEPTIONS OTHERS = 0 ). cl_pers_admin=>get_data( EXPORTING p_pers_key = gc_pers_key IMPORTING p_pers_data = ls_data EXCEPTIONS OTHERS = 0 ). WRITE ls_data-carrid. |
Для того чтобы реализовать собственный диалог ведения данных, необходимо разработать ФМ с заранее определённым интерфейсом — как у ФМ BMENU_SETTINGS_EDIT и указать его в объекте персонализации.
Для того чтобы данные сохранялись не в общем репозитарии, а в каких-либо других таблицах, необходимо создать класс с поддержкой интерфейса IF_PERS_EXTERNAL_TABLE и так же указать в объекте.
Примеры можно посмотреть в других объектах персонализации.