(57)【要約】【課題】検索条件として入力されたパラメータの値に応じて、アプリケーションの要件にとって適切なＳＱＬ文を柔軟に生成する技術を提供する。【解決手段】アプリケーションサーバは、ユーザがアプリケーションクライアントにおいて入力した値を含むデータベース検索要求をパラメータ値として受け取り、動作内容を定義するＳＱＬ文基本定義と、前記ＳＱＬ文基本定義に付加する条件句を生成するための条件句生成定義とから構成されるクエリ定義と、前記データベース検索要求に基づき、ＳＱＬ文を生成することにより、データベースの検索を柔軟に実行することが可能となる。【選択図】図１６
2013025446.tif 000002
【特許請求の範囲】
【請求項１】
クライアント装置とアプリケーションサーバとが通信可能な情報処理システムであって、
前記クライアント装置は、
指示オブジェクトが選択されることで実行されるイベント処理を含む画面データを表示する表示制御手段と、
前記表示制御手段により表示された画面データ上の前記指示オブジェクトに対するユーザ操作に応じて、前記指示オブジェクトに対応付けられたイベント処理に基づくデータベース検索要求を前記アプリケーションサーバに発行する要求発行手段と、
を備え、
前記アプリケーションサーバは、
データベースへ発行するＳＱＬ文を生成するための、動作内容を定義するＳＱＬ文基本定義と、前記ＳＱＬ文基本定義に付加する条件句を生成するための条件句生成定義とから構成される、または前記ＳＱＬ文基本定義から構成されるクエリ定義を記憶するクエリ定義記憶手段と、
前記データベース検索要求に従って、前記クエリ定義記憶手段に記憶されている前記クエリ定義を取得するクエリ定義取得手段と、
前記クエリ定義取得手段により取得した前記クエリ定義から、前記ＳＱＬ文基本定義を取得し、文字列として文字列変数に記憶させる代入手段と、
前記条件句生成定義と、前記データベース検索要求に含まれる検索条件のパラメータ値に基づき、前記条件句を生成する条件句生成手段と、
前記クエリ定義に前記条件句生成定義が含まれない場合には、前記代入手段により前記文字列変数に記憶された前記ＳＱＬ文基本定義を生成された前記ＳＱＬ文とし、前記クエリ定義に前記条件句生成定義が含まれている場合には、前記条件句生成手段で生成された前記条件句を文字列として前記文字列変数に連結し、前記文字列変数に記憶されている文字列を生成された前記ＳＱＬ文とするＳＱＬ文生成手段と、
を備えることを特徴とする情報処理システム。
【請求項２】
前記クエリ定義取得手段により取得された前記クエリ定義に基づき、前記ＳＱＬ文を生成するためのスクリプトを生成するスクリプト生成手段と、を備え、
前記代入手段は、前記スクリプト生成手段により生成された前記スクリプトに基づいて、前記ＳＱＬ文基本定義を文字列として文字列変数に記憶させ、
前記条件句生成手段は、前記スクリプト生成手段により生成された前記スクリプトと、前記データベース検索要求に含まれる検索条件のパラメータ値とに基づいて条件句を生成し、
前記ＳＱＬ文生成手段は、前記スクリプト生成手段により生成された前記スクリプトに基づいて、前記クエリ定義に前記条件句生成定義が含まれない場合には、前記代入手段により前記文字列変数に記憶された前記ＳＱＬ文基本定義を生成された前記ＳＱＬ文とし、前記クエリ定義に前記条件句生成定義が含まれている場合には、前記条件句生成手段で生成された前記条件句を文字列として前記文字列変数に連結し、前記文字列変数に記憶されている文字列を生成された前記ＳＱＬ文とすることを特徴とする請求項１に記載の情報処理システム。
【請求項３】
前記条件句生成定義は、前記条件句を選択するためのスクリプトと、前記条件句から構成され、
前記条件句生成手段は、前記スクリプトを実行させ、前記スクリプトに定義された条件分岐のうち、前記パラメータ値に基づいて選択された分岐に記載された前記条件句を、前記条件句生成定義により生成された前記条件句とすることを特徴とする請求項１に記載の情報処理システム。
【請求項４】
前記条件句生成定義には、さらに前記条件句の一部を条件句部品として、前記スクリプトに定義された分岐の中に記述することが可能であり、
前記条件句生成手段は、前記スクリプトを実行させ、前記スクリプトに定義された条件分岐のうち、前記パラメータ値に基づいて選択された分岐に記載された前記条件句部品を選択する毎に、生成された結果の前記条件句部品とし、前記ＳＱＬ文生成手段は、前記条件句生成手段が前記条件句部品を生成する毎に、前記条件句生成手段で生成された前記条件句を文字列として前記文字列変数に連結することを特徴とする請求項３に記載の情報処理システム。
【請求項５】
前記要求発行手段は、前記指示オブジェクトに対応付けられたイベント処理に基づいて、複数の前記データベース検索要求を前記アプリケーションサーバに発行することが可能であることを特徴とする請求項１乃至請求項４に記載の情報処理システム。
【請求項６】
クライアント装置と通信可能な情報処理システムにおけるアプリケーションサーバであって、
データベースへ発行するＳＱＬ文を生成するための、動作内容を定義するＳＱＬ文基本定義と、前記ＳＱＬ文基本定義に付加する条件句を生成するための条件句生成定義とから構成される、または前記ＳＱＬ文基本定義から構成されるクエリ定義を記憶するクエリ定義記憶手段と、
前記クライアント装置から受け付けたデータベース検索要求に従って、前記クエリ定義記憶手段に記憶されている前記クエリ定義を取得するクエリ定義取得手段と、
前記クエリ定義取得手段により取得した前記クエリ定義から、前記ＳＱＬ文基本定義を取得し、文字列として文字列変数に記憶させる代入手段と、
前記条件句生成定義と、前記データベース検索要求に含まれる検索条件のパラメータ値に基づき、前記条件句を生成する条件句生成手段と、
前記クエリ定義に前記条件句生成定義が含まれない場合には、前記代入手段により前記文字列変数に記憶された前記ＳＱＬ文基本定義を生成された前記ＳＱＬ文とし、前記クエリ定義に前記条件句生成定義が含まれている場合には、前記条件句生成手段で生成された前記条件句を文字列として前記文字列変数に連結し、前記文字列変数に記憶されている文字列を生成された前記ＳＱＬ文とするＳＱＬ文生成手段と、
を備えることを特徴とするアプリケーションサーバ。
【請求項７】
クライアント装置とアプリケーションサーバとが通信可能な情報処理システムにおける情報処理方法であって、
前記クライアント装置は、
指示オブジェクトが選択されることで実行されるイベント処理を含む画面データを表示する表示制御工程と、
前記表示制御工程により表示された画面データ上の前記指示オブジェクトに対するユーザ操作に応じて、前記指示オブジェクトに対応付けられたイベント処理に基づくデータベース検索要求を前記アプリケーションサーバに発行する要求発行工程と、
を備え、
前記アプリケーションサーバは、
データベースへ発行するＳＱＬ文を生成するための、動作内容を定義するＳＱＬ文基本定義と、前記ＳＱＬ文基本定義に付加する条件句を生成するための条件句生成定義とから構成される、または前記ＳＱＬ文基本定義から構成されるクエリ定義を記憶するクエリ定義記憶手段と、
前記データベース検索要求に従って、前記クエリ定義記憶手段に記憶されている前記クエリ定義を取得するクエリ定義取得工程と、
前記クエリ定義取得工程により取得した前記クエリ定義から、前記ＳＱＬ文基本定義を取得し、文字列として文字列変数に記憶させる代入工程と、
前記条件句生成定義と、前記データベース検索要求に含まれる検索条件のパラメータ値に基づき、前記条件句を生成する条件句生成工程と、
前記クエリ定義に前記条件句生成定義が含まれない場合には、前記代入工程により前記文字列変数に記憶された前記ＳＱＬ文基本定義を生成された前記ＳＱＬ文とし、前記クエリ定義に前記条件句生成定義が含まれている場合には、前記条件句生成工程で生成された前記条件句を文字列として前記文字列変数に連結し、前記文字列変数に記憶されている文字列を生成された前記ＳＱＬ文とするＳＱＬ文生成工程と、
を備えることを特徴とする情報処理方法。
【請求項８】
クライアント装置とアプリケーションサーバとが通信可能な情報処理システムにおいて実行可能なプログラムであって、
前記クライアント装置を、
指示オブジェクトが選択されることで実行されるイベント処理を含む画面データを表示する表示制御手段と、
前記表示制御手段により表示された画面データ上の前記指示オブジェクトに対するユーザ操作に応じて、前記指示オブジェクトに対応付けられたイベント処理に基づくデータベース検索要求を前記アプリケーションサーバに発行する要求発行手段として機能させ、
前記アプリケーションサーバを、
データベースへ発行するＳＱＬ文を生成するための、動作内容を定義するＳＱＬ文基本定義と、前記ＳＱＬ文基本定義に付加する条件句を生成するための条件句生成定義とから構成される、または前記ＳＱＬ文基本定義から構成されるクエリ定義を記憶するクエリ定義記憶手段と、
前記データベース検索要求に従って、前記クエリ定義記憶手段に記憶されている前記クエリ定義を取得するクエリ定義取得手段と、
前記クエリ定義取得手段により取得した前記クエリ定義から、前記ＳＱＬ文基本定義を取得し、文字列として文字列変数に記憶させる代入手段と、
前記条件句生成定義と、前記データベース検索要求に含まれる検索条件のパラメータ値に基づき、前記条件句を生成する条件句生成手段と、
前記クエリ定義に前記条件句生成定義が含まれない場合には、前記代入手段により前記文字列変数に記憶された前記ＳＱＬ文基本定義を生成された前記ＳＱＬ文とし、前記クエリ定義に前記条件句生成定義が含まれている場合には、前記条件句生成手段で生成された前記条件句を文字列として前記文字列変数に連結し、前記文字列変数に記憶されている文字列を生成された前記ＳＱＬ文とするＳＱＬ文生成手段と機能させることを特徴とするプログラム。
【請求項９】
請求項８に記載されたプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＳＱＬ文を動的かつ柔軟に生成する技術に関する。
【背景技術】
【０００２】
従来から、業務アプリケーションにおいては、データベースと連携した開発を行うことが多い。従って、データベース処理に関する部分の開発効率を向上させることは、業務アプリケーション全体の開発効率を向上させることになる。
【０００３】
そのための１つの方法として、ＳＱＬ文を動的に生成する技術が提供されている。
【０００４】
特許文献１では、現在表示している画面（カレントページ）から、他の画面（ネクストページ）に画面遷移する際に、ＳＱＬ文を生成する。
【０００５】
すなわち、例えばスクリーン部品１には、“ユーザＩＤ”を入力する画面生成処理と、該画面生成処理で生成された画面でユーザが入力した“ユーザＩＤ”の実際の値をあらかじめ用意したｗｈｅｒｅ句に当てはめる処理を定義する。一方、スクリーン部品２には、データベースのどのテーブルから、どのデータ項目（カラム）を取得するかという“ｗｈｅｒｅ句以外のＳＱＬ文の部分”と、検索結果を表示する画面生成処理の定義を含む。
【０００６】
アプリケーションの実行時には、スクリーン部品１に基づき生成されるカレントページを表示し、“ユーザＩＤ”を入力する。その後、スクリーン部品２に基づき生成されるネクストページとして画面遷移する際、スクリーン部品２の“ｗｈｅｒｅ句以外のＳＱＬ文の部分”と、スクリーン部品１の“ｗｈｅｒｅ句部分”と結合する。カレントページにおいて入力された“ユーザＩＤ”の値は、“ｗｈｅｒｅ句”に当てはめられることでＳＱＬ文を生成し、該ＳＱＬ文でデータベースを検索した結果を、ネクストページに表示する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００３−３０８３３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１においては、前述のように“ｗｈｅｒｅ句以外のＳＱＬ部分”と“ｗｈｅｒｅ句”を実行時に結合して利用する技術が提示されている。
【０００９】
しかしながら、ｗｈｅｒｅ句の条件として設定するパラメータ（例えば前述の”ユーザＩＤ”）に、必ずしもアプリケーションの動作要件を満たすために意図した値が送られてくるとは限らない。
【００１０】
前述の例では、カレントページにおいて、“ユーザＩＤ”の入力欄に何も指定されずにＳＱＬ文が生成された場合には、“ｗｈｅｒｅ  ｕｓｅｒｉｄ＝ＮＵＬＬ”となる。ＳＱＬ文実行の結果としては、データベースの中で“ユーザＩＤ”が未定義のレコード一覧がネクストページに表示される。
【００１１】
すなわち、クライアント端末から入力された値を、ｗｈｅｒｅ句のパラメータに、そのまま値として当てはめてＳＱＬ文を生成する方法では、十分に柔軟なＳＱＬ文の生成は実現できない。
【００１２】
しかしながら、実際の業務ではユーザが値を入力しない場合であっても、何らかの既定値を利用したり、あるいは条件を付けずに検索したりといったアプリケーションの動作要件としたい場合がある。
【００１３】
本発明は、以上の問題を解決するものであり、検索条件として入力されたパラメータの値に応じて、アプリケーションの要件にとって適切なＳＱＬ文を柔軟に生成する技術を提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明は、クライアント装置とアプリケーションサーバとが通信可能な情報処理システムであって、前記クライアント装置は、指示オブジェクトが選択されることで実行されるイベント処理を含む画面データを表示する表示制御手段と、前記表示制御手段により表示された画面データ上の前記指示オブジェクトに対するユーザ操作に応じて、前記指示オブジェクトに対応付けられたイベント処理に基づくデータベース検索要求を前記アプリケーションサーバに発行する要求発行手段と、を備え、前記アプリケーションサーバは、データベースへ発行するＳＱＬ文を生成するための、動作内容を定義するＳＱＬ文基本定義と、前記ＳＱＬ文基本定義に付加する条件句を生成するための条件句生成定義とから構成される、または前記ＳＱＬ文基本定義から構成されるクエリ定義を記憶するクエリ定義記憶手段と、前記データベース検索要求に従って、前記クエリ定義記憶手段に記憶されている前記クエリ定義を取得するクエリ定義取得手段と、前記クエリ定義取得手段により取得した前記クエリ定義から、前記ＳＱＬ文基本定義を取得し、文字列として文字列変数に記憶させる代入手段と、前記条件句生成定義と、前記データベース検索要求に含まれる検索条件のパラメータ値に基づき、前記条件句を生成する条件句生成手段と、前記クエリ定義に前記条件句生成定義が含まれない場合には、前記代入手段により前記文字列変数に記憶された前記ＳＱＬ文基本定義を生成された前記ＳＱＬ文とし、前記クエリ定義に前記条件句生成定義が含まれている場合には、前記条件句生成手段で生成された前記条件句を文字列として前記文字列変数に連結し、前記文字列変数に記憶されている文字列を生成された前記ＳＱＬ文とするＳＱＬ文生成手段と、を備えることを特徴とする。
【発明の効果】
【００１５】
本発明により、検索条件として入力されたパラメータの値に応じて、アプリケーションの要件にとって適切なＳＱＬ文を柔軟に生成する技術を提供することが可能となる。
【図面の簡単な説明】
【００１６】
【図１】本発明に係わるプログラム開発装置、プログラム開発サーバ、データベースサーバ、アプリケーションクライアント、アプリケーションサーバの構成の一例を示すシステム構成図である。
【図２】本発明に係わるプログラム開発装置、プログラム開発サーバ、データベースサーバ、アプリケーションクライアント、アプリケーションサーバとして適用可能な各ハードウェア構成の一例を示すブロック図である。
【図３】本発明の実施の形態のソフトウェア構成を示すブロック図の一例である。
【図４】データベースサーバが管理するデータベースの一例を示す図である。
【図５】本発明の実施の形態におけるアプリケーションを作成する処理の流れの一例を示すフローチャートである。
【図６】開発画面の一例である。
【図７】本発明の実施の形態における開発処理の流れの一例を示すフローチャートである。
【図８】開発画面におけるテキストボックスオブジェクトの配置および属性定義の一例である。
【図９】開発画面におけるボタンオブジェクトの配置および属性定義の一例である。
【図１０】開発画面におけるグリッドオブジェクトの配置および属性定義の一例である。
【図１１】開発画面におけるボタンオブジェクトとクエリ定義の関連付けの一例である。
【図１２】クエリ定義を開発する画面の例である。
【図１３】クエリ定義を開発する画面の例である。
【図１４】アプリケーションクライアント画面上の指示オブジェクトに対応付けるイベント処理を生成するフローチャートの一例である。
【図１５】本発明の実施の形態におけるデータベース検索のための画面要求から、検索結果の表示までの流れを示すフローチャートの一例である。
【図１６】本発明の実施の形態におけるＳＱＬ文を生成するフローチャートの一例である。
【図１７】本発明の実施の形態における条件句または条件句部品を生成するフローチャートの一例である。
【図１８】データベース検索結果の例である。
【図１９】データベース検索結果の例である。
【図２０】クエリ定義を開発する画面の例である。
【図２１】クエリ定義に基づき生成されたスクリプトの例である。
【発明を実施するための形態】
【００１７】
以下、本発明の実施の形態を、図面を参照して詳細に説明する。
【００１８】
図１は、本発明に係わるプログラム開発装置（開発者端末）、プログラム開発サーバ、データベースサーバ、アプリケーションクライアント（クライアント装置）、アプリケーションサーバの構成の一例を示すシステム構成図である（情報処理システム）。
【００１９】
プログラム開発装置１０１（情報処理装置）は、開発者の操作に従って画面レイアウトおよびデータベース検索指示などを定義する。プログラム開発装置１０１単体では、ユーザの入力受付を行い、後述するプログラム開発サーバ１０２に実際のプログラム生成処理をさせてもよいし、プログラム開発装置単体でプログラム生成まで処理してもよい。
【００２０】
プログラム開発サーバ１０２ａ〜１０２ｂ（情報処理装置）は、プログラム開発装置１０１により入力された開発者の指示に従って、プログラムを開発する。プログラム開発サーバ１０２ａはＬＡＮなどのネットワーク１０６内に配置されてもよいし、プログラム開発サーバ１０２ｂはインターネット上やクラウド上に配置されてもよい。
【００２１】
データベースサーバ１０３ａ〜１０３ｂ（情報処理装置）は、開発されたアプリケーションが使用するデータベースであり、また本発明では開発時にも動作確認などのために利用してもよい。例えば、開発者が利用するためにデータベースサーバ１０３は、プログラム開発装置１０１と同一の装置で構成されていてもよいし、ＬＡＮなどのネットワーク１０６内に配置されてもよい（データベースサーバ１０３ａ）。またインターネット上やクラウド上に配置されてもよい（データベースサーバ１０３ｂ）。また、プログラム開発装置１０１が、プログラム開発サーバ１０２と協調する場合には、プログラム開発サーバ１０２とデータベースサーバ１０３が同一の装置内に構成されていてもよい。
【００２２】
アプリケーションサーバ１０５ａ〜１０５ｂ（情報処理装置）は、プログラム開発装置１０１で開発されたアプリケーションを実行する。ＬＡＮなどのネットワーク１０６内に配置されてもよい（アプリケーションサーバ１０５ａ）し、またインターネット上やクラウド上に配置されてもよい（アプリケーションサーバ１０５ｂ）。また、ネットワーク１０６、インターネット、クラウド上のデータベースサーバ１０３と接続して動作する可能である。
【００２３】
アプリケーションクライアント１０４ａ〜１０４ｂ（情報処理装置）は、アプリケーションサーバ１０５と協調してプログラム開発装置１０１で開発したアプリケーションプログラムを動作させる、ユーザの入力端末である。ＬＡＮなどのネットワーク１０６内に配置されてもよい（アプリケーションクライアント１０４ａ）し、またインターネット上やクラウド上に配置されてもよい（アプリケーションクライアント１０４ｂ）。携帯端末などの情報処理装置であってもよい。
【００２４】
図２は、本発明に係わるプログラム開発装置、プログラム開発サーバ、データベースサーバ、アプリケーションクライアント、アプリケーションサーバとして適用可能な各ハードウェア構成の一例を示すブロック図である。
【００２５】
図２において、ＣＰＵ２０１は、システムバス２０４に接続される各デバイスを統括的に制御する。
【００２６】
また、ＲＯＭ２０３あるいは外部メモリ２１１には、ＣＰＵ２０１の制御プログラムであるオペレーティングシステム（ＯＳ）や、各サーバ、クライアント、装置など情報処理装置の後述する各種機能を実現するためのプログラムが記憶されている。
【００２７】
ＲＡＭ２０２は、ＣＰＵ２０１の主メモリ、ワークエリア、一時待避領域等として機能する。
【００２８】
入力コントローラ２０５は、入力部２０９からの入力を制御する。この入力部２０９としては、情報処理装置では、キーボード、マウス等のポインティングデバイスが挙げられる。
【００２９】
出力コントローラ２０６は、出力部２１０の表示を制御する。この出力部２１０としては、例えば、ＣＲＴや液晶ディスプレイ等が挙げられる。
【００３０】
外部メモリコントローラ２０７は、ブートプログラム、各種のアプリケーション、フォントデータ、ユーザーファイル、編集ファイル、プリンタドライバ等を記憶する外部メモリ２１１へのアクセスを制御する。加えて、各サーバ、クライアント、装置等の各種機能を実現するための各種テーブル、パラメータが記憶されている。この外部メモリ２１１としては、ハードディスク（ＨＤ）やフレキシブルディスク（ＦＤ）、ＰＣＭＣＩＡカードスロットにアダプタを介して接続されるコンパクトフラッシュ（登録商標）、スマートメディア等が挙げられる。
【００３１】
通信Ｉ／Ｆコントローラ２０８は、ネットワークを介して外部機器との通信制御処理を実行する。
【００３２】
本発明を実現するためのプログラム２１２は外部メモリ２１１に記録されており、必要に応じてＲＡＭ２０２にロードされることによりＣＰＵ２０１によって実行されるものである。
【００３３】
図３は、本発明の実施の形態のソフトウェア構成を示すブロック図の一例である。
【００３４】
アプリケーションクライアント１０４は、表示制御部３０１、要求発行部３０２を備えている。
【００３５】
表示制御部３０１は、アプリケーションの特定の画面が生成される場合には、アプリケーションサーバ１０５において生成された画面を、アプリケーションクライアント１０４のアプリケーション上に表示する機能部である。また、既に表示されている場合に、ユーザ操作によりアプリケーションサーバにデータベース検索要求などが発行された場合の処理結果を、アプリケーションの表示に反映する。
【００３６】
要求発行部３０２は、表示制御部３０１で表示されているボタンオブジェクトなどが、ユーザ操作により指示（マウスクリックなど）された場合に、データベース検索要求などをアプリケーションサーバ１０５に発行する機能部である。
【００３７】
アプリケーションサーバ１０５は、要求受付部３１１、クエリ定義取得部３１２、ＳＱＬ文基本定義取得部３１３、条件句生成定義取得部３１４と、代入部３１５、条件句生成部３１６、ＳＱＬ文生成部３１７、ＳＱＬ文発行部３１８、スクリプト生成部３１９、クエリ定義記憶部３２１を備える。
【００３８】
要求受付部３１１は、アプリケーションクライアント１０４の要求発行部３０２から要求されたデータベース検索要求を受け取る機能部である。受け取る情報には、データベース検索要求に使用するクエリ定義を特定する情報（クエリＩＤ）、ＳＱＬ文を生成する際のパラメータの値などを含む。要求の受付は、本実施の形態においてはアプリケーションクライアント１０４から受け付けているが、必ずしも限定するものではない。同一のアプリケーション内の他の機能部や、他のアプリケーションから受け付けてもよい。
【００３９】
クエリ定義取得部３１２は、前記クエリＩＤに基づき、後述のクエリ定義記憶部３２１から対応するクエリ定義を取得する機能部である。
【００４０】
ＳＱＬ文基本定義取得部３１３は、前記クエリ定義に含まれるＳＱＬ文基本定義を取得する機能部である。ＳＱＬ文基本定義の詳細については後述する。
【００４１】
条件句生成定義取得部３１４は、前記クエリ定義に含まれる条件句生成定義を取得する機能部である。条件句生成定義の詳細については後述する。
【００４２】
代入部３１５は、クエリ定義の中のＳＱＬ文基本定義を変数に代入する機能部である。
【００４３】
条件句生成部３１６は、データベース検索要求を受け付けた際のパラメータの値に基づき、前記条件句生成定義に従って、条件句を生成する機能部である。
【００４４】
ＳＱＬ文生成部３１７は、前記クエリ定義および前記パラメータ値に基づき、ＳＱＬ文を生成する機能部である。条件句生成部３１６の生成結果がある場合には、ＳＱＬ文基本定義に、生成結果を連結（結合）することで、ＳＱＬ文を生成する。
【００４５】
ＳＱＬ文発行部３１８は、前記のＳＱＬ文生成部３１７により生成されたＳＱＬ文により、データベースサーバ１０３のデータベースを検索する機能部である。
【００４６】
スクリプト生成部３１９は、プログラム開発装置１０１で定義された前記クエリ定義からＳＱＬ文生成用のスクリプトを生成する機能部である。
【００４７】
クエリ定義記憶部３２１は、動作内容を定義するＳＱＬ文基本定義と、前記ＳＱＬ文基本定義に付加する条件句等を生成するための条件句生成定義とから構成される、またはクエリ定義部は、前記ＳＱＬ基本部から構成されるクエリ定義を記憶する記憶部である。
【００４８】
図４は、データベースサーバが管理するデータベースの一例を示す図である。本実施の形態の説明をするために利用する。
【００４９】
“ｐｒｏｊｅｃｔＴａｂｌｅ”テーブルには、受託開発を行うプロジェクトの情報が記載されている。データ項目には、プロジェクトを一意に特定する案件番号４０１、該プロジェクトの顧客名４０２、プロジェクト名称４０３、該プロジェクトの開始日４０４および終了日４０５があり、４０１〜４０５により１レコードが構成される。
【００５０】
全てのデータ項目が入力されている前提であるが、入力処理中であったり、プロジェクトが完了していなかったりして一部データ項目が入力されていない（本実施形態では、“Ｐｒｊ０７”）場合があるとして以降の説明を行う。
【００５１】
図５は、本発明の実施の形態におけるアプリケーションを作成する処理の流れの一例を示すフローチャートである。
【００５２】
図５は、開発者がプログラム開発装置を操作してアプリケーション画面、データベースを検索するためのアクション定義、クエリ定義などの開発を行う処理の流れを示すものである。本実施の形態では、アプリケーションクライアント１０４からデータベース検索要求を発行するため、ユーザが条件を入力するテキストボックス、検索要求を発行するボタン、結果を表示するグリッドなどのオブジェクトを配置する。更に前記ボタンに要求発行指示がなされた場合のアクション定義の処理を説明する。
【００５３】
Ｓ５０１において、プログラム開発装置は、プログラム開発装置に表示する開発画面を、プログラム開発サーバに対して要求する。
【００５４】
Ｓ５０２において、プログラム開発サーバは、開発画面の要求を受け付ける。
【００５５】
Ｓ５０３において、プログラム開発サーバは、プログラム開発装置に対して開発画面を送信する。
【００５６】
Ｓ５０４において、プログラム開発装置は、開発画面を受信する。
【００５７】
Ｓ５０５において、プログラム開発装置は、開発画面を表示する。開発画面の一例を図６に示す。開発画面は、メニュー６００と、オブジェクト定義フィールド６０１、オブジェクト選択フィールド６０２、定義設定フィールド６０３つの画面から構成される。
【００５８】
開発方法としては、オブジェクト選択フィールド６０２から任意のオブジェクトを選択してオブジェクト定義フィールド６０１に登録（配置）を行い、また、そのオブジェクトに対する属性やアクションの定義を定義設定フィールド６０３から行う。いずれを定義するかは、メニューで選択する。更に、メニューからクエリ定義を選択することで、画面とは別にクエリ定義を作成することが出来る。画面およびクエリ定義の作成が終わった際は、登録ボタン６０４を押下することで、配置、定義された内容が、保存され、開発を終了することができる。
【００５９】
Ｓ５０６において、プログラム開発装置は、開発処理を行う。この開発処理の流れは、図７〜１４を用いて詳しく説明する。
【００６０】
様々なアプリケーションが可能であるが、本実施の形態では前述の通り、まず、アプリケーションクライアント１０４に画面を表示する。次にデータベース検索の条件となる値をユーザによりテキストボックスに入力させ、ボタンをマウスでクリックするなどにより指示する。すると、アプリケーションサーバ１０５にアクション定義に従ってデータベースの検索を要求し、検索結果がグリッドオブジェクトに表示されるアプリケーションの開発を例として示す。
【００６１】
図７は、本発明の実施の形態における開発処理の流れの一例を示すフローチャートである。
【００６２】
Ｓ７０１において、プログラム開発装置は、テキストボックスオブジェクトが選択されたかを判定する。Ｙｅｓの場合、Ｓ７０２へ進み、Ｎｏの場合、Ｓ７０３へ進む。ここでは、具体的には、図８に示すテキストボックス指定ボタン８０１が選択されたかを判定する。テキストボックス指定ボタン８０１が選択された後、開発者は、まずマウスをドラッグアンドドロップすることでテキストボックスオブジェクト８０２を、オブジェクト定義フィールド６０１に配置する。更にテキストボックスオブジェクト８０２にフォーカス（８０３）し、メニューから“属性定義”をクリックすることで、開発者に属性を編集させることができる。
【００６３】
ここでは、見出し属性（８０４）を“終了日”に変更する（Ｓ７０２）。結果は図９のテキストボックスオブジェクト８０２のようになる。図８では、“終了日”の前に、既に“顧客目”、“開始日”の２つのテキストボックスオブジェクトが配置されているものとしている。
【００６４】
Ｓ７０３において、プログラム開発装置は、ボタンオブジェクトが選択されたかを判定する。Ｙｅｓの場合、Ｓ７０４へ進み、Ｎｏの場合、Ｓ７０５へ進む。ここでは、具体的には、図９に示すボタン指定ボタン９０１が選択されたかを判定する。ボタン指定ボタン９０１が選択された後、開発者は、マウスをドラッグアンドドロップすることでボタンオブジェクト９０２を、オブジェクト定義フィールド６０１に配置する。更にボタンオブジェクト９０２にフォーカス（９０３）し、メニューから“属性定義”をクリックすることで、開発者に属性を編集させることができる。
【００６５】
ここでは、見出し属性を“期間検索”に変更する（Ｓ７０４）。結果は図１０の期間検索ボタン１００５のようになる。図９では、“期間検索”の前に、既に“顧客検索”のボタンが配置されているものとする。
【００６６】
Ｓ７０５において、プログラム開発装置は、グリッドブジェクトが選択されたかを判定する。Ｙｅｓの場合、Ｓ７０６へ進み、Ｎｏの場合、Ｓ７０７へ進む。ここでは、具体的には、図１０に示すグリッド指定ボタン１００１が選択されたかを判定する。グリッド指定ボタン１００１が選択された後、開発者は、マウスをドラッグアンドドロップすることでグリッドオブジェクト１００２を、オブジェクト定義フィールド６０１に配置し、更にグリッドオブジェクト１００２にフォーカス（１００３）し、メニューから“属性定義”をクリックすることで、開発者に属性を編集させることができる。
【００６７】
グリッドオブジェクトの場合、属性としては、まず何列分を表示できるか指定させる。図１０のグリッドオブジェクト１００２では、５列分である。更に、各列に対しての項目の見出し属性を定義させる。ここでは、左から項目１〜項目５を１００４ａ〜１００４ｅの通り、図４のｐｒｏｊｅｃｔＴａｂｌｅのデータ項目に対応する４０１〜４０５とする（Ｓ７０６）。結果は図１１のグリッドオブジェクト１００２のようになる。
【００６８】
Ｓ７０７において、プログラム開発装置は、その他のオブジェクトが選択されたかを判定して、選択された場合は、そのオブジェクトの配置し、定義を受け付け（Ｓ７０８）、ＳＳ７０９へ進む。その他のオブジェクトが選択されない場合は、そのままＳ７０９へ進む。
【００６９】
Ｓ７０９において、プログラム開発装置は、“アクション定義”が選択されたかを判定する。具体的には、図１１におけるメニュー６００から、“アクション定義”が選択されたかを判定する。Ｙｅｓの場合、Ｓ７１０へ進み、Ｎｏの場合、Ｓ７１１へ進む。“アクション定義”が選択される際にオブジェクト定義フィールド６０１でフォーカスされているオブジェクトに対して、開発者にアクション定義を編集させることができる。
【００７０】
図１１を用いて、アクション定義の説明をする。図１１は、開発画面におけるボタンオブジェクトとクエリ定義の関連付けの一例である。
【００７１】
図１１は、顧客検索ボタン１１０１（オブジェクトＩＤはｂｕｔｔｏｎ１）にフォーカス（１１０８）し、メニューの“アクション定義”を選択して、定義設定フィールド６０３にアクション定義のために必要な入力項目が表示された状態を示している。
【００７２】
具体的には、クエリＩＤ定義フィールド１１０３、パラメータ定義フィールド１１０４、表示ターゲット定義フィールド１１０５に必要な項目を指定する。
【００７３】
図１１の例では、クエリＩＤ定義フィールド１１０３に“ＣＵＳＴＯＭ＿ＩＮＦＯ１”（後述する図１２のクエリ定義１２００ａ）を指定している。これにより、アクション定義時にフォーカスしているオブジェクト（本実施例では、顧客検索ボタン１１０１、オブジェクトＩＤはｂｕｔｔｏｎ１）が、アプリケーション実行時にクリックされた場合には、“ＣＵＳＴＯＭ＿ＩＮＦＯ１”のクエリ定義に基づきＳＱＬ文が生成され、データベースを検索することが指定される。
【００７４】
パラメータ定義フィールド１１０４には、“：ＮＡＭＥ＝ｔｅｘｔｂｏｘ１”が指定されている。“ｔｅｘｔｂｏｘ１”は、顧客名テキストボックス１１０２としてのオブジェクトＩＤである。アプリケーションの実行時には、アプリケーションクライアント１０４の顧客名テキストボックス１１０２にユーザが入力した値を、クエリ定義のパラメータ値としてアプリケーションサーバ１０５に渡すことを意味している。図１２のクエリ定義１２００ａでは、“：ＮＡＭＥ”にパラメータ値が設定される。
【００７５】
表示ターゲット定義フィールド１１０５には、“ｇｒｉｄ１”が設定されている。これは、グリッドオブジェクト１００２のオブジェクトＩＤであり、アプリケーションサーバ１０５から受信したデータベース検索結果の表示先を指定する。
【００７６】
各オブジェクトの属性定義においては、必要に応じて、開発者がオブジェクトＩＤを指定できる（不図示）。グリッドオブジェクトにおいては、各列も１つのオブジェクトとして定義され、従って各列にオブジェクトＩＤを付与できる。例えば、検索結果のデータ項目名（カラム名）は、対応するオブジェクトＩＤを持つテキストボックスや、グリッドオブジェクトの列に表示されるよう設定可能である。
【００７７】
なお、本実施例では、顧客検索ボタン１１０１のアクション定義に、クエリ定義を１つだけ対応付けているが、複数対応付けてもよい。その結果、１つのボタンをクリックすると、２つの異なるデータベース検索が実行され、異なるターゲットに結果を表示することも可能である。
【００７８】
また、詳細の説明は省略するが、後述のアプリケーションを実行する例で使用するため、図１１においてアクション定義をもう１つ定義する。
【００７９】
まず、期間検索ボタン１００５に対応づけて、クエリＩＤとしては、図１３の“ＰｒｏｊｅｃｔＴｅｒｍ１”、開始日テキストボックス１１０６の値をパラメータ“：ｓｔａｒｔ”、終了日テキストボックス１１０７の値をパラメータ“：ｅｎｄ”とする。更に、データベース検索結果をｇｒｉｄ１に表示させるとするアクション定義である。
【００８０】
Ｓ７１１において、プログラム開発装置は、メニューの“クエリ定義”が選択されたかを判定する。具体的には、図１１におけるメニュー６００から、“クエリ定義”が選択されたかを判定する。Ｙｅｓの場合、Ｓ７１２へ進み、Ｎｏの場合、Ｓ７１３へ進む。クエリ定義を開発するためには、図１１の開発画面とは別の画面（図１２、図１３を参照）が表示される。すなわちクエリ定義画面自体は、画面の開発からは独立しており、前述のアクション定義とクエリ定義を関連付けることによって利用される。すなわち、本フローチャートにおいて、メニュー６００からクエリ定義のみ開発者に開発させる（Ｓ７１２のみを実行する）ことが可能である。また後からアクション定義と関連付けたり、他の画面開発時に、別の画面用に作成したクエリ定義を再利用したりすることも可能である。クエリ定義については、図１２、図１３、図２０を用いて説明する。
【００８１】
図１２、図１３、図２０は、クエリ定義を開発する画面の一例である。
【００８２】
図１２のクエリ定義１２００ａ、１２００ｂの例は、顧客名を指定して図４のデータベースのテーブルを検索する例である。
【００８３】
クエリ定義開発画面は、クエリＩＤ定義領域１２０１と、クエリ定義記述領域１２０２から構成される。いずれの領域も、開発者により入力される。
【００８４】
クエリＩＤ定義領域１２０１は、クエリ定義を特定するためのＩＤであり、クエリ定義１２００ａの例では、アクション定義時に図１１のクエリＩＤ定義フィールド１１０３で指定した“ＣＵＳＴＯＭ＿ＩＮＦＯ１”が、指定されている。このようにクエリＩＤにより、アクション定義とクエリ定義が対応づけられる。
【００８５】
クエリ定義記述領域１２０２には、ＳＱＬ文を生成するための情報として、少なくとも“ＳＱＬ文基本定義”と、必要に応じて“条件句生成定義”が記載される。ＳＱＬ文基本定義はＳＱＬ文として単独で実行することが可能な形式を満たしている。一方、条件句生成定義は、ＳＱＬ文基本定義を単独でＳＱＬ文として実行すると、アプリケーションの要件に適さないデータベース検索結果が得られてしまう状況を防ぐため、アプリケーション実行時に動的に条件句を生成しＳＱＬ文基本定義に連結して使用するための、条件句を生成する手続きが記載される。
【００８６】
クエリ定義１２００ａでは、“ｓｅｌｅｃｔ  ＊  ｆｒｏｍ  ｐｒｏｊｅｃｔＴａｂｌｅ”がＳＱＬ文基本定義として記載されている。
【００８７】
条件句生成定義には３行の記載があるが、行頭に“−−＃”という記載があるスクリプト部分と、条件句として“ｗｈｅｒｅ  顧客名＝：ＮＡＭＥ”と、が記載されている。スクリプト部分には条件判定を記載され、これにより処理の流れが分岐する。“：ＮＡＭＥ”のように“：”が先頭に付与されている文字列は、パラメータであり、図１１のパラメータ定義フィールド１１０４の記述に対応する。すなわち、顧客名テキストボックス１１０２（ｔｅｘｔｂｏｘ１）に入力された値が、“：ＮＡＭＥ”に設定され、スクリプト部分および条件句において使用される。
【００８８】
クエリ定義１２００ｂは、ＳＱＬ文基本定義のみが記載されたクエリ定義の例である。図１３のクエリ定義１３００ａ、１３００ｂの例は、開始日、終了日を指定して図４のデータベースのテーブルを検索する例である。
【００８９】
図１３のクエリ定義１３００ａ、１３００ｂでは、さらに複雑な条件句生成定義が記載可能であることを示す。スクリプト部分の条件判定は、入れ子（１３００ａの３行目と５行目など）の記載が可能である。また、スクリプト部分を最初から最後まで実行するにあたり、条件判定が複数存在する記載も可能である（１３００ｂの３〜７行目と９〜１３行目）。
【００９０】
図２０のクエリ定義２０００の例では、ＳＱＬ基本定義にテーブル名（ｆｒｏｍ句の後に記述する）も、条件判定の中に記載されてもよいことを示している（４行目）。これにより、例えばアプリケーションクライアントにおいて、ユーザに選択されたボタンによって、異なるテーブルを検索するようにすることも可能である。また、１５行目、２３行目のように、条件句が必ずしも条件判定の中に含まれていなくともよい。後述の通り、条件句生成定義は、先頭行から最終行まで、順に実行され、その中で条件判定がある場合には、条件分岐して選択される条件句（条件句部品）とそうでないものがあることになる。
【００９１】
Ｓ７１３において、プログラム開発装置は、現在開発中の画面にアクション定義があるかどうかを判定する。具体的には、Ｓ７１０において、アクション定義が作成されているかどうかを判定する。Ｙｅｓの場合、Ｓ７１４へ進み、Ｎｏの場合、図１４のフローチャートを完了する。
【００９２】
Ｓ７１４において、図１４のフローチャートで記載のプログラムが呼び出され、実行される。
【００９３】
図１４は、アプリケーションクライアント画面上の指示オブジェクトに対応付けるイベント処理を生成するフローチャートの一例である。
【００９４】
アプリケーションの実行時に、アプリケーションクライアント１０４の画面上において、ユーザの操作（マウスクリックなど）による指示オブジェクト（ボタンなど）のイベントが発生すると、そのイベントに対応するイベント処理が実行される。このイベント処理により、アプリケーションサーバ１０５に対してデータベース検索要求を発行するために必要なパラメータ値を収集するなどの準備がなされる。
【００９５】
前記の処理は、指示オブジェクトに対応するアクション定義（Ｓ７１０で設定したアクション定義）に基づいて生成され、画面内に組み込まれる。前記イベント処理を生成するための処理が図１４のフローチャートである。
【００９６】
本実施の形態において、イベント処理は、図１４のフローチャート、すなわちプログラム開発装置１０１において生成されるものとするが、他の構成として、プログラム開発サーバ１０２で生成してもよいし、実行時にアプリケーションサーバ１０５において生成してもよい。
【００９７】
Ｓ１４０１において、プログラム開発装置は、指示オブジェクト（図１１のアクション定義の例では顧客検索ボタン１１０１）のオブジェクトＩＤ（“ｂｕｔｔｏｎ１”）を取得する処理を生成する。すなわち、ユーザがマウスクリックした場合（グラフィカルユーザインタフェース（ＧＵＩ）上でイベントが発生した場合）、当該指示オブジェクトのオブジェクトＩＤ（“ｂｕｔｔｏｎ１”）を取得する処理の生成である。
【００９８】
Ｓ１４０２からＳ１４０７は、指示オブジェクトに対応付けられたクエリ定義のクエリＩＤに対する処理を生成するループである。前述の通り、１つのオブジェクトに対応するアクション定義には、複数のクエリ定義を対応付け可能なためである。
【００９９】
Ｓ１４０３において、プログラム開発装置は、着目中のクエリＩＤを生成中の本処理に保持するためのコードを生成する。
【０１００】
Ｓ１４０４からＳ１４０６は、Ｓ１４０５において着目中のクエリＩＤに引き渡すパラメータ値を取得するためのループである。
【０１０１】
Ｓ１４０５において、プログラム開発装置は、図１１のパラメータ定義フィールド１１０４で設定したオブジェクトＩＤに対応するオブジェクト（アプリケーション実行時にユーザが“顧客名テキストボックス１１０２”に設定した値）を取得するためのコードを生成する。
【０１０２】
パラメータ定義フィールド１１０４で、複数のパラメータとオブジェクトＩＤを指定した場合には、Ｓ１４０５は、その数だけ繰り返される。すなわち、複数のテキストボックスなどのオブジェクトからパラメータ値を取得するコードが生成される。
【０１０３】
Ｓ１４０８において、プログラム開発装置は、前記取得したクエリＩＤ、オブジェクトＩＤ、パラメータの値を、検索要求発行部に渡すための処理を生成する。
【０１０４】
Ｓ１４０９において、プログラム開発装置は、Ｓ１４０１〜Ｓ１４０８で生成した各処理を、一連の処理として連結する。
【０１０５】
以上で図１４のフローチャートについての説明を完了する。すなわち図７のＳ７１４を完了する。これにより図７のフローチャートについての説明も完了する。また、図５のＳ５０６が完了し、Ｓ５０７に進む。
【０１０６】
Ｓ５０７において、プログラム開発装置は、登録の指示がなされたかを判定する。Ｙｅｓの場合、Ｓ５０８に進み、Ｎｏの場合、Ｓ５０６に戻り開発を継続する。ここでは、具体的には、図１１に示す登録ボタン６０４が選択されたかを判定する。
【０１０７】
Ｓ５０８において、プログラム開発装置は、プログラム開発サーバに対して開発された画面の定義、アクション定義、クエリ定義を登録する指示を行う。
【０１０８】
Ｓ５０９において、プログラム開発サーバは、プログラム開発装置から指示された、開発された画面の定義、アクション定義、クエリ定義の登録指示を受け付ける。
【０１０９】
Ｓ５１０において、プログラム開発サーバは、前記プログラム開発装置から指示された、開発された画面の定義、アクション定義、クエリ定義の登録処理を実施する。ここで、開発された画面の定義、アクション定義、クエリ定義の登録処理は、プログラム開発サーバが管理する記録媒体に保存、記憶されることになる。また、再度、図５のフローチャートを実行する際に、保存した前記定義を呼び出して、定義の追加、変更、削除などを行うことも出来る。Ｓ５１０において登録された前記定義を、アプリケーションサーバに配置（コピーなど）することにより、アプリケーションとして実行することが可能となる。ただし、プログラム開発サーバとアプリケーションサーバが同一の情報処理装置であってもよく、また前記定義の登録先がアプリケーションサーバである場合には、定義の配置（コピーなど）をしなくてもよい。
【０１１０】
アプリケーションサーバには、前記画面の定義、アクション定義、クエリ定義を解釈、実行するプログラムがあらかじめ格納されている。前記プログラムは、アプリケーションクライアント（クライアント装置）のユーザの操作に応じて、前記定義された画面を表示し、アクション定義、クエリ定義に従ってデータベースを検索した結果を、アプリケーションクライアントに表示する。前述の通り、例えば検索結果のデータ項目名（カラム名）は、対応するオブジェクトＩＤを持つテキストボックスや、グリッドオブジェクトの列に表示されるよう設定し、アプリケーションの実行時に表示を制御することが可能である。
以上で、図５の処理の流れの説明が完了した。
【０１１１】
次に、開発されたアプリケーション画面を用いて、一般のユーザがデータベース検索を行う際の、処理の流れを説明する。
【０１１２】
図１５は、本発明の実施の形態におけるデータベース検索画面の要求から、検索結果の表示までの流れを示すフローチャートである。
【０１１３】
ここで、アプリケーションのユーザは、アプリケーションクライアントを操作して、アプリケーション画面の表示を行う。アプリケーション画面は、画面データとして取得するものであり、ブラウザ等に表示されるものである。
【０１１４】
Ｓ１５０１において、アプリケーションクライアントは、アプリケーションサーバに対してアプリケーション画面（画面データ）を要求する。
【０１１５】
Ｓ１５０２において、アプリケーションサーバは、画面の要求を受け付ける。
【０１１６】
Ｓ１５０３において、アプリケーションサーバは、アプリケーションクライアントにおいて、データベース検索のために、ユーザが検索条件を入力し、検索要求を発行するための画面データを、アプリケーションクライアントに送信する。この画面には、図１４で生成した処理、すなわちユーザが検索要求を実施した際に発生するイベントに対応する処理が含まれている。
【０１１７】
Ｓ１５０４において、アプリケーションクライアントは、画面データを受信する。
【０１１８】
Ｓ１５０５において、アプリケーションクライアントは、ユーザの入力を受け付ける。ここでユーザの入力とは、データベース検索条件となるテキストボックスへの値の入力であり、また、前記入力が終わった際には、検索要求をするためのボタンのクリックなどである。
【０１１９】
Ｓ１５０６において、アプリケーションクライアントは、図１４で生成されたイベント処理を実行する。例えば、図１１の顧客検索ボタン１１０１がクリックされた場合には、顧客名テキストボックス１１０２に前記ユーザが入力した値をパラメータ値として取得する。さらに、本イベント処理のコードの一部に組み込まれているクエリＩＤ（アクション定義時に、クエリＩＤ定義フィールド１１０３フィールドで定義された値）などを次のＳ１５０７に引き渡す。
【０１２０】
Ｓ１５０７において、Ｓ１５０６から受け取ったパラメータ値、クエリＩＤを含むデータベース検索要求をアプリケーションサーバに発行する。
【０１２１】
Ｓ１５０８において、アプリケーションサーバは、データベース検索要求を受け付ける。
【０１２２】
Ｓ１５０９において、アプリケーションサーバは、データベース検索要求に基づき、ＳＱＬ文生成を実施する。ＳＱＬ文の生成について、図１６のフローチャートを用いて説明する。
【０１２３】
図１６は、本発明の実施の形態におけるＳＱＬ文を生成するフローチャートの一例である。
【０１２４】
Ｓ１６０１において、アプリケーションサーバは、データベース検索要求に含まれるクエリＩＤに基づき記憶されたクエリ定義を取得する。
【０１２５】
Ｓ１６０２において、アプリケーションサーバは、前記クエリ定義から、ＳＱＬ文基本定義を取得し、文字列として文字列変数に記憶する。
【０１２６】
Ｓ１６０３において、アプリケーションサーバは、前記クエリ定義に、条件句生成定義の行に記載があるか判断する。行の記載があれば、Ｓ１６０４に進む。なければＳＱＬ文生成を終了する。この場合、既に生成されているＳＱＬ文が、図１５のＳ１５０９への生成結果として返される。
【０１２７】
Ｓ１６０４において、アプリケーションサーバは、条件句生成を実施する。条件句生成について、図１７のフローチャートを用いて説明する。
【０１２８】
図１７は、本発明の実施の形態における条件句または条件句部品を生成するフローチャートの一例である。
【０１２９】
条件句生成定義のうち、行頭に“――＃”がある部分はスクリプト部分であり、スクリプト部分に記載された条件判定の結果に従って、条件分岐のうち選択された分岐に進む。選択された分岐内には、ＳＱＬ文の条件句または条件句部品となる文字列が記載されている。
【０１３０】
Ｓ１７０１において、アプリケーションサーバは、条件句生成定義から１行取得する。
【０１３１】
Ｓ１７０２において、アプリケーションサーバは、Ｓ１７０１で取得した行の内容がスクリプト部分か、条件句（条件句部品）かを判定する。“Ｙｅｓ”の場合、Ｓ１７０３に進む。“Ｎｏ”の場合、Ｓ１７０５に進む。
【０１３２】
Ｓ１７０３において、アプリケーションサーバは、前記取り出したスクリプト部分により条件判定を行う。条件判定の結果が“Ｔｒｕｅ”であれば、Ｓ１７０４に進む。“Ｆａｌｓｅ”であれば、図１７のフローチャートを終了する。
【０１３３】
Ｓ１７０４において、アプリケーションサーバは、条件判定の結果、選択された分岐内に記載された文字列を取り出す。例えば、クエリ定義２０００の９行目は、“：ｓｔａｒｔ”が“ＮＵＬＬ”である場合は“Ｔｒｕｅ”となり、１０行目のｗｈｅｒｅ句が文字列として取り出される。この文字列が、図１６のＳ１６０４の結果となる。
【０１３４】
Ｓ１７０５において、アプリケーションサーバは、Ｓ１７０１で取得した文字列を条件句（条件句部品）とする。例えば、クエリ定義２０００の１５行目、２３行目のように条件分岐の中に入らない行が処理される。この文字列が、図１６のＳ１６０４の結果となる。
【０１３５】
なお、Ｓ１７０３で“Ｆａｌｓｅ”である場合には、ＮＵＬＬ文字列（“”）が結果として返されると考えてよい。
以上で、図１７のフローチャートの説明を完了する。
【０１３６】
Ｓ１６０５において、アプリケーションサーバは、Ｓ１６０２で取得、記憶したＳＱＬ文基本定義と、Ｓ１６０４で生成した条件句を連結して改めて記憶し、Ｓ１６０３に戻る。
【０１３７】
再度Ｓ１６０３に進んできた場合には、前記条件句生成定義のうち、既にスクリプト部分として終了している次のステップから開始する。次のステップがある場合には、“Ｙｅｓ”としてＳ１６０４に進む。次のステップがない場合、すなわち、スクリプト部分の実行を最後まで終えている場合には、“Ｎｏ”として終了する。
【０１３８】
クエリ定義１２００ａでは、“：ＮＡＭＥ＝ＮＵＬＬ”の場合は、ＳＱＬ文基本定義である“ｓｅｌｅｃｔ  ＊  ｆｒｏｍ  ｐｒｏｊｅｃｔＴａｂｌｅ”自体が生成されたＳＱＬ文である。
【０１３９】
また、“：ＮＡＭＥ”の値が、“カトーモーターズ”である場合には、“ｓｅｌｅｃｔ  ＊  ｆｒｏｍ  ｐｒｏｊｅｃｔＴａｂｌｅ  ｗｈｅｒｅ  顧客名＝‘カトーモーターズ’”が生成されたＳＱＬ文である。
【０１４０】
また、Ｓ１６０３〜Ｓ１６０５が繰り返し生成される場合があるが、この時、Ｓ１６０５では、既に連結されたＳＱＬ文（文字列）に、更に連結し、記憶する処理を繰り返していく。例えば、１回目は、１回目に生成された条件句（条件句部品）を、ＳＱＬ文基本定義に連結し記憶する。さらに２回目に条件句（条件句部品）が生成された場合には、ＳＱＬ文基本定義および１回目と２回目に生成された条件句（条件句部品）をすべて連結したものが記憶されることになる。また、このループは、クエリ定義の行が最後に到達するまで繰り返すものである。
【０１４１】
以上で、図１６のフローチャートの説明を完了する。図１５のＳ１５０９が完了した時点（ＳＱＬ文が生成された時点）に説明を戻す。Ｓ１５０９においてＳＱＬ文生成が完了すると、Ｓ１５１０に進む。
【０１４２】
Ｓ１５１０において、アプリケーションサーバは、Ｓ１５０９において生成されたＳＱＬ文を、データベースサーバに発行する。
【０１４３】
Ｓ１５１１において、データベースサーバは、発行されたＳＱＬ文を実行する。
【０１４４】
Ｓ１５１２において、データベースサーバは、ＳＱＬ文の実行結果をアプリケーションサーバに送信する。
【０１４５】
Ｓ１５１３において、アプリケーションサーバは、データベースサーバからＳＱＬ文の実行結果を受信する。
【０１４６】
Ｓ１５１４において、アプリケーションサーバは、ＳＱＬ文の実行結果を、アプリケーションクライアントの表示制御部がアプリケーションクライアントに表示可能な画面データとして送信する。
【０１４７】
Ｓ１５１５において、アプリケーションクライアントは、ＳＱＬ文の実行結果を、画面データとして受信する。
【０１４８】
Ｓ１５１６において、アプリケーションクライアントは、ＳＱＬ文の実行結果として受信した画面データを、アクション定義において指定されたターゲット内に表示する。
【０１４９】
Ｓ１５１７において、アプリケーションクライアントは、データベース検索のための画面データ表示に対する終了指示を受け付けたかどうかを判定する。具体的には、ユーザの操作により、他の検索画面に移行する、他のアプリケーションに移行する、Ｗｅｂブラウザを閉じる、などにより判定する。判定が“Ｙｅｓ”の場合には、データベース検索のための画面データ表示を終了する。“Ｎｏ”の場合には、Ｓ１５０５に進み、再度データベース検索条件の入力、検索要求のイベント発行のための操作をユーザから受け付ける。
【０１５０】
なお、Ｓ１５１４〜Ｓ１５１６では、アプリケーションサーバが、ＳＱＬ検索結果を画面データとしてアプリケーションクライアントに送信し、アプリケーションクライアントにおいて、指定されたターゲットに検索結果の値を当てはめている。これは、例えばＡｊａｘにより画面遷移を伴わない動的なＷｅｂアプリケーション画面を提供することで、アプリケーションクライアントにおいて、アプリケーションサーバと非同期通信を実現できることによる。別の方法として、アプリケーションサーバにおいて、指定されたターゲットに対する検索結果の値の当てはめまで行った画面データを生成し、その画面データをアプリケーションクライアントに送信しても良い。
【０１５１】
以上で、図１５のフローチャートの説明を完了する。すなわちアプリケーションの実行の流れについて、説明を完了する。
【０１５２】
以下、図４のデータベースのテーブル“ｐｒｏｊｅｃｔＴａｂｌｅ”、図１１の画面定義、図１２、図１３のクエリ定義を用いて、検索の実行例を説明する。
【０１５３】
また、図１８の１８００ａ〜ｃ、図１９の１９００ａ〜ｄは、検索結果として図１１のグリッドオブジェクト１００２に表示されるものである。
【０１５４】
さらに、検索条件として、ユーザは、顧客名テキストボックス１１０２（顧客検索をする場合）、開始日テキストボックス１１０６、終了日テキストボックス１１０７（期間検索をする場合）に、値を入力するものとする。
【０１５５】
顧客名テキストボックス１１０２に“カトーモーターズ”と入力し、顧客検索ボタン１１０１をクリックすると、図１８の１８００ａが検索結果として表示される。これは、アクション定義に対して、図１２のクエリ定義１２００ａ、１２００ｂのいずれが指定されていても同じである。
【０１５６】
クエリ定義１２００ａの場合には、パラメータ値“：ＮＡＭＥ”に顧客名テキストボックス１１０２の“カトーモーターズ”が渡される。このため、スクリプトの条件判定（３行目）において、“Ｔｒｕｅ”となる。ＳＱＬ文として、“ｓｅｌｅｃｔ  ＊  ｆｒｏｍ  ｐｒｏｊｅｃｔＴａｂｌｅ  ｗｈｅｒｅ  顧客名＝‘カトーモーターズ’”が生成されるからである。
【０１５７】
一方、クエリ定義１２００ｂの場合には、パラメータ値を代入すれば、ＳＱＬ文基本定義それ自体が“ｓｅｌｅｃｔ  ＊  ｆｒｏｍ  ｐｒｏｊｅｃｔＴａｂｌｅ  ｗｈｅｒｅ  顧客名＝‘カトーモーターズ’”になるからである。
【０１５８】
しかしながら、例えばユーザが、顧客名テキストボックス１１０２入力しない可能性もある（パラメータ値としてはＮＵＬＬまたは“”となる）。
【０１５９】
この場合、クエリ定義１２００ｂがアクション定義に指定されている場合には、図１８の１８００ｂが検索結果となる。生成されるＳＱＬ文は、“ｓｅｌｅｃｔ  ＊  ｆｒｏｍ  ｐｒｏｊｅｃｔＴａｂｌｅ  ｗｈｅｒｅ  顧客名＝ＮＵＬＬ”であり、案件番号がＰｒｊ０７であるデータがヒットする。
【０１６０】
しかしながら、ユーザが値を入力しない場合、例えば、入力されている全てのデータを表示するといった、アプリケーションの要件として、より効果的な結果を返すように制御することが出来る。
【０１６１】
このため、クエリ定義１２００ａでは、“：ＮＡＭＥ！＝ＮＵＬＬ”の場合のみ、条件句を生成することとしている。言い換えれば、“：ＮＡＭＥ＝＝ＮＵＬＬ”であれば、敢えて条件句を付けないままＳＱＬ文を生成する。すなわち、全てのデータを出力する“ｓｅｌｅｃｔ  ＊  ｆｒｏｍ  ｐｒｏｊｅｃｔＴａｂｌｅ”を生成するように、アクション定義にクエリ定義１２００ａを設定することができる。この場合、図１８の１８００ｃが検索結果となる。
【０１６２】
次に期間検索の例を用いて説明する。期間検索は、ユーザにプロジェクトの開始日と終了日を指定させ、指定の開始日以降に開始され、また指定の終了日以前に終了したプロジェクトをＡＮＤ条件で検索する。
【０１６３】
ここで、クエリ定義１３００ａ、１３００ｂで使用される“ＣＵＲＲＥＮＴ＿ＤＡＴＥ”は、ＳＱＬ文を処理する際の情報処理装置の現在日付を取得する、ＳＱＬ関数とし、現在日付を“２０１１−５−２０”（２０１１年５月２０日）と仮定する。また、“ＡＤＤ＿ＭＯＮＴＨＳ（ＣＵＲＲＥＮＴ＿ＤＡＴＥ、−６）”は、第１引数であるＣＵＲＲＥＮＴ＿ＤＡＴＥから６ヶ月前を意味し、すなわち“２０１０−１１−２１”（２０１０年１１月２１日）であると仮定する。
【０１６４】
まず、ユーザが、開始日に“２０１１−２−１”（２０１１年２月１日）、終了日に“２０１１−３−３１”（２０１１年３月３１日）を入力し、期間検索ボタン１００５をクリックした場合を考える。
【０１６５】
パラメータの値は、開始日は“：ｓｔａｒｔ”、終了日は“：ｅｎｄ”に渡される。
【０１６６】
図１３のクエリ定義１３００ａでは、ＳＱＬ文基本定義の“ｓｅｌｅｃｔ  ＊  ｆｒｏｍ  ｐｒｏｊｅｃｔＴａｂｌｅ”を取得する。
【０１６７】
条件句生成定義のスクリプト部分においては、“：ｓｔａｒｔ”に値が入っているため、３〜９行目までは実行されず、１０行目の“ｅｌｓｅ”の中の処理を実行する。“ｅｌｓｅ”の次の１１行目、“ｗｈｅｒｅ  ：ｓｔａｒｔ＜＝開始日”が取得され、ＳＱＬ文基本定義に連結される。パラメータ“：ｓｔａｒｔ”には、“２０１１−２−１”が代入される。
【０１６８】
さらに、“ｅｌｓｅ”中の入れ子の条件判定において、“：ｅｎｄ”に値が入っているため、１３行目の文字列は選択されず、１５行目の“＆  終了日＜＝：ｅｎｄ”が選択される。パラメータ“：ｅｎｄ”には、“２０１１−３−３１”が代入される。
【０１６９】
このように、ＳＱＬ文基本定義と、複数の条件句部品が連結して、“ｓｅｌｅｃｔ  ＊  ｆｒｏｍ  ｐｒｏｊｅｃｔＴａｂｌｅ  ｗｈｅｒｅ  ‘２０１１−２−１’＜＝開始日  ＆  終了日＜＝‘２０１１−３−３１’”が生成される。
【０１７０】
一方、クエリ定義１３００ｂでは、“ｉｆ〜ｅｌｓｅ”が入れ子の構文にはなっておらず、３行目〜７行目と、９行目〜１３行目の２つの“ｉｆ〜ｅｌｓｅ”が並列にある。それぞれ、前者は開始日、後者は終了日の条件句部品を生成する処理となっている。
【０１７１】
以降でも、ＳＱＬ文の生成過程は特に説明しないが、クエリ定義１３００ａ、クエリ定義１３００ｂは、記載方法は異なるが、パラメータの値が同じであれば、同じＳＱＬ文を生成する例としてあげている。
【０１７２】
前述のＳＱＬ文による図４の“ｐｒｏｊｅｃｔＴａｂｌｅ”を検索した結果は、図１９の１９００ａとなる。ユーザが指定した開始日、終了日の条件を満たすプロジェクトのみがヒットする。
【０１７３】
次に、ユーザが終了日を指定しなかった場合を説明する。本発明の実施の形態による、条件句生成定義、および条件句生成の仕組みがなければ、“ｓｅｌｅｃｔ  ＊  ｆｒｏｍ  ｐｒｏｊｅｃｔＴａｂｌｅ  ｗｈｅｒｅ  ：ｓｔａｒｔ＜＝開始日  ＆  終了日：＜＝ｅｎｄ”というＳＱＬ文が定義され、開始日が２０１１年２月１日の条件は満たすが、終了日が“ＮＵＬＬ”である“Ｐｒｊ０７”がヒットするＳＱＬ文を実行することになる。
【０１７４】
さらに、開始日が２０１１年２月１日の条件を満たしているにもかかわらず、終了日が“ＮＵＬＬ”ではないため、Ｐｒｊ０５、Ｐｒｊ０６はヒットしない。
【０１７５】
クエリ定義１３００ａ〜ｂによると、終了日が指定されていない場合でも、“ＣＵＲＲＥＮＴ＿ＤＡＴＥ”関数を用いる。そして、“ｓｅｌｅｃｔ  ＊  ｆｒｏｍ  ｐｒｏｊｅｃｔＴａｂｌｅ  ｗｈｅｒｅ  ‘２０１１−２−１’＜＝開始日  ＆  終了日＜＝‘２０１１−５−２０’”というＳＱＬ文を実行させる。従って、１９００ｂの検索結果が得られる。
【０１７６】
次に、ユーザが開始日を指定しなかった場合を説明する。この場合、条件句生成定義により、“ＡＤＤ＿ＭＯＮＴＨＳ（ＣＵＲＲＥＮＴ＿ＤＡＴＥ、−６）”、すなわち“２０１０−１１−２１”が開始日として設定される。これにより、開始日が“ＮＵＬＬ”であるデータがヒットすることなく、また開始日が６ヶ月以上古い（本アプリケーションの要件は、“最近６ヶ月以内”）データがヒットすることもなくなる。この結果、１９００ｃが検索結果として得られる。
【０１７７】
最後に、ユーザが、開始日も終了日も入力しなかった場合について説明する。この場合でも、開始日“２０１０−１１−２１”および終了日“２０１１−５−２０”となるように、条件句およびＳＱＬ文が生成され、１９００ｄが検索結果として得られる効果がある。
【０１７８】
以上のように、アプリケーションの要件として適切な既定値を用いた条件句を生成し、あるいは敢えて条件句を生成しないことにより、効果的な検索結果を取得することが出来る。
【０１７９】
すなわち、ユーザの入力状況を判断して、ＳＱＬ文基本定義だけを用いたＳＱＬ文や、条件句部品を動的かつ柔軟に組み合わせて、ＳＱＬ文を生成し、データベース検索結果を得ることが出来る。
【０１８０】
以上、図１２、図１３のクエリ定義から得られる検索結果の例の説明を完了する。
【０１８１】
なお、以上の説明では、アプリケーションサーバがクエリ定義のスクリプト部分を解釈しながら処理を進めた。他の実施例として、アプリケーションサーバは、クエリ定義からスクリプト（例えばＪａｖａＳｃｒｉｐｔ（登録商標））を生成し、スクリプト実行エンジンにスクリプトの処理を要求することで、ＳＱＬ文生成結果を取得するようにしてもよい。
【０１８２】
図２１は、クエリ定義に基づき生成されたスクリプトの例である。図２１のスクリプトは、図１３のクエリ定義１３００ａからスクリプトを生成した例である。
【０１８３】
スクリプトの生成においては、まず、変数“＄ｓｑｌ＿ｓｔｒｉｎｇ”を宣言すると同時に、ＳＱＬ文基本定義を代入する（１行目）。
【０１８４】
また、行頭に“――＃”がある行は、“――＃”を削除して、そのままスクリプトの１行とする（例えば３行目、５行目、７行目など）。
【０１８５】
さらに、条件句（条件句部品）が指定されていた行は、変数“＄ｓｑｌ＿ｓｔｒｉｎｇ”に既に代入されている文字列に、当該行で記述されている文字列を追加するスクリプトとする（例えば、６行目、８行目など）。
【０１８６】
さらに、クエリ定義におけるパラメータ（“：ｓｔａｒｔ”、“：ｅｎｄ”など）については、先頭の“：”を除いた部分（“ｓｔａｒｔ”、“ｅｎｄ”など）をスクリプトの変数として、データベース検索要求においてパラメータ値として受け付けた値を参照する。
【０１８７】
以上のようにスクリプトを生成した後、スクリプト実行エンジンによりＳＱＬ文を生成するが、その手続きは、図１６、図１７のフローチャートで説明したものと同様である。
【０１８８】
以上で、クエリ定義からスクリプトを生成し、そのスクリプトに基づきＳＱＬ文を生成する説明を完了する。
【０１８９】
なお、上述した各種データの構成及びその内容はこれに限定されるものではなく、用途や目的に応じて、様々な構成や内容で構成されることは言うまでもない。
【０１９０】
以上、一実施形態について示したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記録媒体等としての実施態様をとることが可能であり、具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【０１９１】
また、本発明におけるプログラムは、図５、図７、図１４〜図１７に示すフローチャートの処理方法をコンピュータが実行可能なプログラムであり、本発明の記憶媒体は図５、図７、図１４〜図１７をコンピュータが実行可能なプログラムが記憶されている。なお、本発明におけるプログラムは図５、図７、図１４〜図１７の各装置の処理方法ごとのプログラムであってもよい。
【０１９２】
以上のように、前述した実施形態の機能を実現するプログラムを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記録媒体に格納されたプログラムを読出し実行することによっても、本発明の目的が達成されることは言うまでもない。
【０１９３】
この場合、記録媒体から読み出されたプログラム自体が本発明の新規な機能を実現することになり、そのプログラムを記憶した記録媒体は本発明を構成することになる。
【０１９４】
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク，ハードディスク，光ディスク，光磁気ディスク，ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＤＶＤ−ＲＯＭ，磁気テープ，不揮発性のメモリカード，ＲＯＭ，ＥＥＰＲＯＭ，シリコンディスク等を用いることができる。
【０１９５】
また、コンピュータが読み出したプログラムを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムの指示に基づき、コンピュータ上で稼働しているＯＳ（オペレーティングシステム）等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０１９６】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵ等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０１９７】
また、本発明は、複数の機器から構成されるシステムに適用しても、１つの機器からなる装置に適用してもよい。また、本発明は、システムあるいは装置にプログラムを供給することによって達成される場合にも適応できることは言うまでもない。この場合、本発明を達成するためのプログラムを格納した記録媒体を該システムあるいは装置に読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。
【０１９８】
さらに、本発明を達成するためのプログラムをネットワーク上のサーバ，データベース等から通信プログラムによりダウンロードして読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。
【符号の説明】
【０１９９】
１０１  プログラム開発装置
１０２  プログラム開発サーバ
１０３  データベース
１０４  アプリケーションクライアント
１０５  アプリケーションサーバ
３０１  表示制御部
３０２  要求発行部
３１１  要求受付部
３１２  クエリ定義取得部
３１３  ＳＱＬ文基本定義取得部
３１４  条件句生成定義取得部
３１５  代入部
３１６  条件句生成部
３１７  ＳＱＬ文生成部
３１８  ＳＱＬ文発行部
３１９  スクリプト生成部
３２１  クエリ定義記憶部
【図１】
2013025446.tif 000003
【図２】
2013025446.tif 000004
【図３】
2013025446.tif 000005
【図４】
2013025446.tif 000006
【図５】
2013025446.tif 000007
【図６】
2013025446.tif 000008
【図７】
2013025446.tif 000009
【図８】
2013025446.tif 000010
【図９】
2013025446.tif 000011
【図１０】
2013025446.tif 000012
【図１１】
2013025446.tif 000013
【図１２】
2013025446.tif 000014
【図１３】
2013025446.tif 000015
【図１４】
2013025446.tif 000016
【図１５】
2013025446.tif 000017
【図１６】
2013025446.tif 000018
【図１７】
2013025446.tif 000019
【図１８】
2013025446.tif 000020
【図１９】
2013025446.tif 000021
【図２０】
2013025446.tif 000022
【図２１】
2013025446.tif 000023