Расширение SAP для начинающих. User-exit, BADi, Enhancement

Несмотря на то, что система многофункциональна и избыточна, все же достаточно часто требуется вносить изменения в ее логику работы. Начинающие консультанты часто спрашивают, как же можно расширить логику работы системы для требований бизнеса? Не все можно сделать галочками, это верно. Иногда мы влезаем в исходные коды вендора, чтобы сделать свое расширение SAP, свою логику работы. Для нас, с точки зрения HR, представляют интерес два вида расширений системы.

User-exit

Самая старая технология, но и наиболее простая и универсальная. Суть заключается в том, что SAP в своих программах делает вызов специальных Includes (программ), которые начинаются с букв ZX и поэтому разрешены для изменения консультантам. То есть, мы находим такой вызов, создаем Include (программу) и в ней пишем любую логику. При компиляции система видит, что появился в базе данных такой объект – Include, вставляет его содержимое на то место, где был вызов. Так получается, с точки зрения системы, что этот кусок кода как будто бы уже был в самой программе. Например, форма Т-2, программа HRULT2_2004, инклуд HRUIT2_PRC_2004. Смотрим событие get pernr:

form get_pernr .
data: ls_log_pernr like line of gt_log_pernr.

* user-exit
include zx_hrult2_pernr.
pn-endda = p_datep.
if gf_fill_period_to = ‘X’.
pnpendda = p_datep.
endif.

Что мы видим? В программе есть user-exit с названием zx_hrult2_pernr. Можно два раза на него кликнуть и тем самым создать программу. Теперь мы в этом Include можем писать свой код, который будет подставлен вместо строчки include zx_hrult2_pernr.

Другой пример из того же отчета:

form end_of_selection .
* user-exit
include zx_hrult2_eos.

Насколько мне известно, нет какого-либо единого наглядного каталога, где можно было бы посмотреть все user-exits. Каждую программу нужно смотреть индивидуально. Часть user-exit можно посмотреть, создать и документировать через транзакцию CMOD – управление проектами расширений. Запускаем транзакцию CMOD, в меню «Утилиты» выбираем «SAP-расширения». И по ключевым словам ищем доступные расширения. Искать проще по маске по словам PY, PT, PA, HR, OM для поля «Прикладной компонент». К этому полю, почему-то, нет средства поиска.

BADi

Это уже новая технология. Расшифровывается как Business Add-Ins (бизнес-дополнения). BAdi состоит из двух сущностей: определение и реализация. Определение – это своего рода описание объекта с указанием, что он может хранить (какие есть атрибуты), что делать (какие есть методы). Это определенная модель, которая описывает, что обязательно должно быть на входе и на выходе, какие параметры могут быть, их типы и правила вызова. Своего рода абстракция: все мы понимаем, что велосипед состоит из колес, педалей, рамы, руля, цепи, которая соединяет педали с колесом через муфту. Но реализация может быть разной. Так и здесь. Концептуальный проект велосипеда – это определение BAdi, а его конкретная реализация в горный, шоссейный или дамский велосипед – это реализация BAdi. Чтобы определить модель велосипеда (какую именно реализацию нужно вызвать в программе) есть понятие фильтра. Фильтр – это элемент данных в определении BAdi. При вызове программа заполняет его каким-то значением (как решит программист). Система смотрит все реализации этого определения BAdi, у которых стоит такое же значение фильтра (или фильтр просто не используется как критерий), и вызывает подходящую реализацию. По этому принципу, например, сделана косвенная оценка видов оплаты. Посмотрите определение HR_INDVAL (тр. SE18) и реализации HR_IV_* (тр. SE19).

Пример вызова данного BAdi с косвенной оценкой можно посмотреть в процедуре indbw в функциональном модуле RP_EVALUATE_INDIRECTLY. В данном случае вызов не совсем очевиден, но понять принцип работы можно.

Транзакции для создания BAdi: SE18 – создание определений, SE19 – создание реализаций.

Enhancement Framework

С версии 7.0 ядра системы компания SAP предлагает новое решение для внесения пользовательских расширений (логики) в систему. Решение называется Enhancement Framework (EF) и призвано унифицировать технологию внедрения пользовательской бизнес-логики в места, которые определены SAP. На самом деле, этот функционал охватывает еще и модификацию объектов системы, но мы работаем в рамках стандарта и не будем ломать систему. В настоящий момент эта технология встречается только в расширенном функционале HR (административные сервисы, ESS/MSS и т.д.). Рекомендую сейчас не забивать этим голову, так как это больше требуется программистам. Любопытных могу отправить на http://help.sap.com и в транзакцию SPAU_ENH.