ADFモデルのカスタム検証規則の作成

独自のXMLバリデータBeanを作成してJDeveloperに追加できます。これにより、他の開発者が同じ検証を宣言して再利用できます。カスタム検証規則の作成は、次のように2ステップのプロセスです。

  1. スケルトン・クラスの生成とJDeveloperへの登録
  2. 検証を実装するためのコードの追加

スケルトン・クラスを生成する手順は、次のとおりです。

  1. アプリケーション・ナビゲータで、検証規則を作成するプロジェクトを右クリックして「編集」を選択し、プロジェクト・プロパティ・エディタを表示します。
  2. 左ペインで「ADFm設定」を開き、「登録済の規則」を選択します。
  3. 「新規」をクリックして新しい規則を作成します。
  4. 「検証規則クラスの作成」ダイアログで、フィールドに入力し、「OK」をクリックして選択内容を保存します。新しい規則が「登録済の検証規則」のリストに表示されます。
  5. 「OK」をクリックし、プロジェクト・プロパティ・エディタを閉じます。

次のステップは、生成したスケルトン・クラスにコードを追加して検証クラスを実装することです。

検証クラスを実装する手順は、次のとおりです。

検証クラスにより、2つのキー・メソッドvetoableChangeおよびvalidateValueを提供するJbiValidatorインタフェースが実装されます。ビジネス・コンポーネント・フレームワークは、vetoableChangeをコールし、属性値が設定されている場合はPropertyChangeEventを渡します。通常は、validateValueをコールするためにvetoableChangeを実装します。validateValueがfalseを戻すと、vetoableChangeは失敗内容に関する情報を使用して例外を作成します。validateValueの実装により、独自の例外をスローすることもできます(ValidationExceptionを拡張する必要があります)。

たとえば、次のコードによりDemoCardValidatorという検証クラスが実装されます。validateValueの場合は、複雑すぎて組込みの規則では定義できないビジネス・ロジックが実装されます。コンパイル後に、これを使用してバリデータ・タイプを作成し、エンティティ・オブジェクト(CustomerエンティティのCreditCardNumber属性など)に適用できます。

package d2e;
import oracle.jbo.server.rules.JbiValidator;
import oracle.jbo.server.util.VetoableChangeListener;
import oracle.jbo.server.util.PropertyChangeEvent;

import oracle.jbo.server.ValidationException;


public class DemoCardValidator implements JbiValidator {


  private String description = " Verifies a credit card number. ";
  private final int mMinValue = 100; // Arbitrary value for demo.

  /**
    * Return true if value is valid
    */

  public boolean validateValue(Object value) {
      // Validates a credit card number by comparing the
      // sum of the digits to mMinValue, defined above.
    int checkSum = 0;
      // Assume the following card number format:
      // "1234567890123456"
    String cardNo = value.toString();
      for (int i = 0; i < cardNo.length(); i++) {
        checkSum += Integer.parseInt(cardNo.substring(i, i + 1));
      }
      return (checkSum > mMinValue) ? true : false;
    }

  /**
    * Invoked by framework for validation
    */

  public void vetoableChange(PropertyChangeEvent pce)
    throws ValidationException {
    Object newValue = (pce.getNewValue());
    if (!validateValue(newValue)) {
      Object objs[] = new Object[2];
      objs[0] = pce.getPropertyName() + this.getDescription();
      objs[1] = newValue;
      String errCode = "001";
      ValidationException ve = new ValidationException(errCode, objs);
      throw ve;
    }
  }

  /**
    * Description of what this class validates
    */

  public String getDescription() {
    return description;
  }

  /**
    * Description of what this class validates
    */

  public void setDescription(String str) {
    description = str;
  }

}     

また、プロジェクト・プロパティ・エディタを使用すると、プロジェクトに既存の検証規則を追加したり、定義済の検証規則を削除することもできます。他のプロジェクトから検証規則を追加すると、可能な場合にはその検証規則が再利用されます。

検証規則を追加または削除する手順は、次のとおりです。

  1. アプリケーション・ナビゲータで、検証規則を追加または削除するプロジェクトを右クリックして「編集」を選択し、プロジェクト・プロパティ・エディタを表示します。
  2. 左ペインで「ADFm設定」を開き、「登録済の規則」を選択します。
  3. 規則を追加するには、「追加」をクリックし、前に作成しておいた規則を再利用し、「規則」ダイアログを使用して規則を含むプロジェクトを検索します。
  4. 規則を削除するには、「登録済の検証規則」のリストから規則を選択します。
  5. 「OK」をクリックし、プロジェクト・プロパティ・エディタを閉じます。

これで検証BeanにJDeveloperでアクセスできるようになりました。カスタム・バリデータの使用方法については、「ADFモデルにおけるカスタム検証規則の使用」を参照してください。


ADFモデルの検証規則の使用