この章の内容は次のとおりです。
注意:
以前のリリースのOracle BPM Worklistには、フレックス・フィールドと呼ばれる機能が含まれていました。リリース11g R1 (11.1.1.4)から、フレックス・フィールドはマップ済属性と呼ばれるようになりました。
この項では、次のヒューマン・ワークフロー・サービスの役割について説明します。
タスク・サービス
タスク問合せサービス
アイデンティティ・サービス
タスク・メタデータ・サービス
ユーザー・メタデータ・サービス
タスク・レポート・サービス
ランタイム構成サービス
エビデンス・ストア・サービス
表34-1に、タスク・サービスに提供されるSimple Object Access Protocol (SOAP)、Enterprise JavaBeansおよびJavaサポートのタイプを示します。ほとんどのヒューマン・ワークフロー・サービスは、SOAPおよびリモートのEnterprise JavaBeans APIからアクセスできます。これらのサービスは、適切なクライアント・プロキシを使用して直接利用できます。また、プロトコル詳細を要約し、すべての通信の共通のインタフェースを提供するクライアント・ライブラリが提供されます。
表34-1 Enterprise JavaBeans、SOAPおよびJavaサポート
サービス名 | SOAP Webサービスのサポート | リモートEnterprise JavaBeansのサポート |
---|---|---|
タスク・サービス: タスク状態の管理およびタスクの永続性を提供します。これらのサービスに加え、タスク・サービスでは、タスクの更新、完了、エスカレート、再割当てなどの操作が公開されます。 |
はい |
はい |
タスク問合せサービス: 様々な検索基準(キーワード、カテゴリ、ステータス、ビジネス・プロセス、属性値、タスクの履歴情報など)に基づいて、ユーザーのタスクを問い合せます。 |
はい |
はい |
アイデンティティ・サービス: ユーザーの認証、ユーザーのプロパティ、ロール、グループ・メンバーシップおよび権限のルックアップが可能になります。 |
はい |
いいえ |
タスク・メタデータ・サービス: タスク関連のメタデータ情報を取得するための操作を公開します。 |
はい |
はい |
ユーザー・メタデータ・サービス: ワークフロー・ユーザー関連のメタデータ(ユーザー作業キュー、プリファレンス、休暇および委任ルールなど)を管理します。 |
はい |
はい |
タスク・レポート・サービス: ワークフロー・レポートの詳細を提供します。 |
はい |
はい |
ランタイム構成サービス: タスク・サービスのランタイム環境で使用されるメタデータの管理メソッドを提供します。 |
はい |
はい |
エビデンス・ストア・サービス: デジタル署名されたワークフロー・タスクの保管と否認防止をサポートします。 |
はい |
はい |
表34-2に、各タスク・サービスに対するSOAP Web Services Description Language (WSDL)ファイルの場所を示します。
表34-2 タスク・サービスのSOAP WSDLの場所
サービス名 | SOAP WSDLの場所 |
---|---|
タスク・サービス |
|
タスク問合せサービス |
|
アイデンティティ・サービス |
|
タスク・メタデータ・サービス |
|
ユーザー・メタデータ・サービス |
|
タスク・レポート・サービス |
|
ランタイム構成サービス |
|
エビデンス・ストア・サービス |
|
表34-3に、様々なEnterprise JavaBeansのJNDI名を示します。
表34-3 様々なEnterprise JavaBeansのJNDI名
サービス名 | 様々なEnterprise JavaBeansのJNDI名 |
---|---|
タスク・サービス |
|
クライアント・トランザクションに参加するタスク・サービスのEnterprise JavaBeans |
|
タスク・メタデータ・サービス |
|
タスク問合せサービス |
|
ユーザー・メタデータ・サービス |
|
ランタイム構成サービス |
|
タスク・レポート・サービス |
|
タスク・エビデンス・サービス |
|
ワークリスト・サービスのクライアント・ライブラリの詳細は、「カスタム・ワークリスト・クライアントの作成」を参照してください。
ヒューマン・ワークフロー・サービスは、WebサービスとRemote Method Invocation (RMI)を介してJ2EEアプリケーションと統合できます。他の管理対象サーバーやクラスタ、または他のOracle WebLogic ServerドメインにあるEnterprise JavaBeansのリモート・ルックアップを容易にするために、Oracle WebLogic Serverには外部JNDIプロバイダが組み込まれています。外部JNDIプロバイダは、リモート・サーバーのホストとポートを使用して、リモート・サーバーのEnterprise JavaBeansをローカル・サーバーのJNDIツリーにリンク付けするように構成されています。
ワークフロー・サービスでは、表34-3にリストされているEnterprise JavaBeansが公開されます。これらのEnterprise JavaBeansは、タスク問合せサービス、ヒューマン・タスクに対するADFタスク・フローの登録、埋込みワークリスト・リージョンのユースケースを完全にサポートするために、外部JNDIプロバイダを介してすべてリンクされている必要があります。
外部JNDI名のサポートを提供する手順は、次のとおりです。
アイデンティティ・サービスを除いて、前述のAPI (SOAPおよびリモートEnterprise JavaBeans)を使用するすべてのサービスでは、認証を起動する必要があります。前述のすべてのチャネルでは、ヒューマン・ワークフロー・コンテキストを使用したユーザー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
権限があります。この場合は、ユーザーのかわりにパスワードを使用して作成した場合と同様のコンテキストが作成されます。
これは、バックエンド・システムがワークフロー・タスクを操作し、一方でユーザーが自分のシステムで操作する環境で役立ちます。ワークフロー・サービスとの直接の相互作用はありません。システムは、ユーザーにかわってログインし、ユーザーのコンテキストを取得できます。
注意:
この機能は、システム操作に対してのみ使用することをお薦めします。これは、管理ユーザー・コンテキストを作成して、ユーザーのかわりに作成したヒューマン・ワークフロー・コンテキストを問い合せる必要があるためです。かわりにアイデンティティ伝播を使用すると、ユーザーはすでに認証されているため、クライアントはすでに認証されているそのユーザーのIWorkflowContext
を取得できます。詳細は、「JAASアプリケーションによって以前に認証されたユーザーのワークフロー・コンテキストの取得」を参照してください。
次のコード・サンプルでは、ユーザーjcooper
のヒューマン・ワークフロー・コンテキストを作成します。
String adminUser = "...." String adminPassword = "...." String realm = "...." IWorkflowContext adminCtx = taskQueryService.authenticate(user,password.toCharArray(),realm); IWorkflowContext behalfOfCtx = taskQueryService.authenticateOnBehalfOf(adminCtx,"jcooper");
クライアントでJAASアプリケーションによって以前に認証されたユーザーのワークフロー・コンテキストを取得する場合は、次のコード・サンプルに示すアイデンティティ伝播を使用できます。
public IWorkflowContext getWorkflowContextForAuthenticatedUser() throws WorkflowException;
クライアントで適切なクライアント・タイプ用にアイデンティティ伝播が構成されている場合は、このAPIによって認証済のユーザーのワークフロー・コンテキストが返されます。クライアント・タイプがリモートの場合は、このメソッドでEnterprise JavaBeansアイデンティティ伝播が使用されます。クライアント・タイプがSOAPの場合は、このメソッドでSAMLトークン伝播が使用されます。
タスク・サービスにより、タスクに対するアクションを実行するための操作が公開されます。表34-4に、タスク・サービスの一般的な操作の一部を示します。パッケージoracle.bpel.services.workflow.task
は、タスク・サービスに対応しています。
タスク・サービスの詳細は、『Oracle SOA Suiteワークフロー・サービスJava APIリファレンス』を参照してください。
表34-4 タスク・サービスのメソッド
メソッド | 説明 |
---|---|
|
タスクを獲得します。 |
|
一連のタスクを獲得します。 |
|
タスクに添付ファイルを追加します。 注意: このAPIで、クライアントは、タスクの作成前に添付ファイルを追加するためのAPIをコールできるようになります。タスクがまだ作成されていない場合は、クライアントは タスクがすでに作成されている場合は、複数の添付ファイルに同じ名前が付いていると、Oracle Workflowサービスではその添付ファイルの最新バージョンのみが保持されます。 |
|
タスクにコメントを追加します。 |
|
To Doタスクを作成します。 |
|
タスクを別のユーザーに委任します。現在の割当て先とタスク委任先ユーザーの両方が、タスクを表示して操作できます。 |
|
タスクのリストを別のユーザーに委任します。現在の割当て先とタスクのリスト委任先ユーザーの両方が、タスクを表示して操作できます。 |
|
タスクの論理削除を実行します。データベース上にはタスクはまだ存在します。 |
|
タスクのリストの論理削除を実行します。データベース上にはタスクはまだ存在します。 |
|
タスクをエラーにします。通常、この操作はエラー割当て先が使用します。 |
|
タスクをエスカレートします。デフォルトでは、現行のユーザーのマネージャにエスカレートします。これはエスカレーション関数を使用してオーバーライドできます。 |
|
複数のタスクをまとめてエスカレートします。デフォルトでは、現行のユーザーのマネージャにエスカレートします。これはエスカレーション関数を使用してオーバーライドできます。 |
|
タスクの前の承認者を取得します。 |
|
タスクの今後の参加者を取得します。今後の参加者は、単純参加者を含むルーティング・スリップ形式で返されます(ルーティング・スリップを含む参加者ノードとパラレル・ノード)。 |
|
情報リクエストのリクエストが可能なユーザーを取得します。 |
|
タスクを開始します。 |
|
タスクをマージおよび更新します。この操作を使用するのは、部分タスクに更新が必要な場合です。部分タスクとは、一部のタスク属性が存在しないタスクです。この部分タスクでは、次のタスク属性のみが解析されます。
|
|
タスク・インスタンスのルーティング・スリップを新規ルーティング・スリップでオーバーライドします。現行のタスク割当てはNULLになり、タスクの開始時には新規ルーティング・スリップが解析されます。 |
|
永続ストアからタスクを削除します。 |
|
永続ストアからタスクのリストを削除します。 |
|
タスクを前の承認者または当初の割当て先にプッシュバックします。当初の割当て先は、タスクの再割当てやエスカレートを実行している可能性があるため、承認者でなくてもかまいません。タスクが当初の割当て先にプッシュバックされるか、承認者にプッシュバックされるかは、Oracle Enterprise Manager Fusion Middleware Controlの「システムMBeanブラウザ」のプロパティ「PushbackAssignee」によって制御されます。
注意: プッシュバックは、グループ投票ではなく単一承認者で機能するように設計されています。グループ投票(またはパラレル)シナリオを含むステージから別ステージへのプッシュバックは、許可されません。同様に、単一の割当て先からグループ投票(またはパラレル)シナリオにプッシュバックすることもできません。 |
|
タスクを再割当てします。 |
|
複数のタスクをまとめて再割当てします。 |
|
タスクを再開します。タスクを再開すると、前に完了したタスクが持ち越されるため、履歴、コメントおよび添付ファイルも新規タスクに持ち越されます。 |
|
前に獲得したタスクをリリースします。 |
|
前に獲得した一連のタスクをリリースします。 |
|
タスクの添付ファイルを削除します。 |
|
タスクの期限を更新して有効期間を延長します。 |
|
タスク情報をリクエストします。 |
|
再承認を伴うタスク情報をリクエストします。たとえば、 |
|
タスクを再開します。ワークフローの保留を解除するために、タスク所有者(または |
|
一連のタスクを再開します。 |
|
タスクを、レビューする必要のある次のユーザーに非定型の形式でルーティングできるようにします。ユーザーは、タスクをシリアル、パラレルまたは単一割当てでルーティングするように指定できます。タスクをルーティングできるのは、ヒューマン・ワークフローでタスクの非定型ルーティングが許可されている場合のみです。 |
|
現在の割当てをスキップして次の割当てに移動するか、他に割当て先が存在しない場合は、直前の承認者が設定した結果を使用します。 |
|
タスク情報を発行します。通常、このアクションは、必要なタスク更新を実行した後、または追加情報を含むコメントや添付ファイルを追加した後に実行します。 |
|
タスク所有者(または |
|
一連のタスクを一時停止します。 |
|
一連のタスクの結果を更新します。 |
|
指定したタスクIDのタスクおよびそのサブタスクの優先度を更新します。 |
|
タスクの一括更新に使用します。優先度の更新が必要なタスクのリストを、このAPIに対してパラメータとして渡すことができます。タスクのリストの優先度が更新されます。これにより、タスクおよびそのサブタスクの優先度が更新されます。 |
|
タスクを更新します。 |
|
タスクの結果を更新します。 |
|
タスクの結果を更新してタスクをルーティングします。タスクをルーティングすると、ユーザーはそのタスクを、レビューする必要のある次のユーザーに非定型の形式でルーティングできます。ユーザーは、タスクをシリアル、パラレルまたは単一割当てでルーティングするように指定できます。タスクをルーティングできるのは、ヒューマン・ワークフローでタスクの非定型ルーティングが許可されている場合のみです。 |
|
タスク作成者は、ヒューマン・ワークフローを介してタスクを送る必要がなくなった場合、保留中のタスクを取り消すことができます。タスク所有者も、作成者のかわりにタスクを取り消すことができます。タスクが取り消されると、ビジネス・プロセスは、タスクの状態属性が |
|
一連のタスクを取り消します。 |
詳細は、次を参照してください。
Oracle SOA Suite ワークフロー・サービスJava APIリファレンス
いくつかのAPIの例を示すサンプルのworkflow-118-JavaSamples
タスク問合せサービスでは、様々な検索基準(キーワード、カテゴリ、ステータス、ビジネス・プロセス、属性値、タスクの履歴情報など)に基づいてタスクを問い合せます。表34-5に、タスク問合せサービスの一般的な操作の一部を示します。パッケージoracle.bpel.services.workflow.query
は、タスク問合せサービスに対応しています。
タスク問合せサービスの詳細は、『Oracle SOA Suiteワークフロー・サービスJava APIリファレンス』を参照してください。
表34-5 タスク問合せサービスのメソッド
メソッド | 説明 |
---|---|
|
アイデンティティ認証サービスでユーザーを認証し、有効な |
|
必要に応じ、他のユーザーにかわって認証を行います。 |
|
指定した問合せ基準に一致するタスクの数をカウントします。 |
|
指定したビューの問合せ基準に一致するタスクの数をカウントします。 |
|
事前認証済のHTTPリクエストから有効な |
|
指定した問合せ基準に一致する既存タスクがあるかどうかを確認します。 |
|
指定したビューの問合せ基準に一致するタスクが存在するかどうかを確認します。 |
|
指定のコンテキスト・トークンを使用してヒューマン・ワークフロー・コンテキストを取得します。 |
|
不要になったヒューマン・ワークフロー・コンテキストをクリーン・アップします。通常、このメソッドはユーザーのログアウト時に使用されます。 |
|
タスクの |
|
タスクの |
|
指定タスクIDのタスク・バージョンのリストを取得します。 |
|
タイプが順序のタスクについて、IDがタスクIDのタスクのタスク順序ツリーを取得します。 |
|
指定のタスクIDとバージョン番号について、特定のタスク・バージョン詳細を取得します。 |
|
JAASアプリケーションによって認証されたユーザーの |
|
指定した問合せを実行し、問合せで返されたタスクの数を、指定した列ごとにグループ化して集計します。 |
|
指定の述語に一致するタスク・エラー・オブジェクトのリストを返します。 |
|
指定のフィルタ条件に一致するタスクのリストを返します。タスクは、指定の順序付け条件(存在する場合)に従ってリストされます。基準に一致するタスクのリスト全体を返すか、クライアントがページング問合せを実行できます。その場合は、リストのうち指定した数のタスクのみが取得されます。フィルタ条件は次のとおりです。
|
|
指定したビューに定義されているように問合せを実行し、そのビューに定義されているチャート・プロパティに従って選択したタスクを集計します。 |
|
指定のビューの基準に従ってタスクのリストが返されます。タスク・リストの全体またはページを返すことができます。クライアントは、ビューのコンテンツに対してフィルタと順序付け基準を追加指定できます。 |
詳細は、次を参照してください。
ドキュメント・ライブラリの『Oracle SOA Suiteワークフロー・サービスJava APIリファレンス』
いくつかのAPIの例を示すサンプルのworkflow-118-JavaSamples
アイデンティティ・サービスは、Oracle WebLogic Serverのセキュリティ・インフラストラクチャ(Oracle Identity ManagementおよびOracle Platform Security Services (OPSS))または任意のカスタム・ユーザー・リポジトリの上部に位置するWebサービスのシン・レイヤーです。アイデンティティ・サービスにより、ユーザーの認証、ユーザー・プロパティ、ロール、グループ・メンバーシップおよび権限のルックアップが可能になります。Oracle WebLogic Serverでは、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レイヤーが使用されます。
アイデンティティ・ストア
ポリシー・ストア
資格証明ストア
フレームワーク
詳細は、次を参照してください。すべてのセキュリティ構成は、jps-config.xml
ファイルを使用して行われます。
以前のリリースの動作と異なり、すべての権限がパーミッションと照合して検証されます。
次の一連のアプリケーション・ロールが定義されています。これらのロールはOPSSポリシー・ストアのSOAインフラストラクチャ・アプリケーションに自動的に定義されます。
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の認証プロバイダの順序を示したリスト内で最初のプロバイダである必要があります。
詳細は、次を参照してください。
OPSSの詳細は
Oracle Identity Managementの詳細は
OVDの詳細は
図34-1に示すように、Oracle Identity Managementはリリース11g でサポートされている唯一のプロバイダです。
リリース11g以降、アイデンティティ・サービスでカスタム・プロバイダ・プラグインはサポートされていません。アイデンティティのカスタマイズは、すべてアイデンティティ・ストアで実行されるようになりました。Oracle Fusion Middlewareでは、カスタム・アイデンティティ・ストアと対話するユーザーおよびロールAPIを有効にするプロバイダがサポートされます。詳細は、次のURLを参照してください。
http://www.oracle.com/technetwork/middleware/id-mgmt/overview/index.html
タスク・メタデータ・サービスにより、タスク関連のメタデータ情報を取得するための操作が公開されます。表34-6に、タスク・メタデータ・サービスの一般的な操作の一部を示します。パッケージoracle.bpel.services.workflow.metadata
は、タスク・メタデータ・サービスに対応しています。
タスク・メタデータ・サービスの詳細は、『Oracle SOA Suiteワークフロー・サービスJava APIリファレンス』を参照してください。
表34-6 タスク・メタデータ・サービスのメソッド
メソッド | 説明 |
---|---|
|
指定のタスク定義ネームスペースとコンポジット・バージョンを使用して、ヒューマン・タスク・サービス・コンポーネントが記述された |
|
タスクについて許可されている結果を取得します。結果とその表示値が返されます。 |
|
タスクのリソース・バンドル情報を取得します。リソース・バンドル情報には、バンドルの位置と名前が含まれます。 |
|
特定のタスクに対する制限付きアクションを取得します。 |
|
標準タスク属性と、指定したタスク定義に共通のマップ済属性列が記述された |
|
標準タスク属性と、指定したネームスペースで識別されたタスク定義に共通のマップ済属性列が記述された |
|
タスク・メッセージ属性を取得します。 |
|
特定のタスク定義のメッセージ属性を取得します。 |
|
タスクに関連するタスク定義を取得します。 |
|
タスク定義IDによるタスク定義を取得します。 |
|
特定のタスク定義IDの結果を取得します。 |
|
タスク表示ルールを取得します。 |
|
タスクのタスク表示リージョンを取得します。 |
|
変更された場合にタスク・バージョンが作成されるタスク属性を取得します。 |
|
システム内のタスク定義をリストします。 |
詳細は、『Oracle SOA Suiteワークフロー・サービスJava APIリファレンス』を参照してください。
ユーザー・メタデータ・サービスは、個々のユーザーおよびグループに固有のメタデータを管理するためのメソッドを提供します。これは、ユーザー・ワークリストのプリファレンスの取得と設定、ユーザーのカスタム・ビューの管理、およびユーザーとグループに対するヒューマン・ワークフロー・ルールの管理に使用されます。
ユーザー・メタデータ・サービスのほとんどのメソッドの場合、認証済ユーザーは独自のユーザー・メタデータを問い合せて更新できます。ただし、他のユーザーに属するメタデータは更新できません。
グループ・メタデータ(グループに対するヒューマン・ワークフロー・ルールなど)の場合、グループのメタデータを問い合せて更新できるのは、そのグループの所有者として指定されているユーザー(またはworkflow.admin
権限ユーザー)のみです。ただし、workflow.admin
権限があるユーザーは、任意のユーザーまたはグループのメタデータに対して問合せおよび更新を実行できます。
表34-7に、ユーザー・メタデータ・サービスの一般的な操作の一部を示します。パッケージoracle.bpel.services.workflow.user
は、ユーザー・メタデータ・サービスに対応しています。
ユーザー・メタデータ・サービスの詳細は、『Oracle SOA Suiteワークフロー・サービスJava APIリファレンス』を参照してください。
表34-7 ユーザー・メタデータ・サービスのメソッド
メソッド | 説明 |
---|---|
|
新規ルールを作成します。 |
|
ルールの優先度を1つ低くします。このルールが最低優先度の場合、このメソッドでは何も実行されません。 |
|
ルールを削除します。 |
|
ユーザーに対してタスクを割り当てることができない日付の範囲(設定されている場合)を取得します。 |
|
特定のヒューマン・ワークフロー・ルールの詳細を取得します。 |
|
特定のユーザーまたはグループに対するルールのリストを取得します。 |
|
既存のルールを更新します。 |
|
ルールの優先度を1つ高くします。ユーザーまたはグループに対するルールは、優先度の順序付きリストで保守されます。高優先度のルール(リストの先頭に近いルール)は、低優先度のルールよりも先に実行されます。このルールが最高優先度の場合、このメソッドでは何も実行されません。 |
|
ユーザーが所有するユーザー・タスク・ビューのリストを取得します。 |
|
ユーザーに他のユーザーから権限付与されたユーザー・タスク・ビューのリストを取得します。ユーザーは付与されたビューを使用してタスクのリストを問合せできますが、ビュー定義は更新できません。 |
|
ヒューマン・ワークフロー・サービスに付属している標準タスク・ビューのリストを取得します。このビューはすべてのユーザーが使用できます。 |
|
単一ビューの詳細を取得します。 |
|
新規のユーザー・タスク・ビューを作成します。 |
|
既存のユーザー・タスク・ビューを更新します。 |
|
ユーザー・タスク・ビューを削除します。 |
|
このユーザーに対する他のユーザーからのビュー権限付与の詳細を更新します。更新は、ビュー権限付与の非表示または非表示解除(非表示にしたビューは、Oracle BPM Worklistのメイン受信ボックス・ページに表示されません)、および権限を付与されたユーザーに表示されるビュー名および説明の変更に制限されています。 |
|
ユーザーのユーザー・プリファレンスのリストを取得します。ユーザー・プリファレンスは、単純な名前/値ペアの文字列です。ユーザー・プリファレンスはユーザーごとにプライベートです(ただし、 |
|
ユーザーのユーザー・プリファレンス値を設定します。前に格納されていて新規のユーザー・プリファレンス・リストに含まれていないプリファレンスは削除されます。 |
|
ユーザーのパブリック・プリファレンスのリストを取得します。パブリック・プリファレンスは、ユーザー・プリファレンスに類似していますが、すべてのユーザーが問合せできます。ただし、パブリック・プリファレンスを更新できるのは、そのプリファレンスを所有しているユーザー、または |
|
ユーザーのパブリック・プリファレンスを設定します。 |
|
ユーザーに対してタスクを割り当てることができない日付の範囲を設定します。(Dynamic Assignment Functionでは、休暇中のユーザーにタスクが割り当てられることはありません。) |
|
|
詳細は、次を参照してください。
ルール構成ページとユーザー・プリファレンス・ページの詳細は「の使用」
いくつかのAPIの例を示すサンプルのworkflow-118-JavaSamples
Oracle SOA Suite ワークフロー・サービスJava APIリファレンス
タスク・レポート・サービスは、レポートを実行してその結果を受け取ります。表34-8に、レポートのリストを示します。パッケージoracle.bpel.services.workflow.report
は、タスク・レポート・サービスに対応しています。表34-8に示す標準レポートは、インストールに含まれています。
表34-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
through TextAttribute
20
FormAttribute1
through FormAttribute10
UrlAttribute1
through UrlAttribute10
DateAttribute1
through DateAttribute10
NumberAttribute1
through NumberAttribute10
その後、タスク・ペイロード・フィールドと属性ラベルとのマッピングを作成できます。たとえば、ペイロード・フィールドcustomerLocation
を属性ラベルLocation
にマップできます。様々なタスク・タイプで同じ属性ラベルを共有できます。これにより、同じ意味を持つ異なるタスク・タイプのペイロード属性を同じ属性ラベルにマップできます。
注意:
単純なXMLタイプのペイロード・フィールドは直接マップでき、また、XPath式は複雑なペイロード・フィールドから単純なXMLタイプ値を選択するために指定できます。
ランタイム構成サービスでは、次のメソッドも提供されます。
サーバーでサポートされているDynamic Assignment Functionを問い合せるためのメソッド
Oracle BPM Worklistおよび他のアプリケーションでのタスク詳細の表示に使用するタスク表示URLを管理するためのメソッド
サーバーのHTTPおよびJNDI URLを取得するためのメソッド
表34-9に、ランタイム構成サービスの一般的な操作の一部を示します。パッケージoracle.bpel.services.workflow.runtimeconfig
は、ランタイム構成サービスに対応しています。
ランタイム構成サービスの詳細は、『Oracle SOA Suiteワークフロー・サービスJava APIリファレンス』を参照してください。
表34-9 ランタイム構成サービス
メソッド | 説明 |
---|---|
|
特定のタスク・マップ済属性を表す新規の属性ラベルを作成します。 |
|
属性ラベルとタスク・ペイロード・フィールド間の新規マッピングを作成します。 |
|
既存の属性ラベルを削除します。 |
|
既存のペイロード・マッピングを削除します。 |
|
ラベルが現在使用されているマッピング(存在する場合)の属性ラベル(すべての属性ラベル、または特定のタイプの属性ラベル)のリストを取得します。 |
|
このサーバーに実装されているDynamic Assignment Functionのリストを返します。 |
|
具体的なタスク定義のタスク・インスタンス表示に使用されるURIに関連する情報を取得します。 |
|
特定のタスク定義やコンポジット・インスタンスに対応するタスク・インスタンスのステータスを取得します。 |
|
特定のヒューマン・ワークフロー定義に関するすべてのマップ済属性マッピングのリストを取得します。 |
|
具体的なタスク定義のタスク・インスタンス表示に使用されるURIに関連する情報を設定します。 |
|
既存の属性ラベルを更新します。 |
詳細は、次を参照してください。
マップ済属性マッピングの詳細は「の使用」
いくつかのAPIの例を示すサンプルのworkflow-118-JavaSamples
Oracle SOA Suite ワークフロー・サービスJava APIリファレンス
属性ラベルは、タスク・マップ済属性にわかりやすいラベルを添付するメソッドを提供します。ユーザーのロケールに適した言語に翻訳された属性ラベルを表示することが望ましい場合があります。
カスタム・リソース・バンドルを使用するには、ワークフロー構成パラメータworkflowCustomClasspathURL
で識別される場所(ファイルまたはHTTPパス)にリソース・バンドルを配置します。
これは、Oracle Enterprise Manager Fusion Middleware Controlの次のいずれかの場所で設定できます。
「システムMBeanブラウザ」ページ
「ワークフロー・タスク・サービス・プロパティ」ページ
このパラメータを使用する方法の詳細は、サンプルのworkflow-110-workflowCustomizationsを参照してください。詳細は、Oracle SOA Suiteサンプルを参照してください。
マップ済属性ラベルのエントリには、次の書式を使用する必要があります。
FLEX_LABEL.[label name]=Label Display Name
たとえば、Location
というラベルのエントリは次のようになります。
FLEX_LABEL.Location=Location
これらのファイルに属性ラベルのエントリを追加するかどうかはオプションです。ファイルにエントリが存在しない場合は、APIを使用して指定した属性ラベルの名前がかわりに使用されます。
エビデンス・ストア・サービスは、デジタル署名の保管とデジタル署名されたヒューマン・ワークフローの否認防止に使用します。デジタル署名は、メッセージ送信者や文書署名者のアイデンティティを認証する電子署名です。これにより、送られたメッセージや文書の元の内容が変更されていないことが保証されます。デジタル署名は転送可能で、他人に模倣されることがなく、自動的にタイムスタンプが付けられます。署名されたオリジナルのメッセージが届いたことを証明できるため、送信者が後で否認することはできません。デジタル署名は、ヒューマン・ワークフロー・ドキュメントが次の状態であることを保証します。
真正であること
他のエンティティで捏造されていないこと
変更されていないこと
送信者が否認できないこと
暗号ベースのデジタル署名は、公開鍵のアルゴリズムによって送信者の秘密鍵付のメッセージが署名されたときに作成されます。
設計時、タスクに対して署名は有効です。Oracle BPM Worklistの実行時には、ユーザーがタスクを承認または却下すると、Webブラウザでは次の動作が発生します。
署名に使用する秘密鍵の選択をユーザーに要求します。
秘密鍵とOracle BPM Worklistから提供されたタスク・コンテンツを使用してデジタル署名を生成します。
図34-2に例を示します。
注意:
この証明書は、Personal Information Exchange Syntax Standard (PFX)ファイルを指しています。このファイルには証明書と秘密鍵が含まれており、シンプルなテキスト・パスワードで保護されています。PFXでは、ユーザーの秘密鍵、証明書、その他のシークレットなどを格納またはトランスポートするための移植形式が指定されます。
署名は証明書の公開鍵を介して検証できるため、データの署名には、その証明書の公開鍵に対応した秘密鍵の所有で十分です。ただし、証明書のユーザー名と証明書を更新するユーザーを関連付けることはありません。たとえば、ユーザーjstein
がユーザーcdickens
の秘密鍵を所有する場合、jstein
はその秘密鍵を使用して署名できます。
次のデジタル署名の機能をサポートします。
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」に値を指定します。これは、信頼するチェーンの各証明書に対して実行する必要があります。たとえば、表34-10に示すように、各起動に対して値を指定します。
表34-10 caNameとcaURLの値
caName | caURL |
---|---|
|
|
|
|
|
|
「起動」をクリックします。
表34-11から表34-14では、エビデンス・ストア・サービスのメソッドについて説明します。パッケージoracle.bpel.services.security.evidence
は、エビデンス・サービスに対応しています。
表34-11 ITaskEvidenceServiceインタフェース
メソッド | 説明 |
---|---|
|
エビデンスを作成し、否認防止のためにリポジトリに保管します。 |
|
特定の条件に一致するエビデンスのリストを取得します。結果は、サービスを問い合せるユーザーに関連付けられている権限によって異なります。ユーザーに |
|
後で署名検証に使用する証明書をアップロードします。これが、特定の証明書を使用してエビデンスを作成するための前提条件です。ユーザーがアップロードできるのは、自分の証明書のみです。 |
|
ステータスのCRL検証部分を更新します。これには、検証時間、ステータス、エラー・メッセージ(ある場合)が含まれます。 |
|
エビデンス署名を検証します。基本的にエビデンスの否認防止チェックを実行します。署名が検証されると、 |
表34-12 Evidenceインタフェース
メソッド | 説明 |
---|---|
|
このエビデンスの署名に使用する証明書を取得します。 |
|
エビデンスの作成日付を取得します。 |
|
CRL検証に関連するエラー・メッセージを取得します。 |
|
エビデンスに関連する一意の識別子を取得します。 |
|
このエビデンスの一部として署名されたコンテンツを取得します。 |
|
エビデンスの署名ポリシーを取得します。 |
|
エビデンスの署名を取得します。 |
|
署名が作成された日付を取得します。 |
|
CRL検証ステータスを取得します。これは、次のいずれかです。
|
|
このエビデンスが関連付けられているタスクの一意の識別子を取得します。 |
|
このエビデンスが関連付けられているタスクのタスク番号を取得します。 |
|
このエビデンスが関連付けられているタスクのタスク優先度を取得します。 |
|
このエビデンスが関連付けられているタスクのタスク・ステータスを取得します。 |
|
このエビデンスが関連付けられているタスクのタスク・サブステータスを取得します。 |
|
このエビデンスが関連付けられているタスクのタイトルを取得します。 |
|
このエビデンスが関連付けられているタスクのバージョンを取得します。 |
|
使用した証明書のCRL検証が実行された日付を取得します。 |
|
このエビデンスが関連付けられているタスクのワークフロー・タイプを取得します。通常は |
表34-13 Certificateインタフェース
メソッド | 説明 |
---|---|
|
証明書発行者の識別名(DN)を取得します。 |
|
インタフェースによって抽象化された証明書オブジェクトを取得します。 |
|
証明書のシリアル・ナンバーを取得します。 |
|
この証明書をアップロードするユーザーに関連付けられているアイデンティティ・コンテキストを取得します。 |
|
この証明書に関連付けられているユーザーの名前を取得します。 |
|
証明書がまだ有効であれば、 |
表34-14 Policy TypeとWorkflow Typeインタフェース
メソッド | 説明 |
---|---|
|
文字列表現からオブジェクトを構成します。 |
|
このオブジェクトの文字列表現を返します。 |
詳細は、次を参照してください。
ヒューマン・タスク・エディタでデジタル署名およびデジタル証明書を指定する方法の詳細は「ワークフロー・デジタル署名ポリシーの指定方法」
Oracle BPM Worklistのタスク・アクションへのデジタル署名の詳細は「ヒューマン・タスク用のタスク・フォームの設計」
タスクは、ユーザーによる実行が必要な作業です。タスクを作成する場合は、そのタスクに参加して操作するユーザーを割り当てます。表34-15に、アプリケーションでよく使用され、解析されるタスク属性を示します。
表34-15 タスク属性
タスク属性名 | 説明 |
---|---|
|
タスクに関連付けられたアプリケーション・ロール(割当て先、所有者など)が属するアプリケーション。 |
|
(オプション)タスクのカテゴリ。 |
|
タスクの作成者の名前。 |
|
タスクの期日。これはTo Doタスクで使用されます。 |
|
(オプション)タスクに対するカスタムの一意識別子。これは、標準のタスクIDとタスク番号に対する追加の一意識別子として設定できます。このキーを使用すると、タスクが作成されたビジネス・オブジェクトの識別子に基づいて、タスクを取得できます。 |
|
ユーザーおよびグループがシードされているアイデンティティ・レルム。単一レルム環境では、デフォルトのレルムがデフォルト値になります。 |
|
タスク・インスタンスを所有するグループ(ある場合)。タスク所有者は、アプリケーション・ロール、ユーザーまたはグループのいずれかです。タスクの所有者がグループの場合は、このフィールドが設定されます。 |
|
タスク・インスタンスを所有しているアプリケーション・ロール(ある場合)。タスク所有者は、アプリケーション・ロール、ユーザーまたはグループのいずれかです。タスクの所有者がアプリケーション・ロールの場合は、このフィールドが設定されます。 |
|
タスク・インスタンスを所有するユーザー(ある場合)。タスク所有者は、アプリケーション・ロール、ユーザーまたはグループのいずれかです。タスクの所有者がユーザーの場合は、このフィールドが設定されます。 |
|
XMLとして取得されるタスク・ペイロード。 |
|
タスクの完了パーセンテージ。これはTo Doタスクで使用されます。 |
|
タスクの優先度を定義する整数。数値が低いほど優先度が高くなります。通常は、 |
|
タスクの開始日。これはTo Doタスクで使用されます。 |
|
(オプション)タスクのサブカテゴリ。 |
|
タスクをタスク・メタデータにバインドするタスク定義ID。タスクの開始時は、 |
|
タスク詳細の表示に使用するURL。 |
|
タスクのタイトル。 |
表34-16に、プロセス・メタデータ情報を取得する属性を示します。
表34-16 プロセス・メタデータ情報を取得する属性
属性 | 説明 |
---|---|
|
このタスク・インスタンスを定義するタスク・コンポーネントがデプロイされるパーティション。 |
|
タスク・インスタンスを定義するタスク・コンポーネントの名前。 |
|
タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットの特定のデプロイメントの一意名。 |
|
コンポジット・インスタンスID。 |
|
タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットの名前。 |
|
タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットのバージョン。 |
|
このタスク・インタスタンスが属すコンポジット・フローが開始された日付および時間。 |
|
このタスク・インタスタンスが属すコンポジット・フローの一意の識別子。 |
表34-17に、添付ファイル関連の属性を示します。
表34-17 添付ファイル関連の属性
属性 | 説明 |
---|---|
|
添付ファイルのコンテンツ。 |
|
添付ファイルのMultipurpose Internet Mail Extension (MIME)タイプ。 |
|
添付ファイルの名前。 |
|
添付ファイルを更新したユーザー。 |
|
添付ファイルの更新日付。 |
|
URI(添付ファイルがURIベースの場合)。 |
表34-18に、コメント関連の属性を示します。
表34-18 コメント関連の属性
属性 | 説明 |
---|---|
|
ユーザーのコメント。 |
|
コメントを追加したユーザー。 |
|
コメントが追加された日付。これは、コメントの保存時にサービスによって設定されます。コメントの保存時にクライアントによって設定された場合は、無視されます。 |
|
コメントの読取り時にサービスによって設定されます。これは、 |
|
使用されません。 |
|
コメントを親から継承した場合(サンプル・プロセス・コメント)。 |
|
コメントがワークフロー・システムによって設定された場合、サービスによって設定されます(たとえば、タスクがアラート状態になった場合、コメントが作成されます)。 |
|
コメントが作成されたtaskId。たとえば、スコープがBPMの場合、コメントが作成されたタスクと異なるタスクにコメントが表示されることがあります。また、パラレル・タスクの場合も、現在のtaskIdとコメントtaskIdが異なることがあります。これはサービスによって設定されます。 |
task/userComment/commentScope |
値がnull、空またはTASKの場合、コメントがそのタスク専用であることを意味します。値がBPMの場合、プロセス全体に対するものであることを意味します。コメントをプロセス全体に適用可能にする場合は、コメントの追加時に値をBPMに設定する必要があります。 |
|
コメントを更新したユーザーのID。 |
|
コメントを更新したユーザーの表示名。 |
|
コメントを更新したユーザーのユーザーのタイプ、グループまたはロール。 |
表34-19に、ワークフロー・サービス・システムで操作される属性を示します。
表34-19 ワークフロー・サービス・システムで操作される属性
属性 | 説明 |
---|---|
|
グループ、アプリケーション・ロールまたは複数のユーザーに割り当てられたタスクが、ユーザーによって申告された場合、このフィールドはタスクを申告したユーザーの名前に設定されます。 |
|
タスクに対してカスタム・アクションを実行したユーザーのID。 |
|
このタスクが割り当てられた日付。 |
|
現在のタスク割当て先(ユーザー、グループまたはアプリケーション・ロール)。 |
|
タスク・インスタンスが作成された日付。 |
|
タスクに対して実行できるカスタム・アクション。 |
|
タスクの終了日。これはTo Doタスクで使用されます。 |
|
タスク・インスタンスの有効期限の日付。 |
|
タスクを前に操作したユーザー。 |
|
|
|
|
|
ユーザーが別のユーザーにタスクを委任している場合、このフィールドには、タスクを委任したユーザーの名前が移入されます。 |
|
タスクの結果(承認済、却下済など)。このフィールドは、完了したタスク・インスタンスにのみ設定されます。 |
|
これは、再開されたタスクにのみ設定されます(再開される前のタスクのタスクID)。 |
|
これは、サブタスクにのみ設定されます。親タスクのバージョンを参照します。 |
|
Oracle JDeveloperからモデリングされた参加者の論理名。 |
|
タスクのレビューア。これは、ユーザー、グループまたはアプリケーション・ロールです。 |
|
ルート・タスクのID。これは、ルート・タスクのタスクIDと同じです。 |
|
実行中のステージ名。 |
|
タスク・インスタンスの現在の状態。 |
|
タスクの現在のサブ状態。 |
|
サブタスクに設定されている一意のID。これと同じIDが親タスクの |
|
タスクに対して実行できるシステム・アクション(再割当て、エスカレートなど)。 |
|
タスク・インスタンスを定義するタスク・コンポーネントの名前。 |
|
直接の親タスクのID。サブタスクのみが設定されます。 |
|
親タスクに設定される一意のID。これと同じIDがサブタスクの |
|
タスクの一意のID。 |
|
このタスク・インスタンスを定義するタスク・コンポーネントの全バージョンを一意に定義するネームスペース。同じタスク・コンポーネントの異なるバージョンに同じネームスペースを指定することは可能ですが、異なる2つのタスク・コンポーネントに同じネームスペースを指定することはできません。 |
|
タスク・インスタンスを一意に識別する整数。 |
|
タスクを最後に更新したユーザー。 |
|
このインスタンスが最後に更新された日付。 |
|
タスクのバージョン。 |
|
バージョンが作成された理由。 |
|
実行されるパターン(パラレル、シリアル、FYI、単一など)。 |
表34-20にマップ済属性を示します。
表34-20 マップ済属性
属性 | 説明 |
---|---|
|
マップ済属性です。 |
通知は、タスクの状態が変化したことをユーザーに警告するために送信されます。通知は、電子メール、電話ボイス・メッセージ、インスタント・メッセージ(IM)、ショート・メッセージ・サービス(SMS)のいずれかのチャネルを通じて送信できます。通知はBPELプロセスのヒューマン・タスクから、または直接BPELプロセスから送信できます。
11g 以前のリリースでは、電子メール通知はヒューマン・ワークフロー電子メール通知レイヤーを通じて送信されていました。ボイスまたはSMSの通知は、オラクル社のホスティング通知サービスを通じて送信されていました。IM通知はサポートされていませんでした。
リリース11g 以降、ヒューマン・ワークフロー電子メール通知レイヤーはOracle User Messaging Serviceと連携し、タスクの状態が変化したことをユーザーに警告します。Oracle User Messaging Serviceでは、BPELプロセスまたはヒューマン・タスクから起動できる、電子メール、ボイス、IMまたはSMSのいずれかのチャネルを通じて通知を送信するための操作が公開されています。
Oracle User Messaging Serviceは次の機能をサポートしています。
メッセージおよびステータスの送受信
特定のチャネルの指定したアドレスへの通知送信
一連のフェイルオーバー・アドレスへの通知送信
Oracle Fusion Middleware以外のアプリケーション・サーバーでは、電子メール通知に対してヒューマン・ワークフロー電子メール通知レイヤーを使用できます。
Oracle User Messaging Serviceの構成に関する詳細は、次を参照してください。
Oracle User Messaging Serviceによるアプリケーションの開発
Oracle Enterprise Manager Fusion Middleware Controlで通知サービス配信チャネルを構成する手順は、『Oracle User Messaging Serviceの管理』を参照してください。
各電子メール通知には、次のパートを含めることができます。
通知メッセージ
Oracle BPM WorklistからのHTMLコンテンツ
これは、タスクに関するOracle BPM Worklistの読取り専用ビューです。Oracle BPM Worklistからのコンテンツを含むように電子メール通知を構成する方法は、「電子メール通知の作成」を参照してください。
タスクの添付ファイル:
通知にタスクの添付ファイルが含まれている場合です。
アクション可能リンク
SMS、IMおよびボイスによる通知には、通知メッセージのみが含まれます。
通知メッセージは、静的なテキストと動的な値を含めることができるXPath式です。メッセージの作成時に動的な値に使用できるのは、タスクBPEL変数のみです。メッセージはBPELプロセスのコンテキスト外で評価されるため、この制限があります。また、タスク変数のペイロードでは、XPathツリー参照用のペイロードの型を含むために、強い型指定が使用されます。XPath拡張関数hwf:getNotificationProperty(propertyName)
を使用すると、特定の通知のプロパティを取得できます。この関数は、対応する値に対して通知ごとに評価されます。propertyName
の値は、次のいずれかです。
recipient
通知の受信者
recipientDisplay
受信者の表示名
taskAssignees
タスクの割当て先
taskAssigneesDisplay
タスク割当て先の表示名
locale
受信者のロケール
taskId
通知対象となるタスクのID
taskNumber
通知対象となるタスクの番号
appLink
Oracle BPM Worklistのタスク詳細ページへのHTMLリンク
次の例に、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 SOA SuiteおよびOracle Business Process Management 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 SOA SuiteおよびOracle Business Process Management Suiteの管理
管理者は、次の管理タスクをOracle Enterprise Manager Fusion Middleware Controlから実行できます。
失敗した通知や誤りのある受信通知レスポンスを表示し、修正処理を実行します。
送信通知とアドレスの削除、再送信、編集などの修正処理を実行します。
受信通知レスポンスについて、不正な電子メールを表示して電子メール・アドレスをブロックします。
不正な電子メール・アドレスのリストを管理します。
失敗した通知のランタイム・データにアクセスします。このデータは、不要になった場合消去できます。
詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』を参照してください。
通知は、複数のソースから生成され多様に国際化された4つのタイプのデータで構成されます。
様々な言語で通知メッセージを構成する手順は、次のとおりです。
次の方法のいずれかを使用して、通知コンテンツのメッセージを国際化します。
タスク定義の際に指定したリソース・バンドル中の値を使用するには、次のXPath拡張関数を使用します。
hwf:getTaskResourceBundleString(taskId, key, locale?)
この関数は、タスク定義で指定されたリソース・バンドルから、国際化された文字列を返します。
通知受信者ロケールは、次の関数によって取得できます。
hwf:getNotificationProperty('locale')
通知に対応するタスクIDは、次の関数によって取得できます。
hwf:getNotificationProperty('taskId')
異なるリソース・バンドルが使用されている場合は、次のXPath拡張関数を使用してローカライズされたメッセージを取得します。
orcl:get-localized-string()
ただし、国際化されたすべての通知のロケールは、アイデンティティ・サービスのBPMUser
オブジェクトから取得されます。
パッケージ済の文字列(アクション・リンク、コメント、Oracle BPM Worklistなど)
これらの文字列は、次のパッケージの一部として製品に国際化されています。
oracle.bpel.services.workflow.resource
ユーザーのロケールは適切なメッセージの取得に使用します。
タスク詳細添付
ユーザーのロケールはタスク詳細HTMLコンテンツの取得に使用します。
タスクの結果文字列(承認、却下など)
ヒューマン・タスク・エディタの「詳細設定」セクションでタスク定義がモデリングされると、結果のリソース・バンドルが指定されます。リソース・バンドルの各結果のキーは結果の名前そのものです。
通知メッセージ
詳細は、「多言語設定の指定方法」を参照してください。
アクション可能なメッセージの送信方法は数種類あります。この項では、手順の概要について説明します。
注意:
タスクに対してデジタル署名が有効な場合、アクション可能な電子メールは実行時に送信されません。設計時にアクション可能な電子メールが有効化された場合も同様です。
アクション可能な電子メールを使用できるようにタスクを設定している場合は、電子メールを介してタスク・アクションを実行できます(同じアクションをOracle BPM Worklistからも実行できます)。アクション可能な電子メール・アカウントは、タスク・アクション関連の電子メールを受信して処理します。
ヒューマン・タスクのアクション可能な電子メールを送信する手順は、次のとおりです。
Oracle Enterprise Manager Fusion Middleware Controlの「Oracle User Messaging Service」セクション、「ワークフロー通知プロパティ」ページおよび「ワークフロー・タスク・サービス・プロパティ」ページの詳細は、『Oracle User Messaging Serviceの管理』と『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』を参照してください。
「添付ファイルを含む」フラグが選択されている場合は、電子メールのみが送信されます。電子メールには、タスクのすべての添付ファイルが電子メール添付ファイルとして含まれます。
インバウンドおよびアウトバウンド添付ファイルを送信する手順は、次のとおりです。
詳細は、「電子メール・メッセージをアクション可能にする方法」を参照してください。
インバウンド・コメントを送信する手順は、次のとおりです。
図34-3
に示すとおり、Comments[[‘と‘]]の間にコメントを追加します。これらのコンテンツはタスクのコメントとして追加されます。たとえばComments[[looks good]]
とします。タスクは、リマインダを送信するように構成できます。リマインダは、タスクがユーザーに割り当てられた時刻またはタスクの有効期限が切れる時刻に基づいています。リマインダの数およびリマインダ間の間隔も構成可能です。タスクがASSIGNED
としてマークされている場合、リマインダに使用されるメッセージはASSIGNEES
に対するメッセージです。
リマインダを送信する手順は、次のとおりです。
システム・エラー、例外エラー、ユーザー・エラーなどのために、受信メッセージを処理できない場合、ヒューマン・ワークフロー通知サービスは自動返信メッセージを送信します。グローバル・リソース・バンドル内のこれらのメッセージに対するテキストは変更できます。次のコード・サンプルは、WorkflowLabels.properties
ファイルを示しています。詳細は、「グローバル・リソース・バンドル - 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.
この項では、Dynamic Assignment Functionを使用した割当てサービスの構成方法について説明します。この項の内容は、次のとおりです。
タスクがグループ、アプリケーション・ロールまたはユーザー・リストに割り当てられると、単一のユーザーは、操作対象のタスクを申告する必要があります。ただし、様々なディスパッチ・メカニズムを使用すると、ユーザーに作業を自動的に送信できます。
自動タスク・ディスパッチは、動的割当てパターンを介して実行されます。動的割当てパターンでは、グループまたはユーザーやグループのリストから、特定のユーザーまたはグループが選択されます。同様に、タスクがエスカレートされる場合、タスク・エスカレーション・パターンを使用して、タスクのエスカレート先となるユーザーを決定できます。組込みパターンがいくつか用意されています。ただし、動的割当ておよびタスク・エスカレーション用の独自のパターンを作成して、ワークフロー・サービスに登録することもできます。表34-21に、組込みの3つの動的割当てパターンと1つのタスク・エスカレーション・パターンを示します。
表34-21 動的割当てパターン
割当てパターン | タイプ | 説明 |
---|---|---|
|
動的割当て |
現在割り当てられているタスク数が最も少ないユーザーまたはグループを選択します。 |
|
動的割当て |
特定の期間(デフォルトでは過去7日間)に最も多くのタスクを完了したユーザーまたはグループを選択します。 |
|
動的割当て |
各ユーザーまたはグループを順番に選択します。 |
|
タスク・エスカレーション |
マネージャのマネージャを選択します。 |
これらのパターンではいずれもユーザーの休暇ステータスがチェックされます。現在割当てできないユーザーにタスクが自動的に割り当てられることはありません。
「単一参加者タイプの構成方法」に示すように、タスク参加者を定義する場合には動的割当てパターンを使用できます。「グループ・ルールの作成方法」に示すように、これらをタスク割当てルールとともに使用すると、エンド・ユーザーは、管理するグループのメンバーに対してタスクの動的割当てを指定できるようになります。
動的割当てパターンは、タスク定義の任意のXpath式でXpath関数を使用してコールすることもできます。
関数のシグネチャは次のとおりです。
hwf:dynamicTaskAssign(patternName, participants, inputParticipantType, targetAssigneeType, isGlobal, invocationContext, parameter1, parameter2, ..., parameterN)
パラメータは次のとおりです。
patternName
: 必須。使用するパターンの名前。
participants
: 必須。割当て先として選択される参加者(複数可)。参加者名や参加者名のカンマ区切りリストを含む文字列または要素にするか、あるいは参加者名や参加者名のカンマ区切りリストを含む一連の要素にすることができます。参加者のタイプはすべて同じである必要があります。
inputParticipantType
: 必須。入力する参加者のタイプ(user、groupまたはapplication_role)。
targetAssigneeType
: 必須。選択する割当て先のタイプ(user、groupまたはapplication_role)。値は、関数が使用されているコンテキストと一致する必要があります(たとえば、所有者ユーザーを動的に選択する場合にはuserである必要があります)。inputParticipantTypeがuserである場合、ここで有効な値はuserのみです。
isGlobal
: パターンの評価にすべてのタイプのタスクを使用するか、または同じタイプのタスクのみを現在のタスクとして使用するかを示すブール値。オプション(デフォルトはfalseです)。
invocationContext
: この関数が使用されている場所を一意に識別する文字列。指定しない場合は、デフォルトのコンテキストが割り当てられます。
parameterN
: 一部の動的割当てパターンではパラメータを指定できます。パラメータ値は、=文字をデリミタとして使用し、名前/値ペアとして指定できます(TIME_PERIOD=7など)
使用例:
hwf:dynamicTaskAssign(“LEAST_BUSY","jcooper,jstein,mtwain","user","user","true","ErrorAssignee") hwf:dynamicTaskAssign(“MOST_PRODUCTIVE",task:task/task:payload/task:users,"user","user","false","OwnerUser","TIME_PERIOD=7") hwf:dynamicTaskAssign(“LEAST_BUSY","DeveloperRole","application_role","group"):
12c リリース1 (12.1.3)より前は、XPath関数のwfDynamicUserAssign
およびwfDynamicGroupAssign
を使用して動的割当てを実行できました。これらのXPath関数は、12cリリース1 (12.1.3)では非推奨です。引き続き使用は可能ですが、これらのXPath関数の既存の使用をすべて新しいdynamicTaskAssign
関数に移行することをお薦めします。
次の手順に従って、独自の動的割当てパターンを実装します。
動的割当てパターンを実装する手順は、次のとおりです。
次のインタフェースを実装するJavaクラスを記述します。
oracle.bpel.services.workflow.assignment.dynamic.IDynamicAssignmentPattern
メソッドgetAssigneeFromParticipantList
を実装することにより、(すべて同じタイプの)参加者リストから単一の割当て先を選択するためのサポートを、実装で提供する必要があります。
実装により、すべての割当て先タイプがサポートされる必要はありません。インタフェースでメソッドgetSupportedAssigneeType
を使用することにより、実装時に、サポートする割当て先のタイプを指定できます。
実装で選択基準を指定する入力パラメータを受け入れると、Dynamic Assignment Frameworkがこれらの入力パラメータを検証し、実装はそのパラメータ(ある場合)をメソッドgetPatternParameters()
で定義できます。
実装では、実装の初期化時にフレームワークによって設定される初期化パラメータを受け入れることができます。パラメータ値は(configMBean
を使用するか、Oracle Enterprise Manager Fusion Middleware Controlでのヒューマン・ワークフロー・サービス・エンジン構成によって)ヒューマン・ワークフロー構成で定義されており、ここに動的割当てパターンが登録されます。
便宜上、フレームワークでは、一部の共通機能を実装するクラスAbstractDynamicAssignmentPattern
が提供されています。割当てパターンの実装により、この抽象クラスを拡張して、一部のパラメータおよびローカライズ・サポートの実装を保存できます。
11g (11.1.1.6.0)より前は、カスタムの動的割当てパターンは、次のインタフェースのいずれかまたは両方を使用して実装されていました。
oracle.bpel.services.workflow.assignment.dynamic.IDynamicGroupAssignmentFunction oracle.bpel.services.workflow.assignment.dynamic.IDynamicUserAssignmentFunction
これらのインタフェースはIDynamicAssingmentPattern
インタフェースで使用可能なすべての機能を備えているわけではなく、非推奨になりました。Dynamic Assignment Frameworkは、古いインタフェースを使用する実装との下位互換性を維持していますが、新しいインタフェースの使用が必要なすべての実装を移行することをお薦めします。
動的割当てのインタフェースとユーティリティに関するJavadocの詳細は、『Oracle Fusion Middleware Workflow Services Java API Reference for Oracle BPEL Process Manager』を参照してください。
動的割当てパターンは、Oracle Enterprise Manager Fusion Middleware Controlで他のヒューマン・ワークフロー構成パラメータとともに構成します。
動的割当てには、それぞれ次の2つの必須パラメータがあります。
name
:
パターンの名前
classpath
:
パターンを実装するクラスの完全修飾クラス名
また、各パターンには、任意の数のプロパティをオプションで指定できます。これらのプロパティは単純な名前/値ペアで、初期化パラメータとしてパターンに渡されます。
これらのタグで指定したプロパティ値は、動的割当てパターンのsetInitParameters
メソッドに(name属性の値で索引付けされた)マップとして渡されます。
組込みパターンのうち2つには、初期化パラメータが含まれています。それらは次のとおりです。
ROUND_ROBIN
MAX_MAP_SIZE
パラメータは、パターンがROUND_ROBIN
カウントを維持できる一連のユーザーまたはグループの最大数を指定します。動的割当てパターンでは、ROUND_ROBIN
パターンを実行するように要求される各グループ(またはユーザーとグループのリスト)について、ユーザーとグループのリストがメモリーに保持されます。
MOST_PRODUCTIVE
DEAFULT_TIME_PERIOD
パラメータは、ユーザーの生産性を計算する期間(日数)を指定します。この値は、MOST_PRODUCTIVE
動的割当てパターンをコールするときにオーバーライドできます。
Oracle Enterprise Manager Fusion Middleware ControlでDynamic Assignment Functionを構成する方法の詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』を参照してください。
ランタイム構成サービスには、使用可能なユーザーとグループの動的割当てパターンのリストを返すメソッドが用意されています。これらのパターンは、パターンの名前、およびパターンとそのパラメータに対するユーザーが表示可能なラベルと説明の両方を返します。このパターンでは表示名のローカライズがサポートされるため、コンテキスト・ユーザーには適切な言語で表示されます。Oracle BPM WorklistおよびJDeveloperのヒューマン・タスク・エディタでは、これらのパターンを使用して、使用可能な動的割当てパターンのリストを表示します。
Dynamic Assignment Frameworkでは、パターン実装で、パターンとそのパラメータに対する判読可能な表示名と説明が表示されるようにするメソッドが提供されています。
組込みパターン実装、およびAbstractDynamicPattern
クラスを拡張するカスタム実装では、WorkflowLabels.properties
リソース・バンドル・ファイルを使用して、これらの表示文字列を構成します。
動的割当てパターンの表示名を構成する手順は、次のとおりです。
エントリをリソース・プロパティ・ファイルWorkflowLabels.properties
に追加し、関連リソース・プロパティ・ファイルを他の言語で追加して、動的割当てパターンとそのパラメータの表示名と説明(および適切なトランスレーション)を指定します。このファイルは、次のパスにある、ワークフロー構成パラメータworkflowCustomizationsClasspathURL
識別されるクラスパス内に配置されている必要があります。
oracle/bpel/services/workflow/resource/WorkflowLabels.properties
動的割当てパターンのエントリは、次の形式である必要があります。
DYN_ASSIGN_FN.[pattern name]=Pattern Display Name DYN_ASSIGN_DESCR.[pattern name]=Function Description DYN_ASSIGN_PARAM_LABEL.[pattern name].[parameter name]=Parameter Display Name DYN_ASSIGN_PARAM_LABEL.[pattern name].[parameter name]=Parameter Description
たとえば、MOST_PRODUCTIVE
パターンのエントリは、次のとおりです。
DYN_ASSIGN_FN.MOST_PRODUCTIVE = Most Productive DYN_ASSIGN_DESCR.MOST_PRODUCTIVE = Picks the user, group or application role that has completed the highest number of tasks within a certain time period. For group and application roles the total number of tasks completed by all the users who are direct members of that group or role are counted. The time period to use can be specified using the Time Period parameter. If no time period is specified, then the default value specified in the dynamic assignment configuration for the instance is used. DYN_ASSIGN_PARAM_LABEL.MOST_PRODUCTIVE.TIME_PERIOD = Time Period DYN_ASSIGN_PARAM_DESCR.MOST_PRODUCTIVE.TIME_PERIOD = The previous number of days over which to count the number of completed tasks. If not specified, the default value defined in the human workflow dynamic assignment configuration is used.
これらのファイルに動的割当てパターンのエントリを追加するかどうかはオプションです。ファイルにエントリが存在しない場合は、かわりに関数名(ROUND_ROBIN
など)が使用されます。
WorkflowLabels.properties
ファイルの詳細は、Oracle SOA Suiteサンプルで使用可能なworkflow-110-workflowCustomizations
のサンプルを参照してください。
ヒューマン・ワークフロー参加者は、ルーティング・スリップで宣言的に指定されます。ルーティング・スリップでは、参加者およびヒューマン・ワークフローへの参加方法(管理チェーン階層、承認者のシリアル・リストなど)を指定することでヒューマン・ワークフローの進行方法を決定します。
ヒューマン・タスク・エディタでは様々な組込みパターンを使用して、ルーティング・スリップを宣言的に作成できます。さらに、ビジネス・ルールに基づいた拡張ルーティングを使用して、より複雑にルーティングできます。ただし、カスタム・ロジックを使用してより高度なルーティングを作成するには、カスタム割当てサービスを実装してルーティングします。
このような動的割当てをサポートするために、割当てサービスが使用されます。割当てサービスは、タスク割当て先の決定を担当します。独自の割当てサービスを実装し、その実装をプラグイン接続して特定のヒューマン・ワークフローで使用することもできます。
割当てサービスにより、ヒューマン・ワークフローの次のタスク割当て詳細が決定されます。
タスク開始時の割当て。
タスク再開始時の割当て。
ユーザーがタスクの結果を更新するときの割当て。タスクの結果が更新された場合、そのタスクは他のユーザーにルーティングするか完了にできます。
タスク情報のリクエスト元の割当て先。
タスクでOracle BPM Worklistからの再承認をサポートしている場合、ユーザーは再承認のための情報をリクエストできます。
再承認がサポートされている場合にタスクを再承認するユーザー。
ヒューマン・ワークフロー・サービスでは、特定のタスクについて割当てサービスが識別されて起動され、タスク割当てが決定されます。
たとえば、単純割当てサービスの繰返しは次のとおりです。
クライアントが、割当てサービスによりルーティングが決定される経費承認タスクを開始します。
割当てサービスが、タスク割当て先をjcooper
であると決定します。
jcooper
がタスクを承認すると、割当てサービスがタスクをjstein
に割り当てます。また、割当てサービスはタスク作成者であるjlondon
に必ず通知を送信するように指定します。
jstein
がタスクを承認し、割当てサービスは他にタスクの割当て先ユーザーがいないことを示します。
注意:
ステートフルな割当てサービス・クラスは使用できません。これは、ヒューマン・ワークフロー・サービスでは、割当てサービスのコールが必要になるたびに新規インスタンスが作成されるためです。
getAssigneesToRequestForInformation
メソッドは複数回コールできます。これは、情報のリクエスト・アクションを表示するための基準の1つが、情報をリクエストしているユーザーが複数存在していることであるためです。したがって、ヒューマン・ワークフロー・サービスがタスクについて許可されているアクションを判別しようとするたびに、このメソッドがコールされます。
独自の割当てサービス・プラグインを実装できます。このプラグインは、ヒューマン・ワークフロー実行時にヒューマン・ワークフロー・サービスによって起動されます。
次のコード・サンプルでは、TestAssignmentService.java
と呼ばれる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 implements. The implementation of the IAssignmentService is 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; } }
次のコールバックおよびリソース・バンドルのクラスは、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式の一部として使用できます。
ヒューマン・ワークフロー・コンポーネントをリソース・バンドルに関連付けます。これを実行するには、ヒューマン・タスク・エディタの「プレゼンテーション」セクションにある「リソースの詳細」ダイアログの「リソース名」フィールドと「リソースの場所」フィールドを設定します。「リソースの場所」フィールドの値はURLです。リソース・バンドルは、このURLが指し示すJARファイル内に含めることができます。リソース・バンドルに対して共有場所を使用すると、複数のヒューマン・ワークフロー・コンポーネント間で同じリソース・バンドルを共有できます。
ヒューマン・ワークフロー・コンポーネントに対してリソース・バンドルが指定されていない場合は、グローバル・リソース・バンドル内でソース文字列がルックアップされます(「グローバル・リソース・バンドル - WorkflowLabels.properties」を参照。)よく使用されるタスクの結果をグローバル・リソース・バンドルで定義すると、個別のヒューマン・ワークフロー・コンポーネントに対してリソース・バンドルを定義する必要性が減少します。
特定の結果に対してリソース文字列を配置できない場合は、その結果の名前がすべてのロケールで表示値として使用されます。
次のグローバル・リソース・バンドルは、ヒューマン・ワークフロー・サービスAPIによるリソース文字列のルックアップに使用されます。
oracle.bpel.services.workflow.resource.WorkflowLabels.properties
このバンドルをカスタマイズすると、既存の表示文字列の代替を提供したり、他の文字列(マップ済属性のラベル、標準ビュー、カスタムのDynamic Assignment Function用など)を追加できます。
グローバル・リソース・バンドルでは、次の内容に対するリソース文字列が提供されます。
タスク属性
Oracle BPM Worklist(または他のクライアント)に表示される様々なタスク属性のラベル。リソース文字列値は、次のTaskMetadataService
メソッドから返されます。
getTaskAttributes
getTaskAttributesForTaskDefinition
getTaskAttributesForTaskDefinitions
マップ済属性のラベル
ランタイム構成サービスを介して作成されたマップ済属性のラベル。これらの文字列は、Oracle BPM Worklistで、マップ済属性を表示する際に使用されます。リソース文字列値は、次のTaskMetadataService
メソッドから返されます。
getTaskAttributesForTaskDefinition
getTaskAttributesForTaskDefinitions
マップ済属性マッピングに翻訳されたリソース文字列が必要な場合は、WorkflowLabels.properties
バンドルをカスタマイズして適切な文字列を挿入します。
タスクの結果
共有のタスクの結果に対するデフォルトのリソース文字列。前述のように、タスクの結果はタスク・リソース・バンドルでオーバーライドできます。タスク固有のリソース・バンドルが指定されていない場合、リソース文字列は、TaskMetadataService
メソッドのgetTaskDefinitionOutcomes
から返されます。出荷時のグローバル・リソース・バンドルには、次の結果に対するリソース文字列が含まれています。
承認
却下
はい
いいえ
OK
遅延
承認
確認
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サーバー上でリソース・バンドルをホスティングしたり、SOAサーバーのMDSリポジトリへの格納が可能で、oramds
URLプロトコルを使用して、そのリソース・バンドルに複数のOracle WebLogic Serverからアクセスできるようになります。この方法の詳細は、サンプルのworkflow-110-workflowCustomizationsを参照してください。このサンプルをダウンロードするには、Oracle SOA Suiteサンプルを参照してください。
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タスク・フローに独自のカスタム・リソース文字列を提供できます。
このリソース・バンドルを使用すると、タスク・フロー・フォームに表示されるXML要素名をローカライズできます。各キーを追加すると、タスク・フロー・フォームのコンテンツ・セクションでそれらのキーを使用できます。入力テキスト・ラベルは、次のようになります。
#{resources.mykeyword}
WorkflowLabels.properties
リソース・バンドルのコピーは、サンプルのworkflow-110-workflowCustomizationsから入手できます。このサンプルには、タスク詳細のADFタスク・フロー・アプリケーションに、カスタマイズした独自のリソース文字列を提供する方法の詳細が示されています。
コンポジット・リソース・バンドルで、ステージ名と参加者名の翻訳済の値を指定できます。リソース・バンドルには次のようなエントリが含まれている必要があります。
stage_name
=
translated_value
participant_name
=
translated_value
デフォルトでは、ヒューマン・ワークフロー・システムでユーザー名の大/小文字は区別されません。すべてのユーザー名は小文字で格納されます。ただし、グループ名とアプリケーション・ロール名は常に大/小文字が区別されます。ユーザー名は、大/小文字を区別するようにOracle Enterprise Manager Fusion Middleware Controlで変更できます。
注意:
この設定は、新規のインストールを実行した後にのみ変更してください。インスタンスをアクティブに処理しているインストール、または多数のインストールがデータベースにあるインストールでこの値を変更すると、重大な問題が発生します。
大/小文字を区別するように変更する手順は、次のとおりです。
10.1.3(デフォルトで、大/小文字を区別します)からアップグレードする場合、システムの動作を10.1.3と同じにするには、「caseSensitive」をtrue
に設定します。
この項では、ヒューマン・ワークフロー・クライアントとOracle WebLogic Serverサービスとの統合方法について説明します。
ヒューマン・ワークフロー・サービスは、次のワークフロー・サービスを公開します。
タスク・サービス
タスク問合せサービス
ユーザー・メタデータ・サービス
タスク・エビデンス・サービス
タスク・メタデータ・サービス
ランタイム構成サービス
タスク・レポート・サービス
これらのサービスを使用するには、ワークフロー・サービスに対してAbstract Factoryパターンを使用する必要があります。Abstract Factoryパターンを使用すると、共通のテーマを持つ各ファクトリのグループをカプセル化できます。
次のタスクを実行します。
特定のサービス・タイプに対してIWorkflowServiceClient
インスタンスを取得します。WorkflowServiceClientFactory
は、サービス・タイプに従ってIWorkflowServiceClient
を取得する静的ファクトリ・メソッドを提供します。
IWorkflowServiceClient
インスタンスを使用して、使用するサービス・インスタンスを取得します。
サポートされているサービス・タイプは「リモート」と「soap」です。
リモート・クライアントは、Enterprise JavaBeansクライアント(したがってリモートEnterprise JavaBeans)を使用します。SOAPはSOAPクライアントを使用します。各タイプのサービスには、ワークフロー・クライアントを構成する必要があります。「ワークフロー・クライアント構成ファイル - wf_client_config.xml」の最初のコード・サンプルに詳細を示します。
クライアント構成ファイルには、複数の構成についての定義が含まれています。各サーバーには一意の名前が指定されている必要があります。構成ファイルに複数のサーバーを定義した場合は、1つのサーバーのデフォルト属性にtrue
を設定する必要があります。workflowServicesClientConfiguration
にはserverType
というオプション属性があり、LOCAL
、REMOTE
またはSOAP
のいずれかに設定できます。各サーバーのクライアント・タイプをオーバーライドするには、オプション属性のclientType
を使用します。
「ワークフロー・クライアント構成ファイル - wf_client_config.xml」の2番目のコード・サンプルに詳細を示します。
2番目のコード・サンプルでは、server2
にREMOTE
のデフォルトのclientType
が使用されていますが、server1
にはデフォルトのclientType
の値をオーバーライドしてSOAP
のclientType
が使用されています。wf_client_config.xml
ファイルのかわりに、JAXBオブジェクトのWorkflowServicesClientConfigurationType
が使用されている場合も、同じルールが適用されます。
構成でクライアント・タイプを定義すると、WorkflowServiceClientFactory
クラスのファクトリ・メソッドを使用できます。次のコード・サンプルを参照してください。
public static IWorkflowServiceClient getWorkflowServiceClient(WorkflowServicesClientConfigurationType wscc, Logger logger) throws WorkflowException
マップでプロパティのCONNECTION_PROPERTY.CLIENT_TYPE
を使用してクライアント・タイプを定義すると、次のコード・サンプルに示すファクトリ・メソッドを使用できます。
public static IWorkflowServiceClient getWorkflowServiceClient(Map<CONNECTION_ PROPERTY, String> properties, String serverName, Logger logger) throws WorkflowException
次のコード・サンプルに、タスク問合せサービス・クライアントのコード例を示します。
/** * 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.example.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); } }
各タイプのクライアントには、ワークフロー・クライアント構成を設定する必要があります。次の場所に構成を設定できます。
JAXBオブジェクト
wf_client_config.xml
ファイル
プロパティ・マップ
プロパティ・マップは常に、wf_client_config.xml
ファイルの補足です。構成属性は、JAXBオブジェクトまたはプロパティ・マップによって上書きされる場合があります。構成ファイルはオプションです。構成ファイルがアプリケーションのクラスパスに見つからない場合は、プロパティ・マップが構成の主要ソースになります。
JAXBオブジェクトは、クライアント構成を定義するために使用できます。次のコード・サンプルに、WorkflowServiceClientFactory
メソッドの使用方法を示します。
public static IWorkflowServiceClient getWorkflowServiceClient(String clientType,WorkflowServicesClientConfigurationType wscc,Logger logger) throws WorkflowException
クライアント構成のXSDスキーマは、wf_client_config.xsd
ファイルにあります。
サーバー構成には、次の3タイプのクライアントが含まれている必要があります。
localClient
remoteClient
soapClient
すべてのクライアントを指定することをお薦めします。これは、リモート・クライアントを持たないサービス(アイデンティティ・サービスなど)があるためです。このため、他のサービスでリモート・クライアントを使用する場合、アイデンティティ・サービスではSOAPサービスを使用します。
次のコード・サンプルに、クライアント構成のXMLファイルの例を示します。この構成によって、default
という名前のサーバーが定義されます。このXMLファイルは、クライアント・アプリケーションのEARファイルに移動する必要があります。
<workflowServicesClientConfiguration> server name="default" default="true"> <remoteClient> <serverURL>t3://myhost.us.example.com:7001</serverURL> <userName>weblogic</userName> <password>weblogic</password> <initialContextFactory>weblogic.jndi.WLInitialContextFactory </initialContextFactory> <participateInClientTransaction>false</participateInClientTransaction> </remoteClient> <soapClient> <rootEndPointURL>http://myhost.us.example.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>
次のコード・サンプルに、複数の構成が定義されたクライアント構成ファイルの例を示します。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <workflowServicesClientConfiguration xmlns="http://xmlns.oracle.com/bpel/services/client" clientType="REMOTE" <server name="server1" default="true" clientType="SOAP"> <remoteClient> <serverURL>t3://myhost1.us.example.com:7001</serverURL> <initialContextFactory>weblogic.jndi.WLInitialContextFactory</initialContextFactory> <participateInClientTransaction>false</participateInClientTransaction> </remoteClient> --> <soapClient> <rootEndPointURL>http://myhost1.us.example.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> <server name="server2"> <remoteClient> <serverURL>t3://myhost2.us.example.com:7001</serverURL> <initialContextFactory>weblogic.jndi.WLInitialContextFactory</initialContextFactory> <participateInClientTransaction>false</participateInClientTransaction> </remoteClient> --> <soapClient> <rootEndPointURL>http://myhost2us.example.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>
WorkflowServicesClientConfigurationType
wscc
がnull
の場合は、wf_client_config.xml
にクライアント・プロパティを定義できます。
WorkflowServiceClientFactory getWorkflowServiceClient()
メソッドは常に、クラスパス内でwf_client_config.xml
を検索します。このファイルが検出されると、クライアント・プロパティがロードされます。
wf_client_config.xml
ファイルに定義した値は、プロパティ・マップまたはJAXBオブジェクトで定義したすべてのプロパティによってオーバーライドされます。
接続プロパティを動的に指定する場合は、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で、構成ファイルが見つからない場合も、例外がスローされます。構成ファイルが見つからない場合に、クライアントでマップ内の一部のプロパティが省略されていると、実行時にサービス・コールが失敗します(プロパティは構成ファイルの補足です)。
クライアント・プロパティは、WorkflowServiceClientFactory
メソッドを使用して定義できます。次のコード・サンプルに詳細を示します。
public static IWorkflowServiceClient getWorkflowServiceClient(String clientType,Map<CONNECTION_PROPERTY, String> properties,
Logger logger) hrows WorkflowException
マップでプロパティのCONNECTION_PROPERTY
タイプを使用してクライアント・タイプを定義すると、次のコード・サンプル示すファクトリ・メソッドを使用できます。
public static IWorkflowServiceClient getWorkflowServiceClient(Map<CONNECTION_ PROPERTY, String> properties, Logger logger) throws WorkflowException
次に、クライアント・プロパティを設定するためにプロパティ・マップで使用できるIWorkflowServiceClientConstants.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" // REMOTE EJB TASK_SERVICE_PARTICIPATE_IN_CLIENT_TRANSACTION // default value is false //(task service EJB starts a new transaction) CLIENT_TYPE, DISCOVERY_OF_END_POINT, WSS_RECIPIENT_KEY_ALIAS, EJB_JNDI_SUFFIX // append to jndi name to used foreign jndi name };
注意:
プロパティ・マップを使用する場合、IWorkflowServiceClientConstants.CONNECTION_PROPERTY.MODE
を指定する必要はありません。このプロパティは、11g リリース1では非推奨です。
次のコード・サンプルに、リモート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.example.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);
次のコード・サンプルに、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
を必要に応じて渡すことができます。ロガーが指定されていない場合、ワークフロー・サービス・クライアントのコードは何も記録しません。次のコード・サンプルは、ロガーをワークフロー・サービス・クライアントに渡す方法を示しています。
java.util.logging.Logger logger = ....; IWorkflowServiceClient client = WorkflowServiceClientFactory.getWorkflowServiceClient(WorkflowServiceClientFactory .REMOTE_CLIENT, properties, logger);
クライアント構成スキーマは、リリース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>
要素を省略する必要があります。さらに、「プロパティ・マップでのワークフロー・クライアント構成」で移入した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で使用するアイデンティティ・ストアと同じアイデンティティ・ストアを使用することをお薦めします。これにより、ユーザーがクライアント側に存在している場合、そのユーザーはサーバー側にも存在していることが保証されます。
アイデンティティ・ストアの構成の詳細は、を参照してください。
カスタム・アイデンティティ・ストアとの相互作用の詳細は、次のURLを参照してください。
http://www.oracle.com/technetwork/middleware/id-mgmt/overview/index.html
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");
次のコード・サンプルに、SAMLトークン動的クライアントを示します。
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.example.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トークン伝播は失敗します。
構成ファイルでは、次に示すように、<soapClient>
の<identityPropagation>
要素を使用して伝播モードを定義できます。
<soapClient> <rootEndPointURL>http://myhost.us.example.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>
詳細は、『Webサービスの管理』を参照してください。
ワークフロー・クライアントとともにoracle.wsm.security.util.SecurityConstants.ClientConstants.WSS_RECIPIENT_KEY_ALIAS
プロパティを使用できます。このプロパティは、アウトバウンド・メッセージ・タイプの暗号化に使用する受信者の公開鍵に別名を設定します。このプロパティを使用して、公開鍵の別名でワークフロー・サービスを保護します。このプロパティが関連するのは、SOAPクライアント・タイプでアイデンティティ伝播が使用される場合のみです。
公開鍵の別名を定義する場合は、クライアント・コードでWSS_RECIPIENT_KEY_ALIAS
値をマップに追加する必要があります。次のコード・サンプルに詳細を示します。
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.example.com:7001"); properties.put(CONNECTION_PROPERTY.WSS_RECIPIENT_KEY_ALIAS,keyAlias); // where keyAlias is a key alias value 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);
クライアントでJAXBオブジェクトのWorkflowServicesClientConfigurationType
またはwf_client_config.xml
ファイルを使用する場合は、wssRecipientKeyAlias
と呼ばれるオプション要素をSOAPクライアントのidentityPropagation
要素の下に追加します。次のコード・サンプルに詳細を示します。
<xsd:complexType name="identityPropagationType"> <xsd:sequence> <xsd:element name="policy-references" type="PolicyReferencesType" minOccurs="0" maxOccurs="1"/> <xsd:element name="wssRecipientKeyAlias" type="xsd:string" minOccurs="0" maxOccurs="1"/> </xsd:sequence> <xsd:attribute name="type" type="xsd:string" default="saml"/> <xsd:attribute name="mode" type="xsd:string" default="dynamic"/> </xsd:complexType>
資格証明ストアでの公開鍵の別名の作成方法および使用方法の詳細は、『Webサービスの管理』を参照してください。
アイデンティティ伝播を使用しないクライアント・アプリケーションには、そのクラスパスにbpm-services.jar
ファイルを指定する必要があります。12cリリース1 (12.1.3)の場合、クライアントのクラスパスには次に示すファイルが必要です。
$fmwhome/wlserver/server/lib/wlfullclient.jar $fmwhome/wlserver/lib/weblogic.jar $fmwhome/wlserver/server/lib/wlclient.jar $fmwhome/oracle_common/modules/clients/com.oracle.webservices.fmw.client_ 12.1.3.jar $fmwhome/soa/soa/modules/com.oracle.webservices.fmw.client_12.1.3.jar $fmwhome/oracle_common/modules/oracle.xdk_12.1.3/xml.jar $fmwhome/oracle_common/modules/oracle.nlsrtl_11.2.0/orai18n-mapping.jar $fmwhome/soa/soa/modules/oracle.soa.fabric_11.1.1/bpm-infra.jar $fmwhome/soa/soa/modules/oracle.soa.workflow_11.1.1/bpm-services.jar $fmwhome/soa/soa/modules/soa-startup.jar
wlfullclient.jar
ファイルは生成する必要があります。
wlfullclient.jar
は、次のように生成します。
cd $fmwhome/wlserver/server/lib java -jar ../../modules/com.bea.core.jarbuilder_2.2.0.0.jar
次のリストに、ヒューマン・タスクで利用可能なすべてのタスクの状態を示します。すべての状態の定数は、IWorkflowConstants.java
で定義されています。
String TASK_STATE_ALERTED = "ALERTED";
String TASK_STATE_ASSIGNED = "ASSIGNED";
String TASK_STATE_COMPLETED = "COMPLETED";
String TASK_STATE_DELETED = "DELETED";
String TASK_STATE_ERRORED = "ERRORED";
String TASK_STATE_EXPIRED = "EXPIRED";
String TASK_STATE_INFO_REQUESTED = "INFO_REQUESTED";
String TASK_STATE_OUTCOME_UPDATED = "OUTCOME_UPDATED";
String TASK_STATE_STALE = "STALE";
String TASK_STATE_SUSPENDED = "SUSPENDED";
String TASK_STATE_WITHDRAWN = "WITHDRAWN";
IWorkflowConstants.java
の詳細は、『Oracle SOA Suiteワークフロー・サービスJava APIリファレンス』を参照してください。
この項では、データベース・ビューについて説明します。データベース・ビューを使用すると、レポート受信の問合せをOracle Workflowサービス・スキーマに対して実行できます。表34-22に、Oracle BPM Worklistで公開されるレポート、およびこれらのレポートに対応するデータベース・ビューを示します。
表34-22 レポートのビュー
既存のワークリスト・レポート | 対応するデータベース・ビュー |
---|---|
不参加タスク・レポート |
|
タスクのサイクル・タイム・レポート |
|
タスクの生産性レポート |
|
タスクの優先度レポート |
|
表34-23に、WFUNATTENDEDTASKS_VIEW
レポート・ビューを示します。
表34-23 「不参加タスク・レポート」ビュー
名前 | タイプ |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
脚注 1
NOT 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;
表34-24に、WFTASKCYCLETIME_VIEW
レポート・ビューを示します。
表34-24 「タスクのサイクル・タイム・レポート」ビュー
名前 | タイプ |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
脚注 2
NOT 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;
表34-25に、WFPRODUCTIVITY_VIEW
レポート・ビューを示します。
表34-25 「タスクの生産性レポート」ビュー
名前 | タイプ |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
脚注 3
完了済タスクの場合、状態は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;
表34-26に、WFTASKPRIORITY_VIEW
レポート・ビューを示します。
表34-26 「タスクの優先度レポート」ビュー
名前 | タイプ |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
脚注 4
NOT 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;