 |
 |
 |
 |
| 掲載誌 |
日経Linux 2003/02〜 |
| タイトル |
リッチインターネットアプリケーションを開発しよう! 第5回 |
| サブタイトル |
ColdFusion MXとFlash MXで作るリッチインターネットアプリケーションをMVCモデルで学ぶ |
|
| 3. |
タイムカード打刻機能 |
| |
それでは、「タイムカード打刻」機能(図1-3 タイムカード打刻画面)を例に、実際のプログラミングを見ていく。 |
 |
| |
3-1. |
ユーザーインタフェース |
| |
|
「タイムカード打刻」機能のFlash MXのユーザーインタフェース構成は次のようになる。
まず基本画面として、2フレーム目に勤怠管理システムの基本インタフェースが配置されている。
(図3-1 勤怠管理システム基本インタフェース)
メニュー右横のコンテンツエリアに各機能に応じた画面を表示する。
そして、タイムカード打刻画面は次の図のように1つのMovieClipとして構成する。
(図3-2 タイムカード打刻画面MovieClip)
タイムカード打刻画面MovieClipに配置されているアイテムの構成は以下のようになっている。
| アイテム |
インスタンス名 |
種別 |
オブジェクトの種類 |
| UserID入力テキストフィールド |
userID_txt |
テキスト入力 |
TextField |
| Password入力テキストフィールド |
password_txt |
テキスト入力 |
TextField |
| 出社ボタン |
comming_mc |
ムービークリップ |
MovieClip |
| 退社ボタン |
quitting_mc |
ムービークリップ |
MovieClip |
|
また、打刻完了後のメッセージや、エラーメッセージを表示するための、メッセージ表示画面として、次の図のようなMovieClipを用意する。
(図3-3 メッセージ表示画面MovieClip)
メッセージ表示画面MovieClipに配置されているアイテムの構成は以下のようになっている。
| アイテム |
インスタンス名 |
種別 |
オブジェクトの種類 |
| メッセージ表示テキストフィールド |
msg_txt |
ダイナミックテキスト |
TextField |
| 戻るボタン |
back_mc |
ムービークリップ |
MovieClip |
|
|
 |
| |
3-2. |
プログラミング |
| |
|
次に、「タイムカード打刻」機能を実現するためのプログラミングを解説していく。今回のプログラミングでは、前項で紹介したMVCアーキテクチャに基づいたクラスを作成していく。
なお、連載第5回では、Flash MXオーサリングツール上の、「アクション」パネルにプログラムコードを記述していたが、今回、以降で作成する各クラスのプログラムコードは、1つのクラスごとに1つの外部テキストファイルで作成する。1クラス、1ファイルの外部ファイルとして作成することで、各機能のプログラムコードの所在が明確になるというメリットがある。なお、ActionScriptの外部ファイルを作成する際、ファイルの拡張子は「.as」とする。
テキストファイルの編集にはDreamWeaver MXを利用すると便利だ。 |
 |
| |
3-2-1. |
View |
| |
|
まず、タイムカード打刻画面のViewとして、「TimeStampView」クラスを作成する。
「TimeStampView」クラスは次の機能を実装し、タイムカード打刻画面MovieClipを制御する。
・「出社」ボタンのクリックイベント検知
・「退社」ボタンのクリックイベント検知
・入力情報(UserID,Password)取得
プログラムコードは次のようになる。
「TimeStampView」クラス / 「TimeStampView.as」ファイル
/*
CLASS TimeStampView class / View
*/
|
 |
|
|
|
//Constractor
TimeStampView = function() {
|
 |
|
|
|
//イベントハンドラ設定
this.comming_mc.onPress = function(){
_global.Controller.sendViewMessage("TIMECARD_COMMING");
}
this.quitting_mc.onPress = function(){
_global.Controller.sendViewMessage("TIMECARD_QUITTING");
} |
 |
 |
 |
(2) |
|
 |
|
|
|
}; |
 |
 |
 |
(1) |
|
 |
|
|
|
|
 |
|
|
|
TimeStampView.prototype = new MovieClip();
Object.registerClass("timeStampSymbol",
TimeStampView); |
 |
 |
 |
(4) |
|
 |
|
|
|
|
 |
|
|
|
//入力値取得
TimeStampView.prototype.getValue = function() {
var ret = {};
ret = {userID:this.userID_txt.text, password:this.password_txt.text};
return ret;
}; |
 |
 |
 |
(3) |
|
 |
|
|
|
|
|
ここでのポイントは次のとおりだ。ポイントの番号は、プログラムコード中に示した番号を指す。
| (1) |
クラスの定義
まず、TimeStampViewのクラス定義を行っている。 |
| (2) |
イベントハンドラ定義
「出社」ボタン、「退社」ボタンがクリックされた場合に行う処理を定義している。
ここでは、ボタンがクリックされた場合の処理として、後述するControllerのメソッド「sendViewMessage」を呼び出し、Contollerへイベントを通知している。 |
| (3) |
入力情報取得メソッド定義
画面上で入力されたUserID,Passwordを取得するためのメソッドを定義する。
このメソッドでは、TextFieldオブジェクト「userID_txt」、「password_txt」のプロパティ「text」を用いて入力値を取得後、入力値を名前つき配列※1で返している。
※1名前つき配列についてはFlash MXのリファレンスマニュアルを参照していただきたい。 |
| (4) |
クラスの登録
TimeStampViewクラスを、タイムカード打刻画面MovieClipに関連付けている。
クラスをMovieClipに関連付けることで、対象となるMovieClipは、関連付けられたクラスの機能をもつことになる。
クラスをMovieClipに関連付けるには、Flash MX で標準で用意されている「Object」オブジェクトの「registerClass」メソッドを用いる。「registerClass」メソッドの引数に指定している「TimeStampView」は関連付けるクラス名、「"timeStampSymbol"」はMovieClipの識別子だ。
なお、MovieClipの識別子とは、MovieClipに一意につける名前のことで、次図のように、あらかじめ「シンボルのプロパティ」画面で設定しておく。
「シンボルのプロパティ」画面は、Flash MXオーサリングツールの「ウィンドウ」−「ライブラリ」メニューを選択し表示されるライブラリペインの中で、対象とするMovieClipを右クリックし、「プロパティ」を選択することで表示される。
(図3-4 タイムカード打刻画面MovieClip シンボルのプロパティ画面)
|
次に、メッセージ表示画面のViewとして、「TimeMessageView」クラスを作成する。
「TimeMessageView」クラスは次の機能を実装し、メッセージ表示画面MovieClipを制御する。
・「戻る」ボタンのクリックイベント検知
・完了/エラーメッセージの表示
プログラムコードは次のようになる。
「TimeMessageView」クラス / 「TimeMessageView.as」ファイル
/*
CLASS TimeMessageView class / View
*/
//Constractor
TimeMessageView = function() {
this.msg_txt.text = "";
//イベントハンドラ設定
this.back_mc.onPress = function(){
_global.Controller.sendViewMessage("WIN_TIME_STAMP");
}
};
TimeMessageView.prototype = new MovieClip();
Object.registerClass("timeMessageSymbol", TimeMessageView);
//メッセージ表示
TimeMessageView.prototype.dspMsg = function(msg) {
this.msg_txt.text = msg;
}; |
|
|
 |
| |
3-2-2. |
Model |
| |
|
次に、出社、退社ボタンがクリックされた際の出退社打刻処理を行うModelとして、「TimeStampModel」クラスを作成する。
「TimeStampModel」クラスは、出社打刻、退社打刻情報をデータベースへ登録するために、連載第4回で開発したColdFusionコンポーネント「timecard.cfc」の、次のメソッドを呼び出し、結果を受信する処理を実装する。
| 提供メソッド |
commingStamp |
| 処理概要 |
UserID,Password妥当性、打刻妥当性チェックを行い、正常な場合、データベースTimecardTableに出社打刻情報を登録する。 |
| 引数 |
UserID Password
|
| 戻値 |
正常に打刻した場合、空文字("")
チェックエラーの場合、エラーメッセージ |
|
| 提供メソッド |
quittingStamp |
| 処理概要 |
UserID,Password妥当性、打刻妥当性チェックを行い、正常な場合、データベースTimecardTableに退社打刻情報を登録する。 |
| 引数 |
UserID Password
|
| 戻値 |
正常に打刻した場合、空文字("”)
チェックエラーの場合、エラーメッセージ |
|
プログラムコードは次のようになる。
「TimeStampModel」クラス / 「TimeStampModel.as」ファイル
/*
CLASS TimeStampModel class / Model
*/
|
 |
|
|
|
//Constractor
TimeStampModel = function() {
}; |
 |
 |
 |
(1) |
|
 |
|
|
|
//--------------------------------------------------
//タイムカード打刻
// kind(出退社種別) / "C":出社 "Q":退社
|
 |
|
|
|
TimeStampModel.prototype.stamp =
function(kind, userID, password) {
//Flash Remoting
NetServices.setDefaultGatewayUrl("http://localhost/flashservices/gateway");
var gateway_conn = NetServices.createGatewayConnection();
var timeAPI = gateway_conn.getService("step2.timecard",
this);
if(kind == "C"){ //出社
timeAPI.commingStamp(userID, password);
}else{ //退社
timeAPI.quittingStamp(userID, password);
}
}; |
 |
 |
 |
(2) |
|
 |
|
|
|
|
 |
|
|
|
//commingStamp処理 結果処理
TimeStampModel.prototype.commingStamp_Result = function(result)
{
if(result == ""){
_global.Controller.sendModelMessage("STAMP_END",
"出社打刻が完了しました。");
}else{
_global.Controller.sendModelMessage("STAMP_END",
result);
}
}; |
 |
 |
 |
(3) |
|
 |
|
|
|
|
 |
|
|
|
//quittingStamp処理 結果処理
TimeStampModel.prototype.quittingStamp_Result =
function(result) {
if(result == ""){
_global.Controller.sendModelMessage("STAMP_END",
"退社打刻が完了しました。");
}else{
_global.Controller.sendModelMessage("STAMP_END",
result);
}
}; |
 |
 |
 |
(4) |
|
 |
|
|
|
|
 |
|
|
|
//--------------------------------------------------
//サーバサイドエラー処理
TimeStampModel.prototype.onStaus = function(status)
{
trace("サーバサイドエラー:"+status);
}; |
 |
 |
 |
(5) |
|
 |
|
|
|
|
|
ここでのポイントは次のとおりだ。ポイントの番号は、プログラムコード中に示した番号を指す。
| (1) |
クラスの定義
まず、TimeStampModeのクラス定義を行っている。 |
| (2) |
タイムカード打刻メソッド定義
出退社打刻処理を行う「stamp」メソッドを定義する。
このメソッドでは、パラメータとしてkind(出退社種別)、UserID、Passwordを受け取り、
出退社種別に応じて、ColdFusionコンポーネント「timecard.cfc」のメソッドを呼び出す。
なお、「NetServices.setDefaultGatewayUrl」メソッドのパラメータ
「"http://localhost/flashservices/gateway"」はColdFusion
MX サーバー上のFlashRemotingサービスが動作するURL(http://<ホスト名またはIPアドレス>/flashservices/gateway)となる。
また、「gateway_conn.getService」メソッドのパラメータ「"step2.timecard"」はColdFusionコンポーネント「timecard.cfc」へのパスとなる。例えば、Web(ColdFusion
MX)サーバのドキュメントルート直下に「step2」というディレクトリ作成し、「step2」下に「timecard.cfc」を配置した場合、コンポーネントへのパスは「step2.timecard」となる。 |
| (3) |
出社打刻結果受信メソッド定義
ColdFusionコンポーネント「timecard.cfc」の通信結果を受信するためのメソッドを定義する。
「ColdFusionコンポーネントメソッド名_Result」の名称でメソッドを定義することで、指定したColdFusionコンポーネントメソッドの正常系結果を受信することが可能だ。
(詳細は連載第5回で解説しているので、そちらを参照していただきたい。)
このメソッドでは、出社打刻を行う「timecard.cfc」の「commingStamp」メソッドの通信結果を受信、処理する。
「commingStamp」メソッドは、正常登録された場合は、空文字を、チェックエラーの場合は、エラーメッセージを返すので、受信したデータを判定し、必要に応じて、Controllerのメソッド「sendModelMessage」(後述)を呼び出し、Contollerへイベントを通知している。 |
| (4) |
退社打刻結果受信メソッド定義
(3)と同様、退社打刻を行う「timecard.cfc」の「quittingStamp」メソッドの通信結果を受信するメソッドを定義する。 |
| (5) |
出退社打刻エラー結果受信メソッド定義
ColdFusionコンポーネント「timecard.cfc」の通信結果のうち、エラー系結果を受信するためのメソッドを定義する。ここでは、出社打刻を行う「commingStamp」メソッド、退社打刻を行う「quittingStamp」メソッドの両方のエラー系結果を受信、処理している。
「onStatus」の名称でメソッドを定義することで、ColdFusionコンポーネントメソッドのエラー系結果を受信することが可能だ。 |
|

 |
 |
 |
 |