AMC – ABAP Messaging Channels

ABAP Messaging Channels – метод связи между ABAP программами с помощью сообщений.

Каналы обмена сообщениями ABAP реализованы в виде объектов репозитория, к которым можно обращаться в программах отправителя и получателя с использованием интерфейса на основе классов (API). Классы и интерфейсы API используют соглашение об именах CL_AMC _… и IF_AMC _… соответственно.

Любой объект данных может быть отправлен путем сериализации в XML отправителем и десериализации получателем.

Длина сообщений, которые могут быть отправлены ограничена примерно 30000 байтами. Символьные строки преобразуются в формат UTF-8.

Каналы обмена сообщениями

Канал обмена сообщения должен существовать для каждой связи AMC. Ведение канала происходит в транзакции SAMC.

1 – Список каналов

2 и 3- настройки каждого канала

Message Type ID – Тип сообщения определяет тип данных объектов данных, которые могут быть отправлены как сообщения каналов сообщений. Типы TEXT для текстовых строк и BINARY для байтовых строк в настоящее время доступны.

Activity Scope – Область действия в которой можно отправлять и получать сообщения

System – Все программы всех пользовательских сессий в текущем сервере приложений ABAP могут получать сообщения.

Client – Все программы пользовательских сеансов в текущем AS ABAP, вошедшие в систему с тем же идентификатором клиента ( Трехсимвольный идентификатор , который посылается на сервер приложений ABAP при входе в систему),что и программа-отправитель, могут получать сообщения.

User – только программы сеансов вошедшие под тем же именем пользователя, что и программа отправитель, могут получать сообщения.

3 – Авторизованные программы. В данный блок прописывают программы для данного канала сообщений и их полномочия.

Send – программа которая отправляет сообщения AMC

Receive via session – программа получающая сообщения AMC

Receive via APC WebSocket – связывает соединение WebSocket с AMC. ( не использовал )

Любые нарушения правил, определенных этими свойствами для канала обмена сообщениями, приводят к возникновению исключений из класса CX_AMC_ERROR в программах отправителя и получателя.

Отправка сообщений AMC

Перед отправкой сообщения AMC в авторизованной программе необходимо использовать фабричный метод CREATE_MESSAGE_PRODUCER системного класса CL_AMC_CHANNEL_MANAGER , чтобы создать объект отправителя для канала обмена сообщениями из хранилища. Приложение и название канала передаются здесь. Возвращенная ссылочная переменная типа IF_AMC_MESSAGE_PRODUCER должна быть приведена к интерфейсу конкретного типа, содержащему метод SEND, используемый для отправки сообщений, соответствующих типу. Интерфейсы IF_AMC_MESSAGE_PRODUCER_TEXT и IF_AMC_MESSAGE_PRODUCER_BINARY, в зависимости от типа используемого канала обмена сообщениями.

Получение сообщений AMC

Прежде чем сообщение AMC может быть получено в авторизованной программе, необходимо использовать фабричный метод CREATE_MESSAGE_CONSUMER системного класса CL_AMC_CHANNEL_MANAGER , чтобы создать получателя для канала обмена сообщениями из хранилища. Приложение и название канала передаются здесь. Возвращенная ссылочная переменная имеет тип IF_AMC_MESSAGE_CONSUMER . У потребительских методов START_MESSAGE_DELIVERY и STOP_MESSAGE_DELIVERY есть две задачи:

Определение фазы приемника AMC – Метод START_MESSAGE_DELIVERY делает программу-получатель для канала обмена сообщениями потребителя готовой к приему сообщений. Метод STOP_MESSAGE_DELIVERY отменяет этот шаг. Сообщения, отправленные по каналу обмена сообщениями, принимаются только в том случае, если программа готова к приему.

Регистрация объектов получателя для сообщений канала сообщений

Объекты-получатели являются экземплярами локальных или глобальных классов, которые реализуют по крайней мере один из специфических для типа интерфейсов IF_AMC_MESSAGE_RECEIVER_TEXT или IF_AMC_MESSAGE_RECEIVER_BINARY . Каждый из этих интерфейсов имеет метод RECEIVE, используемый в качестве процедуры обратного вызова для канала обмена сообщениями, для которого зарегистрирован объект-получатель. Входные параметры подпрограмм обратного вызова получают, соответствующие типу, сообщения, отправленные во время регистрации, и могут быть обработаны или переданы в методах.Когда объекты-получатели зарегистрированы, ссылки на них создаются в платформе AMC, чтобы поддерживать их работу. Также возможно отменить регистрацию объектов, используя метод STOP_MESSAGE_DELIVERY. Это удаляет ссылки. Объекты отменяются неявно в конце программы.

Как только один или несколько объектов-получателей были зарегистрированы, оператор WAIT FOR MESSAGING CHANNELS можно использовать для перевода программы в состояние ожидания, когда она готова к приему сообщений. Если во время ожидания программы сообщение получено по каналу обмена сообщениями, для которого зарегистрирован объект-получатель, выполняется соответствующий метод приема и выполняется проверка, чтобы определить, является ли логическое условие истинным или ложным. Состояние ожидания сохраняется до тех пор, пока условие ложно (но можно настроить максимальную продолжительность). Таким образом, можно использовать несколько сообщений до тех пор, пока не будет получено сообщение, которое завершает состояние ожидания.

 

  • Методы START_MESSAGE_DELIVERY и STOP_MESSAGE_DELIVERY вызывают COMMIT WORK.
  • Невозможно получать сообщения AMC во время процесса обновления (
    CALL FUNCTION ‘NAME_FUNCTION’ IN UPDATE TASK ) .

Пример( Настрой канала на скриншоте выше )

Программа отправитель:

 

Программа получатель:

Для проверки запустим программу получатель, она войдет в режим ожидания, во время которого выполним программу отправитель. в результате получим такое окно:

 

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *