Отключение проверки полномочий в ABAP программе

Про полномочия в SAP HCM можно говорить много. Тема довольно обширная, и посвятить ей одну заметку, как мне кажется, мало. Поэтому делать этого в настоящий момент не буду.

См. Authorizations for Human Resources

Тема, про которую пойдет речь в данной заметке, относится к ситуациям, в которых необходимо отключить проверку полномочий (как структурных, так и обычных, также именуемыми general authorizations). Отключение полномочий в ABAP программах производится в тех ее местах, где происходит чтение данных из инфотипов (PA или OM), с последующим выводом на экран результатов выборки. Такая потребность может возникать в ситуациях, в которых у пользователя, например, отсутствуют полномочия на какой-то инфотип, или ему присвоен структурный профиль, в котором отсутствуют объекты, участвующие в выборке отчета. И, как это часто бывает, расширить полномочия ему по каким-то причинам невозможно, а отчет является очень нужным и полезным. Как же быть в такой ситуации?

Исходные данные

Рассмотрим простой пример. Есть пользователь DEMO_USER1 в роли которого присутствует объект полномочий P_ORGIN со следующим наполнением

Рисунок 1.

Помимо объекта полномочий P_ORGIN с доступом к инфотипу 0001 - "Organizational Assignment" в роли присутствует объект полномочий PLOG, в котором содержится несколько инфотипов для объекта O - "Organizational Unit"

Рисунок 2.

Плюс ко всему, ему присвоен структурный профиль полномочий для просмотра только объектов O - "Organizational Unit"

Рисунок 3.

Мягко говоря, полномочия не очень-то уж и "обширные".

Пример программы без отключенной проверки полномочий

Пишем простенькую программу для чтения инфотипа 0002 - "Personal Data" и чтения инфотипа 1000 - "Object" для объекта S - "Position" без отключенной проверки полномочий.

Запускаем

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

Пример программы с отключенной проверкой полномочий

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

N.B. После того, как вы отключили проверку структурных полномочий и получили в ходе выполнения программы необходимые данные, проверку следует включить. Для этого необходимо вызвать ФМ RH_AUTHORITY_CHECK_ON. Для чтения же инфотипов проверку включать не нужно, так как она отключается непосредственно перед самим чтением, и затем будет автоматически активирована.

Тестируем

Как видите, таблицы lt_pa0002 и lt_1000 были заполнены каким-то значениями. Хотя эти же таблицы были пустыми в первой "редакции" программы.

Чтобы убедиться, что проверка полномочий на чтение инфотипов автоматически активируется, запустим следующий вариант программы

Обратите внимание на таблицу lt_pa0002, которая заполняется в самом начале выполнения программы, когда проверка полномочий отключена. При этом повторный вызов ФМ HR_READ_INFOTYPE возвращает таблицу lt_pa0002 пустой.

Тестируем

P.S. За качество кода, прошу не винить. Я не со зла.

Read more