このトピックでは、BLOB ドメインに属し、 BLOB パーサーによって構文解析されるメッセージを処理する場合の情報が提供されます。
BLOB メッセージには事前定義された構造がないため、BLOB メッセージの内容を操作することはできません。 ただし、その内容を、ビット・ストリーム内の既知の位置を使用して参照すること、 またそのメッセージをその内容に関する最小の知識で処理することは可能です。
BLOB メッセージ本体パーサーがツリー構造を作成する方法は、他のメッセージ本体パーサーとは違います。 このツリー構造にはルート・エレメント BLOB があり、 データを含む子エレメントがあります (これも BLOB と呼ばれる)。
BLOB データ内の情報の特定の部分の位置がわかっている場合、サブストリングを使用してメッセージの内容を参照できます。 例えば、以下の式は、メッセージ本体の 10 番目のバイトを識別します。
InputBody.BLOB.BLOB[10]
以下の式は、オフセット 10 から始まる 10 バイトのメッセージ・データを参照します。
SUBSTRING(InputBody.BLOB.BLOB from 10 for 10)
この例は、可変長 BLOB メッセージの操作方法を示すものです。 この例は、可変長 BLOB メッセージを受信するメッセージ・フローを構成しており、 MRM パーサーの起動によってフィールドのいくつかを構文解析し、 解析された情報に基づいて正しい出力キューに出力メッセージを経路指定することを前提としています。
入力メッセージは BLOB 形式であり、組み込み NULL ('x00') が含まれていることが前提です。したがって、 そのメッセージをヌル終了ストリングとして定義することはできません。
この例では、次のような ESQL を示します。
これにより、BLOB メッセージの前に整数の長さフィールドを付けたメッセージ・モデルとして定義できるようになります。
さらにこの例では、この BLOB メッセージを CWF に変換し、 メッセージを処理して、付加された長さフィールドを除去する方法も示されています。
この例の入力レコードの形式は、次のとおりです。
このフィールドは、ユーザー定義の基準に基づいて異なる複数のキューにメッセージを送るための整数値として使用されます。
以下のエレメントおよびタイプを組み込んだ、新規メッセージ BLOB_Example の定義
ここでは、メッセージ・フローの特性について説明します。 この例のフローをインプリメントしたい場合には、メッセージ・フローの定義を完了し (例えば、3 つのサブフローを作成して、 偽の、不明な、および障害のケースを扱うために ここで使用されている出力ノードと取り替えることにより)、 またそのメッセージ・フローのデプロイメントおよび実行に必要なサポートを提供する (例えば、 そのフローをデプロイするブローカーのためのキュー・マネージャーに インバウンドおよびアウトバウンド・キューを作成する) 必要があります。
このサブフローは期待される形式 (Filter ノードで実行されたテストが true を戻した) を持つメッセージを扱います。障害のないメッセージは、出力キューにその元の形式で 書き込まれます。メッセージは MRM から変換されて BLOB に戻り、 付加した 4 バイト (フィールド B_LEN) が除去されます。
このサブフローについて、