Типы RFC в SAP

Remote Function Call (RFC) - стандартный интерфейс связи между SAP системами. RFC функцию можно выполнить в другой системе.

Существует несколько видов RFC функций.

sRFC 

sRFC - синхронные RFC. Данный вид RFC выполняется на принципах синхронной связи. Т.е. целевая система должна быть доступна в данный момент, а система из которой вызывается RFC ожидает выполнения. Применение данных RFC  целесообразно когда требуется получить данные из целевой системы. Например, при работе в ERP требуется чтение данных какой-либо таблицы в HR системе.
ФМ должен иметь тип выполнения - "Дистанционный модуль".

Используется следующий синтаксис:
CALL FUNCTION func_name DESTINATION dest parameter list.

Где dest - имя RFC соединения (транзакция SM59). Такжe вместо можно указать
- 'NONE' - Произойдет вызов модуля в текущей системе, но в отдельном LUW.
- 'BACK' - Дополнение используется в вызванном RFC модуле для выполнения ФМ в вызывающей системе. Своеобразный сон во сне. Злоупотреблять не стоит, т.к. отладка потом взрывает мозг.

Пример вызова:

aRFC

aRFC - асинхронные RFC. Если придираться к терминологии, то асинхронные RFC в сапе не асинхронны в полной мере. Их асинхронность  по большому счету только в том, что программа может не ждать их выполнения. В остальном это те же самые синхронные RFC, т.к. система должна быть доступна при их запуске.

Используется следующий синтаксис для вызова:

Т.к. работа происходит асинхронно, получение данных отличается от обычного ФМ. При вызове следует указать подпрограмму или метод вызываемый по завершению функционального модуля. Существует дополнение RECEIVE RESULTS FROM FUNCTION для получения данных из выполненного ФМ

Пример синтаксиса:

Сам ФМ имеет такую структуру:

дополнение PERFORMING rfc_results ON END OF TASK означает, что подпрограмма rfc_results будет вызвана после выполнения каждого из ФМ.
Вместо дополнения PERFORMING ... ON END OF TASK можно использовать CALLING method ON END OF TASK для указания метода.

Распараллеливание при помощи aRFC

Дополнение DESTINATION IN GROUP <group name> позволяет запускать RFC в группе (настройка групп производится в транзакции RZ12). При указании SPACE или DEFAULT группа будет выбрана автоматически. Перед запуском RFC необходимо проинициализировать группу ФМ-ом 'SPBT_INITIALIZE' он покажет общее количество процессов и число доступных на данный момент.

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

Хотя, если уж говорить о реальных задачах распараллеливания, стоит посмотреть в сторону SPTA_PARA_PROCESS_START_2 или  поддержать отечественного производителя c его zconcurrency_api.

tRFC

tRFC - транзакционные RFC. Настоящие асинхронные RFC, которые позволяют вызывать RFC при недоступной системе выполнения RFC. tRFC сохраняет вызываемую функцию с соответствующими параметрами в базе данных под уникальным идентификатором транзакции (TID)

Если вызов отправлен, а принимающая система не работает, вызов остается в локальной очереди до более позднего времени. Вызывающая программа может продолжать работу, не дожидаясь отклика от вызванного ФМ. Если принимающая система не становится активной в течение определенного периода времени, вызов планируется в пакетном режиме.

tRFC запускаются в одном LUW, т.е. случае ошибки происходит откат для всех ФМ.

Получить результат выполнения подобных ФМ напрямую как в случае c aRFC или sRFC невозможно.

tRFC вызываются при помощи дополнения IN BACKGROUND TASK и будут отработаны после оператора COMMIT WORK. Для запуска tRFC до COMMIT WORK можно использовать ФМ START_OF_BACKGROUNDTASK.

Мониторинг производится в транзакции SM58

AS SEPARATE UNIT - дополнение позволяет выполнять каждый вызов в отдельном контексте. По умолчанию все вызовы функций имеют общий контекст. Т.е., например, если вы укажете в группе функций глобальную переменную gv_test, значение которое вы туда положите во время выполнения функции, можно будет увидеть и изменить в следующих. AS SEPARATE UNIT позволяет избежать подобного взаимного влияния.

qRFC - разновидность tRFC, позволяющая реализовывать очередь с последовательным вызовом ФМ. В отличие от tRFC выполняются в последовательности вызова(tRFC это не гарантируют);

Мониторинг можно производить в транзакции SQ01

При возникновении исключительной ситуации в одном из модулей, выполнение очереди будет остановлено. Можно вручную сделать рестарт всей очереди.

bgRFC - фоновые RFC.
Обновленные tRFC и qRFC, которые SAP рекомендует использовать вместо классических.  Создаются на основе интерфейса IF_BGRFC_UNIT.

Отладка RFC

Для отладки RFC  надо поставить внешнюю точку прерывания под пользователем который указан в настройках RFC соединения или текущим, если оно предполагает использование данных текущего пользователя.

В верхнем меню выбираем Утилиты->Параметры настройки->ABAP редактор->Отладка

 

Типы RFC в SAP: 1 комментарий

Добавить комментарий

Ваш адрес email не будет опубликован.