Flash CS3 ドキュメンテーション |
|||
| ActionScript 3.0 のプログラミング > エラー処理 > 例: CustomErrors アプリケーション | |||
ここでは CustomErrors アプリケーションを使って、アプリケーション構築時のカスタムエラーを操作する手法について示します。それらの手法は、次のとおりです。
このサンプルのアプリケーションファイルを入手するには、www.adobe.com/go/learn_programmingAS3samples_flash_jp を参照してください。CustomErrors アプリケーションのファイルは、"Samples/CustomError" フォルダにあります。アプリケーションは、次のファイルで構成されています。
|
ファイル |
説明 |
|---|---|
|
CustomErrors.mxml または CustomErrors.fla |
Flash (FLA) または Flex (MXML) のメインアプリケーションファイル |
|
com/example/programmingas3/errors/ApplicationError.as |
FatalError および WarningError の両方の基本エラークラスとして機能するクラス。 |
|
com/example/programmingas3/errors/FatalError.as |
アプリケーションによるスローの可能性がある FatalError エラーを定義するクラス。このクラスは独自の ApplicationError クラスを拡張します。 |
|
com/example/programmingas3/errors/Validator.as |
ユーザー指定の従業員 XML パケットを検証する単一のメソッドを定義するクラス。 |
|
com/example/programmingas3/errors/WarningError.as |
アプリケーションによるスローの可能性がある WarningError エラーを定義するクラス。このクラスは独自の ApplicationError クラスを拡張します。 |
CustomErrors.mxml ファイルは、カスタムエラーアプリケーション用のユーザーインターフェイスと一部のロジックを含みます。アプリケーションの creationComplete イベントが送出されると、initApp() メソッドが呼び出されます。このメソッドは、Validator クラスによって検証されるサンプルの XML パケットを定義します。initApp() メソッドのコードを次に示します。
private function initApp():void
{
employeeXML =
<employee id="12345">
<firstName>John</firstName>
<lastName>Doe</lastName>
<costCenter>12345</costCenter>
<costCenter>67890</costCenter>
</employee>;
}
XML パケットは後で、TextArea コンポーネントインスタンスの Stage に表示されます。このため、再検証を試みる前に XML パケットを変更できます。
ユーザーが Validate ボタンをクリックすると、validateData() メソッドが呼び出されます。このメソッドは、Validator クラスの validateEmployeeXML() メソッドを使用して、従業員 XML パケットを検証します。validateData() メソッドのコードを次に示します。
public function validateData():void
{
try
{
var tempXML:XML = XML(xmlText.text);
Validator.validateEmployeeXML(tempXML);
status.text = "The XML was successfully validated.";
}
catch (error:FatalError)
{
showFatalError(error);
}
catch (error:WarningError)
{
showWarningError(error);
}
catch (error:Error)
{
showGenericError(error);
}
}
最初に、TextArea コンポーネントインスタンス xmlText の内容を使用して、一時的な XML オブジェクトが作成されます。次に、独自の Validator クラス (com.example.programmingas3/errors/Validator.as) の validateEmployeeXML() メソッドが呼び出され、一時的な XML オブジェクトをパラメータとして渡します。XML パケットが有効な場合、Label コンポーネントインスタンス status が成功メッセージを表示して、アプリケーションが終了します。validateEmployeeXML() メソッドがカスタムエラーをスローした (つまり、FatalError、WarningError、または汎用 Error が発生した) 場合は、適切な catch ステートメントを実行して、showFatalError()、showWarningError()、または showGenericError() メソッドのいずれかを呼び出します。これらの各メソッドは、適切なメッセージを Alert コンポーネントに表示して、発生した具体的なエラーをユーザーに通知します。各メソッドは、具体的なメッセージで Label コンポーネントインスタンス status の更新も行います。
従業員 XML パケットを検証しようとしたときに致命的なエラーが発生した場合は、次のコードが示すように、そのエラーメッセージが Alert コンポーネントに表示され、TextArea コンポーネントインスタンス xmlText および Button コンポーネントインスタンス validateBtn が無効になります。
public function showFatalError(error:FatalError):void
{
var message:String = error.message + "\n\n" + "Click OK to end.";
var title:String = error.getTitle();
Alert.show(message, title);
status.text = "This application has ended.";
this.xmlText.enabled = false;
this.validateBtn.enabled = false;
}
致命的なエラーではなく警告エラーが発生した場合は、そのエラーメッセージが Alert コンポーネントに表示されますが、TextField および Button コンポーネントインスタンスは無効になりません。showWarningError() メソッドが、カスタムエラーメッセージを Alert コンポーネントインスタンスに表示します。このメッセージでは、XML の検証を続行するかスクリプトを中止するかの質問もユーザーに表示します。showWarningError() メソッドの抜粋コードを次に示します。
public function showWarningError(error:WarningError):void
{
var message:String = error.message + "\n\n" + "Do you want to exit this application?";
var title:String = error.getTitle();
Alert.show(message, title, Alert.YES | Alert.NO, null, closeHandler);
status.text = message;
}
Yes または No ボタンを使用してユーザーが Alert コンポーネントインスタンスを閉じると、closeHandler() メソッドが呼び出されます。closeHandler() メソッドの抜粋コードを次に示します。
private function closeHandler(event:CloseEvent):void
{
switch (event.detail)
{
case Alert.YES:
showFatalError(new FatalError(9999));
break;
case Alert.NO:
break;
}
}
警告エラーで Yes をクリックしてユーザーがスクリプトの中止を選択した場合は、FatalError がスローされ、その結果アプリケーションは終了します。
独自の Validator クラスは、1 つのメソッド validateEmployeeXML() を含みます。validateEmployeeXML() メソッドは、1 つのパラメータ employee (検証対象の XML パケット) を受け取ります。validateEmployeeXML() メソッドを次に示します。
public static function validateEmployeeXML(employee:XML):void
{
// checks for the integrity of items in the XML
if (employee.costCenter.length() < 1)
{
throw new FatalError(9000);
}
if (employee.costCenter.length() > 1)
{
throw new WarningError(9001);
}
if (employee.ssn.length() != 1)
{
throw new FatalError(9002);
}
}
検証のため、従業員は 1 つ (1 つのみ) の原価部門に属していなければなりません。従業員がいずれの原価部門にも属していない場合は、FatalError がスローされてメインアプリケーションファイルの validateData() メソッドに移ります。従業員が複数の原価部門に属している場合は、WarningError がスローされます。XML バリデータの最終チェックは、ユーザーに定義されている社会保障番号が厳密に 1 つであることの確認です (XML パケットの ssn ノード)。存在する ssn ノードが厳密に 1 つでない場合は、FatalError エラーがスローされます。
validateEmployeeXML() メソッドに追加のチェックを加えることができます。たとえば、ssn ノードに格納されている番号が有効であることを確認する場合や、従業員に少なくとも 1 つの電話番号と電子メールアドレスを割り当て、その両方の値が有効であることを確認する場合などです。各従業員に一意の ID を割り当てその上司の ID を指定するために、XML を変更することもできます。
ApplicationError クラスは、FatalError および WarningError の両方の基本クラスとして機能します。ApplicationError クラスは Error クラスを拡張して、独自にメソッドおよびプロパティを定義します。エラー ID、重大度、独自のエラーコードおよびメッセージを格納する XML オブジェクトなどを定義します。このクラスでは、エラーの種類ごとの重大度を定義するのに使用する 2 つの静的定数も定義します。
ApplicationError クラスのコンストラクタメソッドを次に示します。
public function ApplicationError()
{
messages =
<errors>
<error code="9000">
<![CDATA[Employee must be assigned to a cost center.]]>
</error>
<error code="9001">
<![CDATA[Employee must be assigned to only one cost center.]]>
</error>
<error code="9002">
<![CDATA[Employee must have one and only one SSN.]]>
</error>
<error code="9999">
<![CDATA[The application has been stopped.]]>
</error>
</errors>;
}
XML オブジェクトの各エラーコードは、一意の数値コードとエラーメッセージを格納します。次の getMessageText() メソッドが示すように、エラーメッセージは、E4X を使用してエラーコードで簡単に調べることができます。
public function getMessageText(id:int):String
{
var message:XMLList = messages.error.(@code == id);
return message[0].text();
}
getMessageText() メソッドは、1 つの整数パラメータ id を受け取り、ストリングを返します。id パラメータには、調べるエラーのエラーコードを指定します。たとえば、id を 9001 で渡すと、「従業員は 1 つのみの原価部門に割り当てなければならない」ことを示すエラーを受け取ります。複数のエラーでエラーコードが同じ場合、ActionScript は見つかった最初の結果のみにエラーメッセージを返します (返された XMLList オブジェクトの message[0])。
このクラスの次のメソッドである getTitle() はパラメータを 1 つも受け取らず、この特定のエラーのエラー ID を格納するストリング値を返します。この値は Alert コンポーネントのタイトルで使用すると、XML パケットの違反時に発生した正確なエラーを簡単に識別するのに役立ちます。getTitle() メソッドの抜粋コードを次に示します。
public function getTitle():String
{
return "Error #" + id;
}
ApplicationError クラスの最後のメソッドは toString() です。このメソッドは、エラーメッセージの表現をカスタマイズするために、Error クラスに定義されている関数をオーバーライドします。発生した特定のエラー番号とメッセージを識別するストリングを返します。
public override function toString():String
{
return "[APPLICATION ERROR #" + id + "] " + message;
}
FatalError クラスは独自の ApplicationError クラスを拡張して、3 つのメソッド (FatalError コンストラクタ、getTitle()、および toString() を定義します。最初のメソッドである FatalError コンストラクタは、1 つの整数パラメータ errorID を受け取り、ApplicationError クラスに定義されている静的定数値を使用してエラーの重大度を設定し、ApplicationError クラスの getMessageText() メソッドを呼び出して特定のエラーのエラーメッセージを取得します。FatalError コンストラクタを次に示します。
public function FatalError(errorID:int)
{
id = errorID;
severity = ApplicationError.FATAL;
message = getMessageText(errorID);
}
FatalError クラスの次のメソッドである getTitle() は、ApplicationError クラスで以前に定義された getTitle() メソッドをオーバーライドし、致命的なエラーが発生したことをユーザーに通知するためにタイトルにテキスト "-- FATAL" を追加します。getTitle() メソッドを次に示します。
public override function getTitle():String
{
return "Error #" + id + " -- FATAL";
}
このクラスの最後のメソッドである toString() は、ApplicationError に定義されている toString() メソッドをオーバーライドします。toString() メソッドを次に示します。
public override function toString():String
{
return "[FATAL ERROR #" + id + "] " + message;
}
WarningError クラスは ApplicationError クラスを拡張し、FatalError クラスとほぼ同一です。ただし、次のコードが示すようなマイナー変更があり、エラー重大度は ApplicationError.FATAL ではなく ApplicationError.WARNING に設定されます。
public function WarningError(errorID:int)
{
id = errorID;
severity = ApplicationError.WARNING;
message = super.getMessageText(errorID);
}
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート
現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000109.html