Compute、Database、DatabaseInput、または Filter ノードの動作をカスタマイズするために、ESQL ファイルに ESQL コードを作成します。
始める前に:このトピックでは、ESQL ファイルが作成されていることを前提としています。 詳しくは、ESQL ファイルの作成を参照してください。
ESQL ファイルに、メッセージ・フロー内のノードに関連付けられたモジュールを作成します。 モジュールは、特定のタイプの 1 つのノード (Compute、Database、DatabaseInput、または Filter) にのみ関連付けることができます。 モジュール内では、提供されたステートメントおよび関数の他にも、関数やプロシージャーを作成して使用することができます。 ローカル定数および変数を作成することもできます。
また、ブローカー・スキーマのレベルで定数、関数、またはプロシージャーを作成済みである場合、モジュール内でこれらを参照することもできます。 多くの異なるモジュールが使用できるレベルでルーチンを定義することができ、開発時間とメンテナンスの努力の節約になります。
ノード用の ESQL を作成するには、以下の手順を完了します。
- ESQL の作成対象となるノードを含んでいるメッセージ・フローを開きます。 「ブローカー開発」ビューで、該当するアプリケーション、ライブラリー、またはメッセージ・ブローカー・プロジェクトを展開し、「フロー」フォルダーを展開して、メッセージ・フローをダブルクリックします。
メッセージ・フローが、メッセージ・フロー・エディターの中で開きます。
- Compute、Database、DatabaseInput、または Filter ノードを右クリックして、「ESQL のオープン」をクリックします。 このメッセージ・フローのデフォルト ESQL ファイル message_flow_name.esql が、エディター・ビューで開きます。 ファイルがまだ存在しない場合、このノードのスケルトン・モジュールが最下部に挿入されたファイルが作成されます。 正確な内容は、ノードのタイプによって異なります。
このファイルが既に作成済みである場合、このファイルはエディター・ビューで開き、新しいモジュールが作成されて強調表示されます。
以下のモジュールは、Compute ノードに対して作成されます。
CREATE COMPUTE MODULE module_name
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
-- CALL CopyMessageHeaders();
-- CALL CopyEntireMessage();
RETURN TRUE;
END;
CREATE PROCEDURE CopyMessageHeaders() BEGIN
DECLARE I INTEGER 1;
DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
WHILE I < J DO
SET OutputRoot.*[I] = InputRoot.*[I];
SET I = I + 1;
END WHILE;
END;
CREATE PROCEDURE CopyEntireMessage() BEGIN
SET OutputRoot = InputRoot;
END;
END MODULE;
モジュール名は、対応するノード・プロパティーに設定した値によって決まります。 デフォルト名は message_flow_name_node_type です。
関数 Main の後の Compute ノード・モジュール内で宣言されている、(以下のリストで説明される) 2 つのプロシージャーの呼び出しが main 関数に含まれています。 これらの呼び出しはコメント化されます。 これらによって呼び出される関数を組み込むには、行のコメントを外し、Main に関して作成する ESQL 内の適切な場所にそれらを配置してください。
- CopyMessageHeaders
- このプロシージャーは、入力メッセージ内に含まれるヘッダーをループし、出力メッセージに各ヘッダーをコピーします。
- CopyEntireMessage
- このプロシージャーは、ヘッダーを含む入力メッセージの内容全体を出力メッセージにコピーします。
Database ノードに対して ESQL モジュールを作成する場合、次のモジュールが作成されます。
CREATE DATABASE MODULE module_name
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
RETURN TRUE;
END;
END MODULE;
DatabaseInput ノードの場合、作成されるモジュールには ReadEvents、BuildMessage、および EndEvent の、3 つのプロシージャーが含まれます。 これらのプロシージャーにはそれぞれ、プロシージャーが動作する方法を記述した定形文面が含まれています。 DatabaseInput ノードの構成について詳しくは、DatabaseInput ノードの構成を参照してください。 DatabaseInput ノードに関しては、モジュールの第 1 行が次のように作成されます。
CREATE DATABASEEVENT MODULE module_name
Filter ノードの場合、モジュールは、次の最初の行を除いて、Database ノードで作成されたものと同じです。
CREATE FILTER MODULE module_name
- ノードの動作をカスタマイズするには、ESQL をこのファイルに追加します。
Compute、Database、または Filter ノードに関しては、最初に、Main 関数内に ESQL ステートメントを追加します (BEGIN ステートメントの後、RETURN TRUE の前)。 DatabaseInput ノードの場合は、ESQL ステートメントを ReadEvents、BuildMessage、および EndEvent プロシージャーで追加します。
DECLARE ステートメントは、Main 関数外のモジュールに追加することができます。 ファイルに新しい行を追加するには、「Enter」を押します。
有効な ESQL をコーディングできるように、エディターのカーソルの位置に、有効なステートメントおよび関数のリストが表示されます。 この支援を開始するには、をクリックします。 Ctrl+Space キーの組み合わせが使用できるシステムもあります。
リストをスクロールし、該当するステートメントまたは関数を見つけて強調表示し、Enter を押します。 適切なコードがモジュールに挿入されます。
「コンテンツ・アシスト」は以下の領域で準備されています。
- 言語構文に基づいた、適用できるキーワード。
- BEGIN END; のような、対になるコードのブロック。
- 使用することのできる定義した定数、ID、ラベル、関数、およびプロシージャー。現行のプロジェクトがこれらを参照していない場合でも、ルーチンを任意のプロジェクトに入れることができる。
- データベース相関名の後のデータベース・スキーマ名および表名、INSERT、UPDATE、DELETE、および SELECT ステートメント内の表列名、および多くの場合それらのステートメントの WHERE 文節。
- メッセージ・フィールド参照のエレメント: ランタイム・ドメイン (パーサー) 名、タイプ式の形式、ネーム・スペース ID、ネーム・スペースで修飾されたエレメント名と属性名、および索引式の形式
- 出力メッセージの下の「プロパティー」フォルダー内の内容。
- DECLARE NAMESPACE ステートメントの、メッセージ・セットのターゲット・ネーム・スペースおよびスキーマ名。
「コンテンツ・アシスト」は、ESQL が正しく構文解析される場合にのみ作動します。 BEGIN の後に END が欠落しているなどのエラーや、他の判別されないブロック・ステートメントは、パーサー障害の原因となり、「コンテンツ・アシスト」は提供されません。 「コンテンツ・アシスト」が作動しないステートメントの周りでそれを試し、どこにエラーがあるかを絞ってください。 別の方法は、ESQL ファイルを保管することです。ファイルを保管すると、妥当性検査がなされ、構文エラーがすべて「問題」ビューに書き込まれます。 報告されたエラーを参照して、ESQL 構文のエラーを理解し、訂正してください。 「コンテンツ・アシスト」を使用してほとんどのステートメント (ブロック・ステートメントなど) を生成するなら、これらのステートメントは正しく入力され、エラーが生じる可能性が減少します。
- このモジュールでの作業が完了したら、ESQL ファイルを保存して閉じます。
また、以下のように ESQL ファイルを直接開き、エディターを使ってそのファイル内にモジュールを作成することもできます。
- モジュールの作成場所となる ESQL ファイルを開きます。
- エディター・ビューで新しい行にカーソルを置き、「コンテンツ・アシスト」を使用してこのタイプのノードに対する適切なモジュール・スケルトン (CREATE COMPUTE MODULE END MODULE; など) を選択します。
なお、このテキストを自分で入力することも可能ですが、前に示した必要なスケルトンと入力内容が整合していることを確認する必要があります。 「コンテンツ・アシスト」を使用すると、必要な場所に有効な ESQL だけが挿入され、マッチする終了ステートメント (END MODULE; など) だけが挿入されてさらに助けが得られるので、これを使用してください。
- 適切に、モジュールのコーディングを完了します。
ESQL ファイルを開くのにどちらの方法を使用するにしても、ESQL のコーディングを支援する関数をエディターが提供することをご承知おきください。 ここでは「コンテンツ・アシスト」について触れましたが、他の関数も使用可能です。 これらの関数については、ESQL エディターを参照してください。