ノードに対する ESQL の作成

ESQL を作成して、ESQL ファイル内の Compute、Database、または Filter ノードの動作をカスタマイズします。

始める前に

このタスクを実行するには、以下のタスクを完了している必要があります。

ESQL ファイル内で、メッセージ・フロー内のノードに関連付けられたモジュールを作成します。 モジュールは、特定のタイプの 1 つのノード (Compute、 Database、または Filter) にのみ関連付けることができます。モジュール内では、 提供されたステートメントおよび関数の他にも、関数やプロシージャーを作成、使用することができます。 ローカル定数および変数を作成することもできます。

ブローカー・スキーマのレベルで定数、関数、またはプロシージャーを作成した場合、 モジュール内でこれらを参照することもできます。多くの異なるモジュールが使用できる レベルでルーチンを定義することができ、開発時間とメインテナンスの努力を節約になります。

ノードに対して ESQL を作成するには、以下のようにします。

  1. 「ブローカー・アプリケーション開発 (Broker Application Development)」パースペクティブに切り替えます。
  2. 「ナビゲーター (Navigator)」ビューで、ESQL を作成したいノードを含むメッセージ・フローをダブルクリックします。 エディター・ビューでメッセージ・フローが開きます。
  3. ノード (Compute、Database、または Filter でなければならない) を右クリックし、 「ESQL のオープン (Open ESQL)」をクリックします。 このメッセージ・フローのデフォルト ESQL ファイル、<message_flow_name>.esql が エディター・ビューに開かれます (このファイルが存在しない場合には、作成されます)。

    (すでにデフォルト・ファイルを作成済みである場合、 「ESQL のオープン (Open ESQL)」をクリックすると、 このファイルがエディター・ビューで開き、新しいモジュールが作成されて強調表示されます。)

    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 関数には、以下で説明される、 Main 関数に続く Compute ノード・モジュール内で宣言される 2 つのプロシージャーの呼び出しが含まれています。 これらの呼び出しはコメント化されます。 これらの呼び出しによって提供される関数を組み込みたい場合は、 これらの行のコメントを外し、 Main で作成する ESQL 内の適切なポイントにそれの呼び出しを配置します。

    CopyMessageHeaders
    このプロシージャーは、 入力メッセージ内に含まれるヘッダーをループし、 出力メッセージに各ヘッダーをコピーします。

    バージョン 2.1 からマイグレーションする場合、このプロシージャーは、 「Compute ノード・プロパティー (Compute node properties)」ダイアログの「メッセージ・ヘッダーのコピー (Copy message headers)」ボタンを選択するときに生成されるコードに相当します。

    CopyEntireMessage
    このプロシージャーは、 ヘッダーを含む入力メッセージの内容全体を出力メッセージにコピーします。

    バージョン 2.1 からマイグレーションする場合、このプロシージャーは、 「Compute ノード・プロパティー (Compute node properties)」ダイアログの「メッセージ全体のコピー (Copy entire message)」ボタンを選択するときに生成されるコードに相当します。

    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>
  4. ノードの動作をカスタマイズするには、ESQL をこのファイルに追加します。

    ESQL のほとんどは、Main 関数内に、つまり BEGIN ステートメントより後で RETURN TRUE より前に追加する必要があります。 DECLARE ステートメントは、Main 関数外のモジュール内に追加することができます。 ファイルに新しい行を追加するには、「Enter」を押します。

    有効な ESQL をコーディングできるように、 エディターに カーソルの位置に有効なステートメントおよび関数のリストが表示されます。 この支援を呼び出すには、「編集 (Edit)」 > 「内容支援 (Content Assist)」 をクリックします。Ctrl+Space キーの組み合わせが使用できるシステムもあります。 表示されたリストをスクロールして使用したいコードを見つけて強調表示し、Enter キーを押します。 適切なコードがモジュールに挿入され、リストが消えます。

    「内容支援 (Content Assistance)」は以下の領域で準備されています。

    • 言語構文に基づいた、適用できるキーワード。
    • BEGIN END; のような、対になるコードのブロック。
    • 使用することのできる定義した定数、ID、ラベル、関数、およびプロシージャー。 これらが現行のプロジェクトによって参照されていない場合でも、 ルーチンを任意のプロジェクトに入れることができる。
    • データベース相関名の後のデータベース・スキーマ名およびテーブル名、 INSERT、UPDATE、DELETE、および SELECT ステートメント内のテーブル列名、 および多くの場合それらのステートメントの WHERE 文節。
    • メッセージ・フィールド参照のエレメント: ランタイム・ドメイン (パーサー) 名、 タイプ式の形式、ネーム・スペース ID、ネーム・スペースで修飾されたエレメント名と属性名、 および索引式の形式
    • 出力メッセージ・ルートの下の「プロパティー (Properties)」フォルダー内の内容。
    • DECLARE NAMESPACE ステートメントの、 メッセージ・セットのターゲット・ネーム・スペースおよびスキーマ名。

    「内容支援 (Content Assistance)」は、ESQL が正しく構文解析される場合にのみ作動します。 BEGIN の後に END が欠落しているなどのエラーや、他の判別されないブロック・ステートメントは、 パーサー障害の原因となり、「内容支援 (Content Assistance)」は提供されません。 「内容支援 (Content Assistance)」が作動しないステートメントの周りでそれを試し、 どこにエラーがあるかを絞ってください。別の方法は、ESQL ファイルを保管することです。 ファイルを保管すると、妥当性検査がなされ、構文エラーがすべて「タスク (Tasks)」ビューに書き込まれます。 報告されたエラーを参照して、ESQL 構文のエラーを理解し、訂正してください。 「内容支援 (Content Assistance)」を使用してほとんどのステートメント (ブロック・ステートメントなど) を生成するなら、 これらは正しく入力され、エラーが生じる可能性が減少します。

  5. そのモジュールでの作業を終了したら、ESQL ファイルを閉じます。 閉じる前にファイルを保管してすべての変更を保存し、ESQL を検査します。

ESQL ファイルを直接開き、エディターを使用してそのファイル内にモジュールを作成したい場合は、そうすることもできます。これを行うには、次のようにします。

  1. 「ブローカー・アプリケーション開発 (Broker Application Development)」パースペクティブに切り替えます。
  2. モジュールをその中に作成したい ESQL ファイルを選択します。 ダブルクリックしてこのファイルをエディター・ビューで開くか、または右クリックしてから、 「開く (Open)」をクリックします。
  3. エディター・ビューで新しい行にカーソルを置き、「内容支援 (Content Assistance)」を使用して このタイプのノードに対する適切なモジュール・スケルトン (CREATE COMPUTE MODULE END MODULE; など) を選択します。 これはユーザー自身で入力することも可能ですが、 入力する内容が上に示した必要なスケルトンと整合していることを確認する必要があります。 「内容支援 (Content Assistance)」を使用すると、必要な場所に有効な ESQL だけが挿入され、 マッチする終了ステートメント (END MODULE; など) だけが挿入されてさらに助けが得られるので、この使用をお勧めします。
  4. 適切に、モジュールのコーディングを完了します。

ESQL ファイルを開くのにどちらの方法を使用するにしても、 ESQL のコーディングを支援する関数をエディターが提供することをご承知おきください。ここでは 「内容支援 (Content Assistance)」について触れましたが、エディターで使用できる関数は他にもあります。これらの関数については、ESQL エディター をご覧ください。

関連概念
メッセージ・フロー
ブローカー・スキーマ
ESQL モジュール

関連タスク
メッセージ・フロー・アプリケーションの開発
ノードに対する ESQL の変更
ESQL エディター設定の変更

関連資料
組み込みノード
ESQL
ESQL エディター