ヘッダーをスキップ
Oracle Application Development Framework Forms/4GL開発者のための開発者ガイド
10g(10.1.3.0)
B40013-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

C 一般的なOracle Formsのトリガーに相当するADFの機能

この付録では、Oracle Formsのよく使用されるトリガーを使って実行される基本タスクをOracle ADFを使用して実行する方法の概要を示します。

この付録には、次の項が含まれます。

C.1 検証とデフォルト設定(ビジネス・ロジック)

表C-1 Oracle Formsの検証およびデフォルト設定トリガーに相当するADFの機能

Formsのトリガー 相当するADFの機能

WHEN-VALIDATE-RECORD

レコード・レベルで検証コードを実行します。

エンティティ・オブジェクトのカスタムなEntityImplクラスで、validateXXXX()のようなメソッド名を持ち、boolean型を返すpublicメソッドを作成し、検証に成功するとtrue、検証に失敗するとfalseを返すようにします。その後、エンティティ・オブジェクトの「検証」パネルのエンティティ・レベルで、該当する検証メソッドにメソッド・バリデータを追加します。その実行時に、検証エラー・メッセージとルールを関連付けることができます。

WHEN-VALIDATE-ITEM

フィールド・レベルで検証コードを実行します。

エンティティ・オブジェクトのカスタムなEntityImplクラスで、boolean型を返し、属性と同じデータ型の引数を1つ受け取る(validateXXXX()のようなメソッド名を持つ)publicメソッドを作成します。このメソッドで、検証に成功するとtrue、検証に失敗するとfalseを返すようにします。その後、エンティティ・オブジェクトの「検証」パネルの該当する属性のエンティティ属性レベルで、該当する検証メソッドにメソッド・バリデータを追加します。その実行時に、検証エラー・メッセージとルールを関連付けることができます。

WHEN-DATABASE-RECORD

データブロック内の行にINSERTまたはUPDATEのマークが付けられるとコードを実行します。

エンティティ・オブジェクトのaddToTransactionManager()メソッドをオーバーライドします。スーパー・メソッドをコールした後、コードを記述します。

WHEN-CREATE-RECORD

データ・ブロック内で新規レコードが作成されると、該当レコードの変更ステータスを変更することなくコードを実行し、複雑なデフォルト値を移入します。

エンティティ・オブジェクトのcreate()メソッドをオーバーライドし、スーパー・メソッドをコールした後、該当するsetAttrName()メソッドを使用して属性のデフォルト値を必要に応じて設定します。主キー属性に順序値を積極的に設定するには、SequenceImplヘルパー・クラスのインスタンスを作成し、そのgetSequenceNumber()メソッドをコールして次の順序番号を取得します。この値は、主キー属性に割り当てます。順序番号を遅延割当てするものの、データベース・トリガーは使用しない場合は、エンティティ・オブジェクト内のオーバーライドしたprepareForDML()メソッドの中で前述の方法を使用できます。また、独自のBEFOREINSERTFOREACHROWデータベース・トリガーを使用して順序値から主キーを割り当てるには、通常のNumber型ではなくDBSequenceという特殊なデータ型を主キー属性で使用します。

WHEN-REMOVE-RECORD

行がデータ・ブロックから削除されるとコードを実行します。

エンティティ・オブジェクトのremove()メソッドをオーバーライドし、スーパー・メソッドをコールする前またはコールした後でコードを記述します。


C.2 問合せ処理

表C-2 Oracle Formsの問合せ処理トリガーに相当するADFの機能

Formsのトリガー 相当するADFの機能

PRE-QUERY

データ・ブロック内で問合せが実行される前にロジックを実行します(通常は、「サンプル・レコード」内のQuery-By-Example基準の値を設定することが目的)。

ビュー・オブジェクト・クラスのexecuteQueryForCollection()をオーバーライドし、スーパー・メソッドをコールする前にコードを記述します。

ON-COUNT

データ・ブロックの問合せのヒット数をカウントするためのデフォルトの動作をオーバーライドします。

ビュー・オブジェクト内のgetQueryHitCount()をオーバーライドし、スーパー・メソッドをコールする以外の処理を実行します。

POST-QUERY

データ・ブロックのデータソースから各行を取得した後、ロジックを実行します。

一般に、POST-QUERYスタイルの方法を使用して現在の行内の外部キー値に基づいて他の表から説明をフェッチするかわりに、ADFでは問合せ内で必要な全情報をメイン表および補助/検索値表から結合して、関与するエンティティ・オブジェクトが複数存在するビュー・オブジェクトを構築する方が効率的です。この方法では、データベースに対する1回のラウンドトリップで、必要な情報がすべて得られます。POST-QUERYのような、行がフェッチされるたびに実行されるトリガーが必要な場合は、ビュー・オブジェクト・クラス内のcreateInstanceFromResultSet()メソッドをオーバーライドします。

ON-LOCK

データ・ブロック内の現在の行でロックの取得を試行するためのデフォルトの動作をオーバーライドします。

エンティティ・オブジェクト・クラス内のlock()をオーバーライドし、スーパー・メソッドをコールする以外の処理を実行します。


C.3 データベース接続

表C-3 Oracle Formsのデータベース接続トリガーに相当するADFの機能

Formsのトリガー 相当するADFの機能

POST-LOGON

データベースにログオンした後にロジックを実行します。

カスタム・アプリケーション・モジュールのafterConnect()をオーバーライドします。アプリケーション・モジュール・インスタンスでは、様々な論理クライアント・セッションにサービスを提供している間、接続状態を維持できます。そのため、初期ログインの後および直前のユーザーとは異なるユーザーによってアプリケーション・モジュールが使用された後に起動されるprepareSession()をオーバーライドするのが適していると思われます。

PRE-LOGOUT

データベースからログオフする前にロジックを実行します。

カスタムなアプリケーション・モジュール・クラスのbeforeDisconnect()をオーバーライドし、コードを記述します。


C.4 トランザクション後の処理(レコード・キャッシュ)

表C-4 Oracle Formsのトランザクション・トリガーに相当するADFの機能

Formsのトリガー 相当するADFの機能

PRE-COMMIT

変更された行の処理がトランザクション内のすべてのデータ・ブロックで開始される前にコードを実行します。

カスタムなDBTransactionImplクラス内のcommit()メソッドをオーバーライドし、スーパー・メソッドをコールする前にコードを記述します。

注意:

カスタムなDBTransaction実装の作成および使用の概要については、この記事を参照してください。

PRE-INSERT

後処理中にデータブロック内のNEW行がINSERTによってデータベースに挿入される前にコードを実行します。

エンティティ・クラス内のdoDML()メソッドをオーバーライドし、operationDML_INSERTに等しい場合は、スーパー・メソッドをコールする前にコードを記述します。

ON-INSERT

後処理中にNEW行がINSERTによってデータベースに挿入されるというデフォルト処理をオーバーライドします。

エンティティ・クラス内のdoDML()メソッドをオーバーライドし、operationDML_INSERTに等しい場合は、スーパー・メソッドをコールするかわりにコードを記述します。

POST-INSERT

後処理中にデータブロック内のNEW行がINSERTによってデータベースに挿入された後にコードを実行します。

エンティティ・クラス内のdoDML()メソッドをオーバーライドし、operationDML_INSERTに等しい場合は、スーパー・メソッドをコールした後にコードを記述します。

PRE-DELETE

後処理中にデータブロック内の行がDELETEによってデータベースから削除される前にコードを実行します。

エンティティ・クラス内のdoDML()メソッドをオーバーライドし、operationDML_DELETEに等しい場合は、スーパー・メソッドをコールする前にコードを記述します。

ON-DELETE

後処理中にデータブロック内の行がDELETEによってデータベースから削除されるというデフォルト処理をオーバーライドします。

エンティティ・クラス内のdoDML()メソッドをオーバーライドし、operationDML_DELETEに等しい場合は、スーパー・メソッドをコールするかわりにコードを記述します。

POST-DELETE

後処理中にデータブロック内の行がDELETEによってデータベースから削除された後にコードを実行します。

エンティティ・クラス内のdoDML()メソッドをオーバーライドし、operationDML_DELETEに等しい場合は、スーパー・メソッドをコールした後にコードを記述します。

PRE-UPDATE

後処理中にデータブロック内で変更された行がUPDATEによってデータベース内で更新される前にコードを実行します。

エンティティ・クラス内のdoDML()メソッドをオーバーライドし、operationDML_UPDATEに等しい場合は、スーパー・メソッドをコールする前にコードを記述します。

ON-UPDATE

後処理中にデータブロック内で変更された行がUPDATEによってデータベース内で更新されるというデフォルト処理をオーバーライドします。

エンティティ・クラス内のdoDML()メソッドをオーバーライドし、operationDML_UPDATEに等しい場合は、スーパー・メソッドをコールするかわりにコードを記述します。

POST-UPDATE

後処理中にデータブロック内で変更された行がUPDATEによってデータベース内で更新された後にコードを実行します。

エンティティ・クラス内のdoDML()メソッドをオーバーライドし、operationDML_UPDATEに等しい場合は、スーパー・メソッドをコールした後にコードを記述します。

POST-FORMS-COMMIT

Formsが必要な行をすべてデータベースにポストしてから、データのCOMMITを発行してトランザクションを終了する前にコードを実行します。

トランザクション全体を単一のコード・ブロックにする場合は、カスタムなDBTransactionImplオブジェクト内のdoCommit()メソッドをオーバーライドし、スーパー・メソッドをコールする前になんらかのコードを記述します。トランザクション内で影響を受けるエンティティごとにコミットを実行する前に、エンティティに固有なコードを実行するには、エンティティ・オブジェクトのbeforeCommit()メソッドをオーバーライドして、そこになんらかのコードを記述します。

POST-DATABASE-COMMIT

データベース・トランザクションがコミットされた後にコードを実行します。

カスタムなDBTransactionImplクラス内のcommit()メソッドをオーバーライドし、スーパー・メソッドをコールした後にコードを記述します。


C.5 エラー処理

表C-5 Oracle Formsのエラー処理トリガーに相当するADFの機能

Formsのトリガー 相当するADFの機能

ON-ERROR

エラーを処理するためのデフォルトの動作をオーバーライドします。

ADF BindingContextにカスタムなエラー・ハンドラ(DCErrorHandler)をインストールします。