Web ページの作成が完了したので、Web ページから検索項目を受け取り、それらの項目に従ってデータベースを検索し、検索結果をページ上に表示する EGL コードを追加する必要があります。
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 と一致するレコードのみが戻されるようにします。
get Customers 行のワード Customers の上にカーソルを置く必要があります。そうしなければ、SQL ステートメントを編集することができません。
where LAST_NAME like :lname and STATE = :state
コードは次のようになります。
EGL ではさまざまな方法で SQL ステートメントを作成および生成することができます。既に完了した EGL チュートリアルでは、特定のカスタマー ID 番号を usingKeys 分節に指定して、特定のデータベース・レコードを取り出しました。その usingKeys 分節では、ここで CustomerLib.egl に追加したばかりの where 文に似た SQL where 文が作成されました。また、defaultSelectCondition を使用して同様のタスクを実行することもできます。
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
以下は、ここで追加したページ・コードに関する技術面での注釈です。
このレコードには、nbr - int と msg - char(222) という 2 つのフィールドが含まれています。前者は戻される検索結果の数を表す数値であり、後者はフィードバック・メッセージを表す文字列です。これら 2 つのフィールドは、順番に (nbr - int を左側、msg - char(222) を右側に)「実行」ボタンの上の出力コンポーネントにバインドする必要があります。
ページは次のようになります。
ページをテストする際には、「LAST_NAME」フィールドに文字を、「STATE」フィールドに状態を入力します。この検索ページでは大/小文字が区別されることに注意してください。例えば、「LAST_NAME」フィールドに F、「STATE」フィールドに NV と入力した場合、次のピクチャーのような結果がページに表示されます。
この検索ページは使いやすいものではありません。ユーザーが顧客の状態と顧客の姓の最初の文字の両方を知っていなければならないからです。ユーザーが AND 検索と OR 検索のいずれかを選択することができれば、より使いやすくなります。次の演習では、 そのようなオプションをこのページに追加します。その次の演習では、「STATE」入力フィールドをコンボ・ボックスに変更し、データベースで使用されている有効な状態がすべてリストとして表示されるようにします。
これで、「演習 2.3: OR 検索条件の使用」を開始する準備ができました。