【DO!BOOK・ページリンク】
migaro_tech2012   80 / 100

BOOKをみる

10秒後にBOOKのページに移動します


78  具体的には、今回は同じ端末上に DataSnap サーバが稼働しているため、 HostName プロパティはlocalhost のま までよい。(DataSnap サーバプログラ ムがリモートサーバの場合は、サーバの IP アドレスを指定することとなる。)ま た、DataSnap サーバプログラムで指定 したポート番号「211」を、Port プロパ ティに設定しよう。  DataSnap サーバプログラムへの接続 設定が完了した。 ● TDSProviderConnection コンポーネ ント  続いて、TDSProviderConnection コ ンポーネントを貼り付けよう。これは、 DataSnap サーバプログラムで作成した サーバメソッドクラスを指定するもの だ。  ここでは、ServerClassName プロ パティにTServerMethods1 と入力 し、SQLConnection プロパティに SQLConnection1 を選択すればよい。こ れで、DataSnap サーバ上のサーバメ ソッドをクライアントから使用できるよ うになる。  最後に、ClientDataSet1 を選び、 RemoteServer プロパティに DSProviderConnection1 を選択する。 すると、ProviderName プロパティに、 DataSnap サーバプログラム上で定義し たdspDTMSCP が選択できるはずであ る。ここまでのところを一通り設定した のが図10 である。【図10】  以上で、設定が完了である。  設定が完了したら、ソース2 のよう なプログラムを記述しよう。画面起動 時(Form のOnCreate 時)にクライ アントデータセットを開く処理と、デー タセットPost 後(ClientDataSet の OnAfterPost 時)にクライアントデー タセットの変更内容をサーバに適用する ロジックのみである。【ソース2】  完成したら、クライアントアプリケー ションを実行してみよう。クライアント プログラムには、IBM i (AS/400)に 接続する処理は一切記述されていない が、データが表示されているのが分かる であろう。【図11】  ここまで、DataSnap を使用すること で、簡単に3 層アプリケーションを構築 できることをお伝えした。DataSnap の 仕組みと設定ポイントがお分かりいただ けたかと思う。 5. Windowsサービスを 使用したDataSnap サーバの作成  先ほど作成したDataSnap サーバプロ グラムは、VCL フォームアプリケーショ ンであった。つまり、クライアントプロ グラム実行前に、あらかじめDataSnap サーバプログラムの画面を起動しておく 必要がある。しかし、実際のアプリケー ションサーバでは、常にログインしたま まプログラムを実行しておくというのは 現実的ではない。  そこでここからは、DataSnap サーバ プログラムを「Windows サービス」と して実行できるようにしてみよう。  また、先ほどは単純に得意先マスタの 内容を表示するだけであったが、今度は クライアントアプリケーション側から絞 り込み条件として「得意先カナ」を指定 することで、対象データを検索できるよ うに拡張してみたい。 ● Windows サービス  Windows サービスプログラムとは、 Windows 動作中にバックグラウンドで 常に実行させることが可能なプログラム のことである。これはログインしなくて も実行させることができるため、 DataSnap サーバプログラムに最適であ ろう。  Windows サービスを使用した DataSnap サーバプログラムは、前述の 「3. DataSnap サーバプログラム作成手 順」の項と同様の手順でプロジェクトが 作成できる。  ウィザードの第1 画面目(図4)に出 る「プロジェクトの種類」で「サービス アプリケーション」を指定すればよい。 ただし、作成されたプロジェクトは、前 述の「VCL フォームアプリケーション」 と同様だが、Unit1.pas(Form1)だけ がない点に注意されたい。今回の「サー ビスアプリケーション」には通常画面が 存在しないからだ。 ●データ検索処理  また今回は、クライアントからデータ 検索処理が呼び出せるようサーバメソッ ドも追加しよう。  宣言部に、GetDataDTMSCP という 名前の関数を追加する。【ソース3】  この関数の引数(AMCTRKN)に指 定されたカナ名をもとに得意先マスタを カナ名で検索し、条件に合致するデータ のみ抽出できるようにしたい。データの 抽出には、SQL 文を発行するために TSQLQuery コンポーネントを使用しよ う。ServerMethodsUnit1 には図12 の ように設定を行う。【図12】  準備ができたら、ソース4 のようなロ ジックを作成しよう。ここでは、サービ ス起動時にデータベースへ接続する処理 と、引数に指定された「カナ」を条件に データを抽出するSQL 文を発行し、検 索結果が1 件以上存在した場合、戻り値 にTrue をセットするメソッドを作成し ている。【ソース4】  なお、ここまで見てきた手順も、デー タモジュールに関数(メソッド)を定義 する手順と同様であることがお分かりい ただけるであろう。  以上、ソースが完成したらプロジェク トに名前を付けて保存のうえ、コンパイ ルを行おう。加えて、完成したプログラ ム(Exe)はそのまま実行するのではな く、サービスに登録する必要がある。こ れは通常コマンドプロンプトで、プログ ラム名の後ろに「/install」を付加して 実行すればよい。その後サービス管理画 面で、登録されたサービスを「開始」に する。【図13】  今回は実行しても、上述したようにプ ロジェクトにフォームがないため、画面 が何も表示されないが、サービス実行状 態が「開始」となっていれば完了である。 6. サーバメソッドを呼び 出すクライアントプロ グラムの作成  今度は、サービス登録したDataSnap サーバを使用するクライアントプログラ ムを作成していこう。  まず、検索条件となる「カナ」入 力を行うTEdit と、検索を実行す るTBitBtn を貼り付けて画面を作 成しよう。なお、TSQLConnection、 TDSProviderConnection、TClientDataSet