ABAPメッセージングチャネル(AMC)には、通信チャネルとして機能し、ABAPプログラムがメッセージを送受信できるようにするための属性が含まれています。
設計時の属性
ABAPメッセージングチャネルは常に、同じエリアに属するさまざまなメッセージングチャネルを指定するためのコンテナを構築するために使用されるAMCアプリケーションに属します。トランザクションSAMCを使用するか、オブジェクトナビゲータ(SE80 )でAMCアプリケーションを登録します。または、ABAP開発ツール(ADT)を使用することもできます。AMCアプリケーションはABAPワークベンチで一元的に更新されるため、移送機能を備えた開発オブジェクト(リポジトリオブジェクト)として実現されます。メッセージングチャネルの次の機能は、 SAMCの設計時に作成され、開発オブジェクトの一部として実現されます。
ランタイム属性
アクティビティスコープに加えて、AMCメッセージの生成と消費を特定のプログラムのみに制限するために、チャネル拡張IDやAMCフィルターなどの2つのAMC属性を指定できます。これらの属性は、システムクラスCL_AMC_CHANNEL_MANAGERのファクトリメソッドを使用して送信者または受信者オブジェクトを作成するときに指定します。これらの属性は、AMCアプリケーションの実行時に生成および適用されるため、開発オブジェクトとは見なされません。
チャネル拡張ID
チャネルの識別には、AMCアプリケーションIDおよびチャネルIDを使用する以外に、送信者および/または受信者オブジェクトのパラメーターI_CHANNEL_EXTENSION_IDを設定することにより、オプションのチャネル拡張IDを指定することもできます。チャネル拡張IDを提供する場合、メッセージの送受信を適格なプログラムのみに制限します。
メッセージ交換は、チャネル属性の正確な指定に基づいています。チャネル拡張IDを指定すると、チャネル全体の一部として解釈されます。これは、チャネル<application_id> <channel_id>に送信されたメッセージは、チャネル<application_id><channel_id><channel_extension_id>にサブスクライブされているAMCコンシューマーによって受信されないことを意味します。
AMCフィルター
AMCフィルターを使用すると、AMCプロデューサーによって発行され、同じメッセージングチャネルを使用してAMCコンシューマーによって受信されるメッセージをフィルター処理できます。
AMCフィルターを使用するには、送信側オブジェクトと受信側オブジェクトの両方にパラメーターI_CHANNEL_FILTERを設定する必要があります。このパラメーターは、名前と値のペアを表すフィルター要素を含む内部テーブルにアクセスします。各テーブルごとに最大10個のフィルター要素を定義できます。テーブルでは、エントリごとに最大1つの名前を使用できます。
名前と値のペアは、次の情報を提供します。
-
フィルタ要素の名前(カテゴリ)。
-
AMCプロデューサーまたはAMCコンシューマーのフィルター要素の値:
-
AMCプロデューサー(送信者オブジェクト)の場合、値は文字列として解釈されます。メッセージは、コンシューマーのフィルター基準が同じカテゴリーの値と一致する場合にのみ配信されます。
-
AMCコンシューマー(レシーバーオブジェクト)の場合、値は正規表現として解釈されます。正規表現は、単純な文字列、選択肢のリスト、または空の文字列にすることができます。受信するメッセージを定義します。
-
プロデューサーのフィルター値がコンシューマーのフィルター基準に一致する場合にのみ、メッセージが配信されます。
-
選択肢のリストを使用する場合は、値のエントリを縦棒で区切る必要があります。(例: name = ab | bc)。
-
選択肢のリストでは、値に空のエントリを含めることはできません(例:name =|bcまたはname=ab |)。。
-
AMCコンシューマーにフィルター要素を指定したが、メッセージを受信するプロデューサーがそれぞれのカテゴリーに値を持たないか、フィルターをまったく使用しない場合、プロデューサーが空を指定したかのように処理されます。文字列値。^$したがって、値の先頭でAMCコンシューマーの空の文字列として設定する必要があります(例: name = ^ $ | ab | bc ) 。
式name=ab | ^ $|bcは無効です。
-
正規表現で使用される一部の文字(。^ $ * +-?()[] {} \ | )には特別な意味があります。したがって、エスケープされている場合にのみ許可されます。つまり、前に円記号(\)を付ける必要があります。文字の前に円記号が付いている場合、通常の意味が失われることに注意してください。たとえば、\ | もう分離の意味はありません。
次のABAPステートメントを使用して、ABAP文字列lv_strで特殊文字を簡単にエスケープすることができます。