演習 2.2: 検索関数に関するコードの追加

Web ページの作成が完了したので、Web ページから検索項目を受け取り、それらの項目に従ってデータベースを検索し、検索結果をページ上に表示する EGL コードを追加する必要があります。

ライブラリーへの SQL 検索関数の追加

  1. EGLSource フォルダーの data パッケージ内にある CustomerLib.egl ライブラリーを開く。
  2. ライブラリー内の最後の end 文の直前に以下のコードを挿入する。

    function NameAndStateSearch_And(func int,
        lname char(30) in, state char(2) in,
        Customers Customer[])
        get Customers;
        if (sqlcode != 0) func = 0; end
      end

    この関数は、同じライブラリー内にある、データベースからすべてのレコードを取得する関数に似ています。唯一の違いは、この関数が以下の 4 つのパラメーターを受け取るということです。

    この時点では、この関数はデータベース内のすべてのレコードを取り出します。以下のステップでは、この関数によって生成された SQL ステートメントを編集して、検索項目 lname および state と一致するレコードのみが戻されるようにします。

  3. 前のステップで追加したコード内の get Customers 行で、ワード Customers を直接クリックする。

    get Customers 行のワード Customers の上にカーソルを置く必要があります。そうしなければ、SQL ステートメントを編集することができません。

  4. get Customers 行でワード Customers を右クリックし、ポップアップ・メニューから「SQL ステートメント」>「追加」をクリックする。SQL ステートメントがコードの get Customers 行に追加されます。
  5. 行の最後にカーソルを置いて Enter キーをクリックし、from EGL.CUSTOMER 行の後にブランク行を追加する。
  6. from EGL.CUSTOMER の下の新規ブランク行に次のコードを挿入する。

    where LAST_NAME like :lname and STATE = :state

    コードは次のようになります。

    CustomerLib.egl ライブラリーの外観

    EGL ではさまざまな方法で SQL ステートメントを作成および生成することができます。既に完了した EGL チュートリアルでは、特定のカスタマー ID 番号を usingKeys 分節に指定して、特定のデータベース・レコードを取り出しました。その usingKeys 分節では、ここで CustomerLib.egl に追加したばかりの where 文に似た SQL where 文が作成されました。また、defaultSelectCondition を使用して同様のタスクを実行することもできます。

  7. ファイルを保管する。
  8. Ctrl+G キーを押すか、右クリックしてポップアップ・メニューで「生成」をクリックし、ファイルの Java を生成する。
  9. ファイルを閉じる。

検索ページへの 検索関数のバインド

  1. customersearch.jsp ページを開く。
  2. エディターでページを右クリックし、ポップアップ・メニューから「ページ・コードの編集」をクリックする。ページ・コード・ファイルが開きます。
  3. ページ・コード・ファイル内のすべてのコードを削除して、代わりに以下のコードを入力する。
    package pagehandlers;
    import data.*;
    
    PageHandler customersearch { handleHardIOErrors = no, throwNrfEofExceptions = yes }
        {view="customersearch.jsp", onPageLoadFunction="onPageLoad"}
    
    searchTerms Customer;       //Search input
    searchResults Customer[];   //Search results
    pagemsgRec msgRec;          //pagemsgRec variable of type MsgRec
    func int;                //func - a flag to pass the state of the results
    
    Function onPageLoad()
        if (func == 0)    //Either no rows, or 1st time into page
            pagemsgRec.msg="No customer(s) found or no search criteria entered.";
    End
    end
    
    function searchFunction()
            func = 1;        //Initialize func before calling database
            searchTerms.Last_Name = searchTerms.Last_Name+"%";    //Add wildcard (%)
                                                            //to search field
            CustomerLib.NameAndStateSearch_And(func, searchTerms.Last_Name,
                searchTerms.State, searchResults);	//Call search function
            pagemsgRec.msg = "Customer(s) found.  Search again?";    //Assign msg text
            pagemsgRec.nbr = sysLib.size(searchResults);    //Get row count
        end
    End
    
    Record msgRec          //Custom EGL record type definition
                           //used to combine numeric and string data
        10 nbr int;        //Integer - numeric field 	
        10 msg char(222);  //Character data
      end

    以下は、ここで追加したページ・コードに関する技術面での注釈です。

  4. ファイルを保管して閉じる。
  5. customersearch.jsp ページに戻る。
  6. ページ・データ・ビューで、「customersearch」>「 pagemsgRec」を展開する。

    このレコードには、nbr - intmsg - char(222) という 2 つのフィールドが含まれています。前者は戻される検索結果の数を表す数値であり、後者はフィードバック・メッセージを表す文字列です。これら 2 つのフィールドは、順番に (nbr - int を左側、msg - char(222) を右側に)「実行」ボタンの上の出力コンポーネントにバインドする必要があります。

  7. nbr - int」をページ・データ・ビューから、「実行」ボタンの上の左側の出力コンポーネントへ直接ドラッグする。
  8. msg - char(222)」を右側の出力コンポーネントへドラッグする。
  9. searchFunction()」をページ・データ・ビューの「アクション」フォルダーからページ上の「実行」ボタンへドラッグする。

    ページは次のようになります。

    検索ページの外観

  10. ページを保管する。
  11. ページをテストする。

    ページをテストする際には、「LAST_NAME」フィールドに文字を、「STATE」フィールドに状態を入力します。この検索ページでは大/小文字が区別されることに注意してください。例えば、「LAST_NAME」フィールドに F、「STATE」フィールドに NV と入力した場合、次のピクチャーのような結果がページに表示されます。

    検索結果ページ

この検索ページは使いやすいものではありません。ユーザーが顧客の状態と顧客の姓の最初の文字の両方を知っていなければならないからです。ユーザーが AND 検索と OR 検索のいずれかを選択することができれば、より使いやすくなります。次の演習では、 そのようなオプションをこのページに追加します。その次の演習では、「STATE」入力フィールドをコンボ・ボックスに変更し、データベースで使用されている有効な状態がすべてリストとして表示されるようにします。

これで、『演習 2.3: OR 検索条件の使用』を開始する準備ができました。

フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.