ローカルまたはグローバルクラスから送信者オブジェクトを登録することにより、ABAPプログラムがメッセージをABAPメッセージングチャネル(AMC)に公開できるようにすることができます。
送信者オブジェクトの作成
関連付けられたプロデューサーインターフェイスを使用して送信者オブジェクトを作成する
ABAPプログラムがAMCでメッセージを公開できるようにするには、ファクトリメソッドCL_AMC_CLINET_MANAGER=>CREATE_MESSAGE_PRODUCERを使用して送信者オブジェクトを作成する必要があります。
メソッドのパラメーターは次のとおりです。
-
I_APPLICATION_ID:メッセージングチャネルのコンテナとして使用されるABAPメッセージングチャネルアプリケーションのIDを参照します。
-
I_CHANNEL_ID:メッセージのディスパッチに使用する必要があるメッセージングチャネルを定義します。
-
I_CHANNEL_EXTENSION_ID(オプション):チャネル拡張IDは実行時に作成され、特定のオブジェクトのみがAMCメッセージを公開できるようにします。同じチャネル拡張IDを指定したレシーバーオブジェクトのみがこれらのメッセージを受信します。
-
I_SUPRESS_ECHO(オプション):送信者オブジェクトが自分のメッセージを受信しないようにします。
-
I_CHANNEL_FILTER(オプション):フィルター要素を定義することにより、受信するメッセージをフィルター処理できます。プロデューサーのフィルター値がコンシューマーのフィルター基準に一致する場合にのみ、メッセージが配信されます。
CREATE_MESSAGE_PRODUCERメソッドは、インターフェイスIF_AMC_MESSAGE_PRODUCERを参照変数として返します。次に、変数は次のタイプ固有のインターフェースの1つにキャストされます。
-
IF_AMC_MESSAGE_PRODUCER_TEXT
-
IF_AMC_MESSAGE_PRODUCER_BINARY
-
IF_AMC_MESSAGE_PRODUCER_PCP
すべてのタイプ固有のインターフェースには、専用のメッセージタイプのメッセージを送信できるメソッドSENDが含まれています。これは、現在テキスト文字列、バイト文字列としてのJSONデータ、2つの名前と値のペア、およびSAP固有のプッシュチャネルの本文です。プロトコル(PCP)。PCPメッセージのデータは、クラスCL_AC_MESSAGE_TYPE_PCPのオブジェクトに渡され、そこでシリアル化されます。
プログラミング例
サンプルプログラムdemo_send_amcでは、パッケージSABAPDEMOSのAMCアプリケーションDEMO_AMCのメッセージングチャネル/ demo_text、/ demo_binary、および/demo_pcpに対して送信者オブジェクトが作成されます。
AMCとAPCWebSocket間のコラボレーション
ABAPプッシュチャネル(APC)WebSocket接続をABAPメッセージングチャネルにバインドして、複数のWebアプリケーション(Webブラウザで実行)がAMCを介してプッシュメッセージを交換できるようにすることができます。これらの協調的なAPC/AMCシナリオでは、ブラウザーはWebSocketプロトコルをサポートする必要があります。
詳細については、APC/AMCコラボレーションの有効化のサンプルプログラムdemo_apc_wspを参照してください。
独自のAMCメッセージの受信を抑制します
多くの場合、AMCメッセージの送信者オブジェクトは、独自のメッセージの送信に使用するのと同じチャネルでのメッセージ受信もサブスクライブしています。ただし、メッセージが送信者オブジェクトを除くすべての受信者オブジェクトにディスパッチされることをお勧めします。
このためには、 I_SUPRESS_ECHOパラメーターをに設定する必要がありますABAP_TRUE。この送信者オブジェクトを介して送信されたメッセージは、独自のABAPセッションまたは独自のバインドされたWebSocket接続にディスパッチされません。
より正確には、メッセージ受信者は次の場合に除外されます。
- これは登録済みのABAPセッションであり、メッセージを送信するセッションと一致します。
- これはバインドされたAPC(WebSocket)接続であり、APC接続は送信側ABAPセッションに属します。
後者の場合、suppress_echoオプションを使用すると、ABAPセッションは、自身のAPCアプリケーションのフロントエンドを除くすべてのサブスクライブされたアプリケーションクライアントのフロントエンドにAMCメッセージを送信できます。I_SUPRESS_ECHOパラメータのデフォルト値はですABAP_FALSE。これは、サブスクライブされたすべての受信者にメッセージがディスパッチされることを意味します。