https://blogs.oracle.com/OBPM-leaning/entry/process_level_exception_handling_in
BPM 12cでは、よりコントロールされたアクションでプロセスレベルのトランザクションを取り扱うことができます。BPM 11.1.1.7では、イベント・サブプロセスを使って全てのビジネス例外やシステム例外を捕捉しましたが、BPMNプロセスフローの失敗したアクティビティに戻って再開したり、失敗したアクティビティをスキップして処理を進めることはできません。この機能はBPM 10gR3における主要な機能で、Process Exceptionsを使い、BPMインスタンスをよりコントロールしていました。
BPM 12cでは、プロセス·フロー実行中に例外が発生した場合、例外を発生したフローオブジェクトに戻って再試行するか、メインプロセスフローの次のフローオブジェクトにプロセス·インスタンスを移動するかを選択できます。
この設定は、事前定義済み変数"action"に特定の値を入れることで定義できます。
利用可能な値は、以下の2種類です。
1. BACK
例外を捕捉し、BPMプロセスフローの例外を吐いたアクティビティを再実行したい場合は、スクリプトタスク内で事前定義済み変数actionに文字列"back"を設定します。2. SKIP
例外が発生した場合に次のアクティビティにインスタンスを遷移するためには、スクリプトタスクで事前定義済み変数actionに文字列"skip"を指定します。Retry Failed BPM instance
以下の手順でイベント・サブプロセスを構成すると、例外が発生したBPMプロセスのアクティビティを再実行します。- ヒューマンタスク、サービスタスクなどといったアクティビティを使ってBPMプロセスを作成します。また、ビジネス例外(ここではRetryExceptionとします)をBPMプロジェクトのビジネスカタログ・コンポーネントに定義しておきます。
- イベント・サブプロセスをBPMプロセスにドラッグ&ドロップで貼り付けます。
- スタート・アクティビティを右クリックし、[実装]タブに移動します。
- [実装タイプ]では[エラー]を選択し、[リカバリ可能なエラー]チェックボックスにチェックを入れます。
- [タイプ]では、RetryExceptionを選択します。
- [データ・アソシエーション]タブで、例外の詳細を記述するようにプロセスデータオブジェクトで定義されている"errorInfo"に値をマッピングします。
- スクリプトタスクを同じイベント・サブプロセスに追加します。
- スクリプトタスクの[実装]タブを開き、事前定義済み変数actionに"back"を指定します。
- BPMアプリケーションをデプロイ、テストします。
- イベント・サブプロセスが例外を捕捉すると、手順8で定義した内容に従い、BPMインスタンスは例外が発生したアクティビティに戻って再実行します。
Skip Failed BPM instance
以下の手順でイベント・サブプロセスを構成すると、失敗したBPMプロセスのアクティビティをスキップし、次のアクティビティから実行を再開します。- ヒューマンタスク、サービスタスクなどといったアクティビティを使ってBPMプロセスを作成します。また、ビジネス例外(ここではSkipExceptionとします)をBPMプロジェクトのビジネスカタログ・コンポーネントに定義しておきます。
- イベント・サブプロセスをBPMプロセスにドラッグ&ドロップで貼り付けます。
- スタート・アクティビティを右クリックし、[実装]タブに移動します。
- [実装タイプ]では[エラー]を選択し、[リカバリ可能なエラー]チェックボックスにチェックを入れます。
- [タイプ]では、SkipExceptionを選択します。
- [データ・アソシエーション]タブで、例外の詳細を記述するようにプロセスデータオブジェクトで定義されている"errorInfo"に値をマッピングします。
- スクリプトタスクを同じイベント・サブプロセスに追加します。
- スクリプトタスクの[実装]タブを開き、事前定義済み変数actionに"skip"を指定します。
- BPMアプリケーションをデプロイ、テストします。
- イベント・サブプロセスが例外を捕捉すると、手順8で定義した内容に従い、BPMインスタンスは例外が発生したアクティビティをスキップし、プロセスフローで定義されている次のアクティビティに移動して実行を継続します。
例外処理のProof of Concept用プロジェクトを作成しました。こちらからダウンロードできます。
0 件のコメント:
コメントを投稿