特定の検証メソッドを編集し、ビジネス・ロジックを指定できます。まず、エンティティ・オブジェクト・ウィザードを使用し、エンティティ・オブジェクトにメソッドを追加します。
エンティティ・レベルの検証コードを作成するには、エンティティ・オブジェクトのクラス・ファイルにprotectedメソッドvalidateEntity()
を記述し、super.validateEntity()
をコールして、検証コードを記述します。
次に例を示します。
protected validateEntity() {
super.validateEntity()
// ### Implement custom domain validation logic here. ### }
Business Components for Javaフレームワークにより、これらのメソッドのシグネチャが定義され、スケルトン・コードが生成されます。これに、検証ロジックを実装するコードを追加します。たとえば、Emp
エンティティ・オブジェクトの場合、フレームワークでは、Emp
エンティティ全体を検証するためのvalidateEntity
メソッドを生成します。
エンティティ・オブジェクトの有効性が2つ以上の属性に依存している場合は、それらの属性が関連しているかどうかにかかわらず、エンティティ・レベルの検証を使用してください。たとえば、人事管理アプリケーションの場合、Emp
エンティティ・オブジェクトは、DateHired
属性とYearsOfService
属性間の関係が有効な場合にのみ有効です。検証規則により、他のエンティティからの値も評価できます。次のコード例では、マスター/ディテールAssociationで結合されたEmp
エンティティ・オブジェクトとDept
エンティティ・オブジェクトからの値を評価します。
public void validateEntity() {
// Generated call here.
super.validateEntity();
// Custom validation follows.
// Rule: Employees in ACCOUNTING cannot have Salary > 1500.
if (this.getDept().getDname().equals("ACCOUNTING") &&
(this.getSal().compareTo(1500) > 0) {
throw new JboException("Salary too high for ACCOUNTING.");
}
}
次のメソッドの例では、相互に関連していない3つの属性の値がチェックされます。どの属性値も他の属性値から導出されていません。しかし、これらの属性はいずれもnull以外の値が必要です。いずれかの値がnullの場合、メソッドにより例外がスローされます。
protected void validateEntity() throws DataAccessException {
// Generated call here.
super.validateEntity();
// Custom validation follows.
//------------------ EDITCHECKS: HeaderId
Number reqHdrId = (Number)getHeaderId("HeaderId");
if (reqHdrId == null) {
throw new JboException("HeaderId is required");
}
//------------------ EDITCHECKS: Segment1
if ((getSegment1("segment1") == null) ||
(((String)getSegment1("segment1")).trim().equals(""))) {
throw new JboException("segment1 is required");
}
//------------------ EDITCHECKS: TypeLookupCode
if ((getTypeLookupCode("typeLookupCode") == null) ||
(((String)getTypeLookupCode("typeLookupCode")).trim().equals(""))) {
throw new JboException("typeLookupCode is required");
}
}