Синхронные и асинхронные RFC

Для обработки входящих событий BAPI можно применить синхронную обработку (во время которой приложение-клиент и адаптер должны быть доступны друг другу) или асинхронную обработку (при которой не требуется, чтобы адаптер был доступен во время вызова функции приложением-клиентом). В случае синхронной обработки приложение-клиент ожидает ответа адаптера. При асинхронной обработке приложение-клиент не ожидает ответа.

Интерфейс BAPI имеет два набора свойств спецификации активации (один для синхронных RFC, один для асинхронных RFC), которые используются для настройки обработки входящих событий. Значения свойств можно указать с помощью J2C Bean wizard или административной консоли.

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

Синхронные RFC

Если во время настройки выбрано значение Синхронные RFC (по умолчанию), то выполняются следующие этапы обработки:
  1. Адаптер запускает обработчики событий, которые отслеживают события функции с поддержкой RFC (указывается в свойстве RFCProgramID) на сервере SAP server.
  2. Обработчики событий передают адаптеру событие функции с поддержкой RFC.
  3. Адаптер анализирует имя операции и бизнес-объекта с использованием полученной функции с поддержкой RFC.
  4. Адаптер передает бизнес-объект конечной точке в синхронном режиме.
  5. Адаптер принимает бизнес-объект, возвращенный конечной точкой.
  6. Адаптер преобразует полученный бизнес-объект в функцию с поддержкой RFC и возвращает ее серверу SAP server.

Адаптер не принимает события, если конечная точка недоступна.

Асинхронные RFC с поддержкой транзакций

Если во время настройки выбрано значение Асинхронные RFC с поддержкой транзакций или очереди, то будут выполнены следующие этапы обработки:
  1. Клиент в SAP server передает адаптеру вызов функции с поддержкой RFC.
    Прим.: Для отправки функций с поддержкой RFC из очереди в SAP server приложение-клиент в SAP server помещает события в пользовательскую исходящую очередь.

    С вызовом связывается ИД транзакции.

    Вызывающая программа в SAP server не ожидает ответа об успешном вызове адаптера и не получает данных.

  2. Вызов функции с поддержкой RFC помещается в список функций, которые требуется поместить в очередь.

    Список событий можно просмотреть, введя код транзакции SM58 в SAP server

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

    Когда SAP server успешно передает событие вызова, функция удаляется из списка.

  4. Если выбран параметр Обеспечить только одноразовую доставку события, то адаптер устанавливает ИД транзакции в постоянной таблице событий.

    Это дает гарантию, что событие не будет обработано несколько раз.

  5. Адаптер анализирует имя операции и бизнес-объекта с использованием полученной функции с поддержкой RFC.
  6. Адаптер передает бизнес-объект в конечную точку.

    Если функции отправляются из пользовательской очереди в SAP server, то функции передаются в том порядке, в котором они расположены в очереди. Содержимое очереди можно просмотреть, введя код транзакции SMQ1 в SAP server.

  7. В случае успешной доставки и выбора параметра Обеспечить одноразовую доставку события адаптер удаляет ИД транзакции из постоянной таблицы событий.
    В случае сбоя во время попытки адаптера передать бизнес-объект ИД транзакции остается в таблице событий. После получения очередного события от SAP server выполняются следующие этапы обработки:
    1. Адаптер проверяет ИД транзакции.
    2. Если событие совпадает с ИД, находящимся в таблице, то адаптер обрабатывает событие один раз.

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