| |
|
リッチインターネットアプリケーションを開発するには、データベースとの連携が欠かせない。Flash MXとデータベースの連携を行うためには、前回までに紹介したColdFusionコンポーネントを利用することにより行うが、Flash
MXとColdFusionコンポーネントはどのようにして連携を行うのだろうか。
それでは、次に、Step2でFlash MXで行っていた計算処理をColdFusionコンポーネントで行うようにし、Flash MXでColdFusionコンポーネントとの連携を行ってみる。
まず、連載第3回でも紹介した次のようなメソッドをもつColdFusionコンポーネント「calc.cfc」をサーバーサイドに用意する。
| メソッド名 |
totalCalc |
| 処理概要 |
単価と個数から合計金額を算出し、算出結果を返す |
| 引数 |
単価 個数 |
| 戻値 |
合計金額 |
|
ColdFusionコンポーネントのソースコードは以下のとおりとなる。
(ソース:3-1)
<cfcomponent>
<cfprocessingdirective pageencoding="UTF-8">
<cffunction name="totalCalc" access="remote"
returnType="numeric" output="false">
<cfargument name="price" type="numeric"
required="true">
<cfargument name="amount" type="numeric"
required="true">
<cfset total = arguments.price * arguments.amount>
<cfreturn total>
</cffunction>
</cfcomponent> |
|
次に、ActionScriptのソースコードは以下のとおりとなる。
(ソース:3-2)
#include "NetServices.as"
//Responseクラス定義
Response = function(){
};
Response.prototype.onResult = function(result){
trace("データ受信 : " + result);
total_txt.text = result;
};
Response.prototype.onStatus = function(error){
trace("エラー : " + error.description);
};
//calc_mcイベントハンドラ定義
calc_mc.onPress = function(){
NetServices.setDefaultGatewayUrl("http://localhost/flashservices/gateway");
var gw = NetServices.createGatewayConnection();
var calcAPI = gw.getService("step1.calc", new
Response());
calcAPI.totalCalc(100, amount_txt.text);
}; |
|
ここでのポイントは以下のとおりだ。
| (1) |
ライブラリのインクルード
ColdFusionコンポーネントとの連携を行うためには、Flash MXに標準で用意されているActionScript
ライブラリが必要となる。このライブラリには、通信に必要な ActionScript コードとオブジェクトが含まれているため、以下のように必ずインクルードする。
| #include "NetServices.as"
|
|
|
| (2) |
ColdFusionコンポーネントの呼び出し
次に、ColdFusionコンポーネントを呼び出す。処理の流れは以下のようになる。
| NetServices.setDefaultGatewayUrl("http://localhost/flashservices/gateway"); |
|
まず、ColdFusion MX サーバー上のFlashRemotingサービスが動作するURLを設定している。ColdFusionをデフォルトでインストールした場合のURLは、
「http://<ホスト名またはIPアドレス>/flashservices/gateway」となる。
| var gw = NetServices.createGatewayConnection(); |
|
次に Flash MXで用意されているNetConnection オブジェクトを使い、ColdFusion MX サーバーとの接続を確保している。
| var calcAPI = gw.getService("step1.calc",
new Response()); |
|
更に、ColdFusionコンポーネント「calc」への参照情報を取得している。
ここで、「step1.calc」はColdFusionコンポーネント「calc」へのパスとなる。
これはサーバサイドでコンポーネントを配置した場所に応じて指定する必要がある。
例えば、Web(ColdFusion MX)サーバのドキュメントルート直下に「step1」というディレクトリ作成し、「step1」下に「calc.cfc」を配置した場合、コンポーネントへのパスは「step1.calc」となる。
また、「getService」メソッドのパラメータに「new Response()」を渡しているが、これは、コンポーネントを呼び出した後、コンポーネントから返されるデータを処理するインスタンスだ。
コンポーネントから返されたデータを受信すると、ここで指定したインスタンスのメソッド(「onResult」、「onStatus」)が呼び出される。
| calcAPI.totalCalc(100,
amount_txt.text); |
|
最後に、コンポーネント「calc」の「totalCalc」メソッドを呼び出している。 |
| (3) |
通信結果を処理するクラス作成
次に、ColdFusionコンポーネントから受信したデータを処理するクラスを作成する。
(2)でも触れたとおり、コンポーネントから返されたデータをFlash MXが受信すると、指定されたインスタンスのメソッドが呼び出される。
呼び出されるメソッドであるが、コンポーネントで処理が正常に終了した場合には、「onResult」メソッドが、何らかの原因で処理が異常終了した場合には「onStatus」メソッドが呼び出されることになる。なお、正常に終了した場合は、「onResult」メソッドにはコンポーネントからの戻り値が返され、異常終了した場合は、「onStatus」メソッドにエラー情報が返される。
したがって、ソースコードは以下のように記述している。
//Responseクラス定義
Response = function(){
};
Response.prototype.onResult = function(result){
trace("データ受信 : " + result);
total_txt.text = result;
};
Response.prototype.onStatus = function(error){
trace("エラー : " + error.description);
}; |
|
「trace」関数を使用しているが、これは、オーサリングツールでムービープレービュー(メニューバーで「制御」-「ムービープレビュー」を選択して実行した場合)を行っている際に、デバック情報を表示できる関数だ。
ここでは、受信した結果に応じてメッセージを表示している。
なお、ColdFusionコンポーネントからデータを受信した際に呼び出されるメソッドは、「onResult」、「onStatus」の代わりに、それぞれ、「コンポーネントメソッド名_Result」、「コンポーネントのメソッド名_Status」とすることもできる。先程紹介したソースコードは以下のように記述することもできる。(コンポーネントメソッド名
= Flash MXから呼び出すColdfusionコンポーネントのメソッド名)
両表記を組合わせることで、例えば、複数のColdFusionコンポーネントメソッドを呼び出す際に、正常処理は個別に処理、エラー処理は共通で処理するということも可能だ。
//Responseクラス定義
Response = function(){
};
Response.prototype.totalCalc_Result = function(result){
trace("データ受信 : " + result);
total_txt.text = result;
};
Response.prototype.totalCalc_Status = function(error){
trace("エラー : " + error.description);
}; |
|
以上で、ColdFusionコンポーネントとの連携を行う準備が整った。実際に実行してみると、個数を入力した後「計算」ボタンをクリックすると、Flash
MXでは以下の処理が行われる。
| 入力された個数データ取得 |
| ↓ |
| ColdFusionコンポーネント「calc」を呼び出し |
| ↓ |
| ColdFusionコンポーネント「calc」で計算された合計金額を受信 |
| ↓ |
| 合計金額の画面表示 |
Step3でのサンプルは付録のCD-ROMに含めている(「sample3.fla」、「calc.cfc」)ので、そちらも参考にしていただきたい。 |
|