BTE - Business Transaction Events
BTE – Работа с бизнес событиями транзакций – это техника расширения, позволяющая выполнить дополнительную проверку значений данных в момент ввода документа в систему или выполнить обновление данных в собственных таблицах при выполнении определённых операций (транзакций). Появление этой техники должно было сгладить проблемы использования одной точки расширения разными разработчиками. В некотором роде, для событий проверки значений данных это удалось сделать, однако реализация события обновления является единственной. Техника бизнес событий используется как разработчиками SAP, партнерами SAP, так и клиентами, хотя для клиентов, часть событий ограничена к использованию.
Использование техники BTE стало возможным, начиная с версии SAP ERP 4.0 . Эта техника обеспечивает интерфейс (точку выхода) в стандартной программе с пользовательским расширением (приложением), выполняющим дополнительные пользовательские проверки или обновление пользовательских данных. Технику BTE используют, как правило, для функциональностей:
- главная книги 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 можно пойти следующими путями:
1) Поиск в тексте стандартной программы вызовов:
- "OPEN_FI_PERFORM" для нахождения «точки вызова» с интерфейсом P/S Modules;
- "OUTBOUND_CALL" для нахождения «точки вызова» с интерфейсом Process Modules;
2) Использовать транзакцию FIBF и далее по меню: «Параметры настройки» – «P/S Модули» или «Модули процессов», для соответствующих типов интерфейсов. Рисунок 1: BTE-1.png.
- Использование отладчики системы, для этого необходимо установить точку останова в функциональном модуле BF_FUNCTIONS_FIND.
Для каждого типа интерфейса существует три варианта использования:
- Вариант для стандартных событий системы SAP-приложения, изменять которые не рекомендуется, так как это сфера ответственности разработчиков компании SAP.
- Вариант для событий партнеров (прим. автора. Среднестатистический разработчик вряд ли является партнером)
- Вариант для событий «обычных клиентов».
Как мы видим для практического применения на проекте внедрения или при поддержке остаётся только последний пункт, выбрав который, мы можем приступить к реализации собственных BTE-расширений. Для получения информации по существующим событиями в конкретной транзакции перейдите по меню «Среда» – «Инфо-система P/S» или «Инфо-система (процессы)». После чего получите список всех доступных событий каждого типа, рисунок 2: BTE-2.png
Примечание: Наиболее «любимый» тип интерфейса для BTE, это событие с номером 1120 – замещение полей в заголовке и позициях документа. Фактически разрешено выполнять изменение полей заголовка и позиций документа, когда он полностью сформирован, это - аналог замещения с типом события «0003 – документ полностью», но в отличии от указанного замещения, событие 1120 имеет место для всех создаваемых FI-документов.Для получения шаблона реализации функционального модуля, можно скопировать его из окна справки, или же нажать на панели инструментов кнопку "Функц. модуль-образец", после нажатия которой будет вызвана транзакция SE37 – создание функционального модуля. В поле ввода имени функции будет подставлен шаблон реализации выбранного интерфейса рисунок 3: BTE-4.png. Если требуется только просмотреть параметры функции, то можно выбрать кнопку "Интерфейс", при нажатии на которую, рисунок 5: BTE-41.png, будут выведены параметры функционального модуля.
Следует скопировать этот шаблон в собственный функциональный модуль начинающийся с Z_ или Y_. Например, модуль SAMPLE_INTERFACE_00001120 можно скопировать в модуль Z_SAMPLE_PROCESS_00001120, рисунок 5: BTE-5.png, в собственной группе функций, например Z_BFFMSMPL2.
В таком случае после копирования мы получим шаблон модуля с входными и выходными параметрами, где можем написать собственную реализацию, пример кода ниже:
[/list]
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: BTE-6.png.
Вполне возможно, что в таблице уже будут другие активные продукты («инстанции»). Если не знаем, что это за продукты, то просто создаем новый собственный тип продукта и «ставим галку» активации, если заранее знаем код продукта, например, это созданный нами ранее продукт, тогда создавать новый продукт не требуется, он уже создан. Для создания новой группы нажимаем кнопку «Новые записи», рисунок 7: BTE-7.png
Теперь сохраняем собственный продукт и переходим к его связыванию с функциональным модулем, созданным ранее. Так как это был модуль обновления данных, то идем по пути: «Параметры настройки» – «Модули процесса» – «…клиента», где добавляем модуль, созданный ранее с нашим типом продукта, рисунок 8: BTE-8.png, после чего, сохраняем данные ввода.
Теперь наш модуль будет вызываться системой при формировании любого документа FI. Исходя из ключей таблицы событий для процесса обновления, событие может быть только одно, для страны и типа приложения. Если бизнес имеет место в разных странах, то в общем можно выполнить реализацию реакции системы на событие в зависимости от страны. Код продукта в ключ таблицы не входит. Для процессов типа P/S Modules, код продукта входит в ключ таблицы, поэтому событий типа «подписка» может быть зарегистрировано более чем одно.