演習 1.1: プログラムと PageHandler
この演習では、コマンドを実行する 2 つの主なタイプの EGL パーツについて学習します。この演習ではファイルの作成やコードの記述を行いませんが、以降の演習では、EGL プログラムと PageHandler の構成方法について基本的に理解していることが前提となります。この演習をよくお読みになってから、基本的な PageHandler を作成する次の演習に進んでください。
EGL ロジック・パーツ
ロジック・パーツ とは、EGL コードの一部であり、コマンドのランタイム・シーケンスを定義します。EGL ロジック・パーツにはいくつかの型がありますが、この演習では以下の 2 つについて説明します。
- プログラム
- プログラム は、ほとんどすべてのテクニカル/ビジネス・ロジック処理タスクに使用できる汎用のロジック・パーツです。例えば、EGL プログラムは、COBOL にコンパイルしてメインフレームで実行することや、Java にコンパイルしてアプリケーション・サーバーで実行することができます。ただし、EGL プログラムによって Web ページの実行時の振る舞いを制御することはできません。
- PageHandler
- PageHandler は、特殊ロジック・パーツです。PageHandler は、単一の Web ページの実行時の振る舞いを制御します。Web ページが開くと、PageHandler が、要求パラメーターやデータベース・レコードなどの必要なデータにアクセスして、ページを適切にレンダリングします。また、PageHandler は、ユーザーによる実行ボタンのクリックなど、ページで発生したイベントに応答し、それから、ページで発生したそのイベントにリンクされているプログラム・ロジックを実行します。
このチュートリアルで作成するロジック・パーツは主に PageHandler ですが、ユーザーが記述するコードの大部分は PageHandler およびプログラムにおける場合と同じように動作します。
単純な EGL プログラム
package data;
import businessRules.*;
program myEGLProgram type basicProgram
myIntegerVariable int;
myCharVariable char(20);
function main()
myIntegerVariable = 5;
myOtherFunction();
end
function myOtherFunction()
myCharVariable = "This is my character variable.";
end
end
以下では、プログラム内のコードを上から順に説明します。
- package data;
- このコードは、プログラムのパッケージおよび有効範囲を定義します。この例では、プログラムは data パッケージ内にあります。package 文は必須指定であり、ファイルの先頭に記述する必要があります。
- import businessRules.*;
- 通常、別のパッケージ内のパーツを使用する場合には、使用するパーツの名前を
パッケージ名で修飾する必要があります。例えば、プログラムがパーツ myPackage.myPart を参照するとします。
import 文を使用してそのパーツをインポートすると、
それ以降、パーツ名をパッケージ名で修飾する必要はありません。パッケージ myPackage 内の
パーツ myPart がインポートされている場合は、myPackage.myPart とする代わりに myPart として参照できます。
例えば、この import 文が、businessRules パッケージ内のすべてのパーツをインポートするとします。それらのパーツをこのプログラムで使用する際には、
businessRules パッケージの名前でパーツを修飾する必要はありません。import 文はオプションですが、使用する場合には、program 文の前で、ファイルの先頭に記述する必要があります。
- program myEGLProgram type basicProgram
- program 文は、プログラムの名前、タイプ、およびそのプログラムに渡されるパラメーターを定義します。program 文は必須指定であり、プログラムの名前とファイルの名前は一致していなければなりません。この例では、program 文によってプログラムの名前 myEGLProgram が指定されます。
program 文には対応する end 文があります。end 文はファイルの最後に記述します。ここに記載されている、変数および関数を作成するコードなど、その他のすべてのコードは、program 文とそれに対応する end 文の間に記述する必要があります。一般的にはライブラリーまたはその他の別のファイルに入れる方がプログラミングの手法としては望ましいものですが、特定の型のパーツの定義 (レコードや dataItem の定義など) は、プログラムの end 文の後に記述することもできます。パーツ定義は、それらのパーツがそのプログラムでのみ使用されることが確実である場合には、プログラムの end 文の後に記述することもできます。
- myIntegerVariable int;
myCharVariable char(20);
- これら 2 つの文は EGL 変数を作成します。それらの変数は、関数の外で作成されるので、プログラム内の任意の関数からアクセスすることができます。変数は、プログラム内で作成する必要があります。つまり、プログラム全体にわたって有効にするためには、変数を program 文とそれに対応する end 文の間に記述しなければなりません。関数内で作成されている変数は、その関数内でのみ有効です。
-
- function main()
myIntegerVariable = 5;
myOtherFunction();
end
- main 関数は、プログラムの動作可能エリアの先頭に記述します。プログラムの実行時には、main 関数が最初に呼び出されます。そのため、main 関数は必須指定です。
- function myOtherFunction()
myCharVariable = "This is my character variable.";
end
- このサンプル関数のような追加関数をプログラム内の任意の場所に記述することもできます。
- end
- 最後の end 文によってプログラム定義を閉じます。
単純な EGL PageHandler
package pagehandlers;
import businessRules.*;
PageHandler myPage {view="myPage.jsp", onPageLoadFunction=onPageLoad}
myIntegerVariable int;
myCharVariable char(20);
function onPageLoad()
myIntegerVariable = 5;
myOtherFunction();
end
function myOtherFunction()
myCharVariable = "This is my character variable.";
end
end
以下では、PageHandler 内のコードを上から順に説明します。
このサンプル PageHandler 内のコードの大部分はサンプル・プログラムと同じです。
- package pagehandlers;
- プログラムと同様、PageHandler も、その範囲を定義するため、パッケージ内に含める必要があります。
- import businessRules.*;
- プログラムと同様、PageHandler でも他のパッケージをインポートすることができます。
- PageHandler myPage {view="myPage.jsp", onPageLoadFunction=onPageLoad}
- PageHandler 定義は、プログラム定義に似ています。プログラム定義と同様に、PageHandler の名前はファイルの名前と一致していなければなりません。また、ファイルの最後には、対応する end 文が必要です。プログラムと同様、特定の型のパーツの定義 (レコードや dataItem の定義など) は、PageHandler の end 文の後に記述することもできます。
pagehandler 文には EGL プロパティーも含まれます。コード view="myPage.jsp" は、制御対象の Web ページへと PageHandler をリンクします。コード onPageLoadFunction=onPageLoad は、PageHandler 内のどの関数がページのロード時に呼び出されるかを指定します。
- myIntegerVariable int;
myCharVariable char(20);
- プログラムと同様、PageHandler 内にはパーツ全体にわたって有効な変数を記述することができます。PageHandler のこのエリアで作成されている変数は、Web ページ上のフィールドにバインドすることができます。これによって、Web ページ上のそのデータを使用できます。次の演習で、EGL 変数を Web ページ上のフィールドにバインドする方法を学習します。
-
- function onPageLoad()
myIntegerVariable = 5;
myOtherFunction();
end
- プログラムと同様、PageHandler にも、ページのロード時に呼び出される関数があります。ただし、プログラムとは異なり、その関数が main 関数である必要はありません。代わりに、PageHandler 定義内の onPageLoadFunction プロパティーで、ページのロード時に呼び出す関数を指定します。多くの場合、そのような関数は、データベースまたはその他のデータ・ソースから情報を読み取り、ページで利用できるようにします。
- function myOtherFunction()
myCharVariable = "This is my character variable.";
end
- プログラムと同様、PageHandler にも追加関数を含めることができます。
- end
- プログラムと同様、PageHandler も end 文で閉じます。
これで、「演習 1.2: プリミティブ」を開始する準備ができました。