〔第1の実施形態〕
以下、本発明の実施の形態を、図面を参照して詳細に説明する。
図1は、本発明に係わるプログラム開発装置(開発者端末)、プログラム開発サーバ、データベースサーバ、アプリケーションクライアント(クライアント装置)、アプリケーションサーバの構成の一例を示すシステム構成図である(情報処理システム)。
プログラム開発装置101(情報処理装置)は、開発者の操作に従って画面レイアウトおよびデータベース検索指示などを定義する。プログラム開発装置101単体では、ユーザの入力受付を行い、後述するプログラム開発サーバ102に実際のプログラム生成処理、アプリケーション生成処理をさせてもよいし、プログラム開発装置101単体でプログラム生成、アプリケーション生成まで処理してもよい。
プログラム開発サーバ102a〜102b(情報処理装置)は、プログラム開発装置101により入力された開発者の指示に従って、プログラムを開発する。プログラム開発サーバ102aはLANなどのネットワーク106内に配置されてもよいし、プログラム開発サーバ102bはインターネット上やクラウド上に配置されてもよい。
データベースサーバ103a〜103b(情報処理装置)は、開発されたアプリケーションが使用するデータベースであり、また本発明では開発時にも動作確認などのために利用してもよい。例えば、開発者が利用するためにデータベースサーバ103は、プログラム開発装置101と同一の装置で構成されていてもよいし、LANなどのネットワーク106内に配置されてもよい(データベースサーバ103a)。またインターネット上やクラウド上に配置されてもよい(データベースサーバ103b)。また、プログラム開発装置101が、プログラム開発サーバ102と協調する場合には、プログラム開発サーバ102とデータベースサーバ103が同一の装置内に構成されていてもよい。
アプリケーションサーバ105a〜105b(情報処理装置)は、プログラム開発装置101で開発されたアプリケーションを実行する。LANなどのネットワーク106内に配置されてもよい(アプリケーションサーバ105a)し、またインターネット上やクラウド上に配置されてもよい(アプリケーションサーバ105b)。また、ネットワーク106、インターネット、クラウド上のデータベースサーバ103と接続して動作する可能である。
アプリケーションクライアント104a〜104b(情報処理装置)は、アプリケーションサーバ105と協調してプログラム開発装置101で開発したアプリケーションプログラムを動作させる、ユーザの入力端末である。LANなどのネットワーク106内に配置されてもよい(アプリケーションクライアント104a)し、またインターネット上やクラウド上に配置されてもよい(アプリケーションクライアント104b)。携帯端末などの情報処理装置であってもよい。
図2は、本発明に係わるプログラム開発装置、プログラム開発サーバ、データベースサーバ、アプリケーションクライアント、アプリケーションサーバとして適用可能な各ハードウェア構成の一例を示すブロック図である。
図2において、CPU201は、システムバス204に接続される各デバイスを統括的に制御する。
また、ROM203あるいは外部メモリ211には、CPU201の制御プログラムであるオペレーティングシステム(OS)や、各サーバ、クライアント、装置など情報処理装置の後述する各種機能を実現するためのプログラムが記憶されている。
RAM202は、CPU201の主メモリ、ワークエリア、一時待避領域等として機能する。
入力コントローラ205は、入力部209からの入力を制御する。この入力部209としては、情報処理装置では、キーボード、マウス等のポインティングデバイスが挙げられる。
出力コントローラ206は、出力部210の表示を制御する。この出力部210としては、例えば、CRTや液晶ディスプレイ等が挙げられる。
外部メモリコントローラ207は、ブートプログラム、各種のアプリケーション、フォントデータ、ユーザーファイル、編集ファイル、プリンタドライバ等を記憶する外部メモリ211へのアクセスを制御する。加えて、各サーバ、クライアント、装置等の各種機能を実現するための各種テーブル、パラメータが記憶されている。この外部メモリ211としては、ハードディスク(HD)やフレキシブルディスク(FD)、PCMCIAカードスロットにアダプタを介して接続されるコンパクトフラッシュ(登録商標)、スマートメディア等が挙げられる。
通信I/Fコントローラ208は、ネットワークを介して外部機器との通信制御処理を実行する。
本発明を実現するためのプログラム212は外部メモリ211に記録されており、必要に応じてRAM202にロードされることによりCPU201によって実行されるものである。
図3は、本発明の実施の形態のソフトウェア構成を示すブロック図の一例である。
アプリケーションサーバ105は、出力情報送信部311、入力情報受信部312、クエリ変更部313、データベース操作部314を備える。
出力情報送信部311は、プログラム生成部303により生成されたプログラムに含まれる出力定義情報を用いて、画面の出力情報を送信する機能部である。
入力情報受信部312は、出力情報送信部311により送信された出力情報を用いて出力された画面からの入力情報を受信する機能部である。
クエリ変更部313は、プログラム生成部303により生成されたプログラムに含まれる入力定義情報と、入力情報受信手段により受信した入力情報と、プログラム生成部303により生成されたプログラムに含まれるクエリとを用いて、当該クエリを変更する機能部である。
データベース操作部314は、クエリ変更手段により変更されたクエリを用いてデータベースを操作する機能部である。
プログラム開発装置101は、入出力定義管理部301、クエリ管理部302、プログラム生成部303、データモデル定義管理部304、テスト値設定受付部305、クエリ表示部306、テスト操作部307、実行結果取得部308、実行結果表示部309、出力情報生成部310、画面表示部321、テストクエリ変更部322を備える。
入出力定義管理部301は、画面からの入力を受け付けるための入力定義情報と、データベースのデータを含む画面を出力するための出力定義情報とを管理する機能部である。
クエリ管理部302は、データベースの操作に用いるクエリを管理する機能部である。
プログラム生成部303は、入出力定義管理部301により管理される入力定義情報と出力定義情報と、クエリ管理部302により管理されるクエリとを含むプログラムを生成する機能部である。
クエリ変更部313は、クエリ管理部302に管理されるクエリに含まれるパラメータに対応する入力情報の値に従って、当該クエリを変更する機能部である。
クエリ変更部313は、クエリに含まれるパラメータを当該パラメータに対応する入力情報の値を用いて置換する機能部である。
クエリ変更部313は、パラメータの値が空または取得できなかった場合、当該クエリの当該パラメータを含む行を削除または無効化する機能部である。
クエリ変更部313は、クエリにおけるパラメータの前または/かつ後に所定の文字列が存在する場合、当該所定の文字列に従って、当該クエリを変更する機能部である。
データモデル定義管理部304は、クエリ管理部302に管理されるクエリを用いて取得されたデータをデータモデルとして利用するためのデータモデル定義を管理する機能部である。
テスト値設定受付部305は、クエリ管理部302に管理されるクエリに含まれるパラメータに対して、テストする値の設定を受け付ける機能部である。
テストクエリ変更部322は、テスト値設定受付部305により受け付けたテスト値に従って、当該クエリを変更する機能部である。
クエリ表示部306は、テスト値設定受付部305により設定を受け付けた値を識別してテストクエリ変更部322により変更されたクエリを表示する、クエリ管理部302に管理されるクエリと当該クエリに含まれるパラメータの近傍にテスト値設定受付部305により設定を受け付けた値とを表示する、およびクエリ管理部302に管理されるクエリをテスト値設定受付部305によりNULL値の設定されたパラメータを含む当該クエリの行を取消線で取り消して表示する、表示方法のうち少なくとも1つの表示方法を用いて表示する機能部である。
テスト操作部307は、テストクエリ変更部322により変更されたクエリを用いて、テストとしてクエリを実行するために、コミットせずにデータベースを操作する機能部である。
実行結果取得部308は、テスト操作部307によりデータベースから出力されたクエリ実行結果を取得する機能部である。
実行結果表示部309は、実行結果取得部308により取得されたクエリ実行結果を表示する機能部である。
出力情報生成部310は、実行結果取得部308により取得されたクエリ実行結果と部30は、機能部である。出力定義情報とを用いて、画面の出力情報を生成する機能部である。
画面表示部321は、出力情報生成手段により生成された出力情報を用いて、画面を表示する機能部である。
図4は、プログラムを生成するプログラム開発装置101の構成図である。このプログラム開発装置101は、ユーザが定義した定義ファイルをもとにWebアプリケーションを的に生成することを目的とした装置である。
プログラム開発装置101は、リポジトリ定義部400およびプログラム生成部410により構成される。リポジトリ定義部400は、データベース定義401、アプリケーション定義402、データモデル定義403、SQL文定義404、入出力定義405、パラメータ・名前関連付け定義406により構成される。データベース定義401、アプリケーション定義402、データモデル定義403、入出力定義405は、開発者によって作成される定義ファイルであり、作成された定義ファイルは図5に示すツリー構造で表示される。
SQL文定義404は、データモデル定義403の一部にあたる。同様にパラメータ・名前関連付け定義406は、入出力定義405の一部にあたる。アプリケーション定義402は、入出力定義405と関連する。入出力定義405は、データモデル定義403と関連する。データモデル定義403は、データベース定義401と関連する。
すなわち、SQL文定義404は、データベースの操作に用いるクエリを管理する手段の一例を示す機能部である。また、入出力定義405は、画面からの入力を受け付けるための入力定義情報と、データベースのデータを含む画面を出力するための出力定義情報とを管理する手段の一例を示す機能部である。
なお、この実施形態においては、入力定義と出力定義をまとめて入出力定義405としたが、これに限定するものではなく、入力定義と出力定義とを別々に定義し、それぞれを画面と対応づけるとしてもよい。
また、この実施形態においては、入出力定義405はデータモデル定義403と関連し、SQL文定義404はデータモデル定義403の一部にあたるとしたが、これに限定するものではなく、入出力定義405とSQL文定義404とが直接関連するとしてもよい。その場合、画面毎・機能毎に異なるSQLを作成することになってしまい、同じテーブルを操作するSQL文が複数できてしまうため、図4の構成が望ましい。
また、この実施形態において、プログラム開発装置101は、プログラムを生成し、そのプログラムを用いてアプリケーションを生成する情報処理装置としたが、これに限定するものではなく、プログラム開発装置101で生成したプログラムやアプリケーションが、プログラム開発装置101で動作するとしてもよい。つまり、プログラム開発装置101において開発しながら稼働テストを行うように、プログラムやアプリケーションを生成する装置と、そのプログラムやアプリケーションが動作する装置とが同じ端末であってもよい。
また、この実施形態において、プログラム開発装置101は、プログラムを生成し、そのプログラムを用いてアプリケーションを生成する情報処理装置としたが、これに限定するものではなく、プログラム開発装置101で生成したプログラムを用いて、異なる端末(例えば、プログラム開発サーバ102やアプリケーションサーバ105)がアプリケーションを生成するとしてもよい。つまり、プログラムを生成する装置と、そのプログラムを用いてアプリケーションを生成する装置とが異なる端末であってもよい。
また、この実施形態において、プログラム開発装置101は、Webアプリケーションのプログラムを生成する装置としたが、Webアプリケーションに限定するものではなく、画面から受け取った入力情報を用いて、データベースの操作に用いるクエリを変更するアプリケーションであれば、クライアント・サーバ型のアプリケーション、スマートフォンやタブレット型PC等で動作するアプリケーション、または、その他の形式のアプリケーションであってもよい。
プログラム生成部410は、プログラム生成エンジン411、SQL文変換ルール412、コンパイルエンジン413により構成される。プログラム生成エンジン411は、内部に組み込まれたSQL文変換ルール412の仕様に従ったプログラムを生成する。すなわち、プログラム生成エンジン411は、入出力定義405により管理される入力定義情報と出力定義情報と、SQL文定義404により管理されるクエリとを含むプログラムを生成する手段の一例を示す機能部である。
プログラム生成部410は、プログラム420を出力する。プログラム420は、プログラムソースコード421で構成される。プログラムソースコード421には、ユーザによって画面から入力されたパラメータに応じて動的に変更されるSQL文(動的変更SQL文422)が含まれている。
すなわち、SQL文変換ルール412と動的変更SQL文422は、SQL文定義404により管理されるクエリに含まれるパラメータに対応する入力情報の値に従って、クエリを変更する手段の一例を示す機能部である。
プログラムソースコード421は、プログラム生成部410のコンパイルエンジン413によって、コンパイルされ、アプリケーション430となる。アプリケーション430は、データベース440に接続し、データベース440のデータを操作(例えば、検索・追加・更新・削除)する。
図5は、リポジトリ定義の一例を示す図である。ユーザが作成した定義ファイルは、500に示すようなツリー構造で表示される。
データベース定義401は、501に示すようにプロジェクト直下に保存される。アプリケーション定義402は、アプリケーションフォルダ502に保存される。データモデル定義403は、データモデルフォルダ503に保存される。入出力定義405は、入出力フォルダ505に保存される。
図6は、説明のために用意したデータベースのテーブルの例である。従業員テーブル601は、従業員の情報を管理するテーブルである。組織テーブル602は、従業員が所属する組織の情報を管理するテーブルである。2つのテーブルの関係性として、従業員はひとつの組織に所属し、1つの組織には複数の従業員が所属することを示している。従業員・組織結合テーブル603は、これら2つのテーブルを結合したテーブルである。
図7は、説明のために用意したデータと画面の関係性を説明する図である。上記で説明した従業員・組織結合テーブル703は、従業員一覧画面701および従業員詳細画面702から参照される。従業員一覧画面701は、従業員を検索して一覧表示する画面であり、検索パラメータと条件が一致するレコードを従業員・組織結合テーブル703から取得して表示する。従業員詳細画面702は、従業員IDをパラメータとして、単一の従業員の情報を従業員・組織結合テーブル703から取得して表示する。
図8は、データベース定義画面の一例を示す図である。データベース定義画面800は、データベース定義を一覧で表示するビュー801と各定義を詳細表示するビュー802で画面構成される。アプリケーションが接続するデータベースの情報は、この定義ファイルから読み取り、アプリケーション430のプログラムに反映される。
図9は、アプリケーション定義の基本設定画面の一例を示す図である。アプリケーション定義基本設定画面900は、アプリケーションコード901、アプリケーション名902、初期入出力コード903の項目を保持する。
アプリケーションコード901は、リポジトリ定義部400に保存される定義ファイル全体(以後、プロジェクトと呼ぶ)の中でアプリケーションを一意に特定するコードである。アプリケーション名902は、アプリケーションに対して、ユーザが任意に設定することができる名前で、ユーザがアプリケーションを特定しやすくする目的で設定する。初期入出力コード903は、アプリケーション430にユーザがアクセスした後、最初に表示する画面を示す入出力定義を設定する項目である。
図10は、アプリケーション定義の所属入出力画面の一例を示す図である。アプリケーション定義所属入出力画面1000は、入出力一覧1001と所属入出力1002、追加ボタン1003、削除ボタン1004により構成される。入出力一覧1001には、プロジェクトに存在する入出力定義405がすべて表示される。ユーザは、任意の入出力コードをひとつないし複数選択し、追加ボタン1003押下により所属入出力1002に設定することができる。所属入出力1002に設定されている入出力コードを選択し、削除ボタン1004を押下した場合は、所属入出力1002から選択した入出力定義が削除される。アプリケーション430は、所属入出力1002に設定されている入出力に範囲限定して生成される。
図11は、データモデル定義の基本設定画面の一例を示す図である。データモデル定義基本設定画面1100は、データモデルコード1101、データモデル名1102を保持する。データモデルコード1101は、プロジェクトの中でデータモデル定義を一意に特定するコードである。データモデル名1102は、データモデル定義に対して、ユーザが任意に設定することができる名前である。
なお、データモデル定義は、データベースのテーブルに1対1に対応する。この例では、「EMPLOYEE_DM」というデータモデルコードのデータモデルであり、これは、図6の例で説明した従業員テーブル601に対応する。データモデルは、接続するデータベースの情報を保持する。そのため、図4の構成図に示すようにデータモデル定義403は、データベース定義401と関連する。
すなわち、データモデル定義403は、SQL文定義404に管理されるクエリを用いて取得されたデータをデータモデルとして利用するためのデータモデル定義を管理する手段の一例を示す機能部である。
図12は、データモデル定義の項目一覧画面の一例を示す図である。データモデル定義項目一覧画面1200は、データモデル項目一覧1201を保持する。データモデル項目は、データベースのテーブルカラムに該当する。データモデル項目は、項目コード1202、名前1203、NULL可1204、キーグループ1205、桁数1206、小数桁1207、バイト数1208、加工式1209、データタイプ1210の各設定項目を保持する。
項目コード1202は、データモデル内のデータモデル項目を一意に特定するコードである。名前1203は、データモデル項目に対して、ユーザが任意に設定する名前である。ユーザがデータモデル項目を特定しやすくするために設定するものである。NULL可1204は、データモデル項目に登録するデータに対して空を許容するかどうかを設定する項目である。キーグループ1205は、データモデル項目一覧の中でキー値を保存する項目に対して、「1」を設定する項目である。つまり、テーブルカラムの主キーに該当する。
桁数1206は、データモデル項目に登録できるデータの桁数を設定する。小数桁1207は、データモデル項目のうち、数値を扱う項目で設定できる小数の桁数を設定する。加工式1209には、ユーザは任意の計算式を設定する。アプリケーションの画面表示時には、設定した計算式に従いデータを加工する。データタイプ1210は、データモデル項目のデータ型を設定する項目である。文字、数値、日付等、データの型を指定する。
図13は、組織DMのデータモデル定義の基本設定画面の一例を示す図である。データモデル定義基本設定画面1300の各項目は、データモデル定義基本設定画面1100(図11)と同様であるため説明を省略する。なお、組織DMは、図6の組織テーブル602に対応する。
図14は、組織DMのデータモデル項目一覧画面の一例を示す図である。データモデル項目一覧画面1400の各項目は、データモデル定義項目一覧画面1200(図12)と同様であるため説明を省略する。
図15は、従業員DMと組織DMを結合した従業員・組織結合DMのデータモデル定義の基本設定画面の一例を示す図である。データモデル定義基本設定画面1500の各項目は、データモデル定義基本設定画面1100(図11)、データモデル定義基本設定画面1300(図13)の説明と同様であるが、プロパティのdbQuery1503の値として、SQL文が設定されている。dbQuery1503は、図4のSQL文定義404にあたる。
従業員・組織結合DMには、このdbQuery1503に設定されたSQL文が実行された結果データがセットされる。この例では、dbQuery1503には図17のdbQuery1702で示すSQL文が設定されている。SQL文の中身としては、「EMPLOYEE_DM」テーブルと「DEPT_DM」テーブルを内部結合し、「EMP_ID」「EMP_NAME」「EMP_EMAIL」「EMP_POSITION」のカラム値によって、レコードの絞り込みを行っている。
なお、dbQuery1702には、開発者がSQL文を自由に記述することができる。そのSQL文の中には、「:employee_id」のようにコロンで始まる変数名を指定することができる。これの変数名の指定については、後述する図24で説明する。なお、dbQuery1702には、開発者がSQL文を自由に記述することができるとしたが、ユーザがSQL文を入力する際に、データモデル項目一覧画面1600の各項目(例えば項目コード1602)を用いて入力を補助する。例えば、ユーザから「SELECT」「UPDATE」「WHERE」等の文字列の入力を受け付けた場合、その後に、項目コード1602のカラム名を「,(カンマ)」「AND」「=」などの記号と共に自動出力する等により、入力を補助する。これにより、SQL文を入力する場合、操作を容易にすることができる。
図16は、従業員・組織結合DMのデータモデル項目一覧画面の一例を示す図である。データモデル項目一覧画面1600の各項目は、データモデル定義項目一覧画面1200(図12)、データモデル項目一覧画面1400(図14)と同様であるため説明を省略する。データモデル項目一覧画面1600の各項目には、図17のdbQuery1702に設定されたSQL文の実行結果の各カラムの値がセットされる。
図18は、入出力定義405の基本設定画面の一例を示す図である。入出力定義基本設定画面1800は、アプリケーション430のうち、画面に関する情報を扱う。入出力定義基本設定画面1800は、入出力コード1801、入出力名1802、入出力タイプ1803、対象データモデル1804、対象条件1805の各設定項目を保持する。
入出力コード1801は、プロジェクトの中で入出力定義を一意に特定するコードである。入出力名1802は、入出力定義に対して、ユーザが任意に設定することができる名前である。入出力タイプ1803は、画面のタイプを設定する項目である。通常のWeb画面の場合は、「IO」を設定する。
対象データモデル1804は、画面の中で扱うデータモデルを指定する。この例では、「EMPLOYEE_JOIN_DM」が設定されている。すなわち、この画面では、従業員・組織結合DMのデータにアクセスする。従業員・組織結合DMは、図17のdbQuery1702に設定されたSQLの内容より、図6で示す従業員・組織結合テーブル603から抽出されるデータに該当する。
対象条件1805には、図4のパラメータ・名前関連付け定義406の情報を設定する。「@NAMEDPARAM:」以下に名前とパラメータ番号を示す「@1、@2・・・」が設定されている。この例では、「employee_name=@1」の記述があり、これは、「employee_name」に画面から送られた1番目のパラメータを関連付けることを意味している。
同様に「employee_email=SW(@2)」、「employee_position=MULTI_TEXT(@3)」もそれぞれ、「employee_email」に対して画面から送られた2番目のパラメータを、「employee_position」に対して画面から送られた3番目のパラメータを関連付けることを意味している。但し、ここでは、「@2」を引数とする「SW」関数の結果、「@3」を引数とする「MULTI_TEXT」の関数の結果を実際には関連付けている。これらの関数については、後述する図25の値変換ルールで説明する。
なお、この実施形態においては、「:」「@」「SW」「EW」「CT」「MULTI_TEXT」で表される文字列をパラメータまたは関数としたが、これらに限定するものではなく、その他の文字列や文字列以外のリンク情報などの表現をパラメータまたは関数としてもよい。
図19は、入出力定義405の項目一覧画面の一例を示す図である。入出力定義項目一覧画面1900は、入出力項目の一覧ビュー1901と各入出力項目の詳細ビュー(不図示)により構成される。入出力定義項目一覧画面1900は、項目タイプ1902、項目コード1903、名前1904、表示1905、必須1906、レベル1907、桁数1908、小数桁1909、次入出力1910、データモデルコード1911、データモデル項目コード1912を保持する。
すなわち、入出力定義405は、画面からの入力を受け付けるための入力定義情報と、データベースのデータを含む画面を出力するための出力定義情報とを管理する手段の一例を示す機能部である。
項目タイプ1902は、入出力項目のタイプを示すものである。この例では、「I 入力」「O 出力」「A アクション」があり、「I 入力」はユーザが入力するフィールドを、「O 出力」は画面に出力するフィールドを、「A アクション」はユーザが押下するボタンをそれぞれ示す。項目コード1903は、入出力定義内の項目を一意に特定するコードである。名前1904は、入出力項目に対してユーザが任意に命名する名前である。入出力項目を特定しやすくする目的で設定する。
つまり、アプリケーションサーバ105は、アプリケーションに含まれる入出力定義405の「I 入力」「O 出力」「A アクション」に従って、入力フィールド・出力フィールド・ボタンを含む画面の出力情報を生成し、アプリケーションクライアント104に送信する。すなわち、アプリケーションサーバ105は、プログラム開発装置101により生成されたプログラムに含まれる出力定義情報を用いて、画面の出力情報を送信する機能部をもつ。
表示1905は、定義した入出力項目を画面上に表示するかどうかの設定である。「非表示」とした場合は、画面上には表示せず、隠しデータとして情報を保持する。必須1906は、該入出力項目が必須入力かどうかのチェックを設定する。桁数1908は、該入出力項目に入力可能な桁数を設定する。小数桁1909は、該入出力項目が数値型の場合に入力可能な小数桁数を設定する。
次入出力1910は、項目タイプがアクションに設定された入出力項目について、ボタン押下された後に遷移する入出力コードを設定する。すなわち、ある画面から別の画面への遷移を定義する。データモデルコード1911は、該入出力項目と関連するデータモデルコードを設定する。同様にデータモデル項目コード1912は、該入出力項目と関連するデータモデル項目コードを設定する。
図20は、入出力定義405のパラメータ定義画面の一例を示す図である。項目コード「QUERY」として示されている入出力項目2001は、アクションタイプの項目であり、画面の中ではアクションを実行するボタンに該当する。
このボタンが押下された場合は、次入出力2002(空欄の場合は自画面)で示す入出力コード1801の画面に遷移すべく、次入出力パラメータ2003に設定されている「P_NAME」「P_EMAIL」「P_POSITION」の各入力項目に入力されている値がパラメータとして順番にアプリケーションクライアント104からアプリケーションサーバ105に送信され、アプリケーションサーバ105はそのパラメータを順番に受信する。
すなわち、アプリケーションサーバ105は、アプリケーションクライアント104に送信された出力情報を用いて出力された画面からの入力情報を受信する機能部をもつ。
図18〜図20で説明した入出力定義画面は、図7における従業員一覧画面701の入出力定義を示している。つまり、従業員一覧画面701には、検索条件の入力項目として、「P_NAME(氏名)」「P_EMAIL(メールアドレス)」「P_POSITION(役職)」が用意され、検索ボタンとして「QUERY(従業員検索)」が表示されることを意味する。
図21は、入出力定義405の基本設定画面の一例を示す図である。入出力定義基本設定画面2100の各項目は、入出力定義基本設定画面1800(図18)と同様であるため説明を省略する。この例では、対象条件2105には「@NAMEDPARAM:employee_id=@1」とあるため、アプリケーションクライアント104から送られる1番目のパラメータをemployee_idと関連付けている。なお、この実施形態においては、@を用いてアプリケーションサーバ105が受信するパラメータの順番を表したが、これに限定するものではなく、@以外の記号を用いてもよい。また、パラメータの順番に限定するものではなく、「@NAMEDPARAM:employee_name=P_NAME」のように、受信するパラメータ名を直接用いて記述する等の方法でもよい。
図22は、入出力定義405の項目一覧画面の一例を示す図である。入出力定義項目一覧画面2200には、入出力定義基本設定画面2100(図21)の入出力項目を示す。入出力定義項目一覧画面2200の各項目は、入出力定義項目一覧画面1900(図19)と同様であるため説明を省略する。
図23は、入出力定義405のパラメータ定義画面の一例を示す図である。従業員一覧画面701にある詳細ボタンは、項目コード「DETAIL_A」(詳細)として示されている。入出力項目2301は、アクションタイプの項目であり、画面の中では、詳細画面に遷移するためのボタンに該当する。このボタンが押下された場合は、次入出力パラメータ2302に設定されている「EMP_ID」に入力されている値がパラメータとしてアプリケーションサーバ105に送られる。詳細画面では、「EMP_ID」によって一意に特定された従業員の情報を表示する。
図21〜図22で説明した入出力定義405は、図7の例では従業員詳細画面702を示している。
ここで、図7の説明に戻る。従業員一覧画面701も従業員詳細画面702も参照するデータは、従業員・組織結合テーブル703である。このように、複数の画面から同一のテーブルが参照されることは一般的であるが、データの検索条件等は、画面毎に異なることが多いため、画面毎に異なるSQL文やSQL文を制御するコードを保持することになる。
しかしながら、本発明によれば、画面からの入力情報を用いて、データベースの操作に用いるクエリを変更するアプリケーションを生成することができるため、異なる目的で複数の画面から利用されるSQL文であっても、用意するSQL文は一つにすることが可能となる。つまり、生成ツールにおいて、画面毎・機能毎に利用するSQLをカスタマイズする場合、同じテーブルを操作するSQL文が複数できてしまうという問題を解決することができる。
図18で示した従業員一覧画面の入出力定義に関する対象データモデル1804と図21で示した従業員詳細画面の対象データモデル2104には、同じ「EMPLOYEE_JOIN_DM」が設定されている。これは、各画面で参照するデータモデルが同一であることを示している。データモデルに格納されるデータを抽出するSQL文は、図17のdbQuery1702に設定されているもの唯一である。
従業員一覧画面では、検索条件に従ったレコード抽出が必要で、従業員詳細画面では従業員IDにより一意に特定されたレコード抽出が必要である。そのため、SQL文は動的に変更されなくてはならない。この仕組みについて、図24、図25を用いて説明する。
図24は、SQL文制御の行削除ルールの一例を示す図である。SQL文2401は、改行を含むコードで記述されている。また、2404で示す箇所のようにSQL文の中には、「:employee_id」のようにコロンで始まる変数名が指定されている。この変数名を名前付きパラメータと呼ぶ。名前付きパラメータに値が存在した場合は、名前付きパラメータの部分をその値に置換したSQL文を用いて、データベースの操作を行う。すなわち、動的変更SQL文422は、クエリに含まれるパラメータを当該パラメータに対応する入力情報の値を用いて置換する手段の一例を示す機能部である。
すなわち、アプリケーションサーバ105は、プログラム開発装置101により生成されたプログラムに含まれる入力定義情報と、受信した入力情報と、プログラム開発装置101により生成されたプログラムに含まれるクエリとを用いて、当該クエリを変更する機能部をもつ。また、アプリケーションサーバ105は、変更されたクエリを用いてデータベースを操作する機能部をもつ。
以上により、チューニングのためにSQL文やSQL文を制御するプログラムをカスタマイズする場合、生成されたSQL文やプログラムへの修正が必要になってしまうという問題を解決することができる。また、SQL文やSQL文を制御するプログラムがソースコード内で点在することが無いため、保守性が低いという問題を解決することができる。
また、複雑なSQLを作成したい場合は、個別にSQL文を作成することができる生成ツールも存在するが、その場合、アプリケーションの画面から受け取った入力情報を用いて、動的に変更することができないといった問題を解決することができる。
また、本発明で示す行削除ルールによれば、名前付きパラメータに値が存在しなかった場合、名前付きパラメータを含むSQL文の行を削除する。これを行削除ルールと呼ぶ。なお、この行削除ルールは、SQL文変換ルール412としてプログラム化されており、プログラム生成エンジン411に組み込まれている。
なお、この実施形態においては、名前付きパラメータに値が存在しなかった場合としたが、値が存在しないことに限定するものではなく、名前付きパラメータの値が取得できなかった場合、名前付きパラメータの値が空(NULL値)である場合、等としてもよい。なお、この実施形態においては、名前付きパラメータに値が存在しなかった場合、名前付きパラメータを含むSQL文の行を削除するとしたが、行を削除することに限定するものではなく、その行をコメント文等にして無効化する等としてもよい。
すなわち、SQL文変換ルール412と動的変更SQL文422は、SQL文定義404により管理されるクエリに含まれるパラメータに対応する入力情報の値が空または取得できなかった場合、当該クエリの当該パラメータを含む行を削除または無効化する手段の一例を示す機能部である。
SQL文2402は、「:employee_name」の名前付きパラメータのみ値が存在した場合のSQL文である。「:employee_id」「:employee_email」「:employee_position」の名前付きパラメータには値が存在しなかったため、2405に示すように行削除されている。このようなSQL文の生成は、アプリケーション実行時に動的に行われる。
なお、この実施形態においては、「:(コロン)+変数名」で表される文字列を名前付きパラメータとしたが、これに限定するものではなく、その他の文字列や文字列以外のリンクなどの情報を名前付きパラメータとしてもよい。
また、この実施形態においては、行削除ルールをクエリ変更の一例としたが、これに限定するものではなく、その他のルール(例えば、パラメータの値などを用いた条件に従って、クエリAまたはクエリBのどちらかを選択する条件式)などのルールを用意するとしてもよい。
図28は、アプリケーションの画面イメージの一例を示す図である。この従業員一覧画面2800は、検索フィールドとして、氏名2801、メールアドレス2802、役職2803を保持する。また、検索を実行するボタンとして、従業員検索ボタン2804を保持する。
図24で示したSQL文2402は、図28で氏名2801にのみ値が入力され、従業員検索ボタン2804が押下された場合に実行されるSQL文である。結果レコード2805の右には、詳細ボタン2806が表示されている。この詳細ボタン2806が押下された場合は、この結果レコードに示される従業員IDをパラメータとしてサーバに送信し、SQLを実行する。この時実行されるSQL文が、図24のSQL文2403である。なお、詳細ボタン2806が押下された後に表示される画面が、図29の従業員情報画面2900である。
図25は、SQL文制御の値変換ルールの一例を示す図である。2502に示す箇所に注目すると、SQL文のlike演算子とin演算子が利用されている。like演算子の場合、「カラムA like ‘%apple%’」のように値の前後に%で囲む等の特殊指定が必要になる。そのため、画面から渡される名前付きパラメータに格納される値は、そのままSQL文に埋め込むと正しくSQL文が動作しない。そのため、値変換を行う必要がある。
値変換の定義は、図18の対象条件1805に設定するパラメータ・名前関連付け定義406に行う。2503は、パラメータ・名前関連付け定義の例である。2行目にSW関数、3行目にMULTI_TEXT関数が使用されている。
関数に対応する変換方法を、2504に示す。具体的には、SW関数は値の末尾に%を加える関数、EW関数は値の先頭に%を加える関数、CT関数は値の先頭と末尾に%を加える関数、MULTI_TEXT関数は複数の値をカンマ区切りに変更する関数である。各関数は、SQL文変換ルール412としてプログラム化されており、プログラム生成エンジン411に組み込まれている。
すなわち、SQL文変換ルール412と動的変更SQL文422は、SQL文定義404により管理されるクエリに含まれるパラメータに対応する入力情報の値に従って、クエリを変更する手段の一例を示す機能部である。また、SQL文変換ルール412と動的変更SQL文422は、クエリに含まれるパラメータを当該パラメータに対応する入力情報の値を用いて置換する手段の一例を示す機能部である。
また、SQL文変換ルール412と動的変更SQL文422は、クエリにおけるパラメータの前または/かつ後に所定の文字列が存在する場合、当該所定の文字列に従って、当該クエリを変更する手段の一例を示す機能部である。
なお、この実施形態においては、関数として「SW関数」「EW関数」「CT関数」「MULTI_TEXT関数」を挙げたが、これらに限定するものではなく、その他の関数を用意するとしてもよい。
なお、この実施形態においては、動的に生成するSQL文としてSELECT文を挙げたが、これに限定するものではなく、INSERT文、UPDATE文、DELETE文、INSERT〜SELECT文(SELECTによる検索結果をINSERTする文)、UPDATE〜SELECT文(SELECTによる検索結果をUPDATEする文)、DELETE〜SELECT文(SELECTによる検索結果をDELETEする文)、SELECT FOR UPDATE文(行ロックを行うためのSELECT文)等のDML(データ操作言語)、CREATE TABLE文やDROP TABLE文等のDDL(データ定義言語)、GRANT文やREVOKE文などのDCL(データ制御言語)であってもよい。
また、この実施形態においては、動的に生成するのはリレーショナルデータベースを操作するSQL文としたが、これに限定するものではなく、XMLデータベース等を操作するXQuery文等、オブジェクトデータベースを操作するOQL文等、データベースを操作するクエリであればよい。
図26は、アプリケーション生成ダイアログ画面の一例である。プロジェクトに存在するアプリケーション定義を生成対象アプリケーション2601にて指定を行い、OKボタン2602押下によりプログラム生成処理を開始する。
図27は、アプリケーションプログラム生成のフローチャートの一例を示す図である。以下のステップは、すべてプログラム開発装置101のCPU201が実行する。
ステップS2701において、アプリケーション定義402を取得し、RAM202に記憶する。
ステップS2702において、入出力定義405を取得し、RAM202に記憶する。
ステップS2703以降は、ステップS2702にて読込まれた入出力定義405の分だけループ処理を行う。
ステップS2704において、ステップS2701にて読込まれたアプリケーション定義の所属入出力1002(図10)に当該入出力定義405が属しているか確認する。属していない場合は、以降の処理を行わず、ループ処理を継続する。属している場合は、ステップS2705に進む。
ステップS2705において、当該入出力定義405に係る対象データモデル1804(図18)に設定されているデータモデル定義403を取得し、RAM202に記憶する。
ステップS2706において、ステップS2705にてRAM202に読込まれたデータモデル定義403のSQL文定義404であるdbQuery1702(図17)に設定されているクエリ(SQL文)を取得し、RAM202に記憶する。
ステップS2707において、ステップS2706にて読込まれたクエリ(SQL文)で使用されている値変換ルール関数2504(図25)に係るプログラム(SQL文変換ルール412)を取得し、RAM202に記憶する。
ステップS2703〜ステップS2708のループ処理が終了すると、ステップS2709において、プログラム生成エンジン411(図4)を用いてRAM202内の情報からプログラムを生成する。
ステップS2710において、コンパイルエンジン413(図4)を用いて、ステップS2709にて生成されたプログラムをコンパイルし、アプリケーション430を生成する。すなわち、ステップS2710は、入出力定義405により管理される入力定義情報と出力定義情報と、SQL文定義404により管理されるクエリとを含むプログラムを生成する処理の一例を示すステップである。
つまり、生成されたアプリケーションには、ステップS2702にて読込まれた入出力定義405、ステップS2705にて読込まれたデータモデル定義403、ステップS2706にて読込まれたクエリ、ステップS2707にて読込まれた値変換ルール関数2504を用いて生成されたプログラムがコンパイルされて含まれており、アプリケーションが動作する際に、アプリケーションに含まれるこれらのコンパイルされたプログラムが利用され、動的に変更されたクエリが生成され、データベースが操作される。
以上で、図27の説明を完了する。
以上により、画面からの入力情報を用いて、データベースの操作に用いるクエリを変更するアプリケーションを生成する仕組みを提供することができる。また、開発者に対してプログラミング技術を要求することが無いため、開発者はJava(登録商標)などのプログラミング技術を習得していなければならないという問題を解決することができる。
図30は、図17で示したSQL文に対して、図24で説明した「行削除ルール」および図25で説明した「値変換ルール」を適用した結果の動作画面の一例である。この従業員一覧画面3000は、図28と同様に検索フィールドとして、氏名3001、メールアドレス3002、役職3003を保持する。役職3003は、複数の選択肢から複数の値を選択する形式である。検索は、従業員検索ボタン3004の押下によって行われ、検索結果が下部に表示される。3005は、検索結果の1レコードを示している。この検索において氏名3001には入力がない、メールアドレス3002は、「nishida」と入力があり、役職3003は、「一般職」と「課長」が選択されている。
図31のSQL文3100は、図30の従業員検索ボタン3004が押下されたときに実行するSQL文である。
図32は、アプリケーション動作時にSQL文を変更するフローチャートの一例を示す図である。なお、ステップS2710にて生成されたプログラムをコンパイルして生成されたアプリケーション430は、アプリケーションサーバ105の外部メモリ211に配置され、アプリケーションクライアント104からのリクエストに応じて、アプリケーションサーバ105のCPU201がアプリケーション430に含まれるプログラムを実行可能な状態になっているとする。
ステップS3201において、アプリケーションクライアント104のCPU201は、アプリケーションサーバ105に対して、ステップS2710にて生成されたアプリケーション430の画面のリクエストを送信する。具体的には、従業員管理アプリ(図9)の初期画面(初期入出力コード903)である従業員一覧画面701(図7)がリクエストされたとする。
ステップS3202において、アプリケーションサーバ105のCPU201は、アプリケーションクライアント104から送信されたリクエストを受信する。
ステップS3203において、アプリケーションサーバ105のCPU201は、アプリケーション430からリクエストに対応する入出力定義405から生成されたプログラムを取得してRAM202に記憶する。具体的には、アプリケーション430内のプログラムから、リクエストされた従業員一覧画面701の入出力定義情報(図18〜図20)を取得してRAM202に記憶する。
ステップS3204において、アプリケーションサーバ105のCPU201は、RAM202に記憶されている入出力定義405の入力定義情報および出力定義情報から生成されたプログラムに従って、アプリケーションクライアント104の出力部210に出力する画面の出力情報を生成する。具体的には、従業員一覧画面701の入出力定義情報(図19)に従って、従業員一覧画面2800の出力情報(例えば、Webアプリケーションの場合はHTML)を生成する。
ステップS3205において、アプリケーションサーバ105のCPU201は、ステップS3204にて生成した出力情報をアプリケーションクライアント104に送信する。すなわち、ステップS3205は、プログラム開発装置101により生成されたプログラムに含まれる出力定義情報を用いて、画面の出力情報を送信する処理の一例を示すステップである。
ステップS3206において、アプリケーションクライアント104のCPU201は、出力情報を受信する。
ステップS3207において、アプリケーションクライアント104のCPU201は、入力部209から入力された入力情報を受け付ける。具体的には、従業員一覧画面701の入出力定義項目一覧画面1900(図19)の項目タイプ1902=「I 入力」のフィールド(図28の氏名2801、メールアドレス2802、役職2803)に対する入力情報を受け付ける。なお、ステップS3207において、ログアウト操作やウィンドウを閉じる操作を受け付けた場合、本フローチャートを終了する。
ステップS3208において、アプリケーションクライアント104のCPU201は、ステップS3207にて受け付けた入力情報をアプリケーションサーバ105に送信する。具体的には、従業員一覧画面701のパラメータ定義画面2000(図20)の次入出力パラメータ2003に設定されている「P_NAME」「P_EMAIL」「P_POSITION」の各入力項目に入力された値をパラメータとして順番にアプリケーションサーバ105に送信する。また、これらのパラメータと同時に、遷移先画面を特定する情報である次入出力2002の値も送信する(次入出力2002が空欄の場合は自画面に遷移することを意味する)。
ステップS3209において、アプリケーションサーバ105のCPU201は、アプリケーションクライアント104から送信された入力情報および遷移先画面情報(次入出力2002)を受信する。すなわち、ステップS3209は、出力情報を用いて出力された画面からの入力情報を受信する処理の一例を示すステップである。
ステップS3210において、アプリケーションサーバ105のCPU201は、アプリケーション430内のプログラムから、次入出力2002が示す入出力定義405から生成されたプログラムを取得してRAM202に記憶する。具体的には、アプリケーション430内のプログラムから、従業員一覧画面701の入出力定義情報(図18〜図20)を取得してRAM202に記憶する。
ステップS3211において、アプリケーションサーバ105のCPU201は、ステップS3210にて取得した入出力定義405に係るデータモデル定義403から生成されたプログラムを取得してRAM202に記憶する。具体的には、アプリケーション430内のプログラムから、従業員一覧画面701の入出力定義基本設定画面1800の対象データモデル1804として指定されているデータモデル定義403「EMPLOYEE_JOIN_DM」を取得してRAM202に記憶する。
ステップS3212において、アプリケーションサーバ105のCPU201は、ステップS3211にて取得したデータモデル定義403のSQL文定義404であるdbQuery1702に設定されているクエリ(SQL文)を取得し、RAM202に記憶する。具体的には、アプリケーション430内のプログラムから、データモデル定義403のSQL文定義404であるdbQuery1702(図17)から生成されたプログラムを取得してRAM202に記憶する。
ステップS3213において、アプリケーションサーバ105のCPU201は、ステップS3212にて取得したクエリ(SQL文)のパラメータ・名前関連付け定義406(図18の対象条件1805)で使用されている値変換ルール関数2504(図25)に係るプログラム(図4のSQL文変換ルール412)から生成されたプログラムを取得し、RAM202に記憶する。具体的には、アプリケーション430内のプログラムから、入出力定義基本設定画面1800の対象条件1805で使用されている値変換ルール関数(例えば、SW関数やMULTI_TEXT関数)に係るプログラム(SQL文変換ルール412)を取得し、RAM202に記憶する。
ステップS3214において、アプリケーションサーバ105のCPU201は、ステップS3209にて受信した入力情報と、ステップS3212にて取得したクエリと、ステップS3213にて取得したSQL文変換ルール412とを用いて、クエリを変更する。具体的には、変更されたクエリは、図24のSQL文2402やSQL文2403のようになる。すなわち、ステップS3214は、プログラム開発装置101により生成されたプログラムに含まれる入力定義情報と、受信した入力情報と、プログラム開発装置101により生成されたプログラムに含まれるクエリとを用いて、当該クエリを変更する処理の一例を示すステップである。
ステップS3215において、アプリケーションサーバ105のCPU201は、データベースサーバ103にステップS3209にて変更されたクエリを送信する。
ステップS3216において、データベースサーバ103のCPU201は、アプリケーションサーバ105から受信したクエリを実行し、データベースを操作する。このデータベース操作によってデータが取得された場合、データベースサーバ103のCPU201は、アプリケーションサーバ105に取得されたデータを送信する。アプリケーションサーバ105のCPU201は、データベースサーバ103から送信されたデータを受信する。すなわち、ステップS3216は、変更されたクエリを用いてデータベースを操作する処理の一例を示すステップである。
なお、この実施形態においては、データベース操作によってデータが取得されるとしたが、DML(データ操作言語)による操作に限定するものではなく、DDL(データ定義言語)やDCL(データ制御言語)のようにデータが取得されないデータベース操作であってもよい。
ステップS3204に戻り、アプリケーションサーバ105のCPU201は、RAM202に記憶されている入出力定義405の入力定義情報および出力定義情報に従って、ステップS3216にて取得されたデータを用いて、アプリケーションクライアント104の出力部210に出力する画面の出力情報を生成する。具体的には、従業員一覧画面701の入出力定義情報(図19)に従って、データベースから取得されたデータ(例えば、結果レコード2805)を用いて、従業員一覧画面2800の出力情報(例えば、Webアプリケーションの場合はHTML)を生成する。
以上で、図32の説明を完了する。
以上により、画面からの入力情報を用いて、データベースの操作に用いるクエリを変更するアプリケーションを生成する仕組みを提供することができる。また、開発者に対してプログラミング技術を要求することが無いため、開発者はJava(登録商標)などのプログラミング技術を習得していなければならないという問題を解決することができる。
また、チューニングのためにSQL文やSQL文を制御するプログラムをカスタマイズする場合、生成されたSQL文やプログラムへの修正が必要になってしまうという問題を解決することができる。また、SQL文やSQL文を制御するプログラムがソースコード内で点在することが無いため、保守性が低いという問題を解決することができる。
また、個別に作成したSQL文は動的に変更することができないといった問題を解決することができる。また、生成ツールにおいて、画面毎・機能毎に利用するSQLをカスタマイズする場合、同じテーブルを操作するSQL文が複数できてしまうという問題を解決することができる。
〔第2の実施形態〕
第1の実施形態は、入力定義情報と出力定義情報とクエリとを含むプログラムを生成することによって、画面から受け取った入力情報を用いて、データベースの操作に用いるクエリを変更するプログラムを生成する仕組みであり、第2の実施形態は、生成ツールにおいて入力された値を用いて、アプリケーションプログラムを生成することなく、データベースの操作に用いるクエリを動的に生成して表示することによって、動的クエリのデバッグを容易にする仕組みである。
図33〜図38を用いて、第2の実施形態を説明する。
図33は、第2の実施形態に係るクエリテスト実行のフローチャートの一例を示す図である。
なお、図34はデータモデル定義画面におけるクエリテスト生成ボタンの一例を示す図、図35は入出力定義画面における動的クエリの引数入力の一例を示す図、図36はデータモデル定義画面における生成したクエリの一例を示す図、図37はデータモデル定義画面におけるクエリテスト実行結果の一例を示す図、図38はデータモデル定義画面におけるクエリテスト実行結果画面プレビューの一例を示す図である。
図33のフローチャートについて説明する。
ステップS3301において、プログラム開発装置101のCPU201は、データモデル定義の表示指示を受け付けた場合、データモデル定義画面3400(図34)にクエリテスト生成ボタン3401(図34)を表示する。
ステップS3302において、プログラム開発装置101のCPU201は、クエリテスト生成ボタン3401の押下を受け付ける。
ステップS3303において、プログラム開発装置101のCPU201は、表示しているデータモデル定義を利用する入出力定義405を特定し、入出力定義画面を表示する。具体的には、入出力定義405の対象データモデル3501(図35)に、表示しているデータモデル定義403が設定されている入出力定義405を特定し、特定した入出力定義405について、入出力定義画面3500(図35)を表示する。
ステップS3304において、プログラム開発装置101のCPU201は、引数値の入力欄3503(図35)を表示する。具体的には、対象条件3502(図35)の設定内容から、引数を表す“@数字”の文字列を特定し、特定された引数の分だけ入力できる入力欄3503を表示する。
なお、本実施形態においては、入出力定義画面3500に入力欄3503を表示するとしたが、これに限定するものではなく、入出力定義画面3500ではなくデータモデル定義画面3400に入力欄3503を表示するとしてもよい(不図示)。この場合、データモデル定義画面だけで、引数値の入力、動的クエリがどのようなクエリに変化するか、そのクエリによってどのような実行結果が返ってくるか、その実行結果によってどのような結果画面が表示されるかの把握ができるため、開発効率を向上させることができる。
ステップS3305において、プログラム開発装置101のCPU201は、入力欄3503への値の入力を受け付ける。すなわち、ステップS3305は、クエリに含まれるパラメータに対して、テストする値の設定を受け付ける処理の一例を示すステップである。
ステップS3306において、プログラム開発装置101のCPU201は、入力された値とSQL文定義404により管理されるクエリ(図34の3402)を用いて、データベースに送信するクエリを生成する。すなわち、ステップS3306は、受け付けた値に従って、クエリを変更する処理の一例を示すステップである。具体的なクエリの生成方法については、図24および図25にて説明を行ったため省略する。
ステップS3307において、プログラム開発装置101のCPU201は、ステップS3306にて生成したクエリを表示する(図36の3601)。なお、表示するクエリは値3601のように、入力欄3503への入力値がクエリのどこに反映されたかを識別できるようにして表示する。
具体的には、クエリにはパラメータ(:employee_id)が存在するが入力欄3503への入力値が存在しないため行削除される場合は3602のように取消線を引く、入力欄3503(引数@1)への入力値がNULLであるため行削除される場合は3603のようにパラメータ部分に“NULL”であることを重畳して表示し取消線を引く、入力欄3503(引数@2)への入力値がある場合は3604のように入力値“nishida”であることを重畳して表示する、入力欄3503(引数@3)への入力値が複数ある場合は3605のように入力値“一般職,課長”とカンマで区切って重畳して表示する。
なお、本実施形態においては、値3601に含まれるパラメータを入力欄3503への入力値に置き換えて表示するとしたが、これに限定するものではなく、値3601に含まれるパラメータは表示したまま、パラメータの近傍に入力欄3503への入力値を重畳表示するとしてもよい。または、値3601に含まれるパラメータは表示したまま、パラメータにカーソルをあてることで入力欄3503への入力値を表示する等としてもよい。
すなわち、ステップS3307は、設定を受け付けた値を識別して変更されたクエリを表示する、クエリと当該クエリに含まれるパラメータの近傍に設定を受け付けた値とを表示する、およびクエリをNULL値の設定されたパラメータを含む当該クエリの行を取消線で取り消して表示する、表示方法のうち少なくとも1つの表示方法を用いて表示する処理の一例を示すステップである。
このように、クエリ(値3601)を表示することによって、アプリケーション開発者は動的クエリがどのようなクエリに変化するか、アプリケーションプログラムを生成することなく、開発段階で確認することができる。これにより、動的クエリを用いたアプリケーション開発に不慣れな開発者であっても、デバッグを容易にすることができるため、開発効率を向上させることができる。
なお、ステップS3307にてクエリを表示した時、当然クエリは生成済であるため、クエリテスト生成ボタン3401は、押下できないように無効にし(図34の3401)、入力欄3503の値が変更された場合に再び押下できるよう有効にするとしてもよい。
ステップS3308において、プログラム開発装置101のCPU201は、クエリテスト実行ボタン3606(図36)を表示し、押下を受け付ける。
ステップS3309において、プログラム開発装置101のCPU201は、ステップS3306にて生成したクエリをデータベースサーバ103に送信する。
ステップS3310において、データベースサーバ103のCPU201は、クエリを受信する。
ステップS3311において、データベースサーバ103のCPU201は、受信したクエリを実行する。なお、このクエリ実行はテストとして行うため、INSERT/UPDATE/DELETEなどのデータを追加・更新・削除するクエリの場合、コミットせず行う。すなわち、ステップS3311は、クエリを用いて、テストとしてクエリを実行するために、コミットせずにデータベースを操作する処理の一例を示すステップである。
ステップS3312において、データベースサーバ103のCPU201は、クエリの実行結果をプログラム開発装置101に送信する。
ステップS3313において、プログラム開発装置101のCPU201は、クエリの実行結果を受信する。すなわち、ステップS3313は、データベースから出力されたクエリ実行結果を取得する処理の一例を示すステップである。
ステップS3314において、プログラム開発装置101のCPU201は、クエリの実行結果を表示する(図37の3701)。すなわち、ステップS3314は、取得されたクエリ実行結果を表示する処理の一例を示すステップである。なお、実行結果を表示した時、当然クエリは実行済であるため、クエリテスト実行ボタン3606は、押下できないように無効にし(図37の3606)、ステップS3306にて異なるクエリが生成された場合に再び押下できるよう有効にするとしてもよい。
このように、実行結果3701を表示することによって、アプリケーション開発者は動的クエリによってどのような実行結果が返ってくるか、アプリケーションプログラムを生成することなく、開発段階で確認することができる。これにより、動的クエリを用いたアプリケーション開発に不慣れな開発者であっても、デバッグを容易にすることができるため、開発効率を向上させることができる。
ステップS3315において、プログラム開発装置101のCPU201は、結果画面プレビューボタン3702(図37)の押下を受け付ける。
ステップS3316において、プログラム開発装置101のCPU201は、プレビュー表示する画面定義情報を取得する。具体的には、ステップS3303にて特定した入出力定義405に設定されている画面レイアウトおよび出力定義情報を取得する。
ステップS3317において、プログラム開発装置101のCPU201は、取得した画面定義情報を用いて、プレビュー表示する画面情報を生成する。すなわち、ステップS3317は、取得されたクエリ実行結果と出力定義情報とを用いて、画面の出力情報を生成する処理の一例を示すステップである。
ステップS3318において、プログラム開発装置101のCPU201は、生成された画面情報を用いて、結果画面3801(図38)を表示する。すなわち、ステップS3318は、生成された出力情報を用いて、画面を表示する処理の一例を示すステップである。なお、結果画面3801を表示した時、当然プレビュー済であるため、結果画面プレビューボタン3702は、押下できないように無効にし(図38の3702)、ステップS3306にて異なるクエリが生成された場合に再び押下できるよう有効にするとしてもよい。
なお、本実施形態においては、データモデル定義画面3800に結果画面3801を表示するとしたが、これに限定するものではなく、データモデル定義画面3800とは別のウィンドウに結果画面3801を表示するとしてもよい。
このように、結果画面3801を表示することによって、アプリケーション開発者は動的クエリによってどのような結果画面が表示されるか、アプリケーションプログラムを生成することなく、開発段階で確認することができる。これにより、動的クエリを用いたアプリケーション開発に不慣れな開発者であっても、デバッグを容易にすることができるため、開発効率を向上させることができる。
以上で、図33の説明を終了する。
なお、図33のクエリテスト実行処理は、図27のアプリケーションプログラム生成処理をすることなく、行うことができる。なぜなら、ステップS3301〜ステップS3318の実行においては、生成ツールによって生成されるアプリケーションプログラムは不要であり、必要なものは入出力定義405、データモデル定義403、画面定義情報(画面レイアウトおよび出力定義情報)の定義情報だからである。なお、ステップS3317にて生成されるプレビュー用の画面情報は、画面定義情報とクエリ実行結果を用いてHTML等のプレビュー画面情報を生成するプレビュー画面生成プログラムを生成ツールに備えておけばよく、図33のクエリテスト実行のために開発中のアプリケーションのプログラムをわざわざ生成&デプロイする必要がない。
以上により、アプリケーションプログラム生成ツールにおいて入力された値を用いて、アプリケーションプログラムを生成することなく、データベースの操作に用いるクエリを動的に生成して表示することによって、動的クエリのデバッグを容易にすることができる。
よって、アプリケーション開発者が動的クエリの引数を入力することにより、動的クエリがどのようなクエリに変化するか、そのクエリによってどのような実行結果が返ってくるか、その実行結果によってどのような結果画面が表示されるかを、アプリケーションプログラムを生成することなく、開発段階で確認することができるため、動的クエリのデバッグを容易にすることができる。これにより、アプリケーション開発者は、アプリケーションプログラムを生成、デプロイし、ブラウザを用いて値を入力し、デバッガを用いてクエリ・実行結果を確認し、ブラウザに戻って結果画面を確認するといった、動的クエリのデバックに係る煩わしさを軽減することができるようになる。
以上により、動的クエリを用いたアプリケーション開発に不慣れな開発者であっても、デバッグを容易にすることができるため、開発効率を向上させることができる。
以上のように、前述した実施形態の機能を実現するプログラムを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記録媒体に格納されたプログラムを読み出し、実行することによっても本発明の目的が達成されることは言うまでもない。
この場合、記録媒体から読み出されたプログラム自体が本発明の新規な機能を実現することになり、そのプログラムを記録した記録媒体は本発明を構成することになる。
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、DVD−ROM、磁気テープ、不揮発性のメモリカード、ROM、EEPROM、シリコンディスク等を用いることが出来る。
また、コンピュータが読み出したプログラムを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムの指示に基づき、コンピュータ上で稼働しているOS(オペレーティングシステム)等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPU等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
また、本発明は、複数の機器から構成されるシステムに適用しても、ひとつの機器から成る装置に適用しても良い。また、本発明は、システムあるいは装置にプログラムを供給することによって達成される場合にも適応できることは言うまでもない。この場合、本発明を達成するためのプログラムを格納した記録媒体を該システムあるいは装置に読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。
上記プログラムの形態は、オブジェクトコード、インタプリタにより実行されるプログラムコード、OS(オペレーティングシステム)に供給されるスクリプトデータ等の形態から成ってもよい。
さらに、本発明を達成するためのプログラムをネットワーク上のサーバ、データベース等から通信プログラムによりダウンロードして読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。なお、上述した各実施形態およびその変形例を組み合わせた構成も全て本発明に含まれるものである。