Зависимая от пользователя реализация BAdI. Как?

Есть ли способ создать зависимые от пользователя реализации BAdI? Я имею в виду, что BAdI имеет разные реализации, которые вызываются в зависимости от пользователя, который зарегистрирован и который вызывает конкретную транзакцию.

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

Теперь я использую простую проверку

IF sy-uname = 'username'.

person Suncatcher    schedule 10.10.2012    source источник


Ответы (1)


Новые BAdI позволяют вызову GET BADI иметь один или несколько параметров FILTERS, которые можно использовать в определении реализации для выбора различных классов реализации. Но эти параметры фильтра должны быть предоставлены кодом, который вызывает BAdI. Когда стандартный код не предоставляет имя пользователя в качестве параметра фильтра, невозможно выбрать класс реализации на основе имени пользователя.

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

Я предполагаю, что причина, по которой BAdI должен вести себя по-разному для конкретного пользователя, заключается в том, что у этого пользователя есть особая работа в компании. Что вы будете делать, когда человек, занимающий эту должность, изменится, или когда он наймет одного или двух других людей, чтобы помочь им, или когда он просто заболеет, и кто-то другой должен будет выполнять его работу? Вы хотите переносить изменение программы всякий раз, когда это происходит? Но есть и другие варианты:

  • Различное поведение в зависимости от группы пользователей. Вы можете прочитать группу пользователей из таблицы базы данных usr02 (поле CLASS)
  • Различное поведение по разрешениям. Выполните AUTHORITY-CHECK и заставьте BAdI вести себя по-разному в зависимости от успеха.
  • Различное поведение по пользовательскому параметру. Чтобы прочитать пользовательский параметр в вашей программе, используйте GET PARAMETER ID. Параметры пользователя могут быть установлены администраторами в транзакции SU03, самими пользователями в транзакции SU3 (если у них есть на это разрешение) или программно с помощью SET PARAMETER ID.
person Philipp    schedule 10.10.2012
comment
Вместо пользовательских параметров следует использовать объекты персонализации. Они позволяют улучшить пользовательский интерфейс обслуживания, а также выполнять назначения на основе ролей. - person vwegert; 10.10.2012