演習 9: 更新ページの作成
この演習では、ユーザーが CUSTOMER テーブルを更新するための Web ページを作成します。
updatecustomer.jsp ファイルの作成
- プロジェクト・エクスプローラー・ビューで、EGLWeb プロジェクトの
WebContent フォルダーをクリックする。
- 「ファイル」>「新規」>「Faces JSP ファイル」をクリックする。新規 Faces JSP ファイル・ウィザードが開きます。
- 「ファイル名」フィールドに、新規ファイルの名前としてこのテキストを入力する。
updatecustomer
- 「ページ・テンプレートから作成」チェック・ボックスを選択する。
- 「次へ」をクリックする。
- 「サムネール」ボックスから、「A_gray.htpl」テンプレートをクリックする。
- 「終了」をクリックする。
新規ページが作成されてエディターで開きます。
- デフォルトのテキストを次のテキストに置換する。
カスタマー情報の更新 (Update Customer Information)
- Enter キーを 3 回押してブランク行を 3 行挿入する。
- ページを保管する。
新規 updatecustomer.jsp ページは次のようになります。

EGL レコードをページに追加
次のステップでは、EGL データをこのページに追加します。
- パレット・ビューで EGL ドロワーを開く。
- 「レコード」アイコンをページにドラッグする。「レコード・パーツの選択」ウィンドウが開きます。
- 「配列修飾子」の下で、「配列」チェック・ボックスをクリアする。
- 「Web ページに EGL エレメントを表示するためのコントロールを追加する」チェック・ボックスをクリアする。
- 「リストからレコード・パーツを選択するかまたは 1 つ下の名前を入力する」
の下で、「Customer (data/CustomerRecord.egl)」をクリックする。
- 「OK」をクリックする。
新規レコードがページ・データ・ビューに表示されます。
JSP ページへのデータの表示
演習 7 と同様に、次のステップではページ上のデータ・コントロールを作成します。
- ページ・データ・ビューで、「customer - Customer」をクリックする。
- 「customer - Customer」を Web ページへドラッグし、「Update Customer Information」テキストの下にカーソルを置いてマウス・ボタンを放す。「挿入のコントロール」ウィンドウが開きます。
- 「挿入のコントロール」ウィンドウで、「既存レコードの更新」をクリックする。
- 「オプション」をクリックする。「オプション」ウィンドウが開きます。
- 「実行ボタン」チェック・ボックスを選択する。
- 「削除ボタン」チェック・ボックスをクリアする。
- 「実行ボタン」の「ラベル」に、以下のテキストを入力する。
このレコードの更新 (Update this record)
- 「OK」をクリックする。
- 「終了」をクリックする。
レコードを更新するためのデータ・コントロールが
Web ページに挿入されます。このページに「{Error Messages}」フィールドがある点に注意してください。 「{Error Messages}」フィールドは、ページにエラーがあることを意味するものではなく、ランタイム・エラー・メッセージが表示される場所を示します。
- ページを保管する。
ページは次のようになります。

データベース行を更新するためのライブラリーへの関数の追加
現在、制御が Web ページにあるため、2 つの関数を CustomerLib.egl ライブラリーに
追加する必要があります。
- 最初の関数はデータベース行からのデータを、ユーザーが検討するために Web
ページに配置します。この関数は行をロックしません。
- ユーザーがデータへの変更を実行すると、2 番目の関数が呼び出されます。この関数は
最初の関数の場合と同じ行を検索し、ユーザーの変更を使用してその行を更新します。
- プロジェクト・エクスプローラー・ビューで、EGLSource フォルダーと
データ・パッケージを展開し、「CustomerLib.egl」をダブルクリックする。
- 2 つの end 文の間にこのコードを挿入する。
Function getCustomer(Customer Customer)
get Customer usingKeys Customer.Customer_ID;end
- ファイルを保管する。
CustomerLib.egl ファイルは次のようになります。

以下で、getCustomer() に関する細かな点をいくつか説明します。
- この関数は、Customer (Customer レコード・パーツを基にした変数) に入る値を受け取ります。そのレコード・パーツは CUSTOMER テーブルを
参照し、テーブルのキー列として CUSTOMER_ID を識別します。
- EGL get 文には USINGKEYS 文節が組み込まれ、これはキー列のランタイム値と比較される値のソースを識別します。具体的には、get 文が、
列 CUSTOMER_ID の値が Customer と呼ばれる変数の CUSTOMER_ID フィールドの値と
同じであるテーブル行を検索します。
- この場合、EGL get 文の USINGKEYS 文節は必要ありません。
レコード・パーツの keyitems 仕様のため、変数の CUSTOMER_ID フィールドがデフォルトで使用されます。
- 演習 6 と同様に、get Customer usingKeys 行を右クリックし、次に「SQL ステートメント」>「表示」をクリックしてこのコードによって生成される SQL ステートメントを表示する。SQL ステートメントの表示を
終了したら、「閉じる」をクリックします。
表示コマンドが表示されない場合は、
コードの get Customer usingKeys 行にカーソルがあることを
確認してください。
次に、以下の作業を行うための関数を追加します。
- データベース行を取得する (この場合、更新目的)
- 検索したコンテンツを変更する
- 行を更新する
- CustomerLib.egl ファイルで、次のコードを、ステップ 2 で追加したコードと最後の end 文の間に追加する。
Function updateCustomerData(CustomerNew Customer)
CustomerOld Customer; CustomerOld.Customer_ID = CustomerNew.Customer_ID; get CustomerOld forUpdate; move CustomerNew to CustomerOld byName; replace CustomerOld;end
- ファイルを保管する。
- 出力を生成するには、Ctrl+G を押すか、ファイルの任意の場所を右クリックし、ポップアップ・メニューから「生成」をクリックする。
ファイルは次のようになります。

以下に、updateCustomerData() について細かな点をいくつか説明します。
- この関数は、CustomerNew (Customer レコード・パーツを基にした変数) に入る値を受け取ります。CustomerNew にはユーザー入力が入ります。
- この関数は、CustomerOld (Customer レコード・パーツを基に作成される変数) を宣言します。その目的は、
CustomerOld を使用して、データベースを読み取り、ユーザー入力を CustomerNew から検索し、その入力を使用してデータベースを更新することです。
- この関数は、データベースとの 2 回の対話のうち最初の対話で使用する CustomerOld を準備するため、CustomerNew のキー・フィールド値を CustomerOld のキー・フィールドに割り当てます。
- getCustomer() 関数との関連で記述されているように、EGL
get 文は、列 CUSTOMER_ID の値がステートメントに指定されている変数 (この場合は、CustomerOld 変数) の CUSTOMER_ID フィールドの値と同じになっているテーブル行を取得します。
forUpdate 文節を使用することによって、後の EGL ステートメントでデータベース行を置き換えたり削除したりすることができます。また、(ほとんどのデータベース管理システムにおける) この文節のもう一つの効果は行をロックすることです。
- データベースとの 2 回目の対話で使用する CustomerOld を準備するため、
EGL move 文が、CustomerNew のフィールドから、CustomerOld の同じ名前のフィールドにデータをコピーします。
- EGL replace 文は、get 文によって検索された行を更新します。
ファイルに赤のマークがある場合、それは構文エラーがあることを示しています。表示通り正確にコードが入力されているか確認してください。
コードを変更した場合は、忘れずにファイルを保管して (Ctrl+S)、
出力を生成 (Ctrl+G) してください。
- ファイルを閉じる。
EGL ライブラリーへの関数呼び出しの追加
今度は、2 つの新規ライブラリー関数を呼び出すコードを追加します。
- updatecustomer.jsp ファイルをダブルクリックして、
プロジェクト・エクスプローラー・ビューで開く。
- updatecustomer.jsp に対して表示されている Web ページの任意の場所を右クリックし、ポップアップ・メニューから「ページ・コードの編集」をクリックする。updatecustomer.egl ファイルが開きます。
- ファイルから以下のコードを除去する。
Function onPageLoad()
End
- 前のステップで除去したコードの代わりに、次のコードを挿入する。
Function onPageLoad(CID int)
customer.Customer_ID = CID;
CustomerLib.getCustomer(customer);
End
この時点でコードは次のようになります。

以下に、onPageLoad() について細かな点をいくつか説明します。
- 実行時に、JSP ファイルが Web ページを表示する前に、ページ・ハンドラーの onPageLoad 関数が呼び出されます。
- この場合、関数は特定のカスタマーを参照する整数を受け入れます。演習 8 の説明の通り、
その整数は HTTP 要求パラメーターから使用可能となります。
- 関数はその整数を、Web ページのフィールドにバインドされた変数フィールド
(Customer_ID) に割り当てます。変数 (customer) は Customer レコード・パーツを基にしており、ページ・ハンドラーに対してグローバルです。
- customer 変数は、onPageLoad 関数によってライブラリー関数 getCustomer に渡されます。getCustomer 関数は、CUSTOMER データベースから列データを取得して、変数の各フィールドに入れます。
- onPageLoad 関数が終了すると、EGL ランタイム・コードはページ・ハンドラー
のフィールドから Web ページの関連フィールドにデータを配置します。
- 以下のコードを、たった今挿入したコードの下でありなおかつ最後の
End 文の前に、ユーザーが入力を実行したとき
に応答する関数を挿入する。
Function updatecustomerRec()
CustomerLib.updateCustomerData(customer);
forward to "allcustomers";
End
- ファイルを保管する。
この時点でコードは次のようになります。

以下に、updateCustomerRec() について細かな点をいくつか説明します。
- その関数を Web ページのボタンにバインドする必要があります。ユーザーがそのボタンをクリックすると、その関数が呼び出されます。
- EGL forward 文は、CUSTOMER テーブルのすべての行のリストを提示する
JSP ファイルに制御権を移動します。
- ファイルを閉じる。
実行ボタンへの関数のバインド
更新ページの最終ステップでは、
updateCustomerRec() を Web ページの「実行」ボタンにバインドします。
- updatecustomer.jsp ファイルを開く。
- ページ・データ・ビューで「アクション」フォルダーを展開し、「updatecustomerRec()」というラベルの付いたアイコンをクリックする。
- updatecustomerRec() アイコンを、「このレコードの更新」ボタンに
直接ドラッグ・アンド・ドロップする。
ページの外観は変化しませんが、これによりボタンがページ・ハンドラーの updatecustomerRec() 関数にバインドされました。
- ページを保管する。
完了したサイトのテスト
これで、サイトをサーバーで稼働する準備ができました。
- プロジェクト・エクスプローラー・ビューで、allcustomers.jsp ファイルを右クリックし、ポップアップ・メニューから「実行」>「サーバーで実行」をクリックする。
関連ページが Web ブラウザーで開きます。現在、リスト内の
カスタマー ID 番号は updatecustomer.jsp によって表示される Web ページへの
ハイパーリンクです。
- カスタマー ID 番号の 1 つをクリックする。updatecustomer.jsp に表示される
Web ページに送られ、その Web ページはその行に特定の情報を表示します。
- そのレコードの新規 FIRST_NAME を入力する。
- このページ上の他のフィールドのいくつかの新規情報を入力する。CUSTOMER_ID フィールドは変更しないでください。
- 新規情報の入力が終了したら、「このレコードの更新」
ボタンをクリックする。
「このレコードの更新」ボタンをクリックすると、
allcustomers.jsp によって表示される Web ページに戻ります。ステップ 4 で入力した新規 FIRST_NAME を
表示するようにレコードが変更されている点に注意してください。そのレコードの ID 番号を再び
クリックすると、データベースに保管された新規情報を表示できます。
チュートリアルの要約
に進んでください。