BTE - Business Transaction Events
BTE – Работа с бизнес событиями транзакций – это техника расширения, позволяющая выполнить дополнительную проверку значений данных в момент ввода документа в систему (1) или выполнить обновление данных в собственных таблицах (2) при выполнении определённых операций (транзакций).
Уважаемые коллеги!
Я продолжаю публикацию на портале SAPLand цикла статей «Техники расширений стандартной системы SAP».
Все статьи цикла приведены внизу публикации.
BTE – Работа с бизнес событиями транзакций – это техника расширения, позволяющая выполнить дополнительную проверку значений данных в момент ввода документа в систему (1) или выполнить обновление данных в собственных таблицах (2) при выполнении определённых операций (транзакций). Появление этой техники должно было решить проблемы использования одной точки расширения разными разработчиками, например, это техника Customer-Exits или UserExits. В некотором виде, эту проблему решили для событий проверки значений, где каждый разработчик получает свою независимую точку входа в бизнес событие, однако реализация события обновления данных, как и для предыдущих техник (Customer-Exits или UserExits), осталась единственной. Все разработчики должны реализовывать свой код в рамках одной программы реализации. Техника BTE используется как разработчиками SAP, партнерами SAP, так и клиентами SAP, хотя для клиентов, по части событий есть ограничения к использованию BTE.
Использование техники BTE стало возможным, начиная с версии SAP ERP 4.0 . Эта техника обеспечивает интерфейс (точку выхода) в стандартной программе с пользовательским расширением (приложением), выполняющим дополнительные пользовательские проверки или обновление пользовательских данных. Технику BTE используют, как правило, для следующих функциональностей SAP:
- главная книги FI-GL,
- бухгалтерия поставщиков FI-AP,
- бухгалтерия клиентов FI-AR,
- модуля сбыта SD.
Техника BTE реализуется с помощью предопределенных интерфейсов между стандартной программой и расширением, позволяющих вызвать «дополнительную» (пользовательскую) функциональность. Для реализации бизнес - расширения вы должны создать модуль с предопределенными параметрами и именами, для каждого бизнес-события это будет отдельная реализация со своим набором параметров. Система SAP вызывает функциональные модули OPEN_FI_PERFORM_* или OUTBOUND_CALL_*, которые в свою очередь проверяют: есть ли «активные» BTE – события, из указанных в настройках системы.
Существует два типа интерфейсов (в технике BTE):
- Publish & Subscribe interfaces (P/S Modules) – в этом типе интерфейса нельзя обновлять данные в БД, но возможно существование нескольких (очередь) активных «инстанций», вызываемых последовательно.
- Process interfaces (Process Modules) – этот тип интерфейса позволяет выполнять обновление данных в БД, но ограничением его использования является то, что активной может быть одна «инстанция» данного типа.
Для нахождения существующих в коде стандартных программ «триггерных точек» BTE можно пойти следующими путями:
- Поиск в тексте стандартной программы вызовов:
- "OPEN_FI_PERFORM" для нахождения «точки вызова» с интерфейсом P/S Modules;
- "OUTBOUND_CALL" для нахождения «точки вызова» с интерфейсом Process Modules .
- Использовать транзакцию FIBF и далее по меню: «Параметры настройки» – «P/S Модули» или «Модули процессов» для соответствующих типов интерфейсов. Рис.1.
- Использование отладчики системы, для этого необходимо установить точку останова в функциональном модуле BF_FUNCTIONS_FIND.
Рис.1 BTE-1
Для каждого типа интерфейса существует три варианта использования:
- Вариант для стандартных событий системы SAP-приложения, изменять которые не рекомендуется, так как это сфера ответственности разработчиков компании SAP.
- Вариант для событий партнеров. Среднестатистический разработчик вряд ли является партнером (примеч. автора.)
- Вариант для событий «обычных клиентов».
Как мы видим, для практического применения на проекте внедрения или при поддержке остаётся только последний пункт, выбрав который, мы можем приступить к реализации собственных BTE-расширений. Для получения информации по существующим событиями в конкретной транзакции перейдите по меню «Среда» – «Инфо-система P/S» или «Инфо-система (процессы)». После чего получите список всех доступных событий каждого типа, Рис.2.
Рис.2 BTE-2
Примечание: Наиболее «любимый» тип интерфейса для BTE, это событие с номером 1120 – замещение полей в заголовке и позициях документа. Фактически разрешено выполнять изменение полей заголовка и позиций документа, когда он полностью сформирован, это - аналог замещения с типом события «0003 – документ полностью», но в отличии от указанного замещения, событие 1120 имеет место для всех создаваемых FI-документов.
Для получения шаблона реализации функционального модуля, можно скопировать его из окна справки, или же нажать на панели инструментов кнопку , после нажатия которой будет вызвана транзакция SE37 – создание функционального модуля. В поле ввода имени функции будет подставлен шаблон реализации выбранного интерфейса Рис.3.
Рис.3 BTE-4
Если требуется только просмотреть параметры функции, то можно выбрать кнопку (на Рис.2), при нажатии на которую, будут выведены параметры функционального модуля, Рис.4.
Рис.4 BTE-41
Следует скопировать этот шаблон в собственный функциональный модуль, начинающийся с Z_ или Y_. Например, модуль SAMPLE_INTERFACE_00001120 можно скопировать в модуль Z_SAMPLE_PROCESS_00001120, Рис.5, в собственной группе функций, например, Z_BFFMSMPL2.
Рис.5 BTE-5
В таком случае после копирования мы получим шаблон модуля с входными и выходными параметрами, где можем написать собственную реализацию, пример кода - ниже:
FUNCTION z_sample_process_00001120.
*"--------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" VALUE(I_BKDF) TYPE BKDF OPTIONAL
*" TABLES
*" T_BKPF STRUCTURE BKPF
*" T_BSEG STRUCTURE BSEG
*" T_BKPFSUB STRUCTURE BKPF_SUBST
*" T_BSEGSUB STRUCTURE BSEG_SUBST
*" T_BSEC STRUCTURE BSEC OPTIONAL
*" CHANGING
*" REFERENCE(I_BKDFSUB) TYPE BKDF_SUBST OPTIONAL
*"--------------------------------------------------------------------
break tochenyuk.
ENDFUNCTION.
Пока собственную реализацию разрабатывать не будем, а поставим только команду остановки, и перейдем к активации вызова нашей функции.
Для начала, требуется создать, так называемую, запись кода продукта. Фактически это признак объединения для группы событий, например, если для реализации какого-то процесса вам нужно задействовать несколько бизнес-событий, то таким образом вы можете сгруппировать используемые бизнес функции и проводить активацию разработки одним нажатием мыши, включая или отключая разработку. Для этого в транзакции FIBF переедем по меню: «Параметры настройки» – «Продукты» – «…клиента», Рис.6.
Рис.6 BTE-6
Вполне возможно, что в таблице уже будут другие активные продукты («инстанции»). Если не знаем, что это за продукты, то просто создаем новый собственный тип продукта и «ставим галку» активации, если заранее знаем код продукта, например, это - созданный нами ранее продукт, тогда создавать новый продукт не требуется, он уже создан. Для создания новой группы нажимаем кнопку «Новые записи», Рис.7.
Рис.7 BTE-7
Теперь сохраняем собственный продукт и переходим к его связыванию с функциональным модулем, созданным ранее. Так как это был модуль обновления данных, то идем по пути: «Параметры настройки» – «Модули процесса» – «…клиента», где добавляем модуль, созданный ранее с нашим типом продукта, Рис.8, после чего сохраняем данные ввода.
Рис.8 BTE-8
Теперь наш модуль будет вызываться системой при формировании любого документа FI. Исходя из ключей таблицы событий для процесса обновления, событие может быть только одно, для страны и типа приложения. Если бизнес имеет место в разных странах, то в общем можно выполнить реализацию реакции системы на событие в зависимости от страны. Код продукта в
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
ЗарегистрироватьсяУ вас уже есть учетная запись?
Войти
Обсуждения 2
Комментарий от
Пётр Ромащенко
| 14 сентября 2016, 14:59
Комментарий от
Олег Точенюк
| 15 сентября 2016, 18:21
Пётр Ромащенко 14 сентября 2016, 14:59
Уткнулся я тут в ограниченность полей стандартных структур, и уж чуть было не начал сочинять неведомо что, и тут - ТАДАМ! - эта замечательная статья. Сердечное спасибо, uukrul! :-)