アプリケーションサーバABAPのユーザセッションは、ABAPメッセージングチャネル(AMC)に登録して、別のユーザセッションによって公開されたメッセージを受信することができます。
レシーバーオブジェクトの作成
コンシューマーインターフェイスが関連付けられたレシーバーオブジェクトの作成
セッションは、メッセージングチャネルにサブスクライブすることにより、AMCメッセージを受信できます。レシーバーオブジェクトを作成するには、ファクトリメソッドCL_AMC_CLINET_MANAGER => CREATE_MESSAGE_CONSUMERを使用します。これにより、次のパラメーターが渡されます。
-
I_APPLICATION_ID:メッセージングチャネルのコンテナとして使用されるABAPメッセージングチャネルアプリケーションのIDを参照します。
-
I_CHANNEL_ID:メッセージのディスパッチに使用する必要があるメッセージングチャネルを定義します。
-
I_CHANNEL_EXTENSION_ID(オプション):チャネル拡張IDは実行時に作成され、特定のオブジェクトのみがAMCメッセージを受信できるようにします。同じチャネル内線IDを指定した送信者オブジェクトからのメッセージのみが受信されます。
-
I_CHANNEL_FILTER(オプション):フィルター要素を定義することにより、受信するメッセージをフィルター処理できます。プロデューサーのフィルター値がコンシューマーのフィルター基準に一致する場合にのみ、メッセージが配信されます。
このメソッドは、コンシューマーインターフェイスIF_AMC_MESSAGE_CONSUMERを参照変数として返します。これには、次のメソッドが含まれます。
-
START_MESSAGE_DELIVERYは、プログラムがチャネルを介してAMCメッセージを受信できるようにします。メソッドを呼び出した後でのみ、プログラムは実際にメッセージを受信できます。
-
STOP_MESSAGE_DELIVERYは、メッセージの受信を停止します。
コンシューマーインターフェイスのメソッドを使用すると、メッセージ配信を制御できます。これらは、関連するレシーバーインターフェイスを参照します。メソッドが呼び出された後、セッションはAMCにサブスクライブし、受信フェーズが開始されます。レシーバーオブジェクトは、ローカルクラスまたはグローバルクラスからインスタンス化され、タイプ固有のインターフェイスの少なくとも1つを実装します。
-
IF_AMC_MESSAGE_RECEIVER_TEXT
-
IF_AMC_MESSAGE_RECEIVER_BINARY
-
IF_AMC_MESSAGE_RECEIVER_PCP
これらの各インターフェイスには、関連付けられたメッセージタイプごとにコールバックメソッドRECEIVEが含まれています。
待機するメッセージを選択できます。選択に対応して、 WAITステートメントは、メッセージによってトリガーされるコールバックルーチンでそれぞれのフィールド<text_message>、<binary_message>、および<pcp_message>が提供されるまで続く待機状態を生成します。待機時間は、指定できる秒数に制限されています。トランザクションSMAMCは、待機時間中に登録されたAMCコンシューマーを表示します。
プログラミング例
サンプルプログラムdemo_receive_amcでは、グローバルクラスのレシーバーオブジェクトが、パッケージSABAPDEMOSのAMCアプリケーションDEMO_AMCのメッセージングチャネル/ demo_text、 / demo_binary、および/demo_pcpにサブスクライブされています。
プログラムdemo_send_amcを使用して、現在のASABAPの任意のユーザセッションから必要なメッセージを送信することができます。メッセージを受信すると、その内容が表示されます。詳細については、 AMCメッセージの送信をご覧ください。