演習 1.7: ループ
ループを使用して、ロジック・パーツで、EGL コードの同じ部分を何度も実行することができます。ループは、配列内のエレメントごとに同じアクションを実行することができるため、配列処理によく使用されます。EGL には、他のプログラミング言語でもなじみがあると思われる 3 つのタイプのループ、while、for、forEach があります。
この演習では、EGL の getSize() 関数を使用して、配列内のエレメント数を検索する PageHandler を作成します。その後、配列内の各エレメントごとに for ループを 1 度実行します。このようにして、PageHandler は、配列内で一定の条件を満たすレコードの数をカウントします。
EGL におけるループについて詳しくは、ヘルプ・トピック「while」、「for」、および「forEach」を参照してください。
ループを使用する PageHandler の作成
以下のステップでは、データベース内で特定の状態のインスタンスの数をカウントするループを使用する Web ページを作成します。
- プロジェクト・エクスプローラー・ビューで、「EGLWeb」プロジェクトをクリックして選択する。
- メニュー・バーから「ファイル」>「新規」>「Faces JSP ファイル」をクリックする。新規 Faces JSP ファイル・ウィザードが開きます。
- 「名前」フィールドに次のファイル名を入力する。
LoopTest
- 「ページ・テンプレートから作成」チェック・ボックスを選択する。
- 「次へ」をクリックする。
- 「ページ・テンプレート・タイプ」の下で、「ユーザー定義ページ・テンプレート」をクリックする。
- 「サムネール」の下で「A_gray.htpl」テンプレートをクリックする。
- 「終了」をクリックする。新規ファイルがプロジェクトに追加され、そのファイルがエディターで開きます。
- 新規ファイルで、デフォルト・テキストの「Place your page content here.」を削除する。
- 削除したテキストの代わりに、Testing loops と入力して、Enter キーを押す。
- ページを右クリックして、「ページ・コードの編集」をクリックする。ページ・コード・ファイルが開きます。
- ページ・コード・ファイル内のすべてのコードを削除して、代わりに以下のコードを入力する。
package pagehandlers;
import data.*;
PageHandler LoopTest
{view="LoopTest.jsp", onPageLoadFunction=onPageLoad}
//Variables
listOfAllCustomers customer[];
inputState char(2)
{displayName = "Enter a state:"};
outputMessage char(100);
outputSum int;
Function onPageLoad()
customerLib.getAllCustomers(listOfAllCustomers);
end
Function testSimpleLoop()
//Initialize variables
counter int = 1;
outputSum = 0;
outputMessage = "";
numberOfRecords int = listOfAllCustomers.getSize();
//Find the number of times the input state is in the customers array
for (counter from 1 to numberOfRecords by 1)
if (listOfAllCustomers[counter].STATE == inputState)
outputSum = outputSum + 1;
end
end
//Create an output message describing the number of customers found
if (outputSum == 0)
outputMessage = "No customers are from the state " + inputState;
else
outputMessage = "There are " + outputSum + " customers from " + inputState;
end
end
end
以下は、ここで挿入したコードに関する技術面での注釈です。
- この PageHandler は、前の EGL チュートリアルで作成した allcustomers.jsp ページと同じ方法で、カスタマー・レコードの配列を作成します。ページがロードされると、customerLib.getAllCustomers() 関数が、この配列に、サンプル・データベース内のすべてのカスタマー・レコードを取り込みます。
- inputState 変数は、ユーザーが Web ページに入る、2 文字の U.S. 状態を保留します。
- testSimpleLoop() 関数は、データベース内にある指定された状態のインスタンスの数をカウントします。この関数は、for ループを使用して、レコードがなくなるまで、一度に 1 つずつデータベース・レコードを検索します。その後、関数は、検出されたレコード数を示す出力メッセージを作成します。
- ファイルを保存して閉じる。
Web ページにおけるループの使用
- LoopTest.jsp ページに戻る。
- ページ・データ・ビューで「listOfAllCustomers」配列をクリックして、ページ上の「Testing loops」テキストの下へドラッグする。「リスト・コントロールの挿入」ウィンドウ
が開きます。
- 「リスト挿入のコントロール」ウィンドウで「なし (None)」をクリックする。データベース・レコード内のすべての列が選択解除されます。
- 「列名 (Column Name)」列で、「first_name」、「last_name」、および「state」列のチェック・ボックスを選択する。
「リスト挿入のコントロール」ウィンドウは次のようになります。

- 「終了」をクリックする。選択した 3 つの列が、データ・テーブルの形式でページに追加されます。
- 新規データ・テーブルの下をクリックして Enter キーを押し、新しく行を追加する。。
- ページ・データ・ビューから、「outputMessage」変数を新しい行へドラッグする。「挿入のコントロール」ウィンドウが開きます。
- 「挿入のコントロール」ウィンドウで、「既存レコードの表示 (読み取り専用)」をクリックする。
- 「終了」をクリックする。
- ページの下部に、ブランク行を追加する。
- ページ・データ・ビューから、「inputState」変数をページの下部の新しい行へドラッグする。「挿入のコントロール」ウィンドウが開きます。
- 「挿入のコントロール」ウィンドウで、「既存レコードの更新」をクリックする。
- 「オプション」をクリックする。「オプション」ウィンドウが開きます。
- 「削除ボタン」チェック・ボックスをクリアする。
- 「実行ボタン」チェック・ボックスを選択する。
- 「Submit button Label」フィールドに Count records from this state と入力する。
- 「OK」をクリックする。
- 「終了」をクリックする。
- ページ・データ・ビューから、「testSimpleLoop()」関数をページ上の「Count records from this state」ボタンへドラッグする。
- ページを保管する。
ページは次のようになります。

- ページをサーバーでテストする。
- Web ブラウザーでページが開いたら、U.S. 状態の 2 文字の略語 (NC や CT など) を入力して、「Count records from this state 」ボタンをクリックする。データベース内にあるその状態のレコードの数がページに表示されます。
「モジュール 2: EGL コード開発ツール」に進んでください。