В данной статье мы разберем один из инструментов расширения системы, а именно, технологию Open FI. Суть технологии состоит в том, что есть определенные места в коде транзакций (как, в принципе, следует из названия технологии эти относятся к функционалу FI),  которые  динамически вызывают функциональные модули-расширения указанные в настройках. Интерфейс вызываемых модулей при этом заранее определен.

Моменты работы транзакции, в которых вызываются модули расширения, называются событиями. Модули расширения при этом делятся на два типа: модули процесса и информационные модули. Отличаются они тем, что при помощи модуля процесса можно изменять значения некоторых полей, в информационных модулях (без определенных ухищрений) можно только использовать значения переменных и полей внутренних таблиц, но нельзя эти значения изменить. Забегая вперед скажу, что метод это побороть, конечно, есть.
Как же найти события, которые можно вставить модули расширения?

Необходимо воспользоваться транзакцией FIBF (или SPRO: Финансы-Основные параметры финансов-События бизнес-транзакций).  Далее пункт меню Среда-Ифносистема(Процессы) или Ифносистема(P/S).

image001

Ифносистема(Процессы)  — это отчет, показывающий события, в которых могут быть запущены модули расширения, изменяющие данные транзакции; Ифносистема(P/S) — показывает информационные модули. Запустив отчеты, получаем весь список событий куда можно прицепиться.  Для удобства убираем перед запуском галку «Просмотр только кратких текстов», а если поставить «Процессы с активными продуктами» то получим уже активированные события. Т.е. только те, которые уже используются.

 

image004

 

image005

Второй способ отловить события – установить точку прерывания в функциональных модулях BF_FUNCTIONS_READ и PC_FUNCTIONS_READ. BF_FUNCTIONS_READ динамически, в соответствии с настройками вызывает информационные модули расширения, а PC_FUNCTIONS_READ модули процесса.  При этом некоторые события вызываются в режиме обновления, в этом случае необходимо использовать в отладчике режим отладки обновлений. Вообще второй описанный способ мне не очень симпатичен, но т.к. из-за специфики работы Open FI перед использованием модуля необходимо сделать все настройки, то, не пользуясь точкой прерывания, иногда сложно сказать, что доступно в данном событии. Описанные выше функции считывают настройки из соответствующих таблиц, т.е. готовят данные для динамического запуска функциональных модулей-расширений.  Сам запуск модуля-расширения в зависимости от транзакции происходит в различными вариантами.

Настройка обработки событий Open FI

Настройку обработки событий лучше всего начать с создания функционального модуля, который будет  динамически вызываться во время выполнения транзакции. Для этого мы в отчетах, показывающих список событий, находим нужное нам событие (давайте выберем инфо-событие 00001011), выделяем и нажимаем на кнопку «Функц. модуль-образец».

image008

Система вызовет транзакцию se37:

image009

Далее идем по меню Функциональный модуль – Другие функции – Скопировать.

image010

Копируем образец в наш рабочий функциональный моуль.

image012

В новом функциональном модуле пишем код:

FUNCTION ZFM_ART_OF_00001011.
*»———————————————————————
*»*»Локальный интерфейс:
*»  IMPORTING
*»     VALUE(I_BSEG) LIKE  BSEG STRUCTURE  BSEG
*»     VALUE(I_BKPF) LIKE  BKPF STRUCTURE  BKPF
*»———————————————————————
break akoshcheev.
ENDFUNCTION.

И активируем.

Далее, если вы еще не использовали Open FI или данная разработка должна жить самостоятельной от других расширений Open FI жизнью, необходимо создать продукт. Продукт – это функциональная область расширения, которую можно активировать или деактивировать. Т.е., например, если вы разрабатываете при помощи Open FI расширение, использующее сразу несколько событий, то объединив их в продукт, вы сможете активировать или деактивировать их одним кликом мышки.

Выбираем Параметры настройки – Продукты — …клиента

image013

image014

Активировать продукт можно сразу, а можно и потом, давайте сделаем это сразу.

Далее для продукта прописываем соответствие события и функционального модуля (это соответствие кстати и считывают модули BF_FUNCTIONS_READ и PC_FUNCTIONS_READ).

Выбираем Параметры настройки – P/S-модули — …клиента

image015

image016

Настройки сделаны, теперь давайте протестируем. При Вводе бух документа в транзакции, например, FB01 получаем остановку в нашем ФМ при вводе новой строки:

image018

Продолжение следует…

   
© 2013 sap-blog.ru
Яндекс.Метрика