|
WebObjects 5.2.3 | ||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
EOValidationインターフェースは、NSValidationインターフェースの拡張です (NSValidationインターフェースはkey-valueコーディングを利用した検証メソッドを定義しています)。 EOValidationは、エンタープライズオブジェクトがプロパティ値を検証するのに使うメソッドを定義しています。 検証メソッドは、無効な値の型、有効な範囲外の値、無効なリレーションシップなどを検出します。 EOCustomObjectとEOGenericRecordは、次の仕様を実装しています。
Enterprise Objects Frameworkは、オブジェクトが外部ストアに保存(挿入か更新)される前に、すべてのオブジェクトのプロパティを検証します。
また、Javaクライアントアプリケーションのみですが、ユーザが編集用フィールドへの入力を終えると同時にプロパティ値の変更を検証するようにすることもできます。
EODisplayGroupがオブジェクトに値を設定するとき、 validateValueForKey
が実行されます。
オブジェクトは値の型を強制的に変換し、その他の検証作業を実行し、値が無効であれば例外を発生します。
デフォルトでは、EODisplayGroupはオブジェクトの保存時に検証エラーを捕捉すると、 validateValueForKey
のみ型変換のために使います。
ただし setValidatesChangesImmediately
を使うと、検証エラーの発生時に警告パネルを表示させることができます。
EOValidationのメソッド( validateForInsert
, validateForUpdate
, validateForSave
, validateForDelete
) は、特定の操作に対してオブジェクト全体を検証します。
これらのメソッドは、関連する操作が開始されたときに、Enterpise Objects Frameworkによって自動的に実行されます。
EOCustomObjectとEOGenericRecordはこのインターフェースを実装しているので、特別な検証ロジックが必要な場合にのみ実装し直すことになります。
カスタムエンタープライズオブジェクトのクラスでは、プロパティ値を参考に操作の許可・不許可を決めるためにオーバーライドします。
例えば、Feeオブジェクトの状態が未払いであれば削除できないようにします。
また、プロパティの検証を遅らせたり、複数のプロパティを比較するようにオーバーライドすることもできます。
例えば、日付のペアが有効期限内かどうかを確認します。
検証メソッドをオーバーライドするのであれば、 super
の実装を呼び出す必要があります。
validateFor...
のデフォルトの実装では、オブジェクトのEOClassDescriptionを元に validateValueForKey
を実行ながらプロパティを調べます。
EOAccessレイヤーのEOEntityClassDescriptionクラスは、削除ルールなどEOModelを元に検証します。
例えばDepartmentオブジェクトの削除ルールでは、DepartmentオブジェクトがEmployeeオブジェクトを持つ限り削除できません。
validateForSave
メソッドは、オブジェクトが外部ストアに書き込まれる際に、一般的な検証を行います。
validateForInsert
と validateForUpdate
の実装は、どちらもこのメソッドを呼び出します。
もしオブジェクトが挿入・更新以外の検証を行うならば、始めに validateForSave
を実行するべきです。
Nested Class Summary |
Nested classes inherited from class com.webobjects.foundation.NSValidation |
NSValidation.DefaultImplementation, NSValidation.Utility, NSValidation.ValidationException |
Method Summary | |
void |
validateClientUpdate()
オブジェクトがクライアントアプリケーション(Javaクライアント)から更新された後に実行されます。 オブジェクトがサーバ側のものと矛盾していないかどうかを検証します。 |
void |
validateForDelete()
オブジェクトが削除できるかどうかを確認し、削除できないなら例外 NSValidation.ValidationException を発生します。 |
void |
validateForInsert()
オブジェクトが挿入できるかどうかを確認し、挿入できないなら例外 NSValidation.ValidationException を発生します。 |
void |
validateForSave()
オブジェクトが保存できるかどうかを確認し、保存できないなら例外 NSValidation.ValidationException を発生します。 |
void |
validateForUpdate()
オブジェクトが更新できるかどうかを確認し、更新できないなら例外 NSValidation.ValidationException を発生します。 |
Methods inherited from interface com.webobjects.foundation.NSValidation |
validateTakeValueForKeyPath, validateValueForKey |
Method Detail |
public void validateClientUpdate() throws NSValidation.ValidationException
NSValidation.ValidationException
public void validateForDelete() throws NSValidation.ValidationException
オブジェクトが削除できるかどうかを確認し、削除できないなら例外 NSValidation.ValidationException を発生します。
例えば、削除ルールが EOClassDescription.DeleteRuleDeny
に設定されており、かつリレーション先のオブジェクトがある場合は、オブジェクトを削除できません。
EOCustomObjectの実装では、オブジェクトのEOClassDescriptionの validateObjectForDelete
メソッドを実行します(主に値の有無をチェックします)。
サブクラスでは独自の検証処理を行う前に super
の実装を呼ぶ必要があります。
処理中に例外が発生したら、 super
で捕捉した例外もまとめて、再度例外を投げる必要があります。
NSValidation.ValidationException
-
削除の要求が無効のとき
NSValidation.ValidationException
EOEnterpriseObject.propagateDeleteWithEditingContext(EOEditingContext)
public void validateForInsert() throws NSValidation.ValidationException
オブジェクトが挿入できるかどうかを確認し、挿入できないなら例外 NSValidation.ValidationException を発生します。
EOCustomObjectの実装では validateForSave
を実行します。
validateForSave
メソッドは、外部ストアにオブジェクトを書き込む際に一般的な検証を行います。
挿入以外の検証を行う場合は、始めに validateForSave
を実行してください。
NSValidation.ValidationException
-
挿入の要求が無効のとき
NSValidation.ValidationException
validateForSave()
public void validateForSave() throws NSValidation.ValidationException
オブジェクトが保存できるかどうかを確認し、保存できないなら例外 NSValidation.ValidationException を発生します。
EOCustomObjectの実装では、オブジェクトのEOClassdescriptionの validateObjectForSave
をすべてのプロパティに対して実行します。
処理中に1つでも例外が発生したら、辞書 userInfo
のキー NSValidation.ValidationException.AdditionalExceptionsKey
に、発生した例外の情報を含めた例外を再び投げます。
サブクラスでは、独自の検証処理を行う前に super
の実装を呼ぶ必要があります。
処理中に例外が発生したら、 super
で捕捉した例外もまとめて、再度例外を投げる必要があります。
エンタープライズオブジェクト同士がお互いに持つプロパティを検証するように実装することもできます。
例えば、休暇期間の終了日は開始日より後になります。
このようなプロパティを検証するには、NSValidationの validateValueForKey
をオーバーライドすると可能です。
NSValidation.ValidationException
-
保存の要求が無効のとき
NSValidation.ValidationException
NSValidation.validateValueForKey(Object, String)
public void validateForUpdate() throws NSValidation.ValidationException
オブジェクトが更新できるかどうかを確認し、更新できないなら例外 NSValidation.ValidationException を発生します。
EOCustomObjectの実装では validateForSave
を実行します。
validateForSave
メソッドは、外部ストアにオブジェクトを書き込む際に一般的な検証を行います。
更新以外の検証を行う場合は、始めに validateForSave
を実行してください。
NSValidation.ValidationException
- 更新の要求が無効のとき
NSValidation.ValidationException
validateForSave()
|
Last updated Thu Oct 21 15:04:16 PDT 2004. | ||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |