ESQL ファイル内で、メッセージ・フロー内のノードに関連付けられたモジュールを作成します。 モジュールは、特定のタイプの 1 つのノード (Compute、Database、または Filter) にのみ関連付けることができます。モジュール内では、提供されたステートメントおよび関数の他にも、関数やプロシージャーを作成、使用することができます。ローカル定数および変数を作成することもできます。
ブローカー・スキーマのレベルで定数、関数、またはプロシージャーを作成した場合、モジュール内でこれらを参照することもできます。多くの異なるモジュールが使用できるレベルでルーチンを定義することができ、開発時間とメンテナンスの努力の節約になります。
ノードに対して ESQL を作成するには、以下のようにします。
- 「ブローカー・アプリケーション開発」パースペクティブに切り替えます。
- 「ブローカー開発」ビューで、ESQL を作成したいノードを含むメッセージ・フローをダブルクリックします。 エディター・ビューでメッセージ・フローが開きます。
- ノード (Compute、Database、または 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;
前の ESQL を、
バージョン 2.1 ブローカーにデプロイ可能にするには、以下の例の太字テキストで示すように、
InputRoot および
OutputRoot モジュール・レベル変数をプロシージャーまたは関数に引き渡す必要があります。
CREATE COMPUTE MODULE <module_name>
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
-- CALL CopyMessageHeaders(InputRoot, OutputRoot);
-- CALL CopyEntireMessage(InputRoot, OutputRoot);
RETURN TRUE;
END;
CREATE PROCEDURE CopyMessageHeaders(IN InputRoot REFERENCE, IN
OutputRoot REFERENCE) BEGIN
DECLARE I INTEGER 1;
DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
WHILE I < J DO
CREATE LASTCHILD OF OutputRoot DOMAIN FIELDNAME (
InputRoot.*[I] ); /*create the parser for OutputRoot*/
SET OutputRoot.*[I] = InputRoot.*[I];
SET I = I + 1;
END WHILE;
END;
CREATE PROCEDURE CopyEntireMessage(IN InputRoot REFERENCE, IN
OutputRoot REFERENCE) BEGIN
SET OutputRoot = InputRoot;
END;
END MODULE;
モジュール名は、対応するノード・プロパティーに設定した値によって決まります。デフォルトは message_flow_name_node_type です。
Main 関数には、以下で説明される、Main 関数に続く Compute ノード・モジュール内で宣言される 2 つのプロシージャーの呼び出しが含まれています。これらの呼び出しはコメント化されます。これらの呼び出しによって提供される関数を組み込みたい場合は、行のコメントを外し、Main で作成する ESQL 内の適切なポイントにそれらの呼び出しを配置します。
- CopyMessageHeaders
- このプロシージャーは、入力メッセージ内に含まれるヘッダーをループし、出力メッセージに各ヘッダーをコピーします。
バージョン 2.1 からマイグレーションする場合、このプロシージャーは、「Compute ノード・プロパティー」ビューの「メッセージ・ヘッダーのコピー」ボタンを選択するときに生成されるコードに相当します。
- CopyEntireMessage
- このプロシージャーは、ヘッダーを含む入力メッセージの内容全体を出力メッセージにコピーします。
バージョン 2.1 からマイグレーションする場合、このプロシージャーは、「Compute ノード・プロパティー」ビューの「メッセージ全体のコピー」ボタンを選択するときに生成されるコードに相当します。
Database ノードに対して ESQL モジュールを作成する場合、次のモジュールが作成されます。
CREATE DATABASE MODULE module_name
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
RETURN TRUE;
END;
END MODULE;
Filter ノードの場合、モジュールは、次の最初の行を除いて、Database ノードで作成されたものと同じです。
CREATE FILTER MODULE module_name
- ノードの動作をカスタマイズするには、ESQL をこのファイルに追加します。
初めに、ESQL ステートメントを Main 関数内 (BEGIN ステートメントの後、RETURN TRUE の前) に追加します。
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 ファイルを直接開き、エディターを使用してそのファイル内にモジュールを作成したい場合は、そうすることもできます。これを行うには、次のようにします。
- 「ブローカー・アプリケーション開発」パースペクティブに切り替えます。
- モジュールをその中に作成したい ESQL ファイルを選択します。ダブルクリックしてこのファイルをエディター・ビューで開くか、または右クリックしてから、「開く」をクリックします。
- エディター・ビューで新しい行にカーソルを置き、「コンテンツ・アシスト」を使用してこのタイプのノードに対する適切なモジュール・スケルトン (CREATE COMPUTE MODULE END MODULE; など) を選択します。これはユーザー自身で入力することも可能ですが、入力する内容が上に示した必要なスケルトンと整合していることを確認する必要があります。「コンテンツ・アシスト」を使用すると、必要な場所に有効な ESQL だけが挿入され、マッチする終了ステートメント (END MODULE; など) だけが挿入されてさらに助けが得られるので、これを使用してください。
- 適切に、モジュールのコーディングを完了します。
ESQL ファイルを開くのにどちらの方法を使用するにしても、ESQL のコーディングを支援する関数をエディターが提供することをご承知おきください。ここでは「コンテンツ・アシスト」について触れましたが、他の関数も使用可能です。
これらの関数については、ESQL エディターを参照してください。