この章では、ヒューマン・ワークフロー・サービスの使用方法を説明します。 ヒューマン・ワークフロー・サービスは、タスクのライフ・サイクル内で様々な操作を実行します。
項目は次のとおりです。
この項では、次のヒューマン・ワークフロー・サービスの役割について説明します。
タスク・サービス
タスク問合せサービス
アイデンティティ・サービス
タスク・メタデータ・サービス
ユーザー・メタデータ・サービス
タスク・レポート・サービス
ランタイム構成サービス
エビデンス・ストア・サービス
表29-1に、タスク・サービスに提供されるSimple Object Access Protocol(SOAP)、Enterprise JavaBeansおよびJavaサポートのタイプを示します。 ほとんどのヒューマン・ワークフロー・サービスは、SOAPおよびローカルとリモートのEnterprise JavaBeans APIからアクセスできます。これらのサービスは、適切なクライアント・プロキシを使用して直接利用できます。また、プロトコル詳細を要約し、すべての通信の共通のインタフェースを提供するクライアント・ライブラリが提供されます。
表29-1 Enterprise JavaBeans、SOAPおよびJavaサポート
表29-2に、各タスク・サービスに対するSOAP Web Services Description Language(WSDL)ファイルの場所を示します。
表29-2 タスク・サービスのSOAP WSDLの場所
| サービス名 | SOAP WSDLの場所 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
表29-3に、様々なEnterprise JavaBeansのJNDI名を示します。
表29-3 様々なEnterprise JavaBeansのJNDI名
| サービス名 | 様々なEnterprise JavaBeansのJNDI名 |
|---|---|
|
タスク・サービス |
|
|
クライアント・トランザクションに参加するタスク・サービスのEnterprise JavaBeans |
|
|
タスク・メタデータ・サービス |
|
|
タスク問合せサービス |
|
|
ユーザー・メタデータ・サービス |
|
|
ランタイム構成サービス |
|
|
タスク・レポート・サービス |
|
|
タスク・エビデンス・サービス |
|
ワークリスト・サービスのクライアント・ライブラリの詳細は、第28章「カスタム・ワークリスト・クライアントの作成」を参照してください。
アイデンティティ・サービスを除いて、前述のAPI(SOAP、リモートEnterprise JavaBeans、ローカルEnterprise JavaBeansおよびJava WSIF)を使用するすべてのサービスでは、認証を起動する必要があります。前述のすべてのチャネルでは、ヒューマン・ワークフロー・コンテキストを使用したユーザーIDの受渡しがサポートされています。ヒューマン・ワークフロー・コンテキストには、次のいずれかが含まれています。
ログインとパスワード
トークン
タスク問合せサービスでは、ログインとパスワードを取得し、すべてのサービスに使用するヒューマン・ワークフロー・コンテキストを返すauthenticate操作が公開されます。ヒューマン・ワークフロー・コンテキストは、必要に応じて、各リクエストごとにログインとパスワード付きで渡すことができます。
authenticate操作では、管理IDおよび管理パスワードを使用して、ユーザーにかわってコンテキストを作成するという概念もサポートされます。 この操作により、Oracle BPM Worklistにログインしたユーザーのパスワードを利用できない場合は、そのユーザー用のコンテキストを作成できます。
ワークフロー・コンテキストは、1回取得してすべてのリクエストで使用することをお薦めします。 リクエストごとにワークフロー・コンテキストを取得すると、パフォーマンスが低下する場合があります。
レルムは、アイデンティティ構成からのアイデンティティ・サービス・コンテキストです。 デフォルトの構成を使用する場合、レルム名はNULLにできます。
アイデンティティ伝播は複数のSOAP Webサービス間で認証されたアイデンティティのレプリケーションで、トランザクションを1回で完了するために使用されます。SOAP Webサービスでは、Webサービス・セキュリティもサポートされます。Webサービス・セキュリティが使用されている場合は、SOAP入力にヒューマン・ワークフロー・コンテキストが存在している必要はありません。 Webサービス・セキュリティは、Oracle Enterprise Manager Fusion Middleware Controlコンソールから構成できます。
|
注意: ヒューマン・ワークフローのSOAPクライアントは、Webサービスが保護されている場合に、Security Assertion Markup Language(SAML)トークンベースのアイデンティティ伝播を使用できるように拡張されています。 |
タスク問合せサービスに対するauthenticateOnBehalfOf APIメソッドでは、管理ユーザーのユーザーIDとパスワードをリクエストで渡すことで、ユーザーのかわりにヒューマン・ワークフロー・コンテキストを作成できます。管理ユーザーにはworkflow.admin権限があります。この場合は、ユーザーのかわりにパスワードを使用して作成した場合と同様のコンテキストが作成されます。
これは、バックエンド・システムがワークフロー・タスクを操作し、一方でユーザーが自分のシステムで操作する環境で役立ちます。 ワークフロー・サービスとの直接の相互作用はありません。システムは、ユーザーにかわってログインし、ユーザーのコンテキストを取得できます。
例29-1では、ユーザーjcooperのヒューマン・ワークフロー・コンテキストを作成します。
タスク・サービスにより、タスクに対するアクションを実行するための操作が公開されます。 表29-4に、タスク・サービスの操作を示します。パッケージoracle.bpel.services.workflow.taskは、タスク・サービスに対応しています。
表29-4 タスク・サービスのメソッド
| メソッド | 説明 |
|---|---|
|
|
タスクを獲得します。 |
|
|
一連のタスクを獲得します。 |
|
|
タスクに添付ファイルを追加します。 |
|
|
タスクにコメントを追加します。 |
|
|
To Doタスクを作成します。 |
|
|
タスクを別のユーザーに委任します。現在の割当て先とタスク委任先ユーザーの両方が、タスクを表示して操作できます。 |
|
|
タスクのリストを別のユーザーに委任します。現在の割当て先とタスクのリスト委任先ユーザーの両方が、タスクを表示して操作できます。 |
|
|
タスクの論理削除を実行します。データベース上にはタスクはまだ存在します。 |
|
|
タスクのリストの論理削除を実行します。 データベース上にはタスクはまだ存在します。 |
|
|
タスクをエラーにします。通常、この操作はエラー割当て先が使用します。 |
|
|
タスクをエスカレートします。デフォルトでは、現行のユーザーのマネージャにエスカレートします。これはエスカレーション関数を使用して上書きできます。 |
|
|
複数のタスクをまとめてエスカレートします。デフォルトでは、現行のユーザーのマネージャにエスカレートします。これはエスカレーション関数を使用して上書きできます。 |
|
|
タスクの前の承認者を取得します。 |
|
|
タスクの今後の参加者を取得します。 今後の参加者は、単純参加者を含むルーティング・スリップ形式で返されます(ルーティング・スリップを含む参加者ノードとパラレル・ノード)。 |
|
|
情報リクエストのリクエストが可能なユーザーを取得します。 |
|
|
タスクを開始します。 |
|
|
タスクをマージおよび更新します。この操作を使用するのは、部分タスクに更新が必要な場合です。部分タスクとは、一部のタスク属性が存在しないタスクです。この部分タスクでは、次のタスク属性のみが解析されます。
|
|
|
タスク・インスタンスのルーティング・スリップを新規ルーティング・スリップで上書きします。現行のタスク割当てはNULLになり、タスクの開始時には新規ルーティング・スリップが解析されます。 |
|
|
永続ストアからタスクを削除します。 |
|
|
永続ストアからタスクのリストを削除します。 |
|
|
タスクを前の承認者または当初の割当て先にプッシュバックします。当初の割当て先は、タスクの再割当てやエスカレートを実行している可能性があるため、承認者でなくてもかまいません。タスクが当初の割当て先にプッシュバックされるか、承認者にプッシュバックされるかは、 |
|
|
タスクを再割当てします。 |
|
|
複数のタスクをまとめて再割当てします。 |
|
|
タスクを再開します。タスクを再開すると、前に完了したタスクが持ち越されるため、履歴、コメントおよび添付ファイルも新規タスクに持ち越されます。 |
|
|
前に獲得したタスクをリリースします。 |
|
|
前に獲得した一連のタスクをリリースします。 |
|
|
タスクの添付ファイルを削除します。 |
|
|
タスクの期限を更新して有効期間を延長します。 |
|
|
タスク情報をリクエストします。 |
|
|
再承認を伴うタスク情報をリクエストします。たとえば、 |
|
|
タスクを再開します。ワークフローの保留を解除するために、タスク所有者(または |
|
|
一連のタスクを再開します。 |
|
|
タスクを、レビューする必要のある次のユーザーに非定型の形式でルーティングできるようにします。ユーザーは、タスクを順次、パラレルまたは単純割当てでルーティングするように指定できます。タスクをルーティングできるのは、ヒューマン・ワークフローでタスクの非定型ルーティングが許可されている場合のみです。 |
|
|
現在の割当てをスキップして次の割当てに移動するか、他に割当て先が存在しない場合は、直前の承認者が設定した結果を使用します。 |
|
|
タスク情報を発行します。通常、このアクションは、必要なタスク更新を実行した後、または追加情報を含むコメントや添付ファイルを追加した後に実行します。 |
|
|
タスク所有者(または |
|
|
一連のタスクを一時停止します。 |
|
|
一連のタスクの結果を更新します。 |
|
|
タスクを更新します。 |
|
|
タスクの結果を更新します。 |
|
|
タスクの結果を更新してタスクをルーティングします。タスクをルーティングすると、ユーザーはそのタスクを、レビューする必要のある次のユーザーに非定型の形式でルーティングできます。 ユーザーは、タスクをシリアル、パラレルまたは単一割当てでルーティングするように指定できます。タスクをルーティングできるのは、ヒューマン・ワークフローでタスクの非定型ルーティングが許可されている場合のみです。 |
|
|
タスク作成者は、ヒューマン・ワークフローを介してタスクを送る必要がなくなった場合、保留中のタスクを取り消すことができます。タスク所有者も、作成者のかわりにタスクを取り消すことができます。タスクが取り消されると、ビジネス・プロセスは、タスクの状態属性が |
|
|
一連のタスクを取り消します。 |
詳細は、次を参照してください。
タスク問合せサービスでは、様々な検索基準(キーワード、カテゴリ、ステータス、ビジネス・プロセス、属性値、タスクの履歴情報など)に基づいてタスクを問い合せます。 表29-5に、SOAPを介したサービスの使用方法など、タスク問合せサービスの操作を示します。パッケージoracle.bpel.services.workflow.queryは、タスク問合せサービスに対応しています。
表29-5 タスク問合せサービスのメソッド
| メソッド | 説明 |
|---|---|
|
|
アイデンティティ認証サービスでユーザーを認証し、有効な |
|
|
必要に応じ、他のユーザーにかわって認証を行います。 |
|
|
指定した問合せ基準に一致するタスクの数をカウントします。 |
|
|
指定したビューの問合せ基準に一致するタスクの数をカウントします。 |
|
|
事前認証済のHTTPリクエストから有効な |
|
|
指定した問合せ基準に一致するタスクが存在するかどうかを確認します。 |
|
|
指定したビューの問合せ基準に一致するタスクが存在するかどうかを確認します。 |
|
|
指定のコンテキスト・トークンを使用してヒューマン・ワークフロー・コンテキストを取得します。 |
|
|
不要になったヒューマン・ワークフロー・コンテキストをクリーン・アップします。通常、このメソッドはユーザーのログアウト時に使用されます。 |
|
|
タスクの |
|
|
タスクの |
|
|
指定タスクIDのタスク・バージョンのリストを取得します。 |
|
|
タイプが順序のタスクについて、IDがタスクIDのタスクのタスク順序ツリーを取得します。 |
|
|
指定のタスクIDとバージョン番号について、特定のタスク・バージョン詳細を取得します。 |
|
|
指定した問合せを実行し、問合せで返されたタスクの数を、指定した列ごとにグループ化して集計します。 |
|
|
指定の述語に一致するタスク・エラー・オブジェクトのリストを返します。 |
|
|
指定のフィルタ条件に一致するタスクのリストを返します。タスクは、指定の順序付け条件(存在する場合)に従ってリストされます。基準に一致するタスクのリスト全体を返すか、クライアントがページング問合せを実行できます。その場合は、リストのうち指定した数のタスクのみが取得されます。フィルタ条件は次のとおりです。
|
|
|
指定したビューに定義されているように問合せを実行し、そのビューに定義されているチャート・プロパティに従って選択したタスクを集計します。 |
|
|
指定のビューの基準に従ってタスクのリストが返されます。タスク・リストの全体またはページを返すことができます。クライアントは、ビューのコンテンツに対してフィルタと順序付け基準を追加指定できます。 |
詳細は、次を参照してください。
アイデンティティ・サービスは、Oracle Application Server 11g のセキュリティ・インフラストラクチャ(Oracle Identity ManagementおよびOracle Platform Security Services(OPSS))または任意のカスタム・ユーザー・リポジトリの上部に位置するWebサービスのシン・レイヤーです。 アイデンティティ・サービスにより、ユーザーの認証、ユーザー・プロパティ、ロール、グループ・メンバーシップおよび権限のルックアップが可能になります。 Oracle Application Server 11g では、Oracle Identity Managementが唯一のアイデンティティ・サービス・プロバイダです。 Oracle Identity Managementは、XML、LDAPなど様々なリポジトリに対するユーザーとロールの保管と取得をすべて処理します。 Oracle Identity Managementには、具体的に次の機能が用意されています。
すべてのプロバイダは、Oracle Identity Managementを通してサポートされます。OracleAS JAAS Provider(JAZN)とLDAPのプロバイダはサポートされていません。カスタム・プロバイダは非推奨で、下位互換性のためにのみサポートされます。 Oracle Identity Managementでは、カスタム・プロバイダを経由するか、LDAPプロバイダとしてOracle Virtual Directory(OVD)を構成して(あるいはその両方)、プロバイダのすべてのカスタマイズが実行されます。OVDはデータを様々なリポジトリ全体にわたって集約します。
次の内容を含むOPSSレイヤーが使用されます。
アイデンティティ・ストア
ポリシー・ストア
資格証明ストア
フレームワーク
詳細は、『Oracle Fusion Middlewareセキュリティ・ガイド』を参照してください。 すべてのセキュリティ構成は、jps-config.xmlファイルを使用して行われます。
以前のリリースの動作と異なり、すべての権限がパーミッションと照合して検証されます。
次の一連のアプリケーション・ロールが定義されています。 これらのロールはOPSSポリシー・ストアのsoa-infraアプリケーションに自動的に定義されます。
SOAAdmin: どのSOAモジュールにも管理操作を実行する必要があるユーザーにこのロールを付与します。このロールには、BPMWorkflowAdminおよびB2BAdminロールも付与されます。
BPMWorkflowAdmin: どのワークフローにも管理操作を実行する必要があるユーザーにこのロールを付与します。この管理操作には、システム内の任意のタスクに対する検索および操作、ユーザーまたはグループのルール作成および変更、アプリケーションのカスタマイズ実行などの操作が含まれます。このロールには、BPMWorkflowCustomizeロールと次の権限が付与されます。
workflow.mapping.protectedFlexField
workflow.admin.evidenceStore
workflow.admin
BPMWorkflowCustomize: パブリック・フレックス・フィールドにフレックス・フィールド・マッピングを実行する必要があるビジネス・ユーザーにこのロールを付与します。このロールには、workflow.mapping.publicFlexField権限も付与されます。
次のワークフロー権限が定義されます。
workflow.admin: タスク、ユーザーとグループのルールおよびカスタマイズに関連する管理操作を実行できるユーザーを制御します。
workflow.admin.evidenceStore: デジタル署名されたタスク(デジタル証明書を使用した署名が必要なタスク)に関連するエビデンス記録を表示および検索できるユーザーを制御します。
workflow.mapping.publicFlexField: パブリック・フレックス・フィールドにタスク・ペイロード属性のマッピングを実行できるユーザーを制御します。
workflow.mapping.protectedFlexField: 保護されたフレックス・フィールドにタスク・ペイロード属性のマッピングを実行できるユーザーを制御します。
|
注意: Oracle SOA Suiteに対して、複数の認証プロバイダを指定することはできません。 これは、OPSSが複数のプロバイダをサポートしていないためです。 ヒューマン・ワークフロー認証に使用するプロバイダは、Oracle SOA Suiteの認証プロバイダの順序を示したリスト内で最初のプロバイダである必要があります。 |
詳細は、次を参照してください。
Oracle Identity Managementの詳細は『Oracle Fusion Middleware Oracle Identity Managementアプリケーション開発者ガイド』
OVDの詳細は『Oracle Fusion Middleware Oracle Virtual Directory管理者ガイド』
タスク・メタデータ・サービスにより、タスク関連のメタデータ情報を取得するための操作が公開されます。 表29-6に、これらのメソッドを示します。パッケージoracle.bpel.services.workflow.metadataは、タスク・メタデータ・サービスに対応しています。
表29-6 タスク・メタデータ・サービスのメソッド
| メソッド | 説明 |
|---|---|
|
|
指定のタスク定義ネームスペースとコンポジット・バージョンを使用して、ヒューマン・タスク・サービス・コンポーネントが記述された |
|
|
タスクについて許可されている結果を取得します。結果とその表示値が返されます。 |
|
|
タスクのリソース・バンドル情報を取得します。リソース・バンドル情報には、バンドルの位置と名前が含まれます。 |
|
|
特定のタスクに対する制限付きアクションを取得します。 |
|
|
|
|
|
|
|
|
タスク・メッセージ属性を取得します。 |
|
|
特定のタスク定義のメッセージ属性を取得します。 |
|
|
タスクに関連するタスク定義を取得します。 |
|
|
タスク定義IDによるタスク定義を取得します。 |
|
|
特定のタスク定義IDの結果を取得します。 |
|
|
タスクのタスク表示を取得します。 |
|
|
タスク表示ルールを取得します。 |
|
|
タスクのタスク表示リージョンを取得します。 |
|
|
変更された場合にタスク・バージョンが作成されるタスク属性を取得します。 |
|
|
システム内のタスク定義をリストします。 |
詳細は、『Oracle Fusion Middleware Workflow Services Java API Reference for Oracle BPEL Process Manager』を参照してください。
ユーザー・メタデータ・サービスは、個々のユーザーおよびグループに固有のメタデータを管理するためのメソッドを提供します。このサービスは、ユーザー・ワークリストのプリファレンスの取得と設定、ユーザーのカスタム・ビューの管理、およびユーザーとグループに対するヒューマン・ワークフロー・ルールの管理に使用されます。
ユーザー・メタデータ・サービスのほとんどのメソッドの場合、認証済ユーザーは独自のユーザー・メタデータを問い合せて更新できます。ただし、他のユーザーに属するメタデータは更新できません。
グループ・メタデータ(グループに対するヒューマン・ワークフロー・ルールなど)の場合、グループのメタデータを問い合せて更新できるのは、そのグループの所有者として指定されているユーザー(またはworkflow.admin権限ユーザー)のみです。ただし、workflow.admin権限があるユーザーは、任意のユーザーまたはグループのメタデータに対して問合せおよび更新を実行できます。
表29-7に、ユーザー・メタデータ・サービスのメソッドを示します。パッケージoracle.bpel.services.workflow.userは、ユーザー・メタデータ・サービスに対応しています。
表29-7 ユーザー・メタデータ・サービスのメソッド
| メソッド | 説明 |
|---|---|
|
|
新規ルールを作成します。 |
|
|
ルールの優先度を1つ低くします。 このルールが最低優先度の場合、このメソッドでは何も実行されません。 |
|
|
ルールを削除します。 |
|
|
ユーザーに対してタスクを割り当てることができない日付の範囲(設定されている場合)を取得します。 |
|
|
特定のヒューマン・ワークフロー・ルールの詳細を取得します。 |
|
|
特定のユーザーまたはグループに対するルールのリストを取得します。 |
|
|
既存のルールを更新します。 |
|
|
ルールの優先度を1つ高くします。ユーザーまたはグループに対するルールは、優先度の順序付きリストで保守されます。高優先度のルール(リストの先頭に近いルール)は、低優先度のルールよりも先に実行されます。 このルールが最高優先度の場合、このメソッドでは何も実行されません。 |
|
|
ユーザーが所有するユーザー・タスク・ビューのリストを取得します。 |
|
|
ユーザーに他のユーザーから権限付与されたユーザー・タスク・ビューのリストを取得します。ユーザーは付与されたビューを使用してタスクのリストを問合せできますが、ビュー定義は更新できません。 |
|
|
ヒューマン・ワークフロー・サービスに付属している標準タスク・ビューのリストを取得します。このビューはすべてのユーザーが使用できます。 |
|
|
単一ビューの詳細を取得します。 |
|
|
新規のユーザー・タスク・ビューを作成します。 |
|
|
既存のユーザー・タスク・ビューを更新します。 |
|
|
ユーザー・タスク・ビューを削除します。 |
|
|
このユーザーに対する他のユーザーからのビュー権限付与の詳細を更新します。 更新は、ビュー権限付与の非表示または非表示解除(非表示にしたビューは、Oracle BPM Worklistのメイン受信ボックス・ページに表示されません)、および権限を付与されたユーザーに表示されるビュー名および説明の変更に制限されています。 |
|
|
ユーザーのユーザー・プリファレンスのリストを取得します。ユーザー・プリファレンスは、単純な名前/値ペアの文字列です。ユーザー・プリファレンスはユーザーごとにプライベートです(ただし、 |
|
|
ユーザーのユーザー・プリファレンス値を設定します。前に格納されていて新規のユーザー・プリファレンス・リストに含まれていないプリファレンスは削除されます。 |
|
|
ユーザーのパブリック・プリファレンスのリストを取得します。パブリック・プリファレンスは、ユーザー・プリファレンスに類似していますが、すべてのユーザーが問合せできます。ただし、パブリック・プリファレンスを更新できるのは、そのプリファレンスを所有しているユーザー、または |
|
|
ユーザーのパブリック・プリファレンスを設定します。 |
|
|
ユーザーに対してタスクを割り当てることができない日付の範囲を設定します(Dynamic Assignment Functionでは、休暇中のユーザーにタスクが割り当てられることはありません)。 |
|
|
|
詳細は、次を参照してください。
ルール構成ページとユーザー・プリファレンス・ページの詳細は第27章「Oracle BPM Worklistの使用」
いくつかのAPIの例を示すサンプルのworkflow-118-JavaSamples
『Oracle Fusion Middleware Workflow Services Java API Reference for Oracle BPEL Process Manager』
タスク・レポート・サービスは、レポートを実行してその結果を受け取ります。 表29-8に、その方法を示します。 パッケージoracle.bpel.services.workflow.reportは、タスク・レポート・サービスに対応しています。 表29-8に示す標準レポートは、インストールに含まれています。
表29-8 タスク・レポート・サービス
| レポート | 説明 |
|---|---|
|
不参加タスク・レポート |
このレポートでは、ユーザーのグループまたは報告先のグループに割り当てられたタスクの中で、まだ獲得されていないために注意が必要なタスクが分析されます。 |
|
タスクの優先度レポート |
このレポートでは、ユーザー、報告先またはそのグループに割り当てられたタスクの数が優先度別に分析されます。 |
|
タスクのサイクル・タイム・レポート |
このレポートでは、ユーザーのグループまたは報告先のグループに基づいて、タスクの割当てから完了までの所要時間が分析されます。 |
|
タスクの生産性レポート |
このレポートでは、ユーザー、報告先またはそのグループについて、特定期間中に割り当てられたタスク数と完了したタスク数が分析されます。 |
|
タスク時間分布レポート |
このレポートでは、特定期間中に、特定のユーザー、ユーザーのグループまたは報告先がタスクを完了するのに要した時間が分析されます。 |
ランタイム構成サービスは、タスク・サービスのランタイム環境で使用されるメタデータの管理メソッドを提供します。これは、主にタスク・ペイロード・フレックス・フィールド・マッピングとタスク詳細の表示に使用するURIの管理をサポートします。
タスク・サービスで使用されるタスク・オブジェクトには、多数のフレックス・フィールド属性が含まれており、タスク・ペイロードからの情報を移入できます。これにより、タスク・ペイロード情報を問い合せ、タスク・リストに表示し、ヒューマン・ワークフロー・ルールに使用できます。
ランタイム構成サービスは、クライアント・アプリケーションにある特定タスク定義のインスタンスのタスク詳細を表示するURIの問合せおよび更新メソッドを提供します。どのようなタスク定義でも、複数URI表示がサポートされ、異なるURIは異なるアプリケーションに対して使用されます。メソッドgetTaskDisplayInfoにより、特定のタスク定義のURIを問い合せることができます。メソッドsetTaskDisplayInfoにより、新規のURIを定義したり、既存のURIを更新することができます。setTaskDisplayInfoをコールできるのは、workflow.admin権限があるユーザーのみですが、getTaskDisplayInfoは認証されたユーザーがコールできます。
ランタイム構成サービスを使用すると、管理者は単純なタスク・ペイロード属性とこれらのフレックス・フィールド属性間のマッピングを作成できます。
パブリック・フレックス・フィールドのペイロード・マッピングを更新できるのは、workflow.mapping.publicFlexFieldまたはworkflow.mapping.protectedFlexField権限があるユーザーのみです。保護されたフレックス・フィールドのペイロード・マッピングを更新できるのは、workflow.mapping.protectedFlexField権限があるユーザーのみです。いずれの認証済ユーザーも、このサービスの問合せメソッドを使用できます。
管理者は、各種フレックス・フィールド属性を表す属性ラベルを作成できます。これらの属性ラベルは、属性にわかりやすいラベルを提供します(たとえば、フレックス・フィールド属性TextAttribute1を表すラベルLocationを作成できます)。特定のフレックス・フィールド属性に複数のラベルを関連付けることができます。 ユーザーがOracle BPM Worklistで特定のタスクの属性リストを表示すると、この属性ラベルが表示されます。特定のタスク・タイプの属性ラベルは、タスク・メタデータ・サービスのgetTaskAttributesForTaskDefinitionメソッドをコールして決定できます。
属性ラベルを定義する際は、サービスによって次のフィールドに値が自動的に移入されます。これらの属性の値を属性ラベルの作成時または更新時に指定する必要はありません。
Id
CreatedDate
WorkflowType
Active
パブリック・フレックス・フィールドのタスク属性フィールドに有効な値は、次のとおりです。
TextAttribute1からTextAttribute20まで
FormAttribute1からFormAttribute10まで
UrlAttribute1からUrlAttribute10まで
DateAttribute1からDateAttribute10まで
NumberAttribute1からNumberAttribute10まで
その後、タスク・ペイロード・フィールドと属性ラベルとのマッピングを作成できます。たとえば、ペイロード・フィールドcustomerLocationを属性ラベルLocationにマップできます。様々なタスク・タイプで同じ属性ラベルを共有できます。これにより、同じ意味を持つ異なるタスク・タイプのペイロード属性を同じ属性ラベルにマップできます。
|
注意: マップできるのは、単純XMLタイプのペイロード・フィールドのみです。 |
ランタイム構成サービスでは、次のメソッドも提供されます。
サーバーでサポートされているDynamic Assignment Functionを問い合せるためのメソッド
Oracle BPM Worklistおよび他のアプリケーションでのタスク詳細の表示に使用するタスク表示URLを管理するためのメソッド
サーバーのHTTPおよびJNDI URLを取得するためのメソッド
表29-9に、ランタイム構成サービスのメソッドを示します。パッケージoracle.bpel.services.workflow.runtimeconfigは、ランタイム構成サービスに対応しています。
表29-9 ランタイム構成サービス
| メソッド | 説明 |
|---|---|
|
|
特定のタスク・フレックス・フィールド属性を表す新規の属性ラベルを作成します。 |
|
|
属性ラベルとタスク・ペイロード・フィールド間の新規マッピングを作成します。 |
|
|
既存の属性ラベルを削除します。 |
|
|
既存のペイロード・マッピングを削除します。 |
|
|
ラベルが現在使用されているマッピング(存在する場合)の属性ラベル(すべての属性ラベル、または特定のタイプの属性ラベル)のリストを取得します。 |
|
|
このサーバーに実装されているグループを選択できるDynamic Assignment Functionのリストを返します。 |
|
|
具体的なタスク定義のタスク・インスタンス表示に使用されるURIに関連する情報を取得します。 |
|
|
特定のタスク定義やコンポジット・インスタンスに対応するタスク・インスタンスのステータスを取得します。 |
|
|
このサーバーに実装されているユーザーを選択できるDynamic Assignment Functionのリストを返します。 |
|
|
特定のヒューマン・ワークフロー定義に関するすべてのフレックス・フィールド・マッピングのリストを取得します。 |
|
|
具体的なタスク定義のタスク・インスタンス表示に使用されるURIに関連する情報を設定します。 |
|
|
既存の属性ラベルを更新します。 |
詳細は、次を参照してください。
追加の詳細は第29.3.1項「Dynamic Assignment Functionおよびタスク・エスカレーション関数」
フレックス・フィールド・マッピングの詳細は第27章「Oracle BPM Worklistの使用」
いくつかのAPIの例を示すサンプルのworkflow-118-JavaSamples
『Oracle Fusion Middleware Workflow Services Java API Reference for Oracle BPEL Process Manager』
属性ラベルは、タスク・フレックス・フィールド属性にわかりやすいラベルを添付するメソッドを提供します。ユーザーのロケールに適した言語に翻訳された属性ラベルを表示することが望ましい場合があります。
カスタム・リソース・バンドルを使用するには、ワークフロー構成パラメータworkflowCustomClasspathURLで識別される場所(ファイルまたはHTTPパス)にリソース・バンドルを配置します。
これは、Oracle Enterprise Manager Fusion Middleware Controlコンソールの次のいずれかの場所で設定できます。
「システムMBeanブラウザ」ページ
「ワークフロー・タスク・サービス・プロパティ」ページ
このパラメータを使用する方法の詳細は、サンプルのworkflow-110-workflowCustomizationsを参照してください。 詳細は、次のURLを参照してください。
http://www.oracle.com/technology/sample_code/products/hwf
フレックス・フィールド属性ラベルのエントリには、次の書式を使用する必要があります。
FLEX_LABEL.[label name]=Label Display Name
たとえば、Locationというラベルのエントリは次のようになります。
FLEX_LABEL.Location=Location
これらのファイルに属性ラベルのエントリを追加するかどうかはオプションであることに注意してください。ファイルにエントリが存在しない場合は、APIを使用して指定した属性ラベルの名前がかわりに使用されます。
エビデンス・ストア・サービスは、デジタル署名の保管とデジタル署名されたヒューマン・ワークフローの否認防止に使用します。デジタル署名は、メッセージ送信者や文書署名者のアイデンティティを認証する電子署名です。これにより、送られたメッセージや文書の元の内容が変更されていないことが保証されます。デジタル署名は転送可能で、他人に模倣されることがなく、自動的にタイムスタンプが付けられます。署名されたオリジナルのメッセージが届いたことを証明できるため、送信者が後で否認することはできません。デジタル署名は、ヒューマン・ワークフロー・ドキュメントが認証済であること、他のエンティティで捏造されていないこと、変更されていないこと、および送信者が否認できないことを保証します。暗号ベースのデジタル署名は、公開鍵のアルゴリズムによって送信者の秘密鍵付のメッセージが署名されたときに作成されます。
設計時、タスクに対して署名は有効です。 Oracle BPM Worklistの実行時には、ユーザーがタスクを承認または却下すると、Webブラウザでは次の動作が発生します。
署名に使用する秘密鍵の選択をユーザーに要求します。
秘密鍵とOracle BPM Worklistから提供されたタスク・コンテンツを使用してデジタル署名を生成します。
図29-2に例を示します。
|
注意:
|
次のデジタル署名の機能をサポートします。
X.509証明書によるPKCS7署名
ブラウザベースの、添付ファイルなしデジタル署名付コンテンツ
デジタル署名と証明書を使用するための前提条件は、次のとおりです。
Oracle BPM Worklistのユーザーは、証明書を持っている必要があります。
管理者は、証明書を信頼する必要があるCA、および対応するCRL URLを指定する必要があります。ユーザーは、これらのCAが発行した証明書のみをアップロードする必要があります。 そのためには、Oracle Enterprise Manager Fusion Middleware Controlコンソールの「システムMBeanブラウザ」を編集します。
Oracle Enterprise Manager Fusion Middleware Controlコンソールにログインします。
ナビゲータで、「SOA」フォルダを開きます。
「soa-infra」を右クリックし、「管理」→「システムMBeanブラウザ」の順に選択します。
ページの右側に「システムMBeanブラウザ」が表示されます。
「アプリケーション定義のMBean」→「oracle.as.soainfra.config」→「サーバー: server_name」→「WorkflowConfig」→「human-workflow」の順に開きます。
ページの右側にある「操作」タブをクリックします。
「addTrustedCA」をクリックします。
「caName」と「caURL」に値を指定します。 たとえば、表29-10に示すように、各起動に対して値を指定します。
表29-10 caNameとcaURLの値
| caName | caURL |
|---|---|
|
|
|
|
|
|
|
|
|
「起動」をクリックします。
表29-11から表29-14では、エビデンス・ストア・サービスのメソッドについて説明します。パッケージoracle.bpel.services.security.evidenceは、エビデンス・サービスに対応しています。
表29-11 ITaskEvidenceServiceインタフェース
| メソッド | 説明 |
|---|---|
|
|
エビデンスを作成し、否認防止のためにリポジトリに保管します。 |
|
|
特定の条件に一致するエビデンスのリストを取得します。結果は、サービスを問い合せるユーザーに関連付けられている権限によって異なります。ユーザーに |
|
|
後で署名検証に使用する証明書をアップロードします。これが、特定の証明書を使用してエビデンスを作成するための前提条件です。ユーザーがアップロードできるのは、自分の証明書のみです。 |
|
|
ステータスのCRL検証部分を更新します。これには、検証時間、ステータス、エラー・メッセージ(ある場合)が含まれます。 |
|
|
エビデンス署名を検証します。基本的にエビデンスの否認防止チェックを実行します。署名が検証されると、 |
表29-12 Evidenceインタフェース
| メソッド | 説明 |
|---|---|
|
|
このエビデンスの署名に使用する証明書を取得します。 |
|
|
エビデンスの作成日付を取得します。 |
|
|
CRL検証に関連するエラー・メッセージを取得します。 |
|
|
エビデンスに関連する一意の識別子を取得します。 |
|
|
このエビデンスの一部として署名されたコンテンツを取得します。 |
|
|
エビデンスの署名ポリシーを取得します。 |
|
|
エビデンスの署名を取得します。 |
|
|
署名が作成された日付を取得します。 |
|
|
CRL検証ステータスを取得します。次のいずれかです。
|
|
|
このエビデンスが関連付けられているタスクの一意の識別子を取得します。 |
|
|
このエビデンスが関連付けられているタスクのタスク番号を取得します。 |
|
|
このエビデンスが関連付けられているタスクのタスク優先度を取得します。 |
|
|
このエビデンスが関連付けられているタスクのタスク・ステータスを取得します。 |
|
|
このエビデンスが関連付けられているタスクのタスク・サブステータスを取得します。 |
|
|
このエビデンスが関連付けられているタスクのタイトルを取得します。 |
|
|
このエビデンスが関連付けられているタスクのバージョンを取得します。 |
|
|
使用した証明書のCRL検証が実行された日付を取得します。 |
|
|
このエビデンスが関連付けられているタスクのワークフロー・タイプを取得します。通常は |
表29-13 Certificateインタフェース
| メソッド | 説明 |
|---|---|
|
|
証明書発行者の識別名(DN)を取得します。 |
|
|
インタフェースによって抽象化された証明書オブジェクトを取得します。 |
|
|
証明書のシリアル・ナンバーを取得します。 |
|
|
この証明書をアップロードするユーザーに関連付けられているアイデンティティ・コンテキストを取得します。 |
|
|
この証明書に関連付けられているユーザーの名前を取得します。 |
|
|
証明書がまだ有効であれば、 |
表29-14 Policy TypeとWorkflow Typeインタフェース
| メソッド | 説明 |
|---|---|
|
|
文字列表現からオブジェクトを構成します。 |
|
|
このオブジェクトの文字列表現を返します。 |
詳細は、次を参照してください。
ヒューマン・タスク・エディタでデジタル署名およびデジタル証明書を指定する方法の詳細は第25.3.10.6項「ワークフロー署名ポリシーの指定」
Oracle BPM Worklistのタスク・アクションへのデジタル署名の詳細は第26章「ヒューマン・タスク用タスク表示フォームの設計」
タスクは、ユーザーによる実行が必要な作業です。 タスクを作成する場合は、そのタスクに参加して操作するユーザーを割り当てます。 表29-15に、アプリケーションでよく使用され、解析されるタスク属性を示します。
表29-15 タスク属性
| タスク属性名 | 説明 |
|---|---|
|
|
タスクに関連付けられたアプリケーション・ロール(割当て先、所有者など)が属するアプリケーション。 |
|
|
(オプション)タスクのカテゴリ。 |
|
|
タスクの作成者の名前。 |
|
|
タスクの期日。 これはTo Doタスクで使用されます。 |
|
|
(オプション)タスクに対するカスタムの一意識別子。 これは、標準のタスクIDとタスク番号に対する追加の一意識別子として設定できます。 このキーを使用すると、タスクが作成されたビジネス・オブジェクトの識別子に基づいて、タスクを取得できます。 |
|
|
ユーザーおよびグループがシードされているアイデンティティ・レルム。 単一レルム環境では、デフォルトのレルムがデフォルト値になります。 |
|
|
タスク・インスタンスを所有するグループ(ある場合)。 タスク所有者は、アプリケーション・ロール、ユーザーまたはグループです。 タスクの所有者がグループの場合は、このフィールドが設定されます。 |
|
|
タスク・インスタンスを所有しているアプリケーション・ロール(ある場合)。 タスク所有者は、アプリケーション・ロール、ユーザーまたはグループです。 タスクの所有者がアプリケーション・ロールの場合は、このフィールドが設定されます。 |
|
|
タスク・インスタンスを所有するユーザー(ある場合)。 タスク所有者は、アプリケーション・ロール、ユーザーまたはグループです。 タスクの所有者がユーザーの場合は、このフィールドが設定されます。 |
|
|
XMLとして取得されるタスク・ペイロード。 |
|
|
タスクの完了パーセンテージ。 これはTo Doタスクで使用されます。 |
|
|
タスクの優先度を定義する整数。 数値が低いほど優先度が高くなります。 通常は、 |
|
|
タスクの開始日。 これはTo Doタスクで使用されます。 |
|
|
(オプション)タスクのサブカテゴリ。 |
|
|
タスクをタスク・メタデータにバインドするタスク定義ID。 タスクの開始時は、 |
|
|
タスク詳細の表示に使用するURL。 |
|
|
タスクのタイトル。 |
表29-16に、プロセス・メタデータ情報を取得する属性を示します。
表29-16 プロセス・メタデータ情報を取得する属性
| 属性 | 説明 |
|---|---|
|
|
タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットが属するドメイン。 |
|
|
デプロイされるアプリケーション。 |
|
|
タスク・インスタンスを定義するタスク・コンポーネントの名前。 |
|
|
タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットの特定のデプロイメントの一意名。 |
|
|
コンポジット・インスタンスID。 |
|
|
タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットの名前。 |
|
|
タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットのバージョン。 |
表29-17に、添付ファイル関連の属性を示します。
表29-17 添付ファイル関連の属性
| 属性 | 説明 |
|---|---|
|
|
添付ファイルのコンテンツ。 |
|
|
添付ファイルのMultipurpose Internet Mail Extension(MIME)タイプ。 |
|
|
添付ファイルの名前。 |
|
|
添付ファイルを更新したユーザー。 |
|
|
添付ファイルの更新日付。 |
|
|
URI(添付ファイルがURIベースの場合)。 |
表29-18に、コメント関連の属性を示します。
表29-18 コメント関連の属性
| 属性 | 説明 |
|---|---|
|
|
ユーザーのコメント。 |
|
|
コメントを追加したユーザー。 |
|
|
コメントが追加された日付。 |
表29-19に、ワークフロー・サービス・システムで操作される属性を示します。
表29-19 ワークフロー・サービス・システムで操作される属性
| 属性 | 説明 |
|---|---|
|
|
グループ、アプリケーション・ロールまたは複数のユーザーに割り当てられたタスクが、ユーザーによって申告された場合、このフィールドはタスクを申告したユーザーの名前に設定されます。 |
|
|
タスクに対してカスタム・アクションを実行したユーザーのID。 |
|
|
このタスクが割り当てられた日付。 |
|
|
現在のタスク割当て先(ユーザー、グループまたはアプリケーション・ロール)。 |
|
|
タスク・インスタンスが作成された日付。 |
|
|
タスクに対して実行できるカスタム・アクション。 |
|
|
タスクの終了日。 これはTo Doタスクで使用されます。 |
|
|
タスク・インスタンスの有効期限の日付。 |
|
|
タスクを前に操作したユーザー。 |
|
|
|
|
|
|
|
|
ユーザーが別のユーザーにタスクを委任している場合、このフィールドには、タスクを委任したユーザーの名前が移入されます。 |
|
|
タスクの結果(承認済、却下済など)。 このフィールドは、完了したタスク・インスタンスにのみ設定されます。 |
|
|
これは、再開されたタスクにのみ設定されます(再開される前のタスクのタスクID)。 |
|
|
これは、サブタスクにのみ設定されます。 親タスクのバージョンを参照します。 |
|
|
Oracle JDeveloperからモデリングされた参加者の論理名。 |
|
|
タスクのレビューア。 これは、ユーザー、グループまたはアプリケーション・ロールです。 |
|
|
ルート・タスクのID。 これは、ルート・タスクのタスクIDと同じです。 |
|
|
実行中のステージ名。 |
|
|
タスク・インスタンスの現在の状態。 |
|
|
タスクの現在のサブ状態。 |
|
|
サブタスクに設定されている一意のID。 これと同じIDが親タスクの |
|
|
タスクに対して実行できるシステム・アクション(再割当て、エスカレートなど)。 |
|
|
タスク・インスタンスを定義するタスク・コンポーネントの名前。 |
|
|
これは、サブタスクのみ設定します。 これは、直接の親タスクのIDです。 |
|
|
親タスクに設定される一意のID。 これと同じIDがサブタスクの |
|
|
タスクの一意のID。 |
|
|
このタスク・インスタンスを定義するタスク・コンポーネントの全バージョンを一意に定義するネームスペース。 同じタスク・コンポーネントの異なるバージョンに同じネームスペースを指定することは可能ですが、異なる2つのタスク・コンポーネントに同じネームスペースを指定することはできません。 |
|
|
タスク・インスタンスを一意に識別する整数。 |
|
|
タスクを最後に更新したユーザー。 |
|
|
このインスタンスが最後に更新された日付。 |
|
|
タスクのバージョン。 |
|
|
バージョンが作成された理由。 |
|
|
実行されるパターン(パラレル、シリアル、FYI、単一など)。 |
表29-20に、フレックス・フィールド属性を示します。
通知は、タスクの状態が変化したことをユーザーに警告するために送信されます。 通知は、電子メール、電話ボイス・メッセージ、インスタント・メッセージ(IM)、ショート・メッセージ・サービス(SMS)のいずれかのチャネルを通じて送信できます。通知はBPELプロセスのヒューマン・タスクから、またはBPELプロセスから直接送信できます。
11g 以前のリリースでは、電子メール通知はヒューマン・ワークフロー電子メール通知レイヤーを通じて送信されていました。ボイスまたはSMSの通知は、オラクル社のホスティング通知サービスを通じて送信されていました。IM通知はサポートされていませんでした。
リリース11g 以降、ヒューマン・ワークフロー電子メール通知レイヤーはOracle User Messaging Serviceと連携し、タスクの状態が変化したことをユーザーに警告します。 Oracle User Messaging Serviceでは、電子メール、ボイス、IMまたはSMSのいずれかのチャネルを通じて通知を送信するための操作が公開されています。これらの操作は、BPELビジネス・プロセスまたはヒューマン・タスクから起動できます。
Oracle User Messaging Serviceは次の機能をサポートしています。
メッセージおよびステータスの送受信
特定のチャネルの指定したアドレスへの通知送信
一連のフェイルオーバー・アドレスへの通知送信
Oracle Fusion Middleware以外のアプリケーション・サーバーでは、電子メール通知に対してヒューマン・ワークフロー電子メール通知レイヤーを使用できます。
Oracle User Messaging Serviceの構成に関する詳細は、次を参照してください。
Oracle Enterprise Manager Fusion Middleware Controlコンソールの通知サービス配信チャネルの構成方法は『Oracle Fusion Middleware Oracle SOA Suite管理者ガイド』
各電子メール通知には、次のパートを含めることができます。
通知メッセージ
Oracle BPM WorklistからのHTMLコンテンツ
これは、タスクに関するOracle BPM Worklistの読取り専用ビューです。 Oracle BPM Worklistからのコンテンツを含むように電子メール通知を構成する方法は、第26.7項「電子メール通知の作成」を参照してください。
タスクの添付ファイル
通知にタスクの添付ファイルが含まれている場合です。
アクション可能リンク
SMS、IMおよびボイスを介した通知に含まれるのは、通知メッセージのみです。
通知メッセージは、静的なテキストと動的な値を含めることができるXPath式です。メッセージの作成時に動的な値に使用できるのは、タスクBPEL変数のみです。メッセージはBPELプロセスのコンテキスト外で評価されるため、この制限があります。また、タスク変数のペイロードでは、XPathツリー参照用のペイロードの型を含むために、強い型指定が使用されます。XPath拡張関数hwf:getNotificationProperty(propertyName)を使用すると、特定の通知のプロパティを取得できます。 この関数は、対応する値に対して通知ごとに評価されます。propertyNameの値は、次のいずれかです。
recipient
通知の受信者
recipientDisplay
受信者の表示名
taskAssignees
タスクの割当て先
taskAssigneesDisplay
タスク割当て先の表示名
locale
受信者のロケール
taskId
通知対象となるタスクのID
taskNumber
通知対象となるタスクの番号
appLink
Oracle BPM Worklistのタスク詳細ページへのHTMLリンク
例29-2に、hwf:getNotificationPropertyとhwf:getTaskResourceBundleを併用する方法を示します。
例29-2 hwf:getNotificationPropertyとhwf:getTaskResourceBundleの使用
concat('Dear ', hwf:getNotificationProperty('recipientDisplay'), ' Task ',
/task:task/task:systemAttributes/task:taskNumber, ' is assigned to you. ',
hwf:getTaskResourceBundleString(/task:task/task:systemAttributes/task:taskId,
'CONGRATULATIONS', hwf:getNotificationProperty('locale')))
この場合、メッセージは次のようになります。
Dear Cooper, James Task 1111 is assigned to you. Congratulations
ヒューマン・ワークフロー電子メール通知レイヤーは、介入が必要なエラーが発生した場合に管理者に警告するように、自動的に構成されます。エラー通知とエラー・レスポンス・メッセージは維持されます。
メッセージは、Oracle Enterprise Manager Fusion Middleware Controlコンソールで表示できます。
メッセージ表示の詳細は、『Oracle Fusion Middleware Oracle SOA Suite管理者ガイド』を参照してください。
Oracle User Messaging Serviceと連携するヒューマン・ワークフロー電子メール通知レイヤーでは、次の信頼性をサポートしています。
次の場合、メッセージは紛失しません。
ヒューマン・ワークフローからのメッセージ受信を確認した後で、ヒューマン・ワークフロー電子メール通知レイヤーで障害が発生した場合。
Oracle User Messaging Serviceがヒューマン・ワークフローからのメッセージ受信を確認する前に、ヒューマン・ワークフロー電子メール通知レイヤーとOracle User Messaging Serviceの両方で障害が発生した場合。
Oracle User Messaging Serviceが停止した場合。メッセージ配信は成功するまで再試行されます。
通知チャネルが停止した場合。
通知が配信できない場合は3回再試行され、そのアドレスが無効としてマークされます。 また、そのアドレスは不正アドレス・リストに追加されます。 必要な場合は、Oracle Enterprise Manager Fusion Middleware Controlコンソールで不正アドレス・リストからアドレスを手動で削除できます。発信通知は、アドレスが訂正されるまで再送信されません。 不適切に識別されるのを防ぐために、アドレスが無効とマークされるのは約1時間のみです。 この時間内に、新規の通知が送信されることはありません。
スパム・メール発信者として識別されているアドレスからの受信通知レスポンスは無視されます。
受信通知メッセージは維持されます。
通知配信失敗を示す受信通知レスポンス(ホスト不明メールなど)は無視されません。かわりに修正処理(不正アドレス・リストの更新など)が自動的に実行されます。
受信通知レスポンスは、通知ステータスを示す確認が送信者に送られるように構成できます。
受信通知レスポンスの検証は、受信通知メッセージと送信通知メッセージを関連付けて実行されます。
通知の詳細は、次を参照してください。
管理者は、次の管理タスクをOracle Enterprise Manager Fusion Middleware Controlコンソールから実行できます。
失敗した通知や誤りのある受信通知レスポンスを表示し、修正処理を実行します。
送信通知とアドレスの削除、再送信、編集などの修正処理を実行します。
受信通知レスポンスについて、不正な電子メールを表示して電子メール・アドレスをブロックします。
不正な電子メール・アドレスのリストを管理します。
失敗した通知のランタイム・データにアクセスします。このデータは、不要になった場合消去できます。
詳細は、『Oracle Fusion Middleware Oracle SOA Suite管理者ガイド』を参照してください。
通知チャネル・プリファレンスを構成する手順は、次のとおりです。
Oracle Jdeveloperで、電子メールおよび他のチャネル用の通知サービスを構成します。 詳細は、第16章「通知サービスの使用」を参照してください。
Oracle JDeveloperで、ヒューマン・タスク・エディタを開きます。
タスク通知は、ヒューマン・タスク・エディタでタスクを作成するときに構成できます。異なるアクションについて、様々なタイプの参加者に通知を送信できます。
タスク通知が送信可能なアクションについては、第25.3.9.1項「受信者へのタスク・ステータス変更の通知」を参照してください。
通知は、様々な範囲でタスクに関与するユーザーに送信できます。 これらのユーザーについては、第25.3.9.1項「受信者へのタスク・ステータス変更の通知」を参照してください。
タスクがグループに割り当てられていて、そのグループに通知エンドポイントが設定されていない場合は、グループの各ユーザーに通知が送信されます。
詳細は、次を参照してください。
通知チャネル構成の詳細は『Oracle Fusion Middleware Oracle SOA Suite管理者ガイド』
ヒューマン・タスク・エディタでタスク通知を構成する方法は第25.3.9項「参加者の通知プリファレンスの指定方法」
Oracle Enterprise Manager Fusion Middleware Controlコンソールのメッセージング・サーバー・ページから、適切なチャネル(電子メールなど)を構成します。 詳細は、『Oracle Fusion Middleware Oracle SOA Suite管理者ガイド』を参照してください。
Oracle Enterprise Manager Fusion Middleware Controlコンソールの「ワークフロー通知プロパティ」ページから、すべてのチャネルまたは電子メールに、通知サービスの通知モード・パラメータを構成します。
この値は、デフォルトで「なし」に設定されています。これは、通知が送信されないことを意味します。可能な値は次のとおりです。
すべて
電子メール、IM、SMSおよびボイスのチャネルを構成し、任意のチャネルを通じて通知を送信します。
電子メール
通知メッセージ送信に、電子メール・チャネルのみが構成されます。
なし
通知メッセージの送信用にどのチャネルも構成されません。これがデフォルトの設定です。
通知は、複数のソースから生成され多様に国際化された4つのタイプのデータで構成されます。 ただし、国際化されたすべての通知のロケールは、アイデンティティ・サービスのBPMUserオブジェクトから取得されます。
パッケージ済の文字列(アクション・リンク、コメント、Oracle BPM Worklistなど)
これらの文字列は、次のパッケージの一部として製品に国際化されています。
oracle.bpel.services.workflow.resource
ユーザーのロケールは適切なメッセージの取得に使用します。
タスク詳細添付
ユーザーのロケールはタスク詳細HTMLコンテンツの取得に使用します。
タスクの結果文字列(承認、却下など)
ヒューマン・タスク・エディタの「詳細設定」セクションでタスク定義がモデリングされると、結果のリソース・バンドルが指定されます。リソース・バンドルの各結果のキーは結果の名前そのものです。
通知メッセージ
様々な言語で通知メッセージを構成する手順は、次のとおりです。
次の方法のいずれかを使用して、通知コンテンツのメッセージを国際化します。
タスク定義の際に指定したリソース・バンドル中の値を使用する場合は、次のXPath拡張関数を使用します。
hwf:getTaskResourceBundleString(taskId, key, locale?)
この関数は、タスク定義で指定されたリソース・バンドルから、国際化された文字列を返します。
通知受信者ロケールは、次の関数によって取得できます。
hwf:getNotificationProperty('locale')
通知に対応するタスクIDは、次の関数によって取得できます。
hwf:getNotificationProperty('taskId')
異なるリソース・バンドルが使用されている場合は、次のXPath拡張関数を使用してローカライズされたメッセージを取得します。
orcl:get-localized-string()
詳細は、第25.3.10.4項「多言語設定の指定」を参照してください。
アクション可能なメッセージの送信方法は数種類あります。この項では、手順の概要について説明します。
|
注意: タスクに対してデジタル署名が有効な場合、アクション可能な電子メールは実行時に送信されません。 設計時にアクション可能な電子メールが有効化された場合も同様です。 |
アクション可能な電子メールを使用できるようにタスクを設定している場合は、電子メールを介してタスク・アクションを実行できます(同じアクションをOracle BPM Worklistからも実行できます)。アクション可能な電子メール・アカウントは、タスク・アクション関連の電子メールを受信して処理します。
ヒューマン・タスクのアクション可能な電子メールを送信する手順は、次のとおりです。
ヒューマン・タスク・エディタの「通知設定」セクションで、「通知をアクション可能にする」を選択して、電子メール通知をアクション可能にします。 これにより、電子メールを介してタスク・アクションを実行できます。
通知がアクション可能な場合、電子メールにはカスタムの結果ごとにリンクが含まれます。
通知メッセージでタスクの添付ファイルを送信する場合は、「電子メール通知によるタスクの添付ファイルの送信」を選択します。
アクション可能な電子メールが到着した後に、次のタスクを実行します。
「承認」リンクをクリックし、新規の電子メール・ウィンドウを起動します。このウィンドウには、承認データが表示されます。 図29-3に詳細を示します。
承認メールの「コメント」セクションにコメントを追加します。次に例を示します。
This contract has been approved based on the attached information.
図29-4に示すように、必要に応じて添付ファイルを追加します。
この電子メールの件名や本文など、何も変更しないでください。NID部分文字列を含むコンテンツを変更すると、電子メールは処理されません。
「送信」をクリックします。
Oracle Enterprise Manager Fusion Middleware ControlコンソールのOracle User Messaging Serviceセクションから、受信サーバー、送信メール・サーバー、送信ユーザー名とパスワードなどのプロパティを設定します。
Oracle Enterprise Manager Fusion Middleware Controlコンソールの「ワークフロー通知プロパティ」ページで、通知モードを「すべて」または「電子メール」に設定します。
Oracle Enterprise Manager Fusion Middleware Controlコンソールの「ワークフロー・タスク・サービス・プロパティ」ページで、アクション可能な電子メールのアカウント名を設定します。
「添付ファイルを含む」フラグが選択されている場合は、電子メールのみが送信されます。電子メールには、タスクのすべての添付ファイルが電子メール添付ファイルとして含まれます。
インバウンドおよびアウトバウンド添付ファイルを送信する手順は、次のとおりです。
ヒューマン・タスク・エディタの「通知設定」セクションで「電子メール通知によるタスクの添付ファイルの送信」を選択します
アクション可能な電子メール・リプライでは、電子メールに添付ファイルを追加できます。 これらの添付ファイルはタスクの添付ファイルとして追加されます。
詳細は、第25.3.9.6項「電子メール・メッセージのアクション可能化」を参照してください。
インバウンド・コメントを送信する手順は、次のとおりです。
アクション可能な電子メール・リプライでは、Comments[['と']]の間にコメントを追加します。 これらのコンテンツはタスクのコメントとして追加されます。たとえばComments[[looks good]]とします。
セキュアな通知を送信する手順は、次のとおりです。
ヒューマン・タスク・エディタの「通知設定」セクションで、通知をセキュアとしてマーク付けします。 これにより、デフォルトの通知メッセージを使用できますこの場合、通知メッセージにはタスクのコンテンツは含まれません。また、この通知はアクション可能ではありません。 デフォルトの通知メッセージには、Oracle BPM Worklist内のタスクへのリンクが含まれています。タスク詳細を参照するにはログインする必要があります。
詳細は、第25.3.9.5項「通知のセキュア化(詳細を除く)」を参照してください。
通知に使用されるチャネルを設定する手順は、次のとおりです。
Oracle BPM Worklistのプリファレンス・ユーザー・インタフェースを使用して優先通知チャネルを設定します。チャネルは、通知を送信する前にユーザー・プリファレンス・ストアに問い合せることで、動的に決定されます。ユーザー・プリファレンスが指定されていない場合は、電子メールのチャネルが使用されます。
Oracle Delegated Administration Serviceの詳細は、『Oracle Fusion Middleware Guide to Delegated Administration for Oracle Identity Management』を参照してください。
タスクは、リマインダを送信するように構成できます。リマインダは、タスクがユーザーに割り当てられた時刻またはタスクの有効期限が切れる時刻に基づいています。リマインダの数およびリマインダ間の間隔も構成可能です。タスクがASSIGNEDとしてマークされている場合、リマインダに使用されるメッセージはASSIGNEESに対するメッセージです。
リマインダを送信する手順は、次のとおりです。
ヒューマン・タスク・エディタの「通知設定」セクションで、リマインダを設定しますリマインダ構成に関連するパラメータは、次のとおりです。
Recurrence:
recurrenceでは、リマインダの送信回数を指定します。recurrenceに使用可能な値は、EVERY、NEVER、0、1、2 …、10です。
RelativeDate:
RelativeDateでは、タスクの割当て日または有効期限日のどちらからリマインダ期間を相対的に計算するかを指定します。 relativeDateに使用可能な値は、ASSIGNED、EXPIRATIONおよびBEFORE DUE DATEです。 DUE DATEオプションを使用するために、タスクのエスカレーションおよび有効期限ポリシーを変更した場合、Oracle JDeveloperには最終的な値が表示されます。
Duration:
relativeDateからの、最初のリマインダとそれ以降の各リマインダの期間を示します。期間のデータ型は、xsd:durationであり、その書式はISO 8601によりPnYnMnDTnHnMnSという形式で定義されています。大文字はデリミタであり、対応するメンバーを使用しない場合は省略できます。この例には、PT1004199059S、PT130S、PT2M10S、P1DT2S、-P1Y、P1Y2M3DT5H20M30.123Sなどがあります。
次の例で、リマインダが送信されるタイミングを具体的に説明します。
relativeDateがASSIGNED、recurrenceがEVERY、およびリマインダの期間がPT1Dであるとします。タスクが2005年3月24日午前10:00に割り当てられた場合、リマインダは2005年3月25日午前10:00、2005年3月26日午前10:00、2005年3月27日午前10:00に送信され、さらにユーザーがタスクに対するアクションを実行するまで続きます。
relativeDateがEXPIRATION、recurrenceが2、およびリマインダ期間がPT1Dであるとします。タスクの有効期限切れが2005年3月26日午前10:00で、タスクが2005年3月24日午前10:00より前に割り当てられた場合、リマインダは2005年3月24日午前10:00と2005年3月25日午前10:00に送信されます。
relativeDateがEXPIRATION、recurrenceが2、およびリマインダ期間がPT1Dであるとします。タスクの有効期限切れが2005年3月26日午前10:00で、タスクが2005年3月24日午後3:00に割り当てられた場合、リマインダは2005年3月25日午前10:00の1回のみ送信されます。
詳細は、第25.3.9.3項「リマインダの設定」を参照してください。
システム・エラー、例外エラー、ユーザー・エラーなどのために、受信メッセージを処理できない場合、ヒューマン・ワークフロー通知サービスは自動返信メッセージを送信します。 グローバル・リソース・バンドル内のこれらのメッセージに対するテキストは変更できます。 詳細は、第29.5.2項「グローバル・リソース・バンドル: WorkflowLabels.properties」を参照してください。
例29-3 WorkflowLabels.properties
# String to be prefixed to all auto reply messages
AUTO_REPLY_PREFIX_MESSAGE=Oracle Human Workflow Service
# String to be sufixed to all auto reply mesages
AUTO_REPLY_SUFFIX_MESSAGE=This message was automatically generated by Human \
Workflow Mailer. Do not reply to this mail.
# Message indicating closed status of a notified task
TaskClosed=You earlier received the notification shown below. That notification \
is now closed, and no longer requires your response. You may \
simply delete it along with this message.
# Message indicating that notification was "replied" to instead of "responded" by
# using the response link.
EMailRepliedNotification=The message you sent appeared to be a reply to a \
notification. To respond to a notification, use the \
response link that was included with your notification.
#
EMailUnSolicited= The message you sent did not appear to be in response to a \
notification. If you are responding to a notification \
Use the response link that was included with your notification.
EMailUnknownContent= The message you sent did not appear to be in response to a \
notification. If you are responding to a notification, \
Use the response link that was included with your notification.
ResponseNotProcessed=Your response to notification could not be processed. \
Log in to worklist application for more details.
ResponseProcessed=Your response to notification was successfully processed.
タスク参加者が複数の通知チャネルにアクセスする可能性もあります。カスタム通知ヘッダーを使用すると、このような参加者のタイプが通知を受信する優先チャネルとして単一のチャネルを指定できます。
カスタム通知ヘッダーを作成する手順は、次のとおりです。
ヒューマン・タスク・エディタの「通知設定」セクションにあるカスタム通知ヘッダー・フィールドで、使用する優先通知チャネル(ボイス、SMSなど)を指定するカスタム通知ヘッダーを作成します。ヒューマン・ワークフロー電子メール通知レイヤーは、これらのヘッダー値をOracle User Messaging Serviceのルールベース通知サービスに提供します。
たとえば、「名前」フィールドをdeliveryTypeに設定し、「値」フィールドをSMSに設定します。
ルールベース通知サービスは、使用する優先通知チャネルを識別するのみであることに注意してください。 優先チャネルのアドレスはOracle Identity Managementから取得されます。通知メッセージは両方のサービスによる情報から作成されます。
詳細は、次を参照してください。
この項では、Dynamic Assignment Functionを使用した割当てサービスの構成方法について説明します。
タスクがグループに割り当てられると、グループ内のユーザーは通常、そのタスクを申告して操作する必要があります。ただし、様々なディスパッチ・メカニズムを使用すると、グループ内のユーザーに作業を自動的に送信できます。自動タスク・ディスパッチは、Dynamic Assignment Functionを介して実行されます。Dynamic Assignment Functionでは、グループ、ユーザー・リストまたはグループ・リストから、特定のユーザーまたはグループが選択されます。 いくつかの関数が自動的に提供されます。ただし、独自の関数を作成してワークフロー・サービスに登録することもできます。 表29-21に、3つのDynamic Assignment Functionを示します。
表29-21 Dynamic Assignment Function
| 関数 | タイプ | 説明 |
|---|---|---|
|
|
動的割当て |
現在割り当てられているタスク数が最も少ないユーザーまたはグループを選択します。 |
|
|
タスク・エスカレーション |
マネージャのマネージャを選択します。 |
|
|
動的割当て |
特定の期間(デフォルトでは過去7日間)に最も多くのタスクを完了したユーザーまたはグループを選択します。 |
|
|
動的割当て |
各ユーザーまたはグループを順番に選択します。 |
これらの関数ではいずれもユーザーの休暇ステータスがチェックされます。現在割当てできないユーザーにタスクが自動的に割り当てられることはありません。
これらのDynamic Assignment Functionは、BPELプロセスまたはタスク定義でカスタムXPath関数を使用してコールできます。
wfDynamicUserAssign
wfDynamicGroupAssign
これらのXPath関数は、次のパラメータを2つ以上指定してコールする必要があります。
コールするDynamic Assignment Functionの名前。
関数の実行対象となるグループの名前(またはユーザー・リストやグループ・リスト)。(オプション)ユーザーまたはグループが属しているアイデンティティ・レルム(デフォルト値はデフォルトのアイデンティティ・レルム)。
Dynamic Assignment Function固有のその他のオプション・パラメータ。割当て関数MOST_PRODUCTIVEの場合は、ユーザーの生産性の計算対象となる期間(日数)です。他の2つの関数では、追加のパラメータは使用しません。
また、グループ用に作成したヒューマン・ワークフロー・ルールでは、Dynamic Assignment Functionを使用してタスクを再割当てするメンバーをそのグループから選択できます。
これらの関数の他に、独自のDynamic Assignment Functionを実装して構成できるようにDynamic Assignment Frameworkが用意されています。
次の手順に従って、独自のDynamic Assignment Functionを実装します。
Dynamic Assignment Functionを実装する手順は、次のとおりです。
次のインタフェースの一方または両方を実装するJavaクラスを記述します。
oracle.bpel.services.workflow.assignment.dynamic. IDynamicUserAssignmentFunction oracle.bpel.services.workflow.assignment.dynamic. IDynamicGroupAssignmentFunction
Dynamic Assignment Functionでユーザーを選択する場合は、最初のインタフェースを実装します。グループを選択する場合は、第2のインタフェースを実装します。ユーザーとグループの両方を選択可能にする場合は、両方のインタフェースを実装します。
前述の2つのインタフェースは、どちらもインタフェースoracle.bpel.services.workflow.assignment.dynamic.IDynamicAssignmentFunctionを拡張します。
Javaクラスでは、そのインタフェースのメソッドも実装する必要があります。これらのインタフェースはJavadocに示されたとおりです。
Dynamic Assignment Frameworkには、ユーティリティ・クラスoracle.bpel.services.workflow.assignment.dynamic.DynamicAssignmentUtilsも用意されています。
このクラスは、Dynamic Assignment Functionの実装時に役立つ多数のメソッドを提供します。
Dynamic AssignmentのインタフェースとユーティリティのJavadocの詳細は、SOA_ORACLE_HOME\javadoc\soa-infraを参照してください。
Dynamic Assignment Functionは、Oracle Enterprise Manager Fusion Middleware Controlコンソールで他のヒューマン・タスク構成パラメータとともに構成します。
Dynamic Assignment Functionごとに、このファイルに2つの必須パラメータを<function>タグ形式で指定する必要があります。
functionタグには、次の2つの属性を含める必要があります。
name: 関数名
classpath: 関数を実装するクラスの完全修飾クラス名。
また、各関数には、必要な数のプロパティをオプションで指定できます。 これらのプロパティは単純な名前/値ペアで、初期化パラメータとして関数に渡されます。
これらのタグで指定したプロパティ値は、Dynamic Assignment FunctionのsetInitParametersメソッドに(name属性の値で索引付けされた)マップとして渡されます。
関数のうち2つは、初期化パラメータをとります。この種の関数は次のとおりです。
ROUND_ROBIN
MAX_MAP_SIZEパラメータには、関数がROUND_ROBINカウントを維持できる一連のユーザーまたはグループの最大数を指定します。Dynamic Assignment Functionでは、ROUND_ROBIN関数を実行するように要求される各グループ(またはユーザーとグループのリスト)について、ユーザーとグループのリストがメモリーに保持されます。
MOST_PRODUCTIVE
DEAFULT_TIME_PERIODパラメータには、ユーザーの生産性を計算する期間(日数)を指定します。この値は、MOST_PRODUCTIVE Dynamic Assignment Functionをコールするときに上書きできます。XPath関数は、そのXPath関数のコールで第3のパラメータとして代替値を指定して使用します。
Oracle Enterprise Manager Fusion Middleware ControlコンソールからDynamic Assignment Functionを構成する方法の詳細は、『Oracle Fusion Middleware Oracle SOA Suite管理者ガイド』を参照してください。
ランタイム構成サービスには、使用可能なユーザーとグループのDynamic Assignment Functionのリストを返すメソッドが用意されています。これらの関数では、関数の名前とユーザー表示可能なラベルの両方が返されます。この関数では表示名のローカライズがサポートされるため、コンテキスト・ユーザーには適切な言語で表示されます。 これらの関数は、使用可能なDynamic Assignment Functionのリストを表示するためにOracle BPM Worklistで使用されます。 これは、Dynamic Assignment Functionのみに適用されます。 タスク・エスカレーション関数の表示名はサポートされていません。
Dynamic Assignment Functionの表示名を構成する手順は、次のとおりです。
エントリをリソース・プロパティ・ファイルWorkflowLabels.propertiesに追加し、関連リソース・プロパティ・ファイルを他の言語で追加して、Dynamic Assignment Functionの表示名(および適切なトランスレーション)を指定します。 このファイルは、ワークフロー構成パラメータworkflowCustomizationsClasspathURLで識別されるクラスパス内にあります。
Dynamic Assignment Functionのエントリには、次の書式を使用する必要があります。
DYN_ASSIGN_FN.[function name]=Function Display Name
たとえば、ROUND_ROBIN関数のエントリは次のようになります。
DYN_ASSIGN_FN.ROUND_ROBIN = Round Robin
これらのファイルにDynamic Assignment Functionのエントリを追加するかどうかはオプションであることに注意してください。ファイルにエントリが存在しない場合は、かわりに関数名(ROUND_ROBINなど)が使用されます。
WorkflowLabels.propertiesファイルの詳細は、次のURLで入手可能なサンプルのworkflow-110-workflowCustomizationsを参照してください。
http://www.oracle.com/technology/sample_code/products/hwf
ヒューマン・ワークフロー参加者は、ルーティング・スリップで宣言的に指定されます。ルーティング・スリップでは、参加者およびヒューマン・ワークフローへの参加方法(管理チェーン階層、承認者の順序リストなど)を指定することでヒューマン・ワークフローの進行方法を決定します。
ヒューマン・タスク・エディタでは様々な組込みパターンを使用して、ルーティング・スリップを宣言的に作成できます。さらに、ビジネス・ルールに基づいた拡張ルーティングを使用して、より複雑にルーティングできます。ただし、カスタム・ロジックを使用してより高度なルーティングを作成する場合は、カスタム割当てサービスを実装してルーティングします。このような動的割当てをサポートするために、割当てサービスが使用されます。割当てサービスは、タスク割当て先の決定を担当します。独自の割当てサービスを実装し、その実装をプラグイン接続して特定のヒューマン・ワークフローで使用することもできます。
割当てサービスにより、ヒューマン・ワークフローの次のタスク割当て詳細が決定されます。
タスク開始時の割当て。
タスク再開始時の割当て。
ユーザーがタスクの結果を更新するときの割当て。タスクの結果が更新された場合、そのタスクは他のユーザーにルーティングするか完了にできます。
タスク情報のリクエスト元の割当て先。
タスクでOracle BPM Worklistからの再承認をサポートしている場合、ユーザーは再承認のための情報をリクエストできます。
再承認がサポートされている場合にタスクを再承認するユーザー。
ヒューマン・ワークフロー・サービスでは、特定のタスクについて割当てサービスが識別されて起動され、タスク割当てが決定されます。
たとえば、単純割当てサービスの繰返しは次のとおりです。
クライアントが、割当てサービスによりルーティングが決定される経費承認タスクを開始します。
割当てサービスが、タスク割当て先をjcooperであると決定します。
jcooperがタスクを承認すると、割当てサービスがタスクをjsteinに割り当てます。また、割当てサービスはタスク作成者であるjlondonに必ず通知を送信するように指定します。
jsteinがタスクを承認し、割当てサービスは他にタスクの割当て先ユーザーがいないことを示します。
割当てサービスを実装する手順は、次のとおりです。
割当てサービスは、IAssignmentServiceインタフェースを使用して実装します。ヒューマン・ワークフロー・サービスは、次の情報を割当てサービスに渡してタスク割当てを決定します。
タスク・ドキュメント
ヒューマン・ワークフローで実行されるタスク・ドキュメント。タスク・ドキュメントには、ペイロードと他のタスク情報(現在の状態など)が含まれています。
プロパティのマッピング
割当てサービスを指定するときは、プロパティのリストを指定して、タスク割当て先を決定するバックエンド・サービスにコールバックを相関付けることもできます。
タスク履歴
タスク履歴は、タスクの履歴をトレースするための時系列順のタスク・ドキュメントのリストです。このリスト内のタスク・ドキュメントには、実際のタスクの属性のサブセット(state、updatedBy、outcome、updatedDateなど)が含まれています。
|
注意:
|
独自の割当てサービス・プラグインを実装できます。このプラグインは、ヒューマン・ワークフロー実行時にヒューマン・ワークフロー・サービスによって起動されます。
例29-4では、TestAssignmentService.javaと呼ばれるIAssignmentService実装の例を示します。
例29-4 IAssignmentService実装の例
/* $Header: TestAssignmentService.java 24-may-2006.18:26:16 Exp $ */
/* Copyright (c) 2004, 2006, Oracle. All rights reserved. */
/*
DESCRIPTION
Interface IAssignmentService defines the callbacks an assignment
service will implement. The implementation of the IAssignmentService
will be called by the workflow service
PRIVATE CLASSES
<list of private classes defined - with one-line descriptions>
NOTES
<other useful comments, qualifications, etc.>
MODIFIED (MM/DD/YY)
*/
/**
* @version $Header: IAssignmentService.java 29-jun-2004.21:10:35 Exp
$
*
*
*/
package oracle.bpel.services.workflow.test.workflow;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import oracle.bpel.services.workflow.metadata.routingslip.model.*;
import oracle.bpel.services.workflow.metadata.routingslip.model.Participants;
import oracle.bpel.services.workflow.metadata.routingslip.model.ParticipantsType.*;
import oracle.bpel.services.workflow.task.IAssignmentService;
import oracle.bpel.services.workflow.task.ITaskAssignee;
import oracle.bpel.services.workflow.task.model.Task;
public class TestAssignmentService implements
oracle.bpel.services.workflow.task.IAssignmentService {
static int numberOfApprovals = 0;
static String[] users = new String[]{"jstein", "wfaulk", "cdickens"};
public Participants onInitiation(Task task,
Map propertyBag) {
return createParticipant();
}
public Participants onReinitiation(Task task,
Map propertyBag) {
return null;
}
public Participants onOutcomeUpdated(Task task,
Map propertyBag,
String updatedBy,
String outcome) {
return createParticipant();
}
public Participants onAssignmentSkipped(Task task,
Map propertyBag) {
return null;
}
public List getAssigneesToRequestForInformation(Task task,
Map propertyBag) {
List rfiUsers = new ArrayList();
rfiUsers.add("jcooper");
rfiUsers.add("jstein");
rfiUsers.add("wfaulk");
rfiUsers.add("cdickens");
return rfiUsers;
}
public List getReapprovalAssignees(Task task,
Map propertyBag,
ITaskAssignee infoRequestedAssignee) {
List reapprovalUsers = new ArrayList();
reapprovalUsers.add("jstein");
reapprovalUsers.add("wfaulk");
reapprovalUsers.add("cdickens");
return reapprovalUsers;
}
private Participants createParticipant() {
if (numberOfApprovals > 2) {
numberOfApprovals = 0;
return null;
}
String user = users[numberOfApprovals++];
ObjectFactory objFactory = new ObjectFactory();
Participants participants = objFactory.createParticipants();
Participant participant = objFactory.createParticipantsTypeParticipant();
participant.setName("Loan Agent");
ResourceType resource2 = objFactory.createResourceType(user);
resource2.setIsGroup(false);
resource2.setType("STATIC");
participant.getResource().add(resource2);
participants.getParticipantOrSequentialParticipantOrAdhoc().
add(participant);
return participants;
}
}
カスタム割当てサービスをデプロイする手順は、次のとおりです。
次のメソッドを1つ使用して、割当てサービスの実装クラスおよび関連クラスをOracle BPEL Process Managerのクラスパスで使用可能にします。
クラスをSCA-INF/classesに直接ロードするか、SCA-INF/libにJARとしてロードします。
Oracle BPEL Process Managerの共有ライブラリを変更してJARファイルを含めます。
|
注意:
|
カスタム・エスカレーション関数を使用すると、ヒューマン・ワークフロー内でカスタム・ルールを統合できます。
カスタム・エスカレーション関数を実装する手順は、次のとおりです。
カスタムのタスク・エスカレーション関数を作成し、この関数をタスク定義に使用するヒューマン・ワークフロー・サービスに登録します。
ヒューマン・タスク・エディタの「詳細設定」セクションを使用して、ルールをヒューマン・ワークフロー内で統合します。
詳細は、第25.3.10.1項「エスカレーション・ルールの指定」を参照してください。
次のコールバックおよびリソース・バンドルのクラスは、SOAプロジェクトから直接ロードできます。oracle.soainfra.common共有ライブラリのクラスをロードしてOracle WebLogic Serverを再起動する必要はありません。
IAssignmentService
IRestrictedAssignmentService
IRoutingSlipCallback
IPercentageCompletionCallback
INotificationCallback
プロジェクト・レベルのリソース・バンドル
コールバック・クラスは、次の場所に配置できます。
プロジェクトのSCA-INF/libディレクトリにあるJAR
プロジェクトのSCA-INF/classesディレクトリにあるクラス
さらに、下位互換性をサポートするために、プロジェクト・レベルのリソース・バンドルは、.taskファイルと同じディレクトリ内に配置することもできます。
この項では、ヒューマン・ワークフロー・サービスで使用するリソース・バンドルと、リソース・バンドルをカスタマイズして代替のリソース文字列を提供する方法について説明します。
ヒューマン・ワークフロー・サービスAPIおよびOracle BPM Worklistでは、IWorkflowContextオブジェクトのロケール設定を使用してAPIにアクセスします。これは、アイデンティティ・サービスで構成されているユーザー・ディレクトリ内のユーザーのロケールです。 ユーザーに対してロケールが指定されていない場合は、かわりにJava EEサーバーのデフォルト・ロケールが使用されます。
APIクライアントでは、IWorkflowContextオブジェクトに新しい値を設定することで、このロケールを上書きできます。 Oracle BPM Worklistには、ユーザー・プリファレンス・オプションが用意されており、このオプションによって、ユーザーは、各自のユーザー・ディレクトリに設定されているロケールのかわりに、ブラウザのロケールを使用できます。
各ヒューマン・ワークフロー・コンポーネントは、リソース・バンドルに関連付けることができます。このバンドルによって、タスクの結果の表示名として使用するリソース文字列が定義されます。 リソース文字列は、TaskMetadataServiceメソッドのgetTaskDefinitionOutcomesによって返され、Oracle BPM Worklistおよびタスク・フローのタスク詳細アプリケーションに表示されます。
また、ヒューマン・ワークフローのXPath関数のgetTaskResourceBundle文字列を使用すると、タスクのリソース・バンドルのリソース文字列をルックアップできます。たとえば、このXPath関数は、タスクの通知メッセージの作成に使用するXPath式の一部として使用できます。
ヒューマン・ワークフロー・コンポーネントをリソース・バンドルに関連付けます。これを実行するには、Oracle JDeveloperで、ヒューマン・タスク・エディタの「詳細設定」セクションにある「リソースの詳細」ダイアログの「リソース名」フィールドと「リソースの場所」フィールドを設定します。「リソースの場所」フィールドの値はURLであることに注意してください。リソース・バンドルは、このURLが指し示すJARファイル内に含めることができます。リソース・バンドルに対して共有場所を使用すると、複数のヒューマン・ワークフロー・コンポーネント間で同じリソース・バンドルを共有できます。
ヒューマン・ワークフロー・コンポーネントに対してリソース・バンドルが指定されていない場合は、グローバル・リソース・バンドル内でソース文字列がルックアップされます (第29.5.2項「グローバル・リソース・バンドル: WorkflowLabels.properties」を参照)。よく使用されるタスクの結果をグローバル・リソース・バンドルで定義すると、個別のヒューマン・ワークフロー・コンポーネントに対してリソース・バンドルを定義する必要性が減少します。
特定の結果に対してリソース文字列を配置できない場合は、その結果の名前がすべてのロケールで表示値として使用されます。
次のグローバル・リソース・バンドルは、ヒューマン・ワークフロー・サービスAPIによるリソース文字列のルックアップに使用されます。
oracle.bpel.services.worklfow.resource.WorkflowLabels.properties
このバンドルをカスタマイズすると、既存の表示文字列の代替を提供したり、他の文字列(フレックス・フィールドの属性ラベル、標準ビュー、カスタムのDynamic Assignment Function用など)を追加できます。
グローバル・リソース・バンドルでは、次の内容に対するリソース文字列が提供されます。
タスク属性
Oracle BPM Worklist(または他のクライアント)に表示される様々なタスク属性のラベル。 リソース文字列値は、次のTaskMetadataServiceメソッドから返されます。
getTaskAttributes
getTaskAttributesForTaskDefinition
getTaskAttributesForTaskDefinitions
フレックス・フィールド属性ラベル
ランタイム構成サービスを介して作成されたフレックス・フィールド属性ラベル用のラベル。 これらの文字列は、Oracle BPM Worklistで、マップされたフレックス・フィールドの属性を表示する際に使用されます。リソース文字列値は、次のTaskMetadataServiceメソッドから返されます。
getTaskAttributesForTaskDefinition
getTaskAttributesForTaskDefinitions
フレックス・フィールド・マッピングに翻訳されたリソース文字列が必要な場合は、WorkflowLabels.propertiesバンドルをカスタマイズして適切な文字列を挿入します。
タスクの結果
共有のタスクの結果に対するデフォルトのリソース文字列。前述のように、タスクの結果はタスク・リソース・バンドルで上書きできます。タスク固有のリソース・バンドルが指定されていない場合、リソース文字列は、TaskMetadataServiceメソッドのgetTaskDefinitionOutcomesから返されます。出荷時のグローバル・リソース・バンドルには、次の結果に対するリソース文字列が含まれています。
Approve
Reject
Yes
No
OK
Defer
Accept
Acknowledge
Dynamic Assignment Function名
Dynamic Assignment Functionのラベル。これらの文字列は、ランタイム構成サービス・メソッドのgetUserDynamicAssignmentFunctionsおよびgetGroupDynamicAssignmentFunctionsから返されます。同梱されているリソース・バンドルには、標準のDynamic Assignment Function(ROUND_ROBIN、LEAST_BUSYおよびMOST_PRODUCTIVE)のラベルが含まれています。追加のカスタムDynamic Assignment Functionが作成されている場合は、WorkflowLabels.propertiesリソース・バンドルを変更して、新しい関数用のリソース文字を指定します。
標準ビュー名
標準ビューのラベル。作成した標準ビューに対して翻訳したリソース文字列が必要な場合は、それらの文字列をここで追加します。標準ビューのリソース文字列値は、リソース・バンドルからルックアップされ、UserMetadataServiceメソッドのgetStandardTaskViewListおよびgetStandardTaskViewDetailsから、標準ビュー名として返されます。リソース文字列のキーは、標準ビューの作成時に指定した名前である必要があります。特定の標準ビューに対してリソース文字列を追加しない場合は、かわりに入力した名前が使用されます。
通知メッセージ
タスク・サービスによる自動通知の送信時に使用されるリソース文字列。通知メッセージは、ユーザーの要件にあわせてカスタマイズできます。
タスク・ルーティング・エラー・コメント
タスクのルーティングでエラーが発生すると、タスク・サービスは、エラーを記述したコメントをタスクに自動的に追加します。このコメントで使用される様々な文字列は、このリソース・バンドルで定義されます。
WorkflowLabels.propertiesリソース・バンドルのコピーは、サンプルのworkflow-110-workflowCustomizationsから入手できます。
WorkflowLabels.propertiesリソース・バンドルは、その内容を編集し、カスタマイズしたバージョンを、この製品に同梱されているバージョンより前のバージョンのワークフロー・サービスのクラスパスに追加してカスタマイズできます。
これを実行するには、次の方法があります。
カスタマイズしたファイルをディレクトリ・ツリー内の次の場所に配置します。
directory_path/oracle/bpel/services/workflow/resource/WorkflowLabels.properties
directory_pathを指し示すように、worklfowCustomClasspathURL構成パラメータを更新します(これはURLであるため、Webサーバー上でリソース・バンドルをホスティングし、そのリソース・バンドルに複数のOracle WebLogic Serverからアクセスできるようになります)。この方法の詳細は、サンプルのworkflow-110-workflowCustomizationsを参照してください。 このサンプルは、次のURLからダウンロードできます。
http://www.oracle.com/technology/sample_code/products/hwf
ADFワークリスト・クライアント・アプリケーションでは、次の2つのリソース・バンドルが使用されます。これらのハンドルには、ワークリスト・クライアントWebアプリケーションに表示されるすべての文字列が含まれています。
oracle.bpel.worklistapp.resource.WorkflowResourceBundle: このバンドルには、ADF Oracle BPM Worklistと、Oracle SOA Suiteのバージョン10.1.3に同梱されているJSPベースのサンプルのOracle BPM Worklistの両方で使用される文字列が含まれています。
oracle.bpel.worklistapp.resource.WorklistResourceBundle: このバンドルには、ADF Oracle BPM Worklistでのみ使用される文字列が含まれています。
ワークリストのリソース・バンドルのコピーは、サンプルのworkflow-110-workflowCustomizationsから入手できます。
このサンプルには、Oracle BPM Worklistのカスタマイズ方法が示されています。この方法によって、リソース・バンドルを再コンパイルし、更新したクラスをOracle BPM Worklistに追加します。
特定のタスク・タイプの詳細を表示するために作成されたADFタスク・フロー・アプリケーションと関連のデータ制御では、リソース・バンドルのoracle.bpel.services.workflow.worklist.resource.worklistを使用してリソース文字列が格納されます。
タスク・フロー・アプリケーションにカスタマイズしたリソース・バンドルを追加すると、タスク詳細のADFタスク・フローに独自のカスタム・リソース文字列を提供できます。
WorkflowLabels.propertiesリソース・バンドルのコピーは、サンプルのworkflow-110-workflowCustomizationsから入手できます。このサンプルには、タスク詳細のADFタスク・フロー・アプリケーションに、カスタマイズした独自のリソース文字列を提供する方法の詳細が示されています。
デフォルトでは、ヒューマン・ワークフロー・システムでユーザー名の大/小文字は区別されません。 すべてのユーザー名は小文字で格納されます。 ただし、グループ名とアプリケーション・ロール名は常に大/小文字が区別されます。 ユーザー名は、大/小文字を区別するようにOracle Enterprise Manager Fusion Middleware Controlコンソールで変更できます。
|
注意: この設定は、新規のインストールを実行した後にのみ変更してください。 インスタンスをアクティブに処理しているインストール、または多数のインストールがデータベースにあるインストールでこの値を変更すると、重大な問題が発生します。 |
大/小文字を区別するように変更する手順は、次のとおりです。
Oracle Enterprise Manager Fusion Middleware Controlコンソールにログインします。
ナビゲータで、「SOA」フォルダを開きます。
「soa-infra」を右クリックし、「管理」→「システムMBeanブラウザ」の順に選択します。
ページの右側に「システムMBeanブラウザ」が表示されます。
「アプリケーション定義のMBean」→「oracle.as.soainfra.config」→「サーバー: server_name」→「WorkflowIdentityConfig」→「human-workflow」→「WorkflowIdentityConfig.PropertyType」の順に開きます。
「caseSensitive」をクリックします。
「操作」タブをクリックします。
「setValue」をクリックします。
「値」フィールドにtrueと入力し、「起動」をクリックします。
10.1.3(デフォルトで、大/小文字を区別します)からアップグレードする場合、システムの動作を10.1.3と同じにするには、「caseSensitive」をtrueに設定します。
この項では、ヒューマン・ワークフロー・クライアントとOracle WebLogic Serverサービスとの統合方法について説明します。
ヒューマン・ワークフロー・サービスは、次のワークフロー・サービスを公開します。
タスク・サービス
タスク問合せサービス
ユーザー・メタデータ・サービス
タスク・エビデンス・サービス
タスク・メタデータ・サービス
ランタイム構成サービス
タスク・レポート・サービス
これらのサービスを使用するには、ワークフロー・サービスに対してAbstract Factoryパターンを使用する必要があります。 Abstract Factoryパターンを使用すると、共通のテーマを持つ各ファクトリのグループをカプセル化できます。
次のタスクを実行します。
特定のサービス・タイプに対してIWorkflowServiceClientインスタンスを取得します。 WorkflowServiceClientFactoryは、サービス・タイプに従ってIWorkflowServiceClientを取得する静的ファクトリ・メソッドを提供します。
IWorkflowServiceClientインスタンスを使用して、使用するサービス・インスタンスを取得します。
次の3つのサービス・タイプがサポートされています。
ローカル
リモート
SOAP
ローカル・クライアントとリモート・クライアントは、Enterprise JavaBeansクライアント(それぞれ、ローカルEnterprise JavaBeansとリモートEnterprise JavaBeans)を使用します。 SOAPはSOAPクライアントを使用します。 各タイプのサービスには、ワークフロー・クライアントを構成する必要があります。 例29-5に詳細を示します。
例29-5 クライアント構成ファイル
<workflowServicesClientConfiguration>
<server name="default" default="true">
<localClient>
<participateInClientTransaction>false</participateInClientTransaction>
</localClient>
<remoteClient>
<serverURL>t3://myhost.us.oracle.com:7001</serverURL>
<userName>weblogic</userName>
<password>weblogic</password>
<initialContextFactory>weblogic.jndi.WLInitialContextFactory
</initialContextFactory>
<participateInClientTransaction>false</participateInClientTransaction>
</remoteClient>
<soapClient>
<rootEndPointURL>http://myhost.us.oracle.com:7001</rootEndPointURL>
<identityPropagation mode="dynamic" type="saml">
<policy-references>
<policy-reference enabled="true" category="security"
uri="oracle/wss10_saml_token_client_policy"/>
</policy-references>
</identityPropagation>
</soapClient>
</server>
</workflowServicesClientConfiguration>
例29-6に、タスク問合せサービス・クライアントのコード例を示します。
例29-6 タスク問合せサービス・クライアントのコード
/**
* WFClientSample
*/
package oracle.bpel.services.workflow.samples;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import oracle.bpel.services.workflow.IWorkflowConstants;
import oracle.bpel.services.workflow.WorkflowException;
import oracle.bpel.services.workflow.client.IWorkflowServiceClient;
import oracle.bpel.services.workflow.client.WorkflowServiceClientFactory;
import oracle.bpel.services.workflow.client.IWorkflowServiceClientConstants
.CONNECTION_PROPERTY;
import oracle.bpel.services.workflow.query.ITaskQueryService;
import oracle.bpel.services.workflow.query.ITaskQueryService.AssignmentFilter;
import oracle.bpel.services.workflow.query.ITaskQueryService.OptionalInfo;
import oracle.bpel.services.workflow.repos.Ordering;
import oracle.bpel.services.workflow.repos.Predicate;
import oracle.bpel.services.workflow.repos.TableConstants;
import oracle.bpel.services.workflow.verification.IWorkflowContext;
public class WFClientSample {
public static List runClient(String clientType) throws WorkflowException {
try {
IWorkflowServiceClient wfSvcClient = null;
ITaskQueryService taskQuerySvc = null;
IWorkflowContext wfCtx = null;
// 1. this step is optional since configuration can be set in wf_client_
config.xml file
Map<CONNECTION_PROPERTY, String> properties = new HashMap<CONNECTION_
PROPERTY, String>();
if (WorkflowServiceClientFactory.REMOTE_CLIENT.equals(clientType)) {
properties.put(CONNECTION_PROPERTY.EJB_INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
properties.put(CONNECTION_PROPERTY.EJB_PROVIDER_URL,
"t3://myhost.us.oracle.com:7001");
properties.put(CONNECTION_PROPERTY.EJB_SECURITY_CREDENTIALS,
"weblogic");
properties.put(CONNECTION_PROPERTY.EJB_SECURITY_PRINCIPAL, "weblogic");
} else if (WorkflowServiceClientFactory.SOAP_CLIENT.equals(clientType)) {
properties.put(CONNECTION_PROPERTY.SOAP_END_POINT_ROOT,
"http://myhost:7001");
properties.put(CONNECTION_PROPERTY.SOAP_IDENTITY_
PROPAGATION,"non-saml"); // optional
}
// 2. gets IWorkflowServiceClient for specified client type
wfSvcClient =
WorkflowServiceClientFactory.getWorkflowServiceClient(clientType, properties,
null);
// 3. gets ITaskQueryService instance
taskQuerySvc = wfSvcClient.getTaskQueryService();
// 4. gets IWorkflowContext instance
wfCtx = taskQuerySvc.authenticate("jcooper", "welcome1".toCharArray(),
"jazn.com");
// 5. creates displayColumns
List<String> displayColumns = new ArrayList<String>(8);
displayColumns.add("TASKID");
displayColumns.add("TASKNUMBER");
displayColumns.add("TITLE");
displayColumns.add("CATEGORY");
// 6. creates optionalInfo
List<ITaskQueryService.OptionalInfo> optionalInfo = new
ArrayList<ITaskQueryService.OptionalInfo>();
optionalInfo.add(ITaskQueryService.OptionalInfo.DISPLAY_INFO);
// 7. creates assignmentFilter
AssignmentFilter assignmentFilter = AssignmentFilter.MY_AND_GROUP;
// 8. creates predicate
List<String> stateList = new ArrayList<String>();
stateList.add(IWorkflowConstants.TASK_STATE_ASSIGNED);
stateList.add(IWorkflowConstants.TASK_STATE_INFO_REQUESTED);
Predicate predicate = new Predicate(TableConstants.WFTASK_STATE_COLUMN,
Predicate.OP_IN, stateList);
// 9. creates ordering
Ordering ordering = new Ordering(TableConstants.WFTASK_DUEDATE_COLUMN,
true, false);
ordering.addClause(TableConstants.WFTASK_CREATEDDATE_COLUMN, true,
false);
// 10. calls service - query tasks
List taskList = taskQuerySvc.queryTasks(wfCtx,
(List<String>) displayColumns,
(List<OptionalInfo>) optionalInfo,
(AssignmentFilter)
assignmentFilter,
(String) null, // keywords is
optional (see javadoc)
// optional
predicate,
ordering,
0, // starting row
100); // ending row for paging, 0
if no paging
// Enjoy result
System.out.println("Successfuly get list of tasks for client type: " +
clientType +
". The list size is " + taskList.size());
return taskList;
} catch (WorkflowException e) {
System.out.println("Error occurred");
e.printStackTrace();
throw e;
}
}
public static void main(String args[]) throws Exception {
runClient(WorkflowServiceClientFactory.REMOTE_CLIENT);
runClient(WorkflowServiceClientFactory.SOAP_CLIENT);
}
}
各タイプのクライアントには、ワークフロー・クライアント構成を設定する必要があります。 次の場所に構成を設定できます。
wf_client_config.xmlファイル
プロパティ・マップ
プロパティ・マップは常に、wf_client_config.xmlファイルの補足です。 構成属性は、プロパティ・マップによって上書きされる場合があります。 構成ファイルはオプションです。 構成ファイルがアプリケーションのクラスパスに見つからない場合は、プロパティ・マップが構成の主要ソースになります。
クライアント構成のXSDスキーマは、wf_client_config.xsdファイルにあります。
サーバー構成には、次の3タイプのクライアントが含まれている必要があります。
localClient
remoteClient
soapClient
すべてのクライアントを指定することをお薦めします。 これは、リモート・クライアントやローカル・クライアントを持たないサービス(アイデンティティ・サービスなど)があるためです。 このため、他のサービスでリモート・クライアントを使用する場合、アイデンティティ・サービスではSOAPサービスを使用します。
例29-7に、クライアント構成のXMLファイルの例を示します。 この構成によって、defaultという名前のサーバーが定義されます。 このXMLファイルは、クライアント・アプリケーションのEARファイルに移動する必要があります。
例29-7 クライアント構成
<workflowServicesClientConfiguration>
server name="default" default="true">
<localClient>
<participateInClientTransaction>false</participateInClientTransaction>
</localClient>
<remoteClient>
<serverURL>t3://myhost.us.oracle.com:7001</serverURL>
<userName>weblogic</userName>
<password>weblogic</password>
<initialContextFactory>weblogic.jndi.WLInitialContextFactory
</initialContextFactory>
<participateInClientTransaction>false</participateInClientTransaction>
</remoteClient>
<soapClient>
<rootEndPointURL>http://myhost.us.oracle.com:7001</rootEndPointURL>
<identityPropagation mode="dynamic" type="saml">
<policy-references>
<policy-reference enabled="true" category="security"
uri="oracle/wss10_saml_token_client_policy"/>
</policy-references>
</identityPropagation>
</soapClient>
</server>
</workflowServicesClientConfiguration>
接続プロパティを動的に指定する場合は、java.util.Mapを使用してプロパティを指定できます。 これらのプロパティは、構成ファイル内の定義よりも優先されます。 したがって、wf_client_config.xmlに定義した値は、これらのプロパティの値によって上書きされます。 サーバーへの接続詳細を動的に指定しない場合は、マップでのプロパティ設定を省略し、ファクトリ・メソッドにNULL値を渡すことができます。 この場合、構成ファイルwf_client_config.xmlはクライアント・アプリケーションのクラスパス内で検索されます。
構成ファイルがクラスパス内にある必要があるのは、構成ファイルから構成を取得する場合のみです。 特定のクライアント・タイプの全設定をプロパティ・マップを使用して行う場合、構成ファイルの設定はオプションです。 また、JAXBオブジェクトにも構成ファイルは必要ありません。これは、すべての設定がJAXBオブジェクトから取得されるためです。
IWorkflowServiceClient wfSvcClient = WorkflowServiceClientFactory.getWorkflowServiceClient(WorkflowServiceClientFactory .REMOTE_CLIENT, (Map<IWorkflowServiceClientConstants.CONNECTION_PROPERTY, String> ) null, null);
この場合、クライアントは、クラスパス内で検出されたwf_client_config.xmlの値を使用してサービスにアクセスします。 構成ファイルがクラスパス内に見つからない場合に、サービス・タイプに応じた設定を指定しないと、ワークフロー例外がスローされます。 プロパティ・マップがNULLで、構成ファイルが見つからない場合も、例外がスローされます。 構成ファイルが見つからない場合に、クライアントでマップ内の一部のプロパティが省略されていると、実行時にサービス・コールが失敗します(プロパティは構成ファイルの補足です)。
例29-8に、プロパティ・マップで使用可能なIWorkflowServiceClientConstants.CONNECTION_PROPERTYを示します。
例29-8 CONNECTION_PROPERTY
public enum CONNECTION_PROPERTY {
MODE, // not supported , deprecated
EJB_INITIAL_CONTEXT_FACTORY,
EJB_PROVIDER_URL,
EJB_SECURITY_PRINCIPAL,
EJB_SECURITY_CREDENTIALS,
// SOAP configuration
SOAP_END_POINT_ROOT,
SOAP_IDENTITY_PROPAGATION, // if value is 'saml' then SAML-token
identity propagation is used
SOAP_IDENTITY_PROPAGATION_MODE, // "dynamic'
MANAGEMENT_POLICY_URI, // dafault value is "oracle/log_policy"
SECURITY_POLICY_URI, // default value is "oracle/wss10_
saml_token_client_policy"
// LOCAL and REMOTE EJB option
TASK_SERVICE_PARTICIPATE_IN_CLIENT_TRANSACTION // default value is
false
//(task service EJB will start a new transaction)
};
|
注意: プロパティ・マップを使用する場合、IWorkflowServiceClientConstants.CONNECTION_PROPERTY.MODEを指定する必要はありません。 このプロパティは、このリリースでは非推奨です。 |
例29-9に、リモートEnterprise JavaBeansクライアントの例を示します。
例29-9 リモートEnterprise JavaBeansクライアントの例
Map<CONNECTION_PROPERTY,String> properties = new HashMap<CONNECTION_
PROPERTY,String>();
properties.put(CONNECTION_PROPERTY.EJB_INITIAL_CONTEXT_
FACTORY,"weblogic.jndi.WLInitialContextFactory");
properties.put(CONNECTION_PROPERTY.EJB_PROVIDER_URL,
"t3://myhost.us.oracle.com:7001");
properties.put(CONNECTION_PROPERTY.EJB_SECURITY_PRINCIPAL, "weblogic");
properties.put(CONNECTION_PROPERTY.EJB_SECURITY_CREDENTIALS, "weblogic");
IWorkflowServiceClient client =
WorkflowServiceClientFactory.getWorkflowServiceClient(
WorkflowServiceClientFactory.REMOTE_CLIENT,
properties, null);
例29-10に、SOAPクライアントの例を示します。
例29-10 SOAPクライアントの例
Map<CONNECTION_PROPERTY,String> properties = new HashMap<CONNECTION_
PROPERTY,String>();
properties.put(CONNECTION_PROPERTY.SOAP_END_POINT_ROOT, "http://myhost:7001");
IWorkflowServiceClient client =
WorkflowServiceClientFactory.getWorkflowServiceClient(
WorkflowServiceClientFactory.SOAP_CLIENT,
properties, null);
クライアントでは、クライアントがメッセージを記録するjava.util.logging.Loggerを必要に応じて渡すことができます。 ロガーが指定されていない場合、ワークフロー・サービス・クライアントのコードは何も記録しません。 例29-11は、ロガーをワークフロー・サービス・クライアントに渡す方法を示しています。
クライアント構成スキーマは、リリース10.1.3.x と11g リリース1の間で変更されています。リリース10.1.3.x から11g リリース1に移行するには、次のユーティリティを使用します。
java -classpath wsclient_extended.jar:bpm-services.jar oracle.bpel.services.workflow.client.config.MigrateClientConfiguration original_file [new_file];
original_fileは10.1.3.x のwf_client_config.xmlファイルで、new_fileは新規の構成ファイル名(オプション)です。 新規の構成ファイル名を指定しないと、元の構成ファイルがバックアップされ、wf_client_config.xmlファイルが上書きされます。
この項では、Enterprise JavaBeansおよびSAMLトークン(SOAPクライアント用)を使用してアイデンティティを伝播する方法について説明します。
リクエストごとにワークフロー・コンテキストを取得すると、パフォーマンスが低下する場合があります。 これは、アイデンティティ伝播の場合も同様です。 SAMLトークンまたはEnterprise JavaBeansによるアイデンティティ伝播を使用する場合は、ユーザー名とパスワードにNULLを渡してクライアントを認証し、ワークフロー・コンテキスト・インスタンスを取得して、アイデンティティ伝播を使用せずにワークフロー・コンテキストを使用する別のサービス・コールを使用します。
クライアント・アプリケーションは、Enterprise JavaBeansアイデンティティ伝播を使用して、ユーザー・アイデンティティをサービスに伝播できます。 クライアントのコードでは、ユーザー・アイデンティティを保護する必要があります。
アイデンティティ伝播を使用する場合、クライアントのコードでは、wf_client_config.xml構成ファイルの<remoteClient>要素の下にある<userName>要素と<password>要素を省略する必要があります。 さらに、第29.6.1.2.2項「プロパティ・マップでのワークフロー・クライアント構成」で移入したMap<IWorkflowServiceClientConstants.CONNECTION_PROPERTY,String>プロパティには、次のプロパティを移入しないでください。
IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_SECURITY_PRINCIPAL
IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_SECURITY_CREDENTIALS
アイデンティティ伝播が機能するのは、アプリケーションがOracle WebLogic Serverコンテナにデプロイされ、コンテナ・セキュリティによって保護されている場合、またはクライアントがカスタムJAASログイン・モジュールによって保護されている場合のみです。
エンド・ユーザーは、正しいユーザー名とパスワードを使用してクライアント・アプリケーションにログインします。 クライアント・アプリケーションを使用するユーザーは、SOAアプリケーションで使用されるアイデンティティ・ストアで使用可能である必要があります。 このため、クライアントの構成には、ワークフロー・サービスやOracle SOA Suiteで使用するアイデンティティ・ストアと同じアイデンティティ・ストアを使用することをお薦めします。 これにより、ユーザーがクライアント側に存在している場合、そのユーザーはサーバー側にも存在していることが保証されます。
アイデンティティ・ストアの構成方法については、『Oracle Fusion Middlewareセキュリティ・ガイド』を参照してください。
SOAPクライアントを使用する場合は、Oracle WebサービスでサポートされているSAMLトークン・アイデンティティ伝播を使用できます。
この項では、アプリケーションがOracle WebLogic Serverコンテナ内に存在し、このコンテナによって保護されていることを前提にしています。
アイデンティティ伝播を有効にするには、クライアント構成で特別な伝播モードを指定する必要があります。
プロパティを使用する場合は、CONNECTION_PROPERTY.SOAP_IDENTITY_PROPAGATIONプロパティに値samlを移入します。
動的SAMLトークン伝播モード
SAMLトークン・ポリシーは動的に提供されます(デフォルト)。 次のプロパティはオプションです。 アイデンティティ伝播モードが設定されている場合、デフォルトでは動的モードで実行します。
properties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.SOAP_ IDENTITY_PROPAGATION_MODE , "dynamic");
SAMLトークンでは、デフォルトで、セキュリティ・ポリシーURIのoracle/wss10_saml_token_client_policyに基づいて動的ポリシーが構成されます。 ロギングは使用されません。 デフォルトのポリシーURIを上書きするには、クライアントで次のコードを追加します。
properties.put(CONNECTION_PROPERTY.SECURITY_POLICY_URI "oracle/wss10_saml_ token_client_policy"); properties.put(CONNECTION_PROPERTY.MANAGEMENT_POLICY_URI , "oracle/log_policy");
例29-12に、SAMLトークン動的クライアントを示します。
例29-12 トークン動的クライアント
Map<CONNECTION_PROPERTY,String> properties = new HashMap<ONNECTION_
PROPERTY,String>();
properties.put(CONNECTION_PROPERTY.SOAP_IDENTITY_PROPAGATION , "saml");
properties.put(CONNECTION_PROPERTY.SOAP_END_POINT_ROOT,
"http://myhost.us.oracle.com:7001");
properties.put(ONNECTION_PROPERTY.SECURITY_POLICY_URI, "oracle/wss10_saml_token_
client_policy"); //optional
properties.put(CONNECTION_PROPERTY.MANAGEMENT_POLICY_URI , "oracle/log_policy");
//optional
IWorkflowServiceClient client =
WorkflowServiceClientFactory.getWorkflowServiceClient(
WorkflowServiceClientFactory.SOAP_CLIENT,
properties, null);
ポリシーURIへのクライアント参照は、サーバー・ポリシーURIと一致する必要があります。 そうでない場合、SAMLトークン伝播は失敗します。
構成ファイルでは、例29-13に示すように、<soapClient>の<identityPropagation>要素を使用して伝播モードを定義できます。
例29-13 <identityPropagation>要素
<soapClient>
<rootEndPointURL>http://myhost.us.oracle.com:7001</rootEndPointURL>
<identityPropagation mode="dynamic" type="saml">
<policy-references>
<policy-reference enabled="true" category="security"
uri="oracle/wss10_saml_token_client_policy"/>
</policy-references>
</identityPropagation> </soapClient>
詳細は、『Oracle Fusion Middleware Web Servicesセキュリティおよび管理者ガイド』を参照してください。
アイデンティティ伝播を使用しないクライアント・アプリケーションには、そのクラスパスにbpm-services.jarファイルを指定する必要があります。 11g リリース1の場合、クライアントのクラスパスには次のファイルが必要です。
${bea.home}/wlserver_10.3/server/lib/wlfullclient.jar
${bea.home}/AS11gR1SOA/webservices/wsclient_extended.jar
${bea.home}/AS11gR1SOA/soa/modules/oracle.soa.fabric_11.1.1/bpm-infra.jar
${bea.home}/AS11gR1SOA/soa/modules/oracle.soa.workflow_11.1.1/bpm-services.jar
wlfullclient.jarファイルは生成する必要があります。
wlfullclient.jarは、次のように生成します。
cd ${bea.home}/wlserver_10.3/server/lib
java -jar ../../../modules/com.bea.core.jarbuilder_1.3.0.0.jar
この項では、データベース・ビューについて説明します。データベース・ビューを使用すると、レポート受信の問合せをOracle Workflowサービス・スキーマに対して実行できます。 表29-22に、Oracle BPM Worklistで公開されるレポート、およびこれらのレポートに対応するデータベース・ビューを示します。
表29-22 レポートのビュー
| 既存のワークリスト・レポート | 対応するデータベース・ビュー |
|---|---|
|
不参加タスク・レポート |
|
|
タスクのサイクル・タイム・レポート |
|
|
タスクの生産性レポート |
|
|
タスクの優先度レポート |
|
表29-23に、WFUNATTENDEDTASKS_VIEWレポート・ビューを示します。
表29-23 不参加タスク・レポート・ビュー
| 名前 | タイプ |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
脚注1NOT NULL列
次に例を示します。
有効期限が翌週の不参加タスクの問合せ:
SELECT tasknumber, taskname, assigneegroups FROM WFUNATTENDEDTASKS_VIEW WHERE expirationdate > current_date AND expirationdate < current_date + 7;
mygroupの不参加タスクの問合せ:
SELECT tasknumber, taskname, assigneegroups FROM WFUNATTENDEDTASKS_VIEW WHERE 'mygroup' IN assigneegroups;
過去30日以内に作成された不参加タスクの問合せ:
SELECT tasknumber, taskname, assigneegroups FROM WFUNATTENDEDTASKS_VIEW WHERE createddate > current_date -30;
表29-24に、WFTASKCYCLETIME_VIEWレポート・ビューを示します。
表29-24 タスクのサイクル・タイム・レポート・ビュー
| 名前 | タイプ |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
脚注1NOT NULL列
次に例を示します。
過去30日以内に作成された完了済タスクの平均サイクル・タイム(タスク完了時間)の計算:
SELECT avg(cycletime) FROM WFTASKCYCLETIME_VIEW WHERE createddate > (current_date - 30);
過去30日以内に作成されたすべての完了済タスクの平均サイクル・タイムの問合せおよびタスク名によるグループ化:
SELECT taskname, avg(cycletime) FROM WFTASKCYCLETIME_VIEW WHERE createddate > (current_date - 30) GROUP BY taskname;
各タスクで要した最短および最長時間の問合せ:
SELECT taskname, min(cycletime), max(cycletime) FROM WFTASKCYCLETIME_VIEW GROUP BY taskname;
過去7日以内に完了したタスクの平均サイクル・タイムの計算:
SELECT avg(cycletime) FROM WFTASKCYCLETIME_VIEW WHERE enddate > (current_date - 7);
完了に8日以上要したタスクの問合せ:
SELECT taskname, avg(cycletime) FROM WFTASKCYCLETIME_VIEW WHERE cycletime > ((current_date +7) - current_date) GROUP BY taskname;
表29-25に、WFPRODUCTIVITY_VIEWレポート・ビューを示します。
表29-25 タスクの生産性レポート・ビュー
| 名前 | タイプ |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
脚注1完了済タスクの場合、状態はNULLです。問合せでは、decode(outcome, '', 'COMPLETED', outcome)を使用します。
次に例を示します。
過去30日以内にユーザーが更新した一意のタスク数のカウント:
SELECT username, count(distinct(taskid)) FROM WFPRODUCTIVITY_VIEW WHERE lastupdateddate > (current_date -30) GROUP BY username;
過去7日以内にユーザーが更新したタスク数(タスクによっては複数回更新された可能性があります)のカウント:
SELECT username, count(taskid) FROM WFPRODUCTIVITY_VIEW WHERE lastupdateddate > (current_date -7) GROUP BY username;
ユーザーが作業した各タスク・タイプのタスク数のカウント:
SELECT username, taskname, count(taskid) FROM WFPRODUCTIVITY_VIEW GROUP BY username, taskname;
過去100日以内にユーザーが作業した各タスク・タイプのタスク数のカウント:
SELECT username, taskname, count(taskid) FROM WFPRODUCTIVITY_VIEW WHERE lastupdateddate > (current_date -100) GROUP BY username, taskname;
表29-26に、WFTASKPRIORITY_VIEWレポート・ビューを示します。
表29-26 タスクの優先度レポート・ビュー
| 名前 | タイプ |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
脚注1NOT NULL列
次に例を示します。
各タスク優先度で各ユーザーが更新したタスク数の問合せ:
SELECT updatedby, priority, count(taskid) FROM WFTASKPRIORITY_VIEW GROUP BY updatedby, priority;
タスクから結果までの分布の問合せ:
SELECT taskname, decode(outcome, '', 'COMPLETED', outcome), count (taskid) FROM WFTASKPRIORITY_VIEW GROUP BY taskname, outcome;
各優先度で特定のユーザーが更新したタスク数の問合せ:
SELECT priority, count(taskid) FROM WFTASKPRIORITY_VIEW WHERE updatedby='jstein' GROUP BY priority;