この章では、ヒューマン・タスクの作成方法、保存方法、およびヒューマン・タスクをBPELプロセスに関連付ける方法について説明します。 また、ヒューマン・タスクの削除方法と、ヒューマン・タスクとBPELプロセスの関連付けを削除する方法についても説明します。
この章には次の項が含まれます:
ヒューマン・タスク・エディタを使用するには、次の内容も含めてヒューマン・タスクの設計概念を理解する必要があります。
タスクを割り当てるユーザーのタイプ
ユーザーをタスクに割り当てる方法(静的、動的またはルールベース)
ユーザーを割り当てるタスクのモデリングに使用可能なタスクの参加者タイプ
タスク参加者のリストを作成するためのオプション
タスクのライフ・サイクル全体に関与する参加者
ヒューマン・タスクの概念の詳細は、第27章「ヒューマン・ワークフローの開始」を参照してください。
ヒューマン・ワークフローの問題のトラブルシューティングの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のヒューマン・ワークフローのトラブルシューティングに関する項を参照してください。
デモ・ユーザー・コミュニティと呼ばれるユーザーおよびグループの組織階層のインストールおよび使用方法の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド 』の付録データベースでのデモ・ユーザー・コミュニティのインストールに関する項を参照してください。
Oracle SOA Suiteには、タスク・メタデータをモデリングするための、ヒューマン・タスク・エディタと呼ばれるグラフィカル・ツールが用意されています。モデリング・プロセスは、次のタスクで構成されています。
SOAコンポジット・エディタでのヒューマン・タスク・サービス・コンポーネントの作成とモデリング
BPELプロセスとの関連付け
実行時にOracle BPM Worklistにヒューマン・タスクを表示するためのタスク・フォームの生成
この項では、これらのモデリング・タスクの概要について説明し、特定のモデリング手順の参照先を示します。
SOAコンポジット・エディタの使用方法の詳細は、第2章「Oracle SOA Suiteを使用したSOAコンポジット・アプリケーションの開発」を参照してください。
使用可能なサンプルについては、第31章「ヒューマン・ワークフローのチュートリアル」を参照してください
ヒューマン・タスクのメタデータは、次の2つのいずれかの方法で定義します。
ヒューマン・タスクを「コンポーネント・パレット」からOracle BPELデザイナのBPELプロセスにドラッグし、自動的に表示される「ヒューマン・タスクの作成」ダイアログで「追加」アイコンをクリックする方法。この操作で、ヒューマン・タスク・サービス・コンポーネントを作成するためのダイアログが表示されます。作成を完了すると、ヒューマン・タスク・エディタが表示されます。
ヒューマン・タスク・サービス・コンポーネントを「コンポーネント・パレット」からSOAコンポジット・エディタにドラッグする方法。この操作で、ヒューマン・タスク・コンポーネントを作成するためのダイアログが表示されます。作成を完了すると、ヒューマン・タスク・エディタが表示されます。
詳細は、第28.2項「ヒューマン・タスクの作成」を参照してください。
ヒューマン・タスク・エディタでは、ヒューマン・タスク・メタデータ(タスクの結果、ペイロード構造、割当ておよびルーティング・ポリシー、有効期限およびエスカレーション・ポリシー、通知設定など)を指定できます。この情報は、メタデータ・タスク構成ファイル(拡張子.task
)に保存されます。また、ワークフロー・パターンによっては、Oracle Business Rulesデザイナを使用して、タスクのルーティング・ポリシーまたは承認者のリストを定義する必要があります。
ヒューマン・タスクの作成後に、ヒューマン・タスクのメタデータを構成するには、ヒューマン・タスク・エディタを使用します。メタデータの詳細および構成手順については、第29章「ヒューマン・タスクの構成」を参照してください。
ヒューマン・タスク設定を構成する.task
ファイルは、Oracle BPELデザイナで、BPELプロセスに関連付けることができます。図28-1に示すように、構成のためにBPELプロセス・フローにドラッグしたヒューマン・タスクとの関連が作成されます。
タスク定義、タスク起案者、タスク優先度、およびBPEL変数に入力データを渡すタスク・パラメータ・マッピングも指定します。さらに、拡張機能も定義できます。たとえば、スコープとグローバル・タスク変数名(デフォルト名をそのまま使用しない場合)、タスク所有者、識別キー、BPELコールバックのカスタマイズ、およびヒューマン・タスクを拡張して他のワークフロー・タスクを追加するかどうかなどです。
関連付けが完了すると、タスク・サービス・パートナ・リンクが作成されます。タスク・サービスでは、タスクの操作に必要な操作が公開されます。
SOAコンポジット・エディタでは、BPELプロセスに関連付けないスタンドアロン・コンポーネントとしてのヒューマン・タスクを作成することもできます。スタンドアロン・ヒューマン・タスク・サービス・コンポーネントは、アプリケーションで自動化されたアクティビティが必要のない環境で役に立ちます。スタンドアロンの場合、クライアントは独自にタスクを作成できます。
詳細は、第28.4項「ヒューマン・タスクとBPELプロセスの関連付け」を参照してください。
タスク・フォームは、Oracle Application Development Framework(ADF)を使用して生成できます。このフォームは、実行時にOracle BPM Worklistで操作するタスクの詳細を表示するために使用されます。
タスク・フォームの生成の詳細は、第30章「ヒューマン・タスク用のタスク・フォームの設計」を参照してください。
ヒューマン・タスク・エディタを使用すると、タスクのメタデータを定義できます。エディタでは、ヒューマン・タスク設定(タスクの結果、ペイロード構造、割当ておよびルーティング・ポリシー、有効期限およびエスカレーション・ポリシー、通知設定など)を指定できます。
ヒューマン・タスク・サービス・コンポーネントは、SOAコンポジット・エディタまたはOracle BPELデザイナで作成します。作成後に、ヒューマン・タスク・エディタでコンポーネントを設計します。ヒューマン・タスク・サービス・コンポーネントを作成する方法によって、後でそのコンポーネントをBPELプロセス・サービス・コンポーネントに関連付けるのか、SOAコンポジット・エディタでスタンドアロン・コンポーネントとして存在するのかが決まります。
SOAコンポジット・エディタを使用して、ヒューマン・タスクを作成できます。通常、この方法は、スタンドアロン・コンポーネントとして使用するヒューマン・タスクを作成する場合に使用します。
SOAコンポジット・エディタでヒューマン・タスク・サービス・コンポーネントを作成する手順は、次のとおりです。
SOAコンポジット・エディタでヒューマン・タスク・サービス・コンポーネントを作成するSOAプロジェクトに進みます。
「コンポーネント・パレット」のリストから「SOA」を選択します。
リストがリフレッシュされ、サービス・コンポーネントおよびサービス・アダプタが表示されます。
リストからデザイナに「Human Task」をドラッグします。
「ヒューマン・タスクの作成」ダイアログが表示されます。
「名前」フィールドに、名前を入力します。
入力した名前は、.task
ファイル名になります。
「SOAPバインディングを持つコンポジット・サービスの作成」チェック・ボックスに注目します。このチェック・ボックスの選択により、ヒューマン・タスク・サービス・コンポーネントの作成方法が決まります。
後でBPELプロセス・サービス・コンポーネントに関連付けるヒューマン・タスク・サービスを作成する場合は、「SOAPバインディングを持つコンポジット・サービスの作成」チェック・ボックスを選択しないでください。ヒューマン・タスク・サービス・コンポーネントは、BPELプロセス・サービス・コンポーネントに明示的に関連付けられるコンポーネントとして作成されます。図28-2に詳細を示します。
ヒューマン・タスク・サービス・コンポーネントをSOAコンポジット・エディタでスタンドアロン・コンポーネントとして作成するには、「SOAPバインディングを持つコンポジット・サービスの作成」チェック・ボックスを選択します。これにより、Simple Object Access Protocol(SOAP)Webサービスと自動的に接続されるヒューマン・タスク・サービス・コンポーネントが作成されます。図28-3に詳細を示します。
このWebサービスは、外部の顧客に、SOAコンポジット・アプリケーションのヒューマン・タスク・サービス・コンポーネントへのエントリ・ポイントを提供します。
「OK」をクリックします。
SOAコンポジット・エディタでのヒューマン・タスク・サービス・コンポーネントの作成方法の詳細は、第2章「Oracle SOA Suiteを使用したSOAコンポジット・アプリケーションの開発」を参照してください。
Oracle BPELデザイナを使用して、ヒューマン・タスクを作成できます。通常、この方法は、BPELプロセスで使用するヒューマン・タスクを作成する場合に使用します。
Oracle BPELデザイナでヒューマン・タスクを作成する手順は、次のとおりです。
「コンポーネント・パレット」で、「SOAコンポーネント」を開きます。
リストからデザイナに「Human Task」をドラッグします。
「ヒューマン・タスクの作成」ダイアログが表示されます。
「追加」アイコンをクリックして、ヒューマン・タスクを作成します。
「名前」フィールドに、名前を入力します。
入力した名前は、.task
ファイル名になります。
「タイトル」フィールドに、タスクを入力します。
「OK」をクリックします。
ヒューマン・タスク・エディタが表示されます。
注意: 後でBPELプロセスに関連付けるヒューマン・タスクも作成できますが、その場合は、「ファイル」メイン・メニューから「新規」を選択し、次に「SOA層」→「サービス・コンポーネント」→「ヒューマン・タスク」の順に選択してください。 |
ヒューマン・タスクが作成されると、次のフォルダとファイルが表示されます。
ヒューマン・タスク・エディタで指定したヒューマン・タスク設定が、メタデータ・サービス(MDS)リポジトリのメタデータ・タスク構成ファイル(拡張子.task
)に保存されます。このファイルは、「アプリケーション・ナビゲータ」の「SOA_Project_Name」→ 「SOAコンテンツ」の下に表示されます。次をダブルクリックすると、このファイル内の設定を再編集できます。
SOAコンポジット・エディタまたはOracle BPELデザイナの「アプリケーション・ナビゲータ」にある.task
ファイル
SOAコンポジット・エディタ、またはOracle BPELデザイナのBPELプロセスにある「ヒューマン・タスク」アイコン
作成したヒューマン・タスクを含むヒューマン・タスク・フォルダは、SOAコンポジット・エディタの「構造」ウィンドウに表示されます。
図28-4に、これらのフォルダとファイルを示します。
使用可能なサンプルについては、第31章「ヒューマン・ワークフローのチュートリアル」を参照してください
ヒューマン・タスクの変更は、いつでも保存できます。「アプリケーション・ナビゲータ」でメタデータ・タスク構成ファイル(.task
)をダブルクリックすると、後でタスクを再編集できます。
ヒューマン・タスク・エディタを終了し、変更内容を保存する手順は、次のとおりです。
「ファイル」メイン・メニューから「保存」を選択するか、「X」記号(図28-5を参照)をクリックして、.task
メタデータ・タスク構成ファイルを閉じます。
「X」記号をクリックした場合は、プロンプトで「はい」を選択して変更内容を保存します。
SOAコンポジット・エディタで作成したヒューマン・タスク・サービス・コンポーネントをBPELプロセスに関連付けるには、次の指示に従います。関連付けが完了すると、Oracle BPELデザイナにタスク・サービス・パートナ・リンクが作成されます。タスク・サービスでは、タスクの実行に必要な操作が公開されます。
ヒューマン・タスクの作成方法の詳細は、第28.2項「ヒューマン・タスクの作成」を参照してください。
ヒューマン・タスク・サービス・コンポーネントをBPELプロセスに関連付ける方法は2種類あります。
SOAコンポジット・アプリケーションでヒューマン・タスク・サービス・コンポーネントを作成した場合は、Oracle BPELデザイナでヒューマン・タスク・アクティビティをBPELプロセスにドラッグします。次に、「ヒューマン・タスクの作成」ダイアログの「タスク定義」リストから既存のヒューマン・タスク・サービス・コンポーネントを選択します。次に、タスクのタイトル、起案者、パラメータ値およびその他の値を指定します。
ヒューマン・タスク・サービス・コンポーネントを作成していない場合は、Oracle BPELデザイナのBPELプロセスにヒューマン・タスク・アクティビティをドラッグします。次に、「ヒューマン・タスクの作成」ダイアログの「タスク定義」リストの右側にある「追加」アイコンをクリックします。これで、新しいヒューマン・タスク・サービス・コンポーネントの名前、パラメータおよび結果を指定できます。次に、残りのタスク・メタデータを設計するためのヒューマン・タスク・エディタが開きます。設計完了後、ヒューマン・タスク・エディタを閉じます。
ヒューマン・タスクをBPELプロセスに関連付ける手順は、次のとおりです。
SOAコンポジット・エディタに移動します。
ヒューマン・タスク・サービス・コンポーネントの.task
ファイルを関連付ける先のBPELプロセス・サービス・コンポーネントをダブルクリックします。
「コンポーネント・パレット」で、「SOAコンポーネント」を開きます。
新規のHuman TaskアクティビティをBPELプロセスにドラッグ・アンド・ドロップします。
Human Taskアクティビティをダブルクリックします。
「Human Task」ダイアログが表示されます。
「一般」タブの「タスク定義」リストから、ヒューマン・タスクを選択します(図28-6を参照)。
ヒューマン・タスク・サービス・コンポーネントの.task
ファイルがBPELプロセスに関連付けられます。
注意: ヒューマン・タスク・アクティビティをBPELプロセスに関連付けて「ヒューマン・タスクの作成」ダイアログを閉じた後は、そのヒューマン・タスク・アクティビティをOracle BPELデザイナでダブルクリックして、このダイアログにいつでも再アクセスできます。 |
BPELプロセスとそのプロセスが起動するヒューマン・タスク・サービス・コンポーネント間のワイヤを削除すると、ヒューマン・ワークフローのinvokeアクティビティがBPELプロセスから削除されます。ただし、アクションを実行する(承認、却下、その他のタスクの結果を含む)「taskSwitch」switchアクティビティはそのまま残ります。このように設計されている理由は、次のとおりです。
switchアクティビティには、ユーザーが入力したBPELコードが格納されています。
このswitchは、ワイヤの削除が単に別のヒューマン・タスクを指すことを意図している場合は再利用できます。
switchの削除はシングルステップのアクションです。
次に、同じ「taskSwitch」switchアクティビティを使用するためにヒューマン・タスク・サービス・コンポーネントをBPELプロセスにドラッグ・アンド・ドロップすると、新しい「taskSwitch」switchアクティビティが作成されます。BPELプロセスに同じ名前の2つのswitchアクティビティが存在する状態になります。どちらを削除するかを判断するには、「taskSwitch」switchアクティビティの承認、却下および他の結果を調査し、修正した古いswitchと新しいswitchを判断する必要があります。
図28-7に、ヒューマン・タスクを選択した後に表示される「一般」タブを示します。
「Human Task」アクティビティ・ダイアログの「一般」タブでは、表28-1に示す操作を実行できます。
タスクのタイトルは、実行時にOracle BPM Worklistに表示されます。これは必須フィールドです。第29.2.2項「タスクのタイトルの指定方法」の説明に従ってヒューマン・タスク・エディタの「一般」セクションの「タスクのタイトル」フィールドに入力したタスクのタイトルは、このフィールドに入力したタイトルによって上書きされます。
タスクのタイトルを指定する手順は、次のとおりです。
「一般」タブの「タスクのタイトル」フィールドに、次のいずれかの方法でタスクのタイトルを入力します。
タイトルを手動で入力します。
フィールドの右側にあるアイコンをクリックして「式ビルダー」ダイアログを表示し、タイトルを動的に作成します。
同じタイトルに静的なテキストと動的な式を併用することもできます。動的なテキストを使用するには、テキストの適切な位置にカーソルを置き、右側にあるアイコンをクリックして「式ビルダー」ダイアログを起動します。
タスク起案者を指定できます。起案者とは、タスクを開始するユーザーです。起案者は、作成したタスクをOracle BPM Worklistで参照したり、特定のタスク(タスクの取消し、一時停止など)を実行することができます。
タスク起案者とタスク優先度を指定する手順は、次のとおりです。
「一般」タブの「起案者」フィールドに、タスク起案者(たとえばjcooper
)を入力するか、右側にあるアイコンをクリックして「式ビルダー」ダイアログを表示し、タスク起案者を動的に指定します。このフィールドはオプションです。起案者が指定されていない場合は、「Human Task」ダイアログの「詳細」タブで指定したタスク所有者にデフォルト設定されます。タスク所有者も指定されていない場合、起案者はbpeladmin
にデフォルト設定されます。
「優先度」リストで1(最高値)から5の優先度値を選択します。これはユーザーが参照するためのフィールドで、このタスクの優先度が実行時に高くなることはありません。優先度を使用して、Oracle BPM Worklistでタスクをソートします。ヒューマン・タスク・エディタの「一般」セクションの「優先度」リストで選択した優先度値は、この優先度値によって上書きされます。
ヒューマン・タスク・エディタの優先度の指定の詳細は、第29.2.2項「タスクのタイトルの指定方法」を参照してください。
「タスクのタイトル」および「起案者」フィールドを完了すると、タスク・パラメータ表(図28-8を参照)にタスク・パラメータのリストが表示されます。
タスク・パラメータを指定する手順は、次のとおりです。
「BPEL変数」列で、「...」をダブルクリックして、タスク・パラメータをBPEL変数にマップします。マップする必要があるのは、入力データを使用するタスク・パラメータのみです。Oracle BPM Worklistから入力された出力データの場合、対応する変数のマップは不要です。
「タスク・パラメータ」ダイアログが表示されます。
「変数」ツリー(図28-9を参照)を開き、適切なタスク変数を選択します。
「OK」をクリックします。
図28-10に示す「Human Task」ダイアログが次のように表示されます。
ヒューマン・タスク・アクティビティの拡張機能を定義するには、「詳細」タブをクリックし、第28.4.4項「ヒューマン・タスク・アクティビティの拡張機能の定義方法」に進みます。そうしない場合は、「OK」をクリックしてヒューマン・タスク・ダイアログを閉じます。
図28-11に、「詳細」タブを示します。
「Human Task」アクティビティ・ダイアログの「詳細」タブでは、表28-2に示す操作を実行できます。
表28-2 「Human Task」 - 「詳細」タブ
フィールド | 参照先 |
---|---|
スコープ名 グローバル・タスク変数名 |
第28.4.4.1項「スコープ名とグローバル・タスク変数名の指定」 |
所有者 |
|
識別キー |
|
アイデンティティ・コンテキスト |
第28.4.4.4項「アイデンティティ・コンテキストの指定」 |
アプリケーション・コンテキスト |
第28.4.4.5項「アプリケーション・コンテキストの指定」 |
タスク履歴の追加元 |
第28.4.4.6項「他のヒューマン・タスクのタスク履歴の追加」 |
デフォルトのスコープ名とグローバル・タスク変数名は、ヒューマン・タスク・アクティビティの作成時に自動的に入力されます。ただし、ヒューマン・タスク・アクティビティの作成時にスコープとグローバル変数に名前を指定するためのカスタム名は指定できます。
スコープ名およびグローバル・タスク変数名を指定する手順は、次のとおりです。
「詳細」タブの「スコープ名」フィールドに、生成するBPELスコープの名前を入力します。
このBPELスコープにより、ワークフロー・サービスとBPEL変数の操作を使用する相互作用全体がカプセル化されます。
「詳細」タブの「グローバル・タスク変数名」フィールドに、グローバル・タスク変数名を入力します。
これは、ワークフローの相互作用に使用されるBPELタスク変数の名前です。
タスク所有者は、所有するビジネス・プロセスに属するタスクを参照し、タスク割当て先のユーザーにかわって操作を実行できます。また、所有者は、タスクの再割当て、取消しまたはエスカレートも実行できます。
「Human Task」ダイアログの「一般」タブでタスク起案者を指定しない場合は、ここで指定した所有者にデフォルト設定されます。
タスク所有者を指定する手順は、次のとおりです。
「詳細」タブの「所有者」フィールドに、タスク所有者名を入力するか、右側にあるアイコンをクリックし、「式ビルダー」を使用してこのタスクの所有者を動的に指定します。
識別キーは、タスクのユーザー定義IDとして使用できます。たとえば、注文書の承認に関するタスクの場合は、タスクの識別キーとして注文書IDを設定できます。タスクは、識別キーを使用してOracle BPM Worklistで検索できます。この属性にデフォルト値はありません。
識別キーを指定する手順は、次のとおりです。
「詳細」タブの「識別キー」フィールドに、必要に応じて識別キー値を入力します。
複数のレルムが構成されている場合は、タスクに対してアイデンティティ・レルム名が使用されます。同じタスクを実行している複数のレルムから割当て先を指定することはできません。複数のレルムを使用している場合、このフィールドは必須です。
アイデンティティ・コンテキストを指定する手順は、次のとおりです。
「詳細」タブの「アイデンティティ・コンテキスト」フィールドに、値を入力します。
アプリケーションのストライプ名には、タスクで使用されるアプリケーション・ロールが含まれます。
アプリケーション・コンテキストを指定する手順は、次のとおりです。
「詳細」タブの「アプリケーション・コンテキスト」フィールドに、値を入力します。
この機能を使用すると、あるヒューマン・タスクを別のヒューマン・タスクで継続できるようになります。単一のBPELプロセス内に複数の関連タスクを持つシナリオは多数あります。たとえば、次のようなヒューマン・タスクがあると想定します。
コンピュータに対するマネージャの承認を取得するための調達プロセス
間にある複数のBPELアクティビティ
IT部門がコンピュータを購入するための別のタスク
2番目のタスクの参加者が、マネージャが購入を承認したときに作成された承認履歴、コメントおよび添付ファイルを表示する必要があるとします。このオプションを使用して2番目のタスクを最初のタスクに連鎖すると、BPELプロセスでこれらの異なるタスクをリンクできます。
連鎖したタスクの場合は、新しいタスクのタイトルをタスク・メタデータ(.task
ファイル)から設定することはできません。たとえば、既存のタスクAが新しいタスクBに連鎖し、タスクBにヒューマン・タスク・エディタで新しいタイトルが設定されている場合、このタイトルは認識されません。したがって、連鎖したタスクに異なるタイトルが必要な場合、そのタイトルは、タスク・サービスreinitiate
操作をコールする前に、タスク・インスタンスに設定する必要があります。BPELプロセスがタスクを開始する場合は、ワークフロー・サービスAPIがコールされる前にタスクのタイトルを設定します。JavaプログラムがワークフローAPIをプログラムでコールしている場合は、タイトルを設定する必要があります。
タスクの履歴を他のタスクに追加する手順は、次のとおりです。
「詳細」タブの「タスク履歴の追加元」チェック・ボックスを選択して、BPELプロセス内の前のワークフロー・タスクを拡張します。このチェック・ボックスを選択すると、前のタスクからタスク履歴、コメントおよび添付ファイルが追加されます。これにより、完全なエンドツーエンドの監査証跡が得られます。
ヒューマン・タスクを別のヒューマン・タスクで続行する場合は、次の情報が新規ワークフローに引き継がれます。
タスク・ペイロードと、前のワークフローでペイロードに追加された変更内容
タスク履歴
前のワークフローでタスクに追加されたコメント
前のワークフローでタスクに追加された添付ファイル
期日
「タスク履歴の追加元」リストに、既存のワークフローがすべて表示されます。
特定のヒューマン・タスクを選択し、選択したヒューマン・タスクを拡張し(続け)ます。
たとえば、雇用プロセスを使用して、新規従業員を採用します。各面接担当者は、候補者を雇用するかどうか投票します。投票者の75%が雇用に賛成の場合、候補者は採用されます。このパーセントに満たない場合、候補者は採用されません。候補者が採用されると、HRデータベースにエントリが作成され、人事担当者は雇用プロセスを完了します。人事担当者は、各面接担当者と、候補者に関するコメントを確認する必要があります。このプロセスは、雇用にパラレル参加者タイプを使用することでモデリングできます。候補者が採用された場合は、データベース・アダプタを使用してHRデータベースにエントリが作成されます。その後は、単純ワークフローにパラレル参加者タイプのタスク履歴を追加して、応募申込み書、履歴書および面接担当者のコメントを引き継ぐことができます。この単純ワークフローは、人事担当者に割り当てられます。
使用するペイロードを次の中から選択します。
古いペイロードの消去と再作成
このオプションは、この拡張されたワークフローに含まれるヒューマン・タスクのXMLファイル内のペイロード属性が異なる場合に適用できます。たとえば、履歴を含めるヒューマン・タスクのペイロード属性に、他のヒューマン・タスクのペイロードにはない属性が3個ある場合などです。
既存のペイロードの使用
このオプションは、この拡張されたワークフローに含まれるヒューマン・タスクのXMLファイル内のペイロード属性が同じ場合に適用できます。
ヒューマン・タスク・アクティビティのモデリングを完了すると、デザイナでヒューマン・タスクが生成されます。
図28-12に、ワークフロー相互作用のモデリング方法を示します。図28-12は、BPELコールバックがモデリングされていない場合の相互作用も示しています。この場合、タスクが完了した後、完了したタスクを使用してBPELプロセスがコールバックされます。中間のイベントはBPELプロセス・インスタンスに伝播されません。ユーザー・カスタマイズは、最初のassignであるAssignTaskAttributesで実行し、AssignSystemTaskAttributesを変更しないことをお薦めします。
図28-13に示すように、Oracle BPELデザイナのヒューマン・タスク・アクティビティの横にある「拡張」アイコンをクリックして、その内容を表示します。
中間のイベントをBPELプロセス・インスタンスに伝播する必要がある場合は、ヒューマン・タスク・エディタの「イベント」セクションにある「BPELコールバックのタスクとルーティング・カスタマイズを許可」チェック・ボックスを選択します。このオプションが選択されている場合、ワークフロー・サービスはタスクの更新ごとにBPELインスタンス内でコールバックを起動します。次に説明するコールバックがTaskService.wsdl
ファイルにリストされます。
onTaskCompleted
このコールバックは、タスクの完了、期限切れ、取消しまたはエラー時に起動されます。
onTaskAssigned
このコールバックは、次のアクションが原因でタスクが一連の新規の割当て先に割り当てられるときに起動されます。
結果の更新
現在の割当てのスキップ
ルーティング・スリップの上書き
onTaskUpdated
このコールバックは、onTaskComplete
またはonTaskAssigned
コールバックに該当しないタスクに対する他の更新の際に起動されます。これには、情報のリクエスト、情報の発行、エスカレーション、再割当てなどによるタスクの更新が含まれます。
onSubTaskUpdated
このコールバックは、サブタスクに対する更新の際に起動されます。
図28-14に、コールバックを使用したワークフロー相互作用のモデリング方法を示します。このタスクが開始されると、タスクが完了するまでwhileループを使用してメッセージが受信されます。whileループには、4つのonMessageブランチ(前述したコールバック操作ごとに1つずつ)を備えたpickアクティビティが含まれています。ワークフロー相互作用は、onMessageブランチに何も変化がなくても正常に機能します。つまり、onMessageブランチでのカスタマイズは不要です。
このシナリオでは、ワークフロー・コンテキストはBPELインスタンスで取得されます。このコンテキストは、ワークフロー・サービスとのすべての相互作用に使用できます。たとえば、グループに割り当てられているタスクを再度割り当てる場合、タスク・サービスには、reassignTask
操作のワークフロー・コンテキストが必要です。
ユーザー・カスタマイズは、最初のassignであるAssignTaskAttributesで実行し、AssignSystemTaskAttributesを変更しないことをお薦めします。
生成されたヒューマン・タスク・アクティビティを変更する必要がある場合は、次の詳細に注意してください。
ヒューマン・タスクをBPELプロセス・フローに追加するときに、switchアクティビティで自動的に作成されたassignタスクを変更しないでください。かわりに、switchアクティビティの外側に新しいassignアクティビティを追加してください。
ヒューマン・タスクに渡されるパラメータを変更した場合(たとえば、「タスク・パラメータの編集」ダイアログでパラメータ・タイプを変更した場合)は、BPELプロセス・フローのヒューマン・タスク・アクティビティを開いて「OK」をクリックし、ペイロード変数の参照を修正する必要があります。修正しないと、パラメータ名が変わり、編集不可になります。
ヒューマン・タスク・エディタでタスクの結果を変更した場合は、ヒューマン・タスク・アクティビティを編集し、「OK」をクリックする必要があります。switch caseは、結果に対する変更に基づいて更新されます。
リソース・バンドルのタスクのタイトルまたはカテゴリの翻訳可能文字列になんらかの変更を加えても、すでに開始されたタスクのインスタンスには変更が表示されません。ただし、変更後に開始されたタスクのインスタンスには変更が表示されます。
コメントをヒューマン・タスクにコピーするときは、それらのコメントにタスクIDが含まれていないことを確認してください。taskId要素は、空であることが必要です。
ヒューマン・タスクで生成されたパートナ・リンク(たとえば、「パートナ・リンク」スイムレーンのhuman_task_name.TaskService)を削除すると、ヒューマン・タスクが使用不可になります。パートナ・リンクを削除した場合は、Oracle BPELデザイナでヒューマン・タスク・アクティビティを削除して、再起動する必要があります。
多くの場合、ビジネス・プロセスのフローは、タスクの結果によって決定されます。ビジネス・ロジックのモデリングを容易にするため、ユーザー・タスクの生成時には、BPELのswitchアクティビティがビルトインのcaseアクティビティとともに生成されます。デフォルトでは、タスクの作成時に選択した結果ごとに1つのcaseブランチが作成されます。また、タスクの取消し、期限切れ、エラー発生の各状態に対応するotherwiseブランチもswitchに生成されます。
転送されるタスクには、ペイロードが含まれます。ペイロードがビジネス・プロセス変数から設定されている場合は、ペイロードをタスクからソースにコピーして戻すために、copyPayloadFromTask
という名前のassignアクティビティが各caseおよびotherwiseブランチに作成されます。ペイロードが他のXPath式(ora:getNodes(...)
など)で表現されている場合は、ペイロードをコピーするためのプロセス変数が存在しないため、このassignは作成されません。ペイロードを変更する必要がない場合、このassignは削除できます。
デフォルトでは、switchアクティビティには通常の結果のみに対応するcase文が含まれています。その他のタスクの結果は、otherwiseブランチで取得されます。これらの結果は、次のとおりです。
タスクが取り消されます。
タスクがエラーになります。
タスクが期限切れになります。
ビジネス・ロジックをその他の結果にそれぞれ追加する必要がある場合は、case文をこれらの各条件に追加できます。case文は、次のBPELセグメントのように作成できます。その他の結果に対応する各caseアクティビティのXPath条件は、例28-1の中で太字で示されています。
例28-1 その他の結果に対応する各caseアクティビティのXPath条件
<switch name="taskSwitch"> <case condition="bpws:getVariableData('SequentialWorkflowVar1', '/task:task/task:state') = 'COMPLETED' and bpws:getVariableData('SequentialWorkflowVar1', '/task:task/task:conclusion') = 'ACCEPT'"> <bpelx:annotation> <bpelx:pattern>Task outcome is ACCEPT </bpelx:pattern> </bpelx:annotation> ... </case> <case condition= "bpws:getVariableData('SequentialWorkflowVar1', '/task:task/task:state') = 'WITHDRAWN'"> <bpelx:annotation> <bpelx:pattern>Task is withdrawn </bpelx:pattern> </bpelx:annotation> ... </case> <case condition= "bpws:getVariableData('SequentialWorkflowVar1', '/task:task/task:state') = 'EXPIRED'"> <bpelx:annotation> <bpelx:pattern>Task is expired </bpelx:pattern> </bpelx:annotation> ... </case> <case condition= "bpws:getVariableData('SequentialWorkflowVar1', '/task:task/task:state') = 'ERRORED'"> <bpelx:annotation> <bpelx:pattern>Task is errored </bpelx:pattern> </bpelx:annotation> ... </case> <otherwise> <bpelx:annotation> <bpelx:pattern>Task is EXPIRED, WITHDRAWN or ERRORED </bpelx:pattern> </bpelx:annotation> ... </otherwise> </switch>
テキスト・ファイルをヒューマン・タスクに添付できるようにするには、テキスト添付ファイルのコンテンツがエンコードされているかどうかを記述するフラグを設定する必要があります。このフラグはisContentEncoded
という名前です。このフラグを設定するには、ヒューマン・タスクを含む任意のヒューマン・ワークフローのサンプルで、BPELコードをカスタマイズします。このカスタマイズを行うには、サンプル内の.bpel
ファイルで、次のコピー・ルールをBPEL assignアクティビティ・コードに入力します。
<copy> <from>true()</from> <to>$initiateTaskInput.payload/task:task/task:attachment/task:isContentEncoded </to> </copy>
このコピー・ルールを入力した後は、ファイルを保存してBPELプロセスの設計を続行するか、または設計が終了している場合にはプロセスをデプロイできます。