ヘッダーをスキップ
Oracle® Fusion Middleware Oracle SOA Suite開発者ガイド
11g リリース1 (11.1.1.6.2)
B56238-06
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

34 ヒューマン・ワークフロー・サービスの概要

この章では、開発者を対象として、Oracle SOA Suiteでのヒューマン・ワークフロー・サービスの使用方法について説明します。ヒューマン・ワークフロー・サービスは、タスクのライフ・サイクル内で様々な操作を実行します。

この章には次の項が含まれます:


注意:

以前のリリースのOracle BPM Worklistには、フレックス・フィールドと呼ばれる機能が含まれていました。リリース11g R1 (11.1.1.4)から、フレックス・フィールドはマップ済属性と呼ばれるようになりました。


34.1 ヒューマン・ワークフロー・サービスの概要

この項では、次のヒューマン・ワークフロー・サービスの役割について説明します。

34.1.1 ヒューマン・ワークフロー・サービスに対するSOAP、Enterprise JavaBeansおよびJavaサポート

表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の場所

タスク・サービス

http://host:port/integration/services/TaskService/TaskServicePort?WSDL

タスク問合せサービス

http://host:port/integration/services/TaskQueryService/TaskQueryService?WSDL

アイデンティティ・サービス

http://host:port/integration/services/IdentityService/configuration?WSDL

http://host:port/integration/services/IdentityService/identity?WSDL

タスク・メタデータ・サービス

http://host:port/integration/services/TaskMetadataService/TaskMetadataServicePort?WSDL

ユーザー・メタデータ・サービス

http://host:port/integration/services/UserMetadataService/UserMetadataService?WSDL

タスク・レポート・サービス

http://host:port/integration/services/TaskReportService/TaskReportServicePort?WSDL

ランタイム構成サービス

http://host:port/integration/services/RuntimeConfigService/RuntimeConfigService?WSDL

エビデンス・ストア・サービス

http://host:port/integration/services/EvidenceService/EvidenceService?WSDL


表34-3に、様々なEnterprise JavaBeansのJNDI名を示します。

表34-3 様々なEnterprise JavaBeansのJNDI名

サービス名 様々なEnterprise JavaBeansのJNDI名

タスク・サービス

ejb/bpel/services/workflow/TaskServiceBean

クライアント・トランザクションに参加するタスク・サービスのEnterprise JavaBeans

ejb/bpel/services/workflow/TaskServiceGlobalTransactionBean

タスク・メタデータ・サービス

ejb/bpel/services/workflow/TaskMetadataServiceBean

タスク問合せサービス

ejb/bpel/services/workflow/TaskQueryService

ユーザー・メタデータ・サービス

ejb/bpel/services/workflow/UserMetadataService

ランタイム構成サービス

ejb/bpel/services/workflow/RuntimeConfigService

タスク・レポート・サービス

ejb/bpel/services/workflow/TaskReportServiceBean

タスク・エビデンス・サービス

ejb/bpel/services/workflow/TaskEvidenceServiceBean


ワークリスト・サービスのクライアント・ライブラリの詳細は、第33章「カスタム・ワークリスト・クライアントの作成」を参照してください。

34.1.1.1 外部JNDI名のサポート

ヒューマン・ワークフロー・サービスは、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名のサポートを提供する手順は、次のとおりです。

  1. Oracle WebLogic Server管理コンソールにログインします。

    http://host:port/console
    
  2. 「ドメイン構造」で、「サービス」「JDBC」「外部JNDIプロバイダ」の順に選択します。

    ローカルJNDIネームスペースに対するリモートEnterprise JavaBeans名を、外部JNDIプロバイダを介して同じOracle WebLogic Serverドメイン内のSOAサーバーから特定の管理対象サーバーまたはクラスタにリンク付けする場合は、注意事項が1つあります。ローカルJNDI名は、そのドメイン内のすべての管理対象サーバーに公開されます。このようにリンク付けすると、そのドメイン内のSOAサーバー上でネームスペースの競合が発生します。これは、Oracle BPM Worklistから登録されたEnterprise JavaBeansがすでに存在しているためです。競合を回避して構成を最小限に維持する別の方法として、JNDI接尾辞を使用する方法があります。これを実行するには、リモート・ワークフローEnterprise JavaBeansのすべてのローカルJNDIリンクの末尾に一貫性のある接尾辞を追加し、接尾辞キーが含まれた単純なwf_client_config.xmlファイルを作成します。

    クライアント・プロパティは3つの方法のうちのいずれかの方法で定義できます。詳細は、第34.6.1.2項「構成オプション」を参照してください。

  3. 表34-3に示した各Enterprise JavaBeans名にJNDI接尾辞を追加し、外部JNDI名を登録します。

    • ejb/bpel/services/workflow/TaskServiceGlobalTransactionean_server1

    • ejb/bpel/services/workflow/TaskServiceBean_server1

    • ejb/bpel/services/workflow/TaskMetadataServiceBean_server1

    • TaskQueryService_server1

    • UserMetadataService_server1

    • RuntimeConfigService_server1

    • TaskReportServiceBean_server1

    • TaskEvidenceServiceBean_server1

  4. 例34-1に示すように、wf_client_config.xmlファイルにejbJndiSuffix要素の値のみを指定して、リモート名を定義します。JAXBオブジェクトのWorkflowServicesClientConfigurationTypeを使用することも、Map<CONNECTION_PROPERTY, String>プロパティでCONNECTION_PROPERTY.EJB_JNDI_SUFFIXを使用することもできます。

    例34-1 ejbJndiSuffix要素の値

    <remoteClient>
          <ejbJndiSuffix>_server1</ejbJndiSuffix>
    </remoteClient>
    

34.1.2 サービスに対するセキュリティ・モデル

アイデンティティ・サービスを除いて、前述のAPI(SOAPおよびリモートEnterprise JavaBeans)を使用するすべてのサービスでは、認証を起動する必要があります。前述のすべてのチャネルでは、ヒューマン・ワークフロー・コンテキストを使用したユーザーIDの受渡しがサポートされています。ヒューマン・ワークフロー・コンテキストには、次のいずれかが含まれています。

  • ログインとパスワード

  • トークン

タスク問合せサービスでは、ログインとパスワードを取得し、すべてのサービスに使用するヒューマン・ワークフロー・コンテキストを返すauthenticate操作が公開されます。ヒューマン・ワークフロー・コンテキストは、必要に応じて、各リクエストごとにログインとパスワード付きで渡すことができます。

authenticate操作では、管理IDおよび管理パスワードを使用して、ユーザーにかわってコンテキストを作成するという概念もサポートされます。この操作により、Oracle BPM Worklistにログインしたユーザーのパスワードを利用できない場合は、そのユーザー用のコンテキストを作成できます。

ワークフロー・コンテキストは、1回取得してすべてのリクエストで使用することをお薦めします。リクエストごとにワークフロー・コンテキストを取得すると、パフォーマンスが低下する場合があります。

レルムは、アイデンティティ構成からのアイデンティティ・サービス・コンテキストです。デフォルトの構成を使用する場合、レルム名はNULLにできます。

34.1.2.1 SOAP Webサービス使用時のワークフロー・サービスへのアイデンティティ伝播の制限

アイデンティティ伝播は複数のSOAP Webサービス間で認証されたアイデンティティのレプリケーションで、トランザクションを1回で完了するために使用されます。SOAP Webサービスでは、Webサービス・セキュリティもサポートされます。Webサービス・セキュリティが使用されている場合は、SOAP入力にヒューマン・ワークフロー・コンテキストが存在している必要はありません。Webサービス・セキュリティは、Oracle Enterprise Manager Fusion Middleware Controlから構成できます。


注意:

ヒューマン・ワークフローのSOAPクライアントは、Webサービスが保護されている場合に、Security Assertion Markup Language(SAML)トークンベースのアイデンティティ伝播を使用できるように拡張されています。


34.1.2.2 ユーザーにかわるヒューマン・ワークフロー・コンテキストの作成

タスク問合せサービスに対するauthenticateOnBehalfOf APIメソッドでは、管理ユーザーのユーザーIDとパスワードをリクエストで渡すことで、ユーザーのかわりにヒューマン・ワークフロー・コンテキストを作成できます。管理ユーザーにはworkflow.admin権限があります。この場合は、ユーザーのかわりにパスワードを使用して作成した場合と同様のコンテキストが作成されます。

これは、バックエンド・システムがワークフロー・タスクを操作し、一方でユーザーが自分のシステムで操作する環境で役立ちます。ワークフロー・サービスとの直接の相互作用はありません。システムは、ユーザーにかわってログインし、ユーザーのコンテキストを取得できます。


注意:

この機能は、システム操作に対してのみ使用することをお薦めします。これは、管理ユーザー・コンテキストを作成して、ユーザーのかわりに作成したヒューマン・ワークフロー・コンテキストを問い合せる必要があるためです。かわりにアイデンティティ伝播を使用すると、ユーザーはすでに認証されているため、クライアントはすでに認証されているそのユーザーのIWorkflowContextを取得できます。詳細は、第34.1.2.3項「JAASアプリケーションによって以前に認証されたユーザーのワークフロー・コンテキストの取得」を参照してください。


例34-2では、ユーザーjcooperのヒューマン・ワークフロー・コンテキストを作成します。

例34-2 ヒューマン・ワークフロー・コンテキストの作成

String adminUser = "...."
String adminPassword = "...."
String realm = "...."

IWorkflowContext adminCtx =
taskQueryService.authenticate(user,password.toCharArray(),realm);

IWorkflowContext behalfOfCtx =
 taskQueryService.authenticateOnBehalfOf(adminCtx,"jcooper");

34.1.2.3 JAASアプリケーションによって以前に認証されたユーザーのワークフロー・コンテキストの取得

クライアントでJAASアプリケーションによって以前に認証されたユーザーのワークフロー・コンテキストを取得する場合は、例34-3に示すアイデンティティ伝播を使用できます。

例34-3 アイデンティティ伝播

public IWorkflowContext getWorkflowContextForAuthenticatedUser() throws WorkflowException;

クライアントで適切なクライアント・タイプ用にアイデンティティ伝播が構成されている場合は、このAPIによって認証済のユーザーのワークフロー・コンテキストが返されます。クライアント・タイプがリモートの場合は、このメソッドでEnterprise JavaBeansアイデンティティ伝播が使用されます。クライアント・タイプがSOAPの場合は、このメソッドでSAMLトークン伝播が使用されます。

34.1.3 タスク・サービス

タスク・サービスにより、タスクに対するアクションを実行するための操作が公開されます。表34-4に、タスク・サービスの操作を示します。パッケージoracle.bpel.services.workflow.taskは、タスク・サービスに対応しています。

表34-4 タスク・サービスのメソッド

メソッド 説明

acquireTask

タスクを獲得します。

acquireTasks

一連のタスクを獲得します。

addAttachment

タスクに添付ファイルを追加します。

addComment

タスクにコメントを追加します。

createToDoTask

To Doタスクを作成します。

delegateTask

タスクを別のユーザーに委任します。現在の割当て先とタスク委任先ユーザーの両方が、タスクを表示して操作できます。

delegateTasks

タスクのリストを別のユーザーに委任します。現在の割当て先とタスクのリスト委任先ユーザーの両方が、タスクを表示して操作できます。

deleteTask

タスクの論理削除を実行します。データベース上にはタスクはまだ存在します。

deleteTasks

タスクのリストの論理削除を実行します。データベース上にはタスクはまだ存在します。

errorTask

タスクをエラーにします。通常、この操作はエラー割当て先が使用します。

escalateTask

タスクをエスカレートします。デフォルトでは、現行のユーザーのマネージャにエスカレートします。これはエスカレーション関数を使用して上書きできます。

escalateTasks

複数のタスクをまとめてエスカレートします。デフォルトでは、現行のユーザーのマネージャにエスカレートします。これはエスカレーション関数を使用して上書きできます。

getApprovers

タスクの前の承認者を取得します。

getFutureParticipants

タスクの今後の参加者を取得します。今後の参加者は、単純参加者を含むルーティング・スリップ形式で返されます(ルーティング・スリップを含む参加者ノードとパラレル・ノード)。

getUsersToRequestInfoForTask

情報リクエストのリクエストが可能なユーザーを取得します。

initiateTask

タスクを開始します。

mergeAndUpdateTask

タスクをマージおよび更新します。この操作を使用するのは、部分タスクに更新が必要な場合です。部分タスクとは、一部のタスク属性が存在しないタスクです。この部分タスクでは、次のタスク属性のみが解析されます。

  • タスク・ペイロード

  • コメント

  • タスクの状態

  • タスクの結果

overrideRoutingSlip

タスク・インスタンスのルーティング・スリップを新規ルーティング・スリップで上書きします。現行のタスク割当てはNULLになり、タスクの開始時には新規ルーティング・スリップが解析されます。

purgeTask

永続ストアからタスクを削除します。

purgeTasks

永続ストアからタスクのリストを削除します。

pushBackTask

タスクを前の承認者または当初の割当て先にプッシュバックします。当初の割当て先は、タスクの再割当てやエスカレートを実行している可能性があるため、承認者でなくてもかまいません。タスクが当初の割当て先にプッシュバックされるか、承認者にプッシュバックされるかは、Oracle Enterprise Manager Fusion Middleware Controlの「システムMBeanブラウザ」のプロパティ「PushbackAssignee」によって制御されます。

  1. 「SOAインフラストラクチャ」メニューから、「管理」「システムMBeanブラウザ」の順に選択します。

  2. 「アプリケーション定義のMBean」「oracle.as.soainfra.config」「サーバー: soa_server1」「WorkflowConfig」「human-workflow」の順に選択します。

  3. 「PushbackAssignee」をクリックして値を表示または変更します。

reassignTask

タスクを再割当てします。

reassignTasks

複数のタスクをまとめて再割当てします。

reinitiateTask

タスクを再開します。タスクを再開すると、前に完了したタスクが持ち越されるため、履歴、コメントおよび添付ファイルも新規タスクに持ち越されます。

releaseTask

前に獲得したタスクをリリースします。

releaseTasks

前に獲得した一連のタスクをリリースします。

removeAttachment

タスクの添付ファイルを削除します。

renewTask

タスクの期限を更新して有効期間を延長します。

requestInfoForTask

タスク情報をリクエストします。

requestInfoForTaskWithReapproval

再承認を伴うタスク情報をリクエストします。たとえば、jcooperがタスクを作成し、jsteinwfaulkが同じ順序でタスクを承認したとします。次の承認者であるcdickensjcooperに対して再承認を伴う情報のリクエストを送信すると、jcooperはリクエストされた情報を発行し、jsteinwfaulkcdickensより先にそのタスクを承認します。cdickensjsteinに対して再承認を伴う情報のリクエストを送信すると、jsteinはリクエストされた情報を発行し、wfaulkcdickensより先にそのタスクを承認します。

resumeTask

タスクを再開します。ワークフローの保留を解除するために、タスク所有者(またはBPMWorkflowSuspend権限を持つユーザー)のみが実行できる操作です。ヒューマン・ワークフローの再開後は、タスクに対するアクションを実行できます。

resumeTasks

一連のタスクを再開します。

routeTask

タスクを、レビューする必要のある次のユーザーに非定型の形式でルーティングできるようにします。ユーザーは、タスクをシリアル、パラレルまたは単一割当てでルーティングするように指定できます。タスクをルーティングできるのは、ヒューマン・ワークフローでタスクの非定型ルーティングが許可されている場合のみです。

skipCurrentAssignment

現在の割当てをスキップして次の割当てに移動するか、他に割当て先が存在しない場合は、直前の承認者が設定した結果を使用します。

submitInfoForTask

タスク情報を発行します。通常、このアクションは、必要なタスク更新を実行した後、または追加情報を含むコメントや添付ファイルを追加した後に実行します。

suspendTask

タスク所有者(またはBPMWorkflowSuspend権限を持つユーザー)に、ヒューマン・ワークフローの一時的な保留を許可します。この場合、タスクの有効期限とエスカレーションは、ワークフローが再開されるまで適用されません。一時停止されているタスクには、アクションを実行できません(再開または取消しを除く)。

suspendTasks

一連のタスクを一時停止します。

updateOutcomeOfTasks

一連のタスクの結果を更新します。

updatePriority

指定したタスクIDのタスクおよびそのサブタスクの優先度を更新します。UpdatePriorityTypeINCREMENTの場合、指定した優先度を1ずつ増分することにより、タスクが更新されます(つまり、タスクの優先度は高くなります)。UpdatePriorityTypeDECREMENTの場合、優先度を1ずつ減分することによりタスクが更新され(つまり、タスクの優先度は低くなります)、それ以外の場合には、指定した優先度で更新されます。

updatePriorityOfTasks

タスクの一括更新に使用します。優先度の更新が必要なタスクのリストを、このAPIに対してパラメータとして渡すことができます。タスクのリストの優先度が更新されます。これにより、タスクおよびそのサブタスクの優先度が更新されます。

updateTask

タスクを更新します。

updateTaskOutcome

タスクの結果を更新します。

updateTaskOutcomeAndRoute

タスクの結果を更新してタスクをルーティングします。タスクをルーティングすると、ユーザーはそのタスクを、レビューする必要のある次のユーザーに非定型の形式でルーティングできます。ユーザーは、タスクをシリアル、パラレルまたは単一割当てでルーティングするように指定できます。タスクをルーティングできるのは、ヒューマン・ワークフローでタスクの非定型ルーティングが許可されている場合のみです。

withdrawTask

タスク作成者は、ヒューマン・ワークフローを介してタスクを送る必要がなくなった場合、保留中のタスクを取り消すことができます。タスク所有者も、作成者のかわりにタスクを取り消すことができます。タスクが取り消されると、ビジネス・プロセスは、タスクの状態属性が「取消し済」に設定された状態でコールバックされます。

withdrawTasks

一連のタスクを取り消します。


詳細は、次を参照してください。

34.1.4 タスク問合せサービス

タスク問合せサービスでは、様々な検索基準(キーワード、カテゴリ、ステータス、ビジネス・プロセス、属性値、タスクの履歴情報など)に基づいてタスクを問い合せます。表34-5に、SOAPを介したサービスの使用方法など、タスク問合せサービスの操作を示します。パッケージoracle.bpel.services.workflow.queryは、タスク問合せサービスに対応しています。

表34-5 タスク問合せサービスのメソッド

メソッド 説明

authenticate

アイデンティティ認証サービスでユーザーを認証し、有効なIWorkflowContextオブジェクトを渡して戻します。

authenticateOnBehalfOf

必要に応じ、他のユーザーにかわって認証を行います。

countTasks

指定した問合せ基準に一致するタスクの数をカウントします。

countViewTasks

指定したビューの問合せ基準に一致するタスクの数をカウントします。

createContext

事前認証済のHTTPリクエストから有効なIWorkflowContextオブジェクトを作成します。

doesTaskExist

指定した問合せ基準に一致する既存タスクがあるかどうかを確認します。

doesViewTaskExist

指定したビューの問合せ基準に一致するタスクが存在するかどうかを確認します。

getWorkflowContext

指定のコンテキスト・トークンを使用してヒューマン・ワークフロー・コンテキストを取得します。

destroyWorkflowContext

不要になったヒューマン・ワークフロー・コンテキストをクリーン・アップします。通常、このメソッドはユーザーのログアウト時に使用されます。

getTaskDetailsById

タスクのtaskIdプロパティから特定のタスクの詳細を取得します。

getTaskDetailsByNumber

タスクのtask numberプロパティから特定のタスクの詳細を取得します。

getTaskHistory

指定タスクIDのタスク・バージョンのリストを取得します。

getTaskSequence

タイプが順序のタスクについて、IDがタスクIDのタスクのタスク順序ツリーを取得します。

getTaskVersionDetails

指定のタスクIDとバージョン番号について、特定のタスク・バージョン詳細を取得します。

getWorkflowContextForAuthenticatedUser

JAASアプリケーションによって認証されたユーザーのIWorkflowContextオブジェクトを取得します。これは、Enterprise JavaBeansアイデンティティ伝播またはSAMLトークン・アイデンティティ伝播とともに使用します。

queryAggregatedTasks

指定した問合せを実行し、問合せで返されたタスクの数を、指定した列ごとにグループ化して集計します。

queryTaskErrors

指定の述語に一致するタスク・エラー・オブジェクトのリストを返します。

queryTasks

指定のフィルタ条件に一致するタスクのリストを返します。タスクは、指定の順序付け条件(存在する場合)に従ってリストされます。基準に一致するタスクのリスト全体を返すか、クライアントがページング問合せを実行できます。その場合は、リストのうち指定した数のタスクのみが取得されます。フィルタ条件は次のとおりです。

  • assignmentFilter: タスクを割当て先または作成者に従ってフィルタします。割当てフィルタに可能な値は、次のとおりです。

    ADMIN: フィルタリングなし。割当てや作成者に関係なく全タスクが返されます。

    ALL: フィルタリングなし。割当てや作成者に関係なく全タスクが返されます。

    CREATOR: コンテキスト・ユーザーが作成者であるタスクが返されます。

    GROUP: コンテキスト・ユーザーがメンバーであるグループ、アプリケーション・ロールまたはユーザーのリストに割り当てられているタスクが返されます。

    MY: コンテキスト・ユーザーに排他的に割り当てられているタスクが返されます。

    MY_AND_GROUP: コンテキスト・ユーザー、またはコンテキスト・ユーザーがメンバーであるグループ、アプリケーション・ロールまたはユーザーのリストに、排他的に割り当てられているタスクが返されます。

    OWNER: コンテキスト・ユーザーがタスク所有者であるタスクが返されます。

    PREVIOUS: コンテキスト・ユーザーが以前に更新したタスクが返されます。

    REPORTEES: コンテキスト・ユーザーの報告先に割り当てられているタスクが返されます。

    REVIEWER: コンテキスト・ユーザーがレビューアであるタスクが返されます。

  • keywords: オプションの検索文字列です。この場合は、この文字列がタスクのタイトル、タスク識別キーまたはタスク・テキスト・マップ済属性(以前のフレックス・フィールド)に含まれているタスクのみが返されます。

  • predicate: オプションのoracle.bpel.services.workflow.repos.Predicateオブジェクトです。これによって、クライアントはSQLのような複雑な問合せ述語を指定できます。

queryViewAggregatedTasks

指定したビューに定義されているように問合せを実行し、そのビューに定義されているチャート・プロパティに従って選択したタスクを集計します。

queryViewTasks

指定のビューの基準に従ってタスクのリストが返されます。タスク・リストの全体またはページを返すことができます。クライアントは、ビューのコンテンツに対してフィルタと順序付け基準を追加指定できます。


詳細は、次を参照してください。

34.1.5 アイデンティティ・サービス

アイデンティティ・サービスは、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レイヤーが使用されます。

    • アイデンティティ・ストア

    • ポリシー・ストア

    • 資格証明ストア

    • フレームワーク

    詳細は、『Oracle Fusion Middlewareセキュリティ・ガイド』を参照してください。すべてのセキュリティ構成は、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 Fusion Middlewareセキュリティ・ガイド』

  • Oracle Identity Managementの詳細は『Oracle Fusion Middleware Oracle Identity Managementアプリケーション開発者ガイド』

  • OVDの詳細は『Oracle Fusion Middleware Oracle Virtual Directory管理者ガイド』

34.1.5.1 アイデンティティ・サービス・プロバイダ

図34-1に示すように、Oracle Identity Managementはリリース11g でサポートされている唯一のプロバイダです。

図34-1 アイデンティティ・サービス・プロバイダ

図34-1の説明が続きます
「図34-1 アイデンティティ・サービス・プロバイダ」の説明

34.1.5.1.1 カスタム・ユーザー・リポジトリ・プラグイン

リリース11g以降、アイデンティティ・サービスでカスタム・プロバイダ・プラグインはサポートされていません。アイデンティティのカスタマイズは、すべてアイデンティティ・ストアで実行されるようになりました。Oracle Fusion Middlewareは、ユーザーとロールのAPIを有効化してカスタム・アイデンティティ・ストアと対話するプロバイダをサポートします。詳細は、次のURLを参照してください。

http://www.oracle.com/technetwork/middleware/id-mgmt/overview/index.html

34.1.6 タスク・メタデータ・サービス

タスク・メタデータ・サービスにより、タスク関連のメタデータ情報を取得するための操作が公開されます。表34-6に、これらのメソッドを示します。パッケージoracle.bpel.services.workflow.metadataは、タスク・メタデータ・サービスに対応しています。

表34-6 タスク・メタデータ・サービスのメソッド

メソッド 説明

getTaskMetadataByNamespace

指定のタスク定義ネームスペースとコンポジット・バージョンを使用して、ヒューマン・タスク・サービス・コンポーネントが記述されたTaskMetadataオブジェクトを取得します。

getOutcomes

タスクについて許可されている結果を取得します。結果とその表示値が返されます。

getResourceBundleInfo

タスクのリソース・バンドル情報を取得します。リソース・バンドル情報には、バンドルの位置と名前が含まれます。

getRestrictedActions

特定のタスクに対する制限付きアクションを取得します。

getTaskAttributesForTaskDefinitions

標準タスク属性と、指定したタスク定義に共通のマップ済属性列が記述されたTaskAttributeオブジェクトのリストを取得します。

getTaskAttributesForTaskNamespaces

標準タスク属性と、指定したネームスペースで識別されたタスク定義に共通のマップ済属性列が記述されたTaskAttributeオブジェクトのリストを取得します。

getTaskAttributes

タスク・メッセージ属性を取得します。

getTaskAttributesForTaskDefinition

特定のタスク定義のメッセージ属性を取得します。

getTaskDefinition

タスクに関連するタスク定義を取得します。

getTaskDefinitionById

タスク定義IDによるタスク定義を取得します。

getTaskDefinitionOutcome

特定のタスク定義IDの結果を取得します。

getTaskDisplay

タスクのタスク表示を取得します。

getTaskVisibilityRules

タスク表示ルールを取得します。

getTaskDisplayRegion

タスクのタスク表示リージョンを取得します。

getVersionTrackedAttrs

変更された場合にタスク・バージョンが作成されるタスク属性を取得します。

listTaskMetadata

システム内のタスク定義をリストします。


詳細は、『Oracle Fusion Middleware Workflow Services Java API Reference for Oracle BPEL Process Manager』を参照してください。

34.1.7 ユーザー・メタデータ・サービス

ユーザー・メタデータ・サービスは、個々のユーザーおよびグループに固有のメタデータを管理するためのメソッドを提供します。これは、ユーザー・ワークリストのプリファレンスの取得と設定、ユーザーのカスタム・ビューの管理、およびユーザーとグループに対するヒューマン・ワークフロー・ルールの管理に使用されます。

ユーザー・メタデータ・サービスのほとんどのメソッドの場合、認証済ユーザーは独自のユーザー・メタデータを問い合せて更新できます。ただし、他のユーザーに属するメタデータは更新できません。

グループ・メタデータ(グループに対するヒューマン・ワークフロー・ルールなど)の場合、グループのメタデータを問い合せて更新できるのは、そのグループの所有者として指定されているユーザー(またはworkflow.admin権限ユーザー)のみです。ただし、workflow.admin権限があるユーザーは、任意のユーザーまたはグループのメタデータに対して問合せおよび更新を実行できます。

表34-7に、ユーザー・メタデータ・サービスのメソッドを示します。パッケージoracle.bpel.services.workflow.userは、ユーザー・メタデータ・サービスに対応しています。

表34-7 ユーザー・メタデータ・サービスのメソッド

メソッド 説明

createRule

新規ルールを作成します。

decreaseRulePriority

ルールの優先度を1つ低くします。このルールが最低優先度の場合、このメソッドでは何も実行されません。

deleteRule

ルールを削除します。

getVacationInfo

ユーザーに対してタスクを割り当てることができない日付の範囲(設定されている場合)を取得します。

getRuleDetail

特定のヒューマン・ワークフロー・ルールの詳細を取得します。

getRuleList

特定のユーザーまたはグループに対するルールのリストを取得します。

updateRule

既存のルールを更新します。

increaseRulePriority

ルールの優先度を1つ高くします。ユーザーまたはグループに対するルールは、優先度の順序付きリストで保守されます。高優先度のルール(リストの先頭に近いルール)は、低優先度のルールよりも先に実行されます。このルールが最高優先度の場合、このメソッドでは何も実行されません。

getUserTaskViewList

ユーザーが所有するユーザー・タスク・ビューのリストを取得します。

getGrantedTaskViewList

ユーザーに他のユーザーから権限付与されたユーザー・タスク・ビューのリストを取得します。ユーザーは付与されたビューを使用してタスクのリストを問合せできますが、ビュー定義は更新できません。

getStandardTaskViewList

ヒューマン・ワークフロー・サービスに付属している標準タスク・ビューのリストを取得します。このビューはすべてのユーザーが使用できます。

getUserTaskViewDetails

単一ビューの詳細を取得します。

createUserTaskView

新規のユーザー・タスク・ビューを作成します。

updateUserTaskView

既存のユーザー・タスク・ビューを更新します。

deleteUserTaskView

ユーザー・タスク・ビューを削除します。

updateGrantedTaskView

このユーザーに対する他のユーザーからのビュー権限付与の詳細を更新します。更新は、ビュー権限付与の非表示または非表示解除(非表示にしたビューは、Oracle BPM Worklistのメイン受信ボックス・ページに表示されません)、および権限を付与されたユーザーに表示されるビュー名および説明の変更に制限されています。

getUserPreferences

ユーザーのユーザー・プリファレンスのリストを取得します。ユーザー・プリファレンスは、単純な名前/値ペアの文字列です。ユーザー・プリファレンスはユーザーごとにプライベートです(ただし、workflow.admin権限があるユーザーも問い合せて更新できます)。

setUserPreferences

ユーザーのユーザー・プリファレンス値を設定します。前に格納されていて新規のユーザー・プリファレンス・リストに含まれていないプリファレンスは削除されます。

getPublicPreferences

ユーザーのパブリック・プリファレンスのリストを取得します。パブリック・プリファレンスは、ユーザー・プリファレンスに類似していますが、すべてのユーザーが問合せできます。ただし、パブリック・プリファレンスを更新できるのは、そのプリファレンスを所有しているユーザー、またはworkflow.admin権限のあるユーザーのみです。パブリック・プリファレンスは、アプリケーション単位のプリファレンスを格納する場合に役立ちます(プリファレンスはMyAppPrefsなどのダミー・ユーザー名で格納できます)。

setPublicPreferences

ユーザーのパブリック・プリファレンスを設定します。

setVacationInfo

ユーザーに対してタスクを割り当てることができない日付の範囲を設定します(Dynamic Assignment Functionでは、休暇中のユーザーにタスクが割り当てられることはありません)。

getStandardTaskViewDetails

viewIdで識別される特定の標準ビューに関する全詳細を取得します。


詳細は、次を参照してください。

  • ルール構成ページとユーザー・プリファレンス・ページの詳細は第32章「Oracle BPM Worklistの使用」

  • いくつかのAPIの例を示すサンプルのworkflow-118-JavaSamples

  • 『Oracle Fusion Middleware Workflow Services Java API Reference for Oracle BPEL Process Manager』

34.1.8 タスク・レポート・サービス

タスク・レポート・サービスは、レポートを実行してその結果を受け取ります。表34-8に、その方法を示します。パッケージoracle.bpel.services.workflow.reportは、タスク・レポート・サービスに対応しています。表34-8に示す標準レポートは、インストールに含まれています。

表34-8 タスク・レポート・サービス

レポート 説明

不参加タスク・レポート

このレポートでは、ユーザーのグループまたは報告先のグループに割り当てられたタスクの中で、まだ獲得されていないために注意が必要なタスクが分析されます。

タスクの優先度レポート

このレポートでは、ユーザー、報告先またはそのグループに割り当てられたタスクの数が優先度別に分析されます。

タスクのサイクル・タイム・レポート

このレポートでは、ユーザーのグループまたは報告先のグループに基づいて、タスクの割当てから完了までの所要時間が分析されます。

タスクの生産性レポート

このレポートでは、ユーザー、報告先またはそのグループについて、特定期間中に割り当てられたタスク数と完了したタスク数が分析されます。

タスク時間分布レポート

このレポートでは、特定期間中に、特定のユーザー、ユーザーのグループまたは報告先がタスクを完了するのに要した時間が分析されます。


34.1.9 ランタイム構成サービス

ランタイム構成サービスは、タスク・サービスのランタイム環境で使用されるメタデータの管理メソッドを提供します。これは、主にタスク・ペイロード・マップ済属性マッピングとタスク詳細の表示に使用する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を取得するためのメソッド

表34-9に、ランタイム構成サービスのメソッドを示します。パッケージoracle.bpel.services.workflow.runtimeconfigは、ランタイム構成サービスに対応しています。

表34-9 ランタイム構成サービス

メソッド 説明

CreateAttributeLabel

特定のタスク・マップ済属性を表す新規の属性ラベルを作成します。

createPayloadMapping

属性ラベルとタスク・ペイロード・フィールド間の新規マッピングを作成します。

DeleteAttributeLabel

既存の属性ラベルを削除します。

deletePayloadMapping

既存のペイロード・マッピングを削除します。

getAttributeLabelUsages

ラベルが現在使用されているマッピング(存在する場合)の属性ラベル(すべての属性ラベル、または特定のタイプの属性ラベル)のリストを取得します。

getGroupDynamicAssignmentFunctions

このサーバーに実装されているグループを選択できるDynamic Assignment Functionのリストを返します。

getTaskDisplayInfo

具体的なタスク定義のタスク・インスタンス表示に使用されるURIに関連する情報を取得します。

getTaskStatus

特定のタスク定義やコンポジット・インスタンスに対応するタスク・インスタンスのステータスを取得します。

getUserDynamicAssignmentFunctions

このサーバーに実装されているユーザーを選択できるDynamic Assignment Functionのリストを返します。

GetWorkflowPayloadMappings

特定のヒューマン・ワークフロー定義に関するすべてのマップ済属性マッピングのリストを取得します。

setTaskDisplayInfo

具体的なタスク定義のタスク・インスタンス表示に使用されるURIに関連する情報を設定します。

updateAttributeLabel

既存の属性ラベルを更新します。


詳細は、次を参照してください。

34.1.9.1 属性ラベルの国際化

属性ラベルは、タスク・マップ済属性にわかりやすいラベルを添付するメソッドを提供します。ユーザーのロケールに適した言語に翻訳された属性ラベルを表示することが望ましい場合があります。

カスタム・リソース・バンドルを使用するには、ワークフロー構成パラメータ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を使用して指定した属性ラベルの名前がかわりに使用されます。

34.1.10 エビデンス・ストア・サービスとデジタル署名

エビデンス・ストア・サービスは、デジタル署名の保管とデジタル署名されたヒューマン・ワークフローの否認防止に使用します。デジタル署名は、メッセージ送信者や文書署名者のアイデンティティを認証する電子署名です。これにより、送られたメッセージや文書の元の内容が変更されていないことが保証されます。デジタル署名は転送可能で、他人に模倣されることがなく、自動的にタイムスタンプが付けられます。署名されたオリジナルのメッセージが届いたことを証明できるため、送信者が後で否認することはできません。デジタル署名は、ヒューマン・ワークフロー・ドキュメントが次の状態であることを保証します。

  • 認証済であること

  • 他のエンティティで捏造されていないこと

  • 変更されていないこと

  • 送信者が否認できないこと

暗号ベースのデジタル署名は、公開鍵のアルゴリズムによって送信者の秘密鍵付のメッセージが署名されたときに作成されます。

設計時、タスクに対して署名は有効です。Oracle BPM Worklistの実行時には、ユーザーがタスクを承認または却下すると、Webブラウザでは次の動作が発生します。

  • 署名に使用する秘密鍵の選択をユーザーに要求します。

  • 秘密鍵とOracle BPM Worklistから提供されたタスク・コンテンツを使用してデジタル署名を生成します。

図34-2に例を示します。

図34-2 デジタル署名と証明書

図34-2の説明が続きます
「図34-2 デジタル署名と証明書」の説明


注意:

  • この証明書は、Personal Information Exchange Syntax Standard(PFX)ファイルを指しています。このファイルには証明書と秘密鍵が含まれており、シンプルなテキスト・パスワードで保護されています。PFXでは、ユーザーの秘密鍵、証明書、その他のシークレットなどを格納またはトランスポートするための移植形式が指定されます。

  • 署名は証明書の公開鍵を介して検証できるため、データの署名には、その証明書の公開鍵に対応した秘密鍵の所有で十分です。ただし、証明書のユーザー名と証明書を更新するユーザーを関連付けることはありません。たとえば、ユーザーjsteinがユーザーcdickensの秘密鍵を所有する場合、jsteinはその秘密鍵を使用して署名できます。


次のデジタル署名の機能をサポートします。

  • X.509証明書によるPKCS7署名

  • ブラウザベースの、添付ファイルなしデジタル署名付コンテンツ

34.1.10.1 前提条件

デジタル署名と証明書を使用するための前提条件は、次のとおりです。

  • Oracle BPM Worklistのユーザーは、証明書を持っている必要があります。

  • 管理者は、証明書を信頼する必要があるCA、および対応するCRL URLを指定する必要があります。ユーザーは、これらのCAが発行した証明書のみをアップロードする必要があります。そのためには、Oracle Enterprise Manager Fusion Middleware Controlの「システムMBeanブラウザ」を編集します。

    1. Oracle Enterprise Manager Fusion Middleware Controlにログインします。

    2. ナビゲータで、「SOA」フォルダを開きます。

    3. 「soa-infra」を右クリックし、「管理」「システムMBeanブラウザ」の順に選択します。

      ページの右側に「システムMBeanブラウザ」が表示されます。

    4. 「アプリケーション定義のMBean」「oracle.as.soainfra.config」「サーバー: server_name「WorkflowConfig」「human-workflow」の順に開きます。

    5. ページの右側にある「操作」タブをクリックします。

    6. 「addTrustedCA」をクリックします。

    7. 「caName」「caURL」に値を指定します。これは、信頼するチェーンの各証明書に対して実行する必要があります。たとえば、表34-10に示すように、各起動に対して値を指定します。

      表34-10 caNameとcaURLの値

      caName caURL

      CN = Intg, OU =AppServ, O =Oracle, C = US

      http://www.oracle.com/Integration%20CRL%20Data.crl

      CN = Intg1, OU =AppServ, O =Oracle, C = US

      http://www.oracleindia.in.com/Integration%20In.crl

      CN = Intg2, OU =AppServ, O =Oracle, C = US

      http://www.oracle.us.com/integration.crl


    8. 「起動」をクリックします。

34.1.10.2 インタフェースとメソッド

表34-11から表34-14では、エビデンス・ストア・サービスのメソッドについて説明します。パッケージoracle.bpel.services.security.evidenceは、エビデンス・サービスに対応しています。

表34-11 ITaskEvidenceServiceインタフェース

メソッド 説明

createEvidence

エビデンスを作成し、否認防止のためにリポジトリに保管します。

getEvidence

特定の条件に一致するエビデンスのリストを取得します。結果は、サービスを問い合せるユーザーに関連付けられている権限によって異なります。ユーザーにworkflow.admin.evidenceStore権限(権限の付与方法を詳説した場所を指します)が付与されている場合は、一致するエビデンスはすべて参照可能です。それ以外の場合は、ユーザーが作成したエビデンスのみ参照可能です。

uploadCertificate

後で署名検証に使用する証明書をアップロードします。これが、特定の証明書を使用してエビデンスを作成するための前提条件です。ユーザーがアップロードできるのは、自分の証明書のみです。

updateEvidence

ステータスのCRL検証部分を更新します。これには、検証時間、ステータス、エラー・メッセージ(ある場合)が含まれます。

validateEvidenceSignature

エビデンス署名を検証します。基本的にエビデンスの否認防止チェックを実行します。署名が検証されると、trueの値が返されます。それ以外の場合は、falseが返されます。


表34-12 Evidenceインタフェース

メソッド 説明

getCertificate

このエビデンスの署名に使用する証明書を取得します。

getCreateDate

エビデンスの作成日付を取得します。

getErrorMessage

CRL検証に関連するエラー・メッセージを取得します。

getEvidenceId

エビデンスに関連する一意の識別子を取得します。

getPlainText

このエビデンスの一部として署名されたコンテンツを取得します。

getPolicy

エビデンスの署名ポリシーを取得します。PASSWORDまたはCERTIFICATEのいずれかです。

getSignature

エビデンスの署名を取得します。

getSignedDate

署名が作成された日付を取得します。

getStatus

CRL検証ステータスを取得します。これは、次の中のいずれか1つです:

  • AVAILABLE: エビデンスはCRL検証に使用できます。

  • FAILURE: CRL検証に失敗しました。

  • SUCCESS: CRL検証に成功しました。

  • UNAVAILABLE: CRLデータをフェッチできませんでした。

  • WAIT: CRL検証の処理中です。

getTaskId

このエビデンスが関連付けられているタスクの一意の識別子を取得します。

getTaskNumber

このエビデンスが関連付けられているタスクのタスク番号を取得します。

getTaskPriority

このエビデンスが関連付けられているタスクのタスク優先度を取得します。

getTaskStatus

このエビデンスが関連付けられているタスクのタスク・ステータスを取得します。

getTaskSubStatus

このエビデンスが関連付けられているタスクのタスク・サブステータスを取得します。

getTaskTitle

このエビデンスが関連付けられているタスクのタイトルを取得します。

getTaskVersion

このエビデンスが関連付けられているタスクのバージョンを取得します。

getVerifiedDate

使用した証明書のCRL検証が実行された日付を取得します。

getWorkflowType

このエビデンスが関連付けられているタスクのワークフロー・タイプを取得します。通常はBPELWFです。


表34-13 Certificateインタフェース

メソッド 説明

getCA

証明書発行者の識別名(DN)を取得します。

getCertificate

インタフェースによって抽象化された証明書オブジェクトを取得します。

getID

証明書のシリアル・ナンバーを取得します。

getIdentityContext

この証明書をアップロードするユーザーに関連付けられているアイデンティティ・コンテキストを取得します。

getUserName

この証明書に関連付けられているユーザーの名前を取得します。

isValid

証明書がまだ有効であれば、trueを返します。


表34-14 Policy TypeとWorkflow Typeインタフェース

メソッド 説明

fromValue

文字列表現からオブジェクトを構成します。

value

このオブジェクトの文字列表現を返します。


詳細は、次を参照してください。

34.1.11 タスク・インスタンス属性

タスクは、ユーザーによる実行が必要な作業です。タスクを作成する場合は、そのタスクに参加して操作するユーザーを割り当てます。表34-15に、アプリケーションでよく使用され、解析されるタスク属性を示します。

表34-15 タスク属性

タスク属性名 説明

task/applicationContext

タスクに関連付けられたアプリケーション・ロール(割当て先、所有者など)が属するアプリケーション。

task/category

(オプション)タスクのカテゴリ。

task/creator

タスクの作成者の名前。

task/dueDate

タスクの期日。これはTo Doタスクで使用されます。

task/identificationKey

(オプション)タスクに対するカスタムの一意識別子。これは、標準のタスクIDとタスク番号に対する追加の一意識別子として設定できます。このキーを使用すると、タスクが作成されたビジネス・オブジェクトの識別子に基づいて、タスクを取得できます。

task/identityContext

ユーザーおよびグループがシードされているアイデンティティ・レルム。単一レルム環境では、デフォルトのレルムがデフォルト値になります。

task/ownerGroup

タスク・インスタンスを所有するグループ(ある場合)。タスク所有者は、アプリケーション・ロール、ユーザーまたはグループのいずれかです。タスクの所有者がグループの場合は、このフィールドが設定されます。

task/ownerRole

タスク・インスタンスを所有しているアプリケーション・ロール(ある場合)。タスク所有者は、アプリケーション・ロール、ユーザーまたはグループのいずれかです。タスクの所有者がアプリケーション・ロールの場合は、このフィールドが設定されます。

task/ownerUser

タスク・インスタンスを所有するユーザー(ある場合)。タスク所有者は、アプリケーション・ロール、ユーザーまたはグループのいずれかです。タスクの所有者がユーザーの場合は、このフィールドが設定されます。

task/payload

XMLとして取得されるタスク・ペイロード。

task/percentageComplete

タスクの完了パーセンテージ。これはTo Doタスクで使用されます。

task/priority

タスクの優先度を定義する整数。数値が低いほど優先度が高くなります。通常は、1から5の数値が使用されます。

task/startDate

タスクの開始日。これはTo Doタスクで使用されます。

task/subCategory

(オプション)タスクのサブカテゴリ。

task/taskDefinitionId

タスクをタスク・メタデータにバインドするタスク定義ID。タスクの開始時は、compositeDN/componentName文字列、または.taskファイルのtargetNamespaceのいずれかです。後者を使用する場合は、targetNamespaceに一致するアクティブなバージョンが使用されます。

task/taskDisplayUrl

タスク詳細の表示に使用するURL。

task/title

タスクのタイトル。


表34-16に、プロセス・メタデータ情報を取得する属性を示します。

表34-16 プロセス・メタデータ情報を取得する属性

属性 説明

task/processInfo/domain

タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットが属するドメイン。

task/sca/applicationName

デプロイされるアプリケーション。

task/sca/componentName

タスク・インスタンスを定義するタスク・コンポーネントの名前。

task/sca/compositeDN

タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットの特定のデプロイメントの一意名。

task/sca/compositeInstanceId

コンポジット・インスタンスID。

task/sca/compositeName

タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットの名前。

task/sca/compositeVersion

タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットのバージョン。


表34-17に、添付ファイル関連の属性を示します。

表34-17 添付ファイル関連の属性

属性 説明

task/attachment/content

添付ファイルのコンテンツ。

task/attachment/mimeType

添付ファイルのMultipurpose Internet Mail Extension(MIME)タイプ。

task/attachment/name

添付ファイルの名前。

task/attachment/updatedBy

添付ファイルを更新したユーザー。

task/attachment/updatedDate

添付ファイルの更新日付。

task/attachment/URI

URI(添付ファイルがURIベースの場合)。


表34-18に、コメント関連の属性を示します。

表34-18 コメント関連の属性

属性 説明

task/userComment/comment

ユーザーのコメント。

task/userComment/updatedBy

コメントを追加したユーザー。

task/userComment/updatedDate

コメントが追加された日付。


表34-19に、ワークフロー・サービス・システムで操作される属性を示します。

表34-19 ワークフロー・サービス・システムで操作される属性

属性 説明

task/systemAttributes/acquiredBy

グループ、アプリケーション・ロールまたは複数のユーザーに割り当てられたタスクが、ユーザーによって申告された場合、このフィールドはタスクを申告したユーザーの名前に設定されます。

task/systemAttributes/approvers

タスクに対してカスタム・アクションを実行したユーザーのID。

task/systemAttributes/assignedDate

このタスクが割り当てられた日付。

task/systemAttributes/assignees

現在のタスク割当て先(ユーザー、グループまたはアプリケーション・ロール)。

task/systemAttributes/createdDate

タスク・インスタンスが作成された日付。

task/systemAttributes/customActions

タスクに対して実行できるカスタム・アクション。

task/systemAttributes/endDate

タスクの終了日。これはTo Doタスクで使用されます。

task/systemAttributes/expirationDate

タスク・インスタンスの有効期限の日付。

task/systemAttributes/fromUser

タスクを前に操作したユーザー。

task/systemAttributes/hasSubTasks

trueの場合は、サブタスクがあります。

task/systemAttributes/isGroup

trueの場合は、タスクがグループに割り当てられています。

task/systemAttributes/originalAssigneeUser

ユーザーが別のユーザーにタスクを委任している場合、このフィールドには、タスクを委任したユーザーの名前が移入されます。

task/systemAttributes/outcome

タスクの結果(承認済、却下済など)。このフィールドは、完了したタスク・インスタンスにのみ設定されます。

task/systemAttributes/parentTaskId

これは、再開されたタスクにのみ設定されます(再開される前のタスクのタスクID)。

task/systemAttributes/parentTaskVersion

これは、サブタスクにのみ設定されます。親タスクのバージョンを参照します。

task/systemAttributes/participantName

Oracle JDeveloperからモデリングされた参加者の論理名。

task/systemAttributes/reviewers

タスクのレビューア。これは、ユーザー、グループまたはアプリケーション・ロールです。

task/systemAttributes/rootTaskId

ルート・タスクのID。これは、ルート・タスクのタスクIDと同じです。

task/systemAttributes/stage

実行中のステージ名。

task/systemAttributes/state

タスク・インスタンスの現在の状態。

task/systemAttributes/substate

タスクの現在のサブ状態。

task/systemAttributes/subTaskGroupInstanceId

サブタスクに設定されている一意のID。これと同じIDが親タスクのtaskGroupInstanceIdに設定されます。これは、どの時点でどのサブタスクが作成されたかを識別するために必要です。

task/systemAttributes/systemActions

タスクに対して実行できるシステム・アクション(再割当て、エスカレートなど)。

task/systemAttributes/taskDefinitionName

タスク・インスタンスを定義するタスク・コンポーネントの名前。

task/systemAttributes/taskGroupId

直接の親タスクのID。サブタスクのみが設定されます。

task/systemAttributes/taskGroupInstanceId

親タスクに設定される一意のID。これと同じIDがサブタスクのsubTaskGroupInstanceIdに設定されます。これは、どの時点でどのサブタスクが作成されたかを識別するために必要です。

task/systemAttributes/taskId

タスクの一意のID。

task/systemAttributes/taskNamespace

このタスク・インスタンスを定義するタスク・コンポーネントの全バージョンを一意に定義するネームスペース。同じタスク・コンポーネントの異なるバージョンに同じネームスペースを指定することは可能ですが、異なる2つのタスク・コンポーネントに同じネームスペースを指定することはできません。

task/systemAttributes/taskNumber

タスク・インスタンスを一意に識別する整数。

task/systemAttributes/updatedBy

タスクを最後に更新したユーザー。

task/systemAttributes/updatedDate

このインスタンスが最後に更新された日付。

task/systemAttributes/version

タスクのバージョン。

task/systemAttributes/versionReason

バージョンが作成された理由。

task/systemAttributes/workflowPattern

実行されるパターン(パラレル、シリアル、FYI、単一など)。


表34-20にマップ済属性を示します。

表34-20 マップ済属性

属性 説明

task/systemMessageAttributes/*

マップ済属性です。


34.2 ヒューマン・ワークフローからの通知

通知は、タスクの状態が変化したことをユーザーに警告するために送信されます。通知は、電子メール、電話ボイス・メッセージ、インスタント・メッセージ(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の構成に関する詳細は、次を参照してください。

34.2.1 通知のコンテンツ

各電子メール通知には、次のパートを含めることができます。

  • 通知メッセージ

  • Oracle BPM WorklistからのHTMLコンテンツ

    これは、タスクに関するOracle BPM Worklistの読取り専用ビューです。Oracle BPM Worklistからのコンテンツを含むように電子メール通知を構成する方法は、第30.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リンク

例34-4に、hwf:getNotificationPropertyhwf:getTaskResourceBundleを使用する方法を示します。

例34-4 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

34.2.2 エラー・メッセージのサポート

ヒューマン・ワークフロー電子メール通知レイヤーは、介入が必要なエラーが発生した場合に管理者に警告するように、自動的に構成されます。エラー通知とエラー・レスポンス・メッセージは維持されます。

メッセージは、Oracle Enterprise Manager Fusion Middleware Controlで表示できます。

メッセージの表示の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

34.2.3 信頼性のサポート

Oracle User Messaging Serviceと連携するヒューマン・ワークフロー電子メール通知レイヤーでは、次の信頼性をサポートしています。

  • 次の場合、メッセージは紛失しません。

    • ヒューマン・ワークフローからのメッセージ受信を確認した後で、ヒューマン・ワークフロー電子メール通知レイヤーで障害が発生した場合。

    • Oracle User Messaging Serviceがヒューマン・ワークフローからのメッセージ受信を確認する前に、ヒューマン・ワークフロー電子メール通知レイヤーとOracle User Messaging Serviceの両方で障害が発生した場合。

    • Oracle User Messaging Serviceが停止した場合。メッセージ配信は成功するまで再試行されます。

    • 通知チャネルが停止した場合。

  • 通知が配信できない場合は3回再試行され、そのアドレスが無効としてマークされます。また、そのアドレスは不正アドレス・リストに追加されます。必要な場合は、Oracle Enterprise Manager Fusion Middleware Controlで不正アドレス・リストからアドレスを手動で削除できます。発信通知は、アドレスが訂正されるまで再送信されません。不適切に識別されるのを防ぐために、アドレスが無効とマークされるのは約1時間のみです。この時間内に、新規の通知が送信されることはありません。

  • スパム・メール発信者として識別されているアドレスからの受信通知レスポンスは無視されます。

  • 受信通知メッセージは維持されます。

  • 通知配信失敗を示す受信通知レスポンス(ホスト不明メールなど)は無視されません。かわりに修正処理(不正アドレス・リストの更新など)が自動的に実行されます。

  • 受信通知レスポンスは、通知ステータスを示す確認が送信者に送られるように構成できます。

  • 受信通知レスポンスの検証は、受信通知メッセージと送信通知メッセージを関連付けて実行されます。

通知の詳細は、次を参照してください。

34.2.4 Oracle Human Workflow通知サービスの管理

管理者は、次の管理タスクをOracle Enterprise Manager Fusion Middleware Controlから実行できます。

  • 失敗した通知や誤りのある受信通知レスポンスを表示し、修正処理を実行します。

  • 送信通知とアドレスの削除、再送信、編集などの修正処理を実行します。

  • 受信通知レスポンスについて、不正な電子メールを表示して電子メール・アドレスをブロックします。

  • 不正な電子メール・アドレスのリストを管理します。

  • 失敗した通知のランタイム・データにアクセスします。このデータは、不要になった場合消去できます。

詳細は、Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイドを参照してください。

34.2.5 通知チャネル・プリファレンスの構成方法

通知チャネル・プリファレンスを構成する手順は、次のとおりです。

  1. Oracle Jdeveloperで、電子メールおよび他のチャネル用の通知サービスを構成します。詳細は、第17章「通知サービスの使用」を参照してください。

  2. Oracle JDeveloperで、ヒューマン・タスク・エディタを開きます。

    タスク通知は、ヒューマン・タスク・エディタでタスクを作成するときに構成できます。異なるアクションについて、様々なタイプの参加者に通知を送信できます。

    タスク通知が送信可能なアクションについては、第29.8.1項「受信者へのタスク・ステータス変更の通知方法」を参照してください。

    通知は、様々な範囲でタスクに関与するユーザーに送信できます。これらのユーザーについては、第29.8.1項「受信者へのタスク・ステータス変更の通知方法」を参照してください。

    タスクがグループに割り当てられていて、そのグループに通知エンドポイントが設定されていない場合は、グループの各ユーザーに通知が送信されます。

    詳細は、次を参照してください。

  3. Oracle Enterprise Manager Fusion Middleware Controlのメッセージング・サーバー・ページから、適切なチャネル(電子メールなど)を構成します。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

  4. Oracle Enterprise Manager Fusion Middleware Controlの「ワークフロー通知プロパティ」ページから、すべてのチャネルまたは電子メールに、通知サービスの通知モード・パラメータを構成します。

    この値は、デフォルトで「なし」に設定されています。これは、通知が送信されないことを意味します。可能な値は次のとおりです。

    • ALL

      電子メール、IM、SMSおよびボイスのチャネルを構成し、任意のチャネルを通じて通知を送信します。

    • EMAIL

      通知メッセージ送信に、電子メール・チャネルのみが構成されます。

    • NONE

      通知メッセージの送信用にどのチャネルも構成されません。これがデフォルトの設定です。

34.2.6 異なる言語による通知メッセージの構成方法

通知は、複数のソースから生成され多様に国際化された4つのタイプのデータで構成されます。ただし、国際化されたすべての通知のロケールは、アイデンティティ・サービスのBPMUserオブジェクトから取得されます。

  • パッケージ済の文字列(アクション・リンク、コメント、Oracle BPM Worklistなど)

    これらの文字列は、次のパッケージの一部として製品に国際化されています。

    oracle.bpel.services.workflow.resource
    

    ユーザーのロケールは適切なメッセージの取得に使用します。

  • タスク詳細添付

    ユーザーのロケールはタスク詳細HTMLコンテンツの取得に使用します。

  • タスクの結果文字列(承認、却下など)

    ヒューマン・タスク・エディタの「詳細設定」セクションでタスク定義がモデリングされると、結果のリソース・バンドルが指定されます。リソース・バンドルの各結果のキーは結果の名前そのものです。

  • 通知メッセージ

様々な言語で通知メッセージを構成する手順は、次のとおりです。

  1. 次の方法のいずれかを使用して、通知コンテンツのメッセージを国際化します。

    1. タスク定義の際に指定したリソース・バンドル中の値を使用するには、次のXPath拡張関数を使用します。

      hwf:getTaskResourceBundleString(taskId, key, locale?)
      

      この関数は、タスク定義で指定されたリソース・バンドルから、国際化された文字列を返します。

      通知受信者ロケールは、次の関数によって取得できます。

      hwf:getNotificationProperty('locale')
      

      通知に対応するタスクIDは、次の関数によって取得できます。

      hwf:getNotificationProperty('taskId')
      
    2. 異なるリソース・バンドルが使用されている場合は、次のXPath拡張関数を使用してローカライズされたメッセージを取得します。

      orcl:get-localized-string()
      

詳細は、第29.6.2項「多言語設定の指定方法」を参照してください。

34.2.7 アクション可能なメッセージの送信方法

アクション可能なメッセージの送信方法は数種類あります。この項では、手順の概要について説明します。


注意:

タスクに対してデジタル署名が有効な場合、アクション可能な電子メールは実行時に送信されません。設計時にアクション可能な電子メールが有効化された場合も同様です。


34.2.7.1 ヒューマン・タスクのアクション可能な電子メールの送信方法

アクション可能な電子メールを使用できるようにタスクを設定している場合は、電子メールを介してタスク・アクションを実行できます(同じアクションをOracle BPM Worklistからも実行できます)。アクション可能な電子メール・アカウントは、タスク・アクション関連の電子メールを受信して処理します。

ヒューマン・タスクのアクション可能な電子メールを送信する手順は、次のとおりです。

  1. ヒューマン・タスク・エディタの「通知」セクションの「詳細」タブで、「通知をアクション可能にする」を選択して、電子メール通知をアクション可能にします。このアクションにより、電子メールを介してタスク・アクションを実行できます。

    通知がアクション可能な場合、電子メールにはカスタムの結果ごとにリンクが含まれます。

  2. 通知メッセージでタスクの添付ファイルを送信するには、「電子メール通知によるタスクの添付ファイルの送信」を選択します。

    アクション可能な電子メールが到着した後に、次のタスクを実行します。

  3. 「承認」リンクをクリックし、新規の電子メール・ウィンドウを起動します。このウィンドウには、承認データが表示されます。図34-3に詳細を示します。

    図34-3 アクション可能な通知

    図34-3の説明が続きます
    「図34-3 アクション可能な通知」の説明

  4. 承認メールの「コメント」セクションにコメントを追加します。例:

    This contract has been approved based on the attached information.
    
  5. 図34-4に示すように、必要に応じて添付ファイルを追加します。

    図34-4 アクション可能な電子メールへの添付ファイル

    図34-4の説明が続きます
    「図34-4 アクション可能な電子メールへの添付ファイル」の説明

  6. この電子メールの件名や本文など、何も変更しないでください。NID部分文字列を含むコンテンツを変更すると、電子メールは処理されません。

  7. 「送信」をクリックします。

  8. Oracle Enterprise Manager Fusion Middleware Controlの「Oracle User Messaging Service」セクションから、受信サーバー、送信メール・サーバー、送信ユーザー名とパスワードなどのプロパティを設定します。

  9. Oracle Enterprise Manager Fusion Middleware Controlの「ワークフロー通知プロパティ」ページで、通知モードを「すべて」または「電子メール」に設定します。

  10. Oracle Enterprise Manager Fusion Middleware Controlの「ワークフロー・タスク・サービス・プロパティ」ページで、アクション可能な電子メールのアカウント名を設定します。

Oracle Enterprise Manager Fusion Middleware Controlの「Oracle User Messaging Service」セクション、「ワークフロー通知プロパティ」ページおよび「ワークフロー・タスク・サービス・プロパティ」ページの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

34.2.8 インバウンドおよびアウトバウンド添付ファイルの送信方法

「添付ファイルを含む」フラグが選択されている場合は、電子メールのみが送信されます。電子メールには、タスクのすべての添付ファイルが電子メール添付ファイルとして含まれます。

インバウンドおよびアウトバウンド添付ファイルを送信する手順は、次のとおりです。

  1. ヒューマン・タスク・エディタの「通知」セクションの「詳細」タブで、「電子メール通知によるタスクの添付ファイルの送信」を選択します。

    アクション可能な電子メール・リプライでは、電子メールに添付ファイルを追加できます。これらの添付ファイルはタスクの添付ファイルとして追加されます。

詳細は、第29.8.7項「電子メール・メッセージをアクション可能にする方法」を参照してください。

34.2.9 インバウンド・コメントの送信方法

インバウンド・コメントを送信する手順は、次のとおりです。

  1. アクション可能な電子メール・リプライでは、図34-3に示すとおり、Comments[['と']]の間にコメントを追加します。これらのコンテンツはタスクのコメントとして追加されます。たとえばComments[[looks good]]とします。

34.2.10 セキュアな通知の送信方法

セキュアな通知を送信する手順は、次のとおりです。

  1. ヒューマン・タスク・エディタの「通知」セクションの「詳細」タブで、「通知のセキュア化(詳細を除く)」を選択します。これにより、デフォルトの通知メッセージを使用できます。この場合、通知メッセージにはタスクのコンテンツは含まれません。また、この通知はアクション可能ではありません。デフォルトの通知メッセージには、Oracle BPM Worklist内のタスクへのリンクが含まれています。タスク詳細を参照するにはログインする必要があります。

    詳細は、第29.8.5項「詳細を除く通知をセキュア化する方法」を参照してください。

34.2.11 通知に使用されるチャネルの設定方法

通知に使用されるチャネルを設定する手順は、次のとおりです。

  1. Oracle BPM Worklistのプリファレンス・ユーザー・インタフェースを使用して優先通知チャネルを設定します。チャネルは、通知を送信する前にユーザー・プリファレンス・ストアに問い合せることで、動的に決定されます。ユーザー・プリファレンスが指定されていない場合は、電子メールのチャネルが使用されます。

    Oracle Delegated Administration Serviceの詳細は、『Oracle Fusion Middleware Guide to Delegated Administration for Oracle Identity Management』を参照してください。

34.2.12 リマインダの送信方法

タスクは、リマインダを送信するように構成できます。リマインダは、タスクがユーザーに割り当てられた時刻またはタスクの有効期限が切れる時刻に基づいています。リマインダの数およびリマインダ間の間隔も構成可能です。タスクがASSIGNEDとしてマークされている場合、リマインダに使用されるメッセージはASSIGNEESに対するメッセージです。

リマインダを送信する手順は、次のとおりです。

  1. ヒューマン・タスク・エディタの「通知」セクションの「詳細」タブで、リマインダを設定します。リマインダ構成に関連するパラメータは、次のとおりです。

    • Recurrence:

      リマインダの送信回数を指定します。recurrenceに使用可能な値は、EVERYNEVER012 …、10です。

    • RelativeDate:

      タスクの割当て日または有効期限日のどちらからリマインダ期間を相対的に計算するかを指定します。relativeDateに使用可能な値は、ASSIGNEDEXPIRATIONおよびBEFORE DUE DATEです。「要求されたアクションの期日」オプション(以前のリリースでは「期間を使用」と呼ばれていたオプション)を使用するために、タスクのエスカレーションおよび有効期限ポリシーを変更した場合、Oracle JDeveloperには最終的な値が表示されます。

    • Duration:

      relativeDateからの、最初のリマインダとそれ以降の各リマインダの期間を指定します。期間のデータ型は、xsd:durationであり、その書式はISO 8601によりPnYnMnDTnHnMnSという形式で定義されています。大文字はデリミタであり、対応するメンバーを使用しない場合は省略できます。この例には、PT1004199059SPT130SPT2M10SP1DT2S-P1YP1Y2M3DT5H20M30.123Sなどがあります。

    次の例で、リマインダが送信されるタイミングを具体的に説明します。

    • relativeDateASSIGNEDrecurrenceEVERY、およびリマインダの期間がPT1Dであるとします。タスクが2005年3月24日午前10:00に割り当てられた場合、リマインダは2005年3月25日午前10:002005年3月26日午前10:002005年3月27日午前10:00に送信され、さらにユーザーがタスクに対するアクションを実行するまで続きます。

    • relativeDateEXPIRATIONrecurrence2、およびリマインダ期間がPT1Dであるとします。タスクの有効期限切れが2005年3月26日午前10:00で、タスクが2005年3月24日午前10:00より前に割り当てられた場合、リマインダは2005年3月24日午前10:002005年3月25日午前10:00に送信されます。

    • relativeDateEXPIRATIONrecurrence2、およびリマインダ期間がPT1Dであるとします。タスクの有効期限切れが2005年3月26日午前10:00で、タスクが2005年3月24日午後3:00に割り当てられた場合、リマインダは2005年3月25日午前10:00の1回のみ送信されます。

    詳細は、第29.8.3項「リマインダの設定方法」を参照してください。

34.2.13 未処理メッセージに対する自動返信の設定方法

システム・エラー、例外エラー、ユーザー・エラーなどのために、受信メッセージを処理できない場合、ヒューマン・ワークフロー通知サービスは自動返信メッセージを送信します。グローバル・リソース・バンドル内のこれらのメッセージに対するテキストは変更できます。例34-5WorkflowLabels.propertiesファイルを示します。詳細は、第34.5.2項「グローバル・リソース・バンドル: WorkflowLabels.properties」を参照してください。

例34-5 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.

34.2.14 カスタム通知ヘッダーの作成方法

タスク参加者が複数の通知チャネルにアクセスする可能性もあります。カスタム通知ヘッダーを使用すると、このような参加者のタイプが通知を受信する優先チャネルとして単一のチャネルを指定できます。

カスタム通知ヘッダーを作成する手順は、次のとおりです。

  1. ヒューマン・タスク・エディタの「通知」セクションの「詳細」タブの「通知ヘッダーの属性」セクションで、使用する優先通知チャネル(ボイス、SMSなど)を指定するカスタム通知ヘッダーを作成します。ヒューマン・ワークフロー電子メール通知レイヤーは、これらのヘッダー値をOracle User Messaging Serviceのルールベース通知サービスに提供します。

    たとえば、「名前」フィールドをdeliveryTypeに設定し、「値」フィールドをSMSに設定します。

    ルールベースの通知サービスは、使用する優先通知チャネルを特定する目的のみに使用されます。優先チャネルのアドレスは、Oracle Identity Managementから取得されます。通知メッセージは、両方のサービスによって提供される情報から作成されます。

    詳細は、次を参照してください。

34.3 割当てサービスの構成

この項では、Dynamic Assignment Functionを使用した割当てサービスの構成方法について説明します。この項の内容は、次のとおりです。

34.3.1 動的割当てパターンおよびタスク・エスカレーション・パターン

タスクがグループ、アプリケーション・ロールまたはユーザー・リストに割り当てられると、単一のユーザーは、操作対象のタスクを申告する必要があります。ただし、様々なディスパッチ・メカニズムを使用すると、ユーザーに作業を自動的に送信できます。

自動タスク・ディスパッチは、動的割当てパターンを介して実行されます。動的割当てパターンでは、グループまたはユーザーやグループのリストから、特定のユーザーまたはグループが選択されます。同様に、タスクがエスカレートされる場合、タスク・エスカレーション・パターンを使用して、タスクのエスカレート先となるユーザーを決定できます。組込みパターンがいくつか用意されています。ただし、動的割当ておよびタスク・エスカレーション用の独自のパターンを作成して、ワークフロー・サービスに登録することもできます。表34-21に、組込みの3つの動的割当てパターンと1つのタスク・エスカレーション・パターンを示します。

表34-21 動的割当てパターン

割当てパターン タイプ 説明

LEAST_BUSY

動的割当て

現在割り当てられているタスク数が最も少ないユーザーまたはグループを選択します。

MOST_PRODUCTIVE

動的割当て

特定の期間(デフォルトでは過去7日間)に最も多くのタスクを完了したユーザーまたはグループを選択します。

ROUND_ROBIN

動的割当て

各ユーザーまたはグループを順番に選択します。

MANAGERS_MANAGER

タスク・エスカレーション

マネージャのマネージャを選択します。


これらのパターンではいずれもユーザーの休暇ステータスがチェックされます。現在割当てできないユーザーにタスクが自動的に割り当てられることはありません。

第29.4.3項「単一参加者タイプの構成方法」に示すように、タスク参加者を定義する場合には動的割当てパターンを使用できます。第32.7.2項「グループ・ルールの作成方法」に示すように、これらをタスク割当てルールとともに使用すると、エンド・ユーザーは、管理するグループのメンバーに対してタスクの動的割当てを指定できるようになります。

動的割当てパターンは、タスク定義の任意の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”):

11g リリース1 (11.1.1.6.1)より前は、XPath関数wfDynamicUserAssignおよびwfDynamicGroupAssignを使用して動的割当てを実行できました。これらのXPath関数は、11g リリース1 (11.1.1.6.1)では非推奨です。引き続き使用は可能ですが、これらのXPath関数の既存の使用をすべて新しいdynamicTaskAssign関数に移行することをお薦めします。

34.3.1.1 動的割当てパターンの実装方法

次の手順に従って、独自の動的割当てパターンを実装します。

動的割当てパターンを実装する手順は、次のとおりです。

次のインタフェースを実装するJavaクラスを記述します。

oracle.bpel.services.workflow.assignment.dynamic.IDynamicAssignmentPattern

メソッドgetAssigneeFromParticipantListを実装することにより、(すべて同じタイプの)参加者リストから単一の割当て先を選択するためのサポートを、実装で提供する必要があります。

実装により、すべての割当て先タイプがサポートされる必要はありません。インタフェースでメソッドgetSupportedAssigneeTypeを使用することにより、実装時に、サポートする割当て先のタイプを指定できます。

実装で選択基準を指定する入力パラメータを受け入れると、Dynamic Assignment Frameworkがこれらの入力パラメータを検証し、実装はそのパラメータ(ある場合)をメソッドgetPatternParameters()で定義できます。

実装では、実装の初期化時にフレームワークによって設定される初期化パラメータを受け入れることができます。パラメータ値は(configMBeanを使用するか、またはOracle Enterprise Manager Fusion Middleware Controlでのヒューマン・ワークフロー・サービス・エンジン構成によって)ヒューマン・ワークフロー構成で定義されており、ここに動的割当てパターンが登録されます。

便宜上、フレームワークでは、一部の共通機能を実装するクラスAbstractDynamicAssignmentPatternが提供されています。割当てパターンの実装により、この抽象クラスを拡張して、一部のパラメータおよびローカライズ・サポートの実装を保存できます。

11g リリース1 (11.1.1.6.1)より前は、カスタムの動的割当てパターンは次のインタフェースのいずれかまたは両方を使用して実装されていました。

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』を参照してください。

34.3.1.2 動的割当てパターンの構成方法

動的割当てパターンは、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 Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

34.3.1.3 動的割当てパターンの表示名の構成方法

ランタイム構成サービスには、使用可能なユーザーとグループの動的割当てパターンのリストを返すメソッドが用意されています。これらのパターンは、パターンの名前、およびパターンとそのパラメータに対するユーザーが表示可能なラベルと説明の両方を返します。このパターンでは表示名のローカライズがサポートされるため、コンテキスト・ユーザーには適切な言語で表示されます。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のサンプルを参照してください。

34.3.1.4 タスク・エスカレーション・パターンの実装方法

タスク・エスカレーション関数は動的割当てパターンに非常に類似していますが、異なる関数を実行します(エスカレート時のタスクの割当て先を決定します)。カスタム実装は、異なるインタフェース(IDynamicTaskEscaltionPattern)を実装している必要があります。

34.3.2 割当てサービスによるタスク参加者の動的割当て

ヒューマン・ワークフロー参加者は、ルーティング・スリップで宣言的に指定されます。ルーティング・スリップでは、参加者およびヒューマン・ワークフローへの参加方法(管理チェーン階層、承認者のシリアル・リストなど)を指定することでヒューマン・ワークフローの進行方法を決定します。

ヒューマン・タスク・エディタでは様々な組込みパターンを使用して、ルーティング・スリップを宣言的に作成できます。さらに、ビジネス・ルールに基づいた拡張ルーティングを使用して、より複雑にルーティングできます。ただし、カスタム・ロジックを使用してより高度なルーティングを作成するには、カスタム割当てサービスを実装してルーティングします。

このような動的割当てをサポートするために、割当てサービスが使用されます。割当てサービスは、タスク割当て先の決定を担当します。独自の割当てサービスを実装し、その実装をプラグイン接続して特定のヒューマン・ワークフローで使用することもできます。

割当てサービスにより、ヒューマン・ワークフローの次のタスク割当て詳細が決定されます。

  • タスク開始時の割当て。

  • タスク再開始時の割当て。

  • ユーザーがタスクの結果を更新するときの割当て。タスクの結果が更新された場合、そのタスクは他のユーザーにルーティングするか完了にできます。

  • タスク情報のリクエスト元の割当て先。

  • タスクでOracle BPM Worklistからの再承認をサポートしている場合、ユーザーは再承認のための情報をリクエストできます。

  • 再承認がサポートされている場合にタスクを再承認するユーザー。

ヒューマン・ワークフロー・サービスでは、特定のタスクについて割当てサービスが識別されて起動され、タスク割当てが決定されます。

たとえば、単純割当てサービスの繰返しは次のとおりです。

  1. クライアントが、割当てサービスによりルーティングが決定される経費承認タスクを開始します。

  2. 割当てサービスが、タスク割当て先をjcooperであると決定します。

  3. jcooperがタスクを承認すると、割当てサービスがタスクをjsteinに割り当てます。また、割当てサービスはタスク作成者であるjlondonに必ず通知を送信するように指定します。

  4. jsteinがタスクを承認し、割当てサービスは他にタスクの割当て先ユーザーがいないことを示します。

34.3.2.1 割当てサービスの実装方法

割当てサービスを実装する手順は、次のとおりです。

  1. 割当てサービスは、IAssignmentServiceインタフェースを使用して実装します。ヒューマン・ワークフロー・サービスは、次の情報を割当てサービスに渡してタスク割当てを決定します。

    • タスク・ドキュメント

      ヒューマン・ワークフローで実行されるタスク・ドキュメント。タスク・ドキュメントには、ペイロードと他のタスク情報(現在の状態など)が含まれています。

    • プロパティのマッピング

      割当てサービスを指定するときは、プロパティのリストを指定して、タスク割当て先を決定するバックエンド・サービスにコールバックを相関付けることもできます。

    • タスク履歴

      タスク履歴は、タスクの履歴をトレースするための時系列順のタスク・ドキュメントのリストです。このリスト内のタスク・ドキュメントには、実際のタスクの属性のサブセット(stateupdatedByoutcomeupdatedDateなど)が含まれています。

34.3.2.2 割当てサービスの実装例


注意:

  • ステートフルな割当てサービス・クラスは使用できません。これは、ヒューマン・ワークフロー・サービスでは、割当てサービスのコールが必要になるたびに新規インスタンスが作成されるためです。

  • getAssigneesToRequestForInformationメソッドは複数回コールできます。これは、情報のリクエスト・アクションを表示するための基準の1つが、情報をリクエストしているユーザーが複数存在していることであるためです。したがって、ヒューマン・ワークフロー・サービスがタスクについて許可されているアクションを判別しようとするたびに、このメソッドがコールされます。


独自の割当てサービス・プラグインを実装できます。このプラグインは、ヒューマン・ワークフロー実行時にヒューマン・ワークフロー・サービスによって起動されます。

例34-6では、TestAssignmentService.javaと呼ばれるIAssignmentService実装の例を示します。

例34-6 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;
    }

}

34.3.2.3 カスタム割当てサービスのデプロイ方法

カスタム割当てサービスをデプロイする手順は、次のとおりです。

  1. 次のメソッドを1つ使用して、割当てサービスの実装クラスおよび関連クラスをOracle BPEL Process Managerのクラスパスで使用可能にします。

    • クラスをSCA-INF/classesに直接ロードするか、SCA-INF/libにJARとしてロードします。

    • ディレクトリ・ツリーまたはJARファイルにカスタム関数のクラス・ファイルを配置します。次に、クラスが置かれているJARまたはルート・ディレクトリを指すようにworklfowCustomClasspathURL構成パラメータを更新します。これはURLであるため、Webサーバー上でクラス・ファイルをホスティングし、そのクラス・ファイルからHTTPを介して複数のOracle WebLogic Serverにアクセスできるようになります。さらに、そのファイルをメタデータ・リポジトリ(MDS)にデプロイし、ORAMDS URLを使用して適切な場所を指すようにすることもできます。この方法の詳細は、サンプルのworkflow-110-workflowCustomizationsを参照してください。このサンプルをダウンロードするには、Oracle SOA Suiteサンプルを参照してください。


    注意:

    • 様々なBPELプロセスで使用するために割当てサービスの別バージョンを作成するには、パッケージ名またはクラス名を変更する必要があります。

    • スーツケース内のJavaクラスとJARファイルはクラスパスで使用できないため、割当てサービスのデプロイメント・モデルとしては使用できません。

    • 前述の手順はクラスタ内のノードごとに繰り返す必要があります。


34.3.3 カスタム・エスカレーション関数

カスタム・エスカレーション関数を使用すると、ヒューマン・ワークフロー内でカスタム・ルールを統合できます。

カスタム・エスカレーション関数を実装する手順は、次のとおりです。

  1. カスタムのタスク・エスカレーション関数を作成し、この関数をタスク定義に使用するヒューマン・ワークフロー・サービスに登録します。

  2. ヒューマン・タスク・エディタを使用して、ヒューマン・ワークフローでルールを統合します。

    詳細は、第29.7.6項「エスカレーション・ルールの指定方法」を参照してください。

34.4 コールバックとリソース・バンドルに対するクラスのロード

次のコールバックおよびリソース・バンドルのクラスは、SOAプロジェクトから直接ロードできます。oracle.soainfra.common共有ライブラリのクラスをロードしてOracle WebLogic Serverを再起動する必要はありません。

コールバック・クラスは、次の場所に配置できます。

さらに、下位互換性をサポートするために、プロジェクト・レベルのリソース・バンドルは、.taskファイルと同じディレクトリ内に配置することもできます。

34.5 ワークフロー・サービスのリソース・バンドル

この項では、ヒューマン・ワークフロー・サービスで使用するリソース・バンドルと、リソース・バンドルをカスタマイズして代替のリソース文字列を提供する方法について説明します。

ヒューマン・ワークフロー・サービスAPIおよびOracle BPM Worklistでは、IWorkflowContextオブジェクトのロケール設定を使用してAPIにアクセスします。これは、アイデンティティ・サービスで構成されているユーザー・ディレクトリ内のユーザーのロケールです。ユーザーに対してロケールが指定されていない場合は、かわりにJava EEサーバーのデフォルト・ロケールが使用されます。

APIクライアントでは、IWorkflowContextオブジェクトに新しい値を設定することで、このロケールを上書きできます。Oracle BPM Worklistには、ユーザー・プリファレンス・オプションが用意されており、このオプションによって、ユーザーは、各自のユーザー・ディレクトリに設定されているロケールのかわりに、ブラウザのロケールを使用できます。

34.5.1 タスク・リソース・バンドル

各ヒューマン・ワークフロー・コンポーネントは、リソース・バンドルに関連付けることができます。このバンドルによって、タスクの結果の表示名として使用するリソース文字列が定義されます。リソース文字列は、TaskMetadataServiceメソッドのgetTaskDefinitionOutcomesによって返され、Oracle BPM Worklistおよびタスク・フローのタスク詳細アプリケーションに表示されます。

また、ヒューマン・ワークフローのXPath関数のgetTaskResourceBundle文字列を使用すると、タスクのリソース・バンドルのリソース文字列をルックアップできます。たとえば、このXPath関数は、タスクの通知メッセージの作成に使用するXPath式の一部として使用できます。

ヒューマン・ワークフロー・コンポーネントをリソース・バンドルに関連付けます。これを実行するには、ヒューマン・タスク・エディタの「プレゼンテーション」セクションにある「リソースの詳細」ダイアログの「リソース名」フィールドと「リソースの場所」フィールドを設定します。「リソースの場所」フィールドの値はURLです。リソース・バンドルは、このURLが指し示すJARファイル内に含めることができます。リソース・バンドルに対して共有場所を使用すると、複数のヒューマン・ワークフロー・コンポーネント間で同じリソース・バンドルを共有できます。

ヒューマン・ワークフロー・コンポーネントに対してリソース・バンドルが指定されていない場合は、グローバル・リソース・バンドル内でソース文字列がルックアップされます(第34.5.2項「グローバル・リソース・バンドル: WorkflowLabels.properties」を参照)。よく使用されるタスクの結果をグローバル・リソース・バンドルで定義すると、個別のヒューマン・ワークフロー・コンポーネントに対してリソース・バンドルを定義する必要性が減少します。

特定の結果に対してリソース文字列を配置できない場合は、その結果の名前がすべてのロケールで表示値として使用されます。

34.5.2 グローバル・リソース・バンドル: 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_ROBINLEAST_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を参照してください。このサンプルをダウンロードするには、Oracle SOA Suiteサンプルを参照してください。

34.5.3 ワークリスト・クライアントのリソース・バンドル

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に追加します。

34.5.4 タスク詳細のADFタスク・フロー・リソース・バンドル

特定のタスク・タイプの詳細を表示するために作成されたADFタスク・フロー・アプリケーションと関連のデータ制御では、リソース・バンドルのoracle.bpel.services.workflow.worklist.resource.worklistを使用してリソース文字列が格納されます。

タスク・フロー・アプリケーションにカスタマイズしたリソース・バンドルを追加すると、タスク詳細のADFタスク・フローに独自のカスタム・リソース文字列を提供できます。

このリソース・バンドルを使用すると、タスク・フロー・フォームに表示されるXML要素名をローカライズできます。各キーを追加すると、タスク・フロー・フォームのコンテンツ・セクションでそれらのキーを使用できます。入力テキスト・ラベルは、次のようになります。

#{resources.mykeyword}

WorkflowLabels.propertiesリソース・バンドルのコピーは、サンプルのworkflow-110-workflowCustomizationsから入手できます。このサンプルには、タスク詳細のADFタスク・フロー・アプリケーションに、カスタマイズした独自のリソース文字列を提供する方法の詳細が示されています。

34.5.5 リソース・バンドルでのステージ名と参加者名の指定

コンポジット・リソース・バンドルで、ステージ名と参加者名の翻訳済の値を指定できます。リソース・バンドルには次のようなエントリが含まれている必要があります。

  • stage_name=translated_value

  • participant_name=translated_value

34.5.6 グループ名とアプリケーション・ロール名での大/小文字の区別

デフォルトでは、ヒューマン・ワークフロー・システムでユーザー名の大/小文字は区別されません。すべてのユーザー名は小文字で格納されます。ただし、グループ名とアプリケーション・ロール名は常に大/小文字が区別されます。ユーザー名は、大/小文字を区別するようにOracle Enterprise Manager Fusion Middleware Controlで変更できます。


注意:

この設定は、新規のインストールを実行した後にのみ変更してください。インスタンスをアクティブに処理しているインストール、または多数のインストールがデータベースにあるインストールでこの値を変更すると、重大な問題が発生します。


大/小文字を区別するように変更する手順は、次のとおりです。

  1. Oracle Enterprise Manager Fusion Middleware Controlにログインします。

  2. ナビゲータで、「SOA」フォルダを開きます。

  3. 「soa-infra」を右クリックし、「管理」「システムMBeanブラウザ」の順に選択します。

    ページの右側に「システムMBeanブラウザ」が表示されます。

  4. 「アプリケーション定義のMBean」「oracle.as.soainfra.config」「サーバー: server_name「WorkflowIdentityConfig」「human-workflow」「WorkflowIdentityConfig.PropertyType」の順に開きます。

  5. 「caseSensitive」をクリックします。

  6. 「操作」タブをクリックします。

  7. 「setValue」をクリックします。

  8. 「値」フィールドにtrueと入力し、「起動」をクリックします。

10.1.3(デフォルトで、大/小文字を区別します)からアップグレードする場合、システムの動作を10.1.3と同じにするには、「caseSensitive」trueに設定します。

34.6 ヒューマン・ワークフロー・クライアントとOracle WebLogic Serverサービスとの統合の概要

この項では、ヒューマン・ワークフロー・クライアントとOracle WebLogic Serverサービスとの統合方法について説明します。

34.6.1 ヒューマン・ワークフロー・サービス・クライアント

ヒューマン・ワークフロー・サービスは、次のワークフロー・サービスを公開します。

  • タスク・サービス

  • タスク問合せサービス

  • ユーザー・メタデータ・サービス

  • タスク・エビデンス・サービス

  • タスク・メタデータ・サービス

  • ランタイム構成サービス

  • タスク・レポート・サービス

これらのサービスを使用するには、ワークフロー・サービスに対してAbstract Factoryパターンを使用する必要があります。Abstract Factoryパターンを使用すると、共通のテーマを持つ各ファクトリのグループをカプセル化できます。

次のタスクを実行します。

  • 特定のサービス・タイプに対してIWorkflowServiceClientインスタンスを取得します。WorkflowServiceClientFactoryは、サービス・タイプに従ってIWorkflowServiceClientを取得する静的ファクトリ・メソッドを提供します。

  • IWorkflowServiceClientインスタンスを使用して、使用するサービス・インスタンスを取得します。

サポートされているサービス・タイプは「リモート」と「soap」です。

リモート・クライアントは、Enterprise JavaBeansクライアント(したがってリモートEnterprise JavaBeans)を使用します。SOAPはSOAPクライアントを使用します。各タイプのサービスには、ワークフロー・クライアントを構成する必要があります。例34-7に詳細を示します。

例34-7 クライアント構成ファイル

<workflowServicesClientConfiguration>
<server name="default" default="true">
   <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>

クライアント構成ファイルには、複数の構成についての定義が含まれています。各サーバーには一意の名前が指定されている必要があります。構成ファイルに複数のサーバーを定義した場合は、1つのサーバーのデフォルト属性にtrueを設定する必要があります。workflowServicesClientConfigurationにはserverTypeというオプション属性があり、LOCALREMOTEまたはSOAPのいずれかに設定できます。各サーバーのクライアント・タイプを上書きするには、オプション属性のclientTypeを使用します。

例34-8に詳細を示します。

例34-8 複数の構成が定義されたクライアント構成ファイル

<?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.oracle.com:7001</serverURL>
         <initialContextFactory>weblogic.jndi.WLInitialContextFactory</initialContextFactory>
         <participateInClientTransaction>false</participateInClientTransaction>
      </remoteClient> -->
      <soapClient>
         <rootEndPointURL>http://myhost1.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>
   <server name="server2">
      <remoteClient>
         <serverURL>t3://myhost2.us.oracle.com:7001</serverURL>
         <initialContextFactory>weblogic.jndi.WLInitialContextFactory</initialContextFactory>
         <participateInClientTransaction>false</participateInClientTransaction>
      </remoteClient> -->
      <soapClient>
         <rootEndPointURL>http://myhost2us.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>

例34-8では、server2にデフォルトのclientTypeREMOTEが使用されていますが、server1にはデフォルトのclientTypeの値を上書きしてSOAPclientTypeが使用されています。wf_client_config.xmlファイルのかわりに、JAXBオブジェクトのWorkflowServicesClientConfigurationTypeが使用されている場合も、同じルールが適用されます。

構成でクライアント・タイプを定義すると、WorkflowServiceClientFactoryクラスのファクトリ・メソッドを使用できます。例34-9に詳細を示します。

例34-9 WorkflowServiceClientFactoryクラスのファクトリ・メソッド

public static IWorkflowServiceClient
 getWorkflowServiceClient(WorkflowServicesClientConfigurationType wscc, Logger
 logger) throws WorkflowException

マップでプロパティのCONNECTION_PROPERTY.CLIENT_TYPEを使用してクライアント・タイプを定義すると、例34-10に示すファクトリ・メソッドを使用できます。

例34-10 CONNECTION_PROPERTY.CLIENT_TYPEのファクトリ・メソッド

public static IWorkflowServiceClient getWorkflowServiceClient(Map<CONNECTION_
PROPERTY, String> properties, String serverName,    Logger logger) throws
 WorkflowException

34.6.1.1 タスク問合せサービス・クライアントのコード

例34-11に、タスク問合せサービス・クライアントのコード例を示します。

例34-11 タスク問合せサービス・クライアントのコード

/**
 * 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);
   }  
  
}

34.6.1.2 構成オプション

各タイプのクライアントには、ワークフロー・クライアント構成を設定する必要があります。次の場所に構成を設定できます。

  • JAXBオブジェクト

  • wf_client_config.xmlファイル

  • プロパティ・マップ

プロパティ・マップは常に、wf_client_config.xmlファイルの補足です。構成属性は、JAXBオブジェクトまたはプロパティ・マップによって上書きされる場合があります。構成ファイルはオプションです。構成ファイルがアプリケーションのクラスパスに見つからない場合は、プロパティ・マップが構成の主要ソースになります。

34.6.1.2.1 JAXBオブジェクト

JAXBオブジェクトは、クライアント構成を定義するために使用できます。例34-12に、WorkflowServiceClientFactoryメソッドの使用方法を示します。

例34-12 JAXBオブジェクト

public static IWorkflowServiceClient getWorkflowServiceClient(String clientType,
                           WorkflowServicesClientConfigurationType wscc,
                           Logger logger) throws WorkflowException
34.6.1.2.2 ワークフロー・クライアント構成ファイル: wf_client_config.xml

クライアント構成のXSDスキーマは、wf_client_config.xsdファイルにあります。

サーバー構成には、次の3タイプのクライアントが含まれている必要があります。

  • localClient

  • remoteClient

  • soapClient

すべてのクライアントを指定することをお薦めします。これは、リモート・クライアントを持たないサービス(アイデンティティ・サービスなど)があるためです。このため、他のサービスでリモート・クライアントを使用する場合、アイデンティティ・サービスではSOAPサービスを使用します。

例34-13に、クライアント構成のXMLファイルの例を示します。この構成によって、defaultという名前のサーバーが定義されます。このXMLファイルは、クライアント・アプリケーションのEARファイルに移動する必要があります。

例34-13 クライアント構成

<workflowServicesClientConfiguration>
server name="default" default="true">

<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>

WorkflowServicesClientConfigurationType wsccnullの場合は、wf_client_config.xmlにクライアント・プロパティを定義できます。

WorkflowServiceClientFactory getWorkflowServiceClient()メソッドは常に、クラスパス内でwf_client_config.xmlを検索します。このファイルが検出されると、クライアント・プロパティがロードされます。

wf_client_config.xmlファイルに定義した値は、プロパティ・マップまたはJAXBオブジェクトで定義したすべてのプロパティによって上書きされます。

34.6.1.2.3 プロパティ・マップでのワークフロー・クライアント構成

接続プロパティを動的に指定する場合は、java.util.Mapを使用してプロパティを指定できます。これらのプロパティは、構成ファイル内の定義よりも優先されます。したがって、wf_client_config.xmlに定義した値は、これらのプロパティの値によって上書きされます。サーバーへの接続詳細を動的に指定しない場合は、マップでのプロパティ設定を省略し、ファクトリ・メソッドにNULL値を渡すことができます。この場合、構成ファイルwf_client_config.xmlはクライアント・アプリケーションのクラスパス内で検索されます。

構成ファイルがクラスパス内にある必要があるのは、構成ファイルから構成を取得する場合のみです。特定のクライアント・タイプの全設定をプロパティ・マップを使用して行う場合、このファイルの設定はオプションです。また、JAXBオブジェクトにも構成ファイルは必要ありません。これは、すべての設定がJAXBオブジェクトから取得されるためです。例34-14に詳細を示します。

例34-14 プロパティ・マップ

IWorkflowServiceClient   wfSvcClient =
WorkflowServiceClientFactory.getWorkflowServiceClient(WorkflowServiceClientFactory
.REMOTE_CLIENT,
(Map<IWorkflowServiceClientConstants.CONNECTION_PROPERTY, String> ) null, null);

この場合、クライアントは、クラスパス内で検出されたwf_client_config.xmlの値を使用してサービスにアクセスします。構成ファイルがクラスパス内に見つからない場合に、サービス・タイプに応じた設定を指定しないと、ワークフロー例外がスローされます。プロパティ・マップがNULLで、構成ファイルが見つからない場合も、例外がスローされます。構成ファイルが見つからない場合に、クライアントでマップ内の一部のプロパティが省略されていると、実行時にサービス・コールが失敗します(プロパティは構成ファイルの補足です)。

クライアント・プロパティは、WorkflowServiceClientFactoryメソッドを使用して定義できます。例34-15に詳細を示します。

例34-15 WorkflowServiceClientFactoryメソッド

public static IWorkflowServiceClient getWorkflowServiceClient(String clientType,
                          Map<CONNECTION_PROPERTY, String> properties,
                          Logger logger) hrows WorkflowException 

マップでプロパティのCONNECTION_PROPERTYタイプを使用してクライアント・タイプを定義すると、例34-16に示すファクトリ・メソッドを使用できます。

例34-16 CONNECTION_PROPERTYタイプのファクトリ・メソッド

public static IWorkflowServiceClient getWorkflowServiceClient(Map<CONNECTION_
PROPERTY, String> properties,   Logger logger) throws WorkflowException

例34-17に、クライアント・プロパティを設定するためにプロパティ・マップで使用できるIWorkflowServiceClientConstants.CONNECTION_PROPERTYを示します。

例34-17 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では非推奨です。


例34-18に、リモートEnterprise JavaBeansクライアントの例を示します。

例34-18 リモート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);

例34-19に、SOAPクライアントの例を示します。

例34-19 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);

34.6.1.3 クライアントのロギング

クライアントでは、クライアントがメッセージを記録するjava.util.logging.Loggerを必要に応じて渡すことができます。ロガーが指定されていない場合、ワークフロー・サービス・クライアントのコードは何も記録しません。例34-20は、ロガーをワークフロー・サービス・クライアントに渡す方法を示しています。

例34-20 java.util.logging.Logger

java.util.logging.Logger logger = ....;

IWorkflowServiceClient client =
WorkflowServiceClientFactory.getWorkflowServiceClient(WorkflowServiceClientFactory
.REMOTE_CLIENT, properties, logger);

34.6.1.4 構成移行ユーティリティ

クライアント構成スキーマは、リリース10.1.3.x と11g リリース1の間で変更されています。リリース10.1.3.xから11g リリース1に移行するには、例34-21に示すユーティリティを使用します。

例34-21 構成移行ユーティリティ

java -classpath wsclient_extended.jar:bpm-services.jar 
 oracle.bpel.services.workflow.client.config.MigrateClientConfiguration 
original_file [new_file];

original_fileは10.1.3.xwf_client_config.xmlファイルで、new_fileは新規の構成ファイル名(オプション)です。新規の構成ファイル名を指定しないと、元の構成ファイルがバックアップされ、wf_client_config.xmlファイルが上書きされます。

34.6.2 アイデンティティ伝播

この項では、Enterprise JavaBeansおよびSAMLトークン(SOAPクライアント用)を使用してアイデンティティを伝播する方法について説明します。

リクエストごとにワークフロー・コンテキストを取得すると、パフォーマンスが低下する場合があります。これは、アイデンティティ伝播の場合も同様です。SAMLトークンまたはEnterprise JavaBeansによるアイデンティティ伝播を使用する場合は、ユーザー名とパスワードにNULLを渡してクライアントを認証し、ワークフロー・コンテキスト・インスタンスを取得して、アイデンティティ伝播を使用せずにワークフロー・コンテキストを使用する別のサービス・コールを使用します。

34.6.2.1 Enterprise JavaBeansアイデンティティ伝播

クライアント・アプリケーションは、Enterprise JavaBeansアイデンティティ伝播を使用して、ユーザー・アイデンティティをサービスに伝播できます。クライアントのコードでは、ユーザー・アイデンティティを保護する必要があります。

34.6.2.1.1 クライアント構成

アイデンティティ伝播を使用する場合、クライアントのコードでは、wf_client_config.xml構成ファイルの<remoteClient>要素の下にある<userName>要素と<password>要素を省略する必要があります。さらに、第34.6.1.2.3項「プロパティ・マップでのワークフロー・クライアント構成」で移入したMap<IWorkflowServiceClientConstants.CONNECTION_PROPERTY,String>プロパティには、次のプロパティを移入しないでください。

  • IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_SECURITY_PRINCIPAL

  • IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_SECURITY_CREDENTIALS

34.6.2.1.2 アイデンティティ伝播のためのクライアント・アプリケーションの要件

アイデンティティ伝播が機能するのは、アプリケーションがOracle WebLogic Serverコンテナにデプロイされ、コンテナ・セキュリティによって保護されている場合、またはクライアントがカスタムJAASログイン・モジュールによって保護されている場合のみです。

エンド・ユーザーは、正しいユーザー名とパスワードを使用してクライアント・アプリケーションにログインします。クライアント・アプリケーションを使用するユーザーは、SOAアプリケーションで使用されるアイデンティティ・ストアで使用可能である必要があります。このため、クライアントの構成には、ワークフロー・サービスやOracle SOA Suiteで使用するアイデンティティ・ストアと同じアイデンティティ・ストアを使用することをお薦めします。これにより、ユーザーがクライアント側に存在している場合、そのユーザーはサーバー側にも存在していることが保証されます。

アイデンティティ・ストアの構成方法については、『Oracle Fusion Middlewareセキュリティ・ガイド』を参照してください。

カスタム・アイデンティティ・ストアとの相互作用の詳細は、次のURLを参照してください。

http://www.oracle.com/technetwork/middleware/id-mgmt/overview/index.html

34.6.2.2 SOAPクライアント用のSAMLトークン・アイデンティティ伝播

SOAPクライアントを使用する場合は、Oracle WebサービスでサポートされているSAMLトークン・アイデンティティ伝播を使用できます。

この項では、アプリケーションがOracle WebLogic Serverコンテナ内に存在し、このコンテナによって保護されていることを前提にしています。

34.6.2.2.1 クライアント構成

アイデンティティ伝播を有効にするには、クライアント構成で特別な伝播モードを指定する必要があります。

34.6.2.2.2 プロパティを使用したアイデンティティ伝播モード設定

プロパティを使用する場合は、CONNECTION_PROPERTY.SOAP_IDENTITY_PROPAGATIONプロパティに値samlを移入します。

  • 動的SAMLトークン伝播モード

    SAMLトークン・ポリシーは動的に提供されます(デフォルト)。例34-22に示すプロパティはオプションです。アイデンティティ伝播モードが設定されている場合、デフォルトでは動的モードで実行します。

    例34-22 プロパティを使用したアイデンティティ伝播モード設定

    properties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.SOAP_
    IDENTITY_PROPAGATION_MODE , "dynamic");
    

SAMLトークンでは、デフォルトで、セキュリティ・ポリシーURIのoracle/wss10_saml_token_client_policyに基づいて動的ポリシーが構成されます。ロギングは使用されません。デフォルトのポリシーURIを上書きするには、クライアントで例34-23に示すコードを追加します。

例34-23 デフォルトのポリシーURIの上書き

properties.put(CONNECTION_PROPERTY.SECURITY_POLICY_URI     "oracle/wss10_saml_
token_client_policy");
properties.put(CONNECTION_PROPERTY.MANAGEMENT_POLICY_URI , "oracle/log_policy");

例34-24に、SAMLトークン動的クライアントを示します。

例34-24 トークン動的クライアント

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トークン伝播は失敗します。

34.6.2.2.3 構成ファイルでのアイデンティティ伝播モード設定

構成ファイルでは、例34-25に示すように、<soapClient><identityPropagation>要素を使用して伝播モードを定義できます。

例34-25 <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セキュリティおよび管理者ガイド』を参照してください。

34.6.2.2.4 JAXBオブジェクトを使用したアイデンティティ伝播モード設定

アイデンティティ伝播モードは、JAXBオブジェクトを使用し、プログラムによって設定できます。

34.6.2.3 公開鍵の別名

ワークフロー・クライアントとともにoracle.wsm.security.util.SecurityConstants.ClientConstants.WSS_RECIPIENT_KEY_ALIASプロパティを使用できます。このプロパティは、アウトバウンド・メッセージ・タイプの暗号化に使用する受信者の公開鍵に別名を設定します。このプロパティを使用して、公開鍵の別名でワークフロー・サービスを保護します。このプロパティが関連するのは、SOAPクライアント・タイプでアイデンティティ伝播が使用される場合のみです。

公開鍵の別名を定義する場合は、クライアント・コードでWSS_RECIPIENT_KEY_ALIAS値をマップに追加する必要があります。例34-26に詳細を示します。

例34-26 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.oracle.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要素の下に追加します。例34-27に詳細を示します。

例34-27 wssRecipientKeyAlias要素

<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>

資格証明ストアでの公開鍵の別名の作成方法および使用方法の詳細は、『Oracle Fusion Middleware Web Servicesセキュリティおよび管理者ガイド』を参照してください。

34.6.3 クライアントJARファイル

アイデンティティ伝播を使用しないクライアント・アプリケーションには、そのクラスパスにbpm-services.jarファイルを指定する必要があります。11g リリース1の場合、クライアントのクラスパスには例34-28に示すファイルが必要です。

例34-28 クライアントJARファイル

${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ファイルは生成する必要があります。

  1. wlfullclient.jarは、次のように生成します。

    cd ${bea.home}/wlserver_10.3/server/lib
    java -jar ../../../modules/com.bea.core.jarbuilder_1.3.0.0.jar
    

34.7 ヒューマン・タスクのタスクの状態

次のリストに、ヒューマン・タスクで利用可能なすべてのタスクの状態を示します。すべての状態の定数は、IWorkflowConstants.javaで定義されています。

IWorkflowConstants.javaの詳細は、『Oracle Fusion Middleware Workflow Services Java API Reference for Oracle BPEL Process Manager』を参照してください。

34.8 Oracle Workflowのデータベース・ビュー

この項では、データベース・ビューについて説明します。データベース・ビューを使用すると、レポート受信の問合せをOracle Workflowサービス・スキーマに対して実行できます。表34-22に、Oracle BPM Worklistで公開されるレポート、およびこれらのレポートに対応するデータベース・ビューを示します。

表34-22 レポートのビュー

既存のワークリスト・レポート 対応するデータベース・ビュー

不参加タスク・レポート

WFUNATTENDEDTASKS_VIEW

タスクのサイクル・タイム・レポート

WFTASKCYCLETIME_VIEW

タスクの生産性レポート

WFPRODUCTIVITY_VIEW

タスクの優先度レポート

WFTASKPRIORITY_VIEW


34.8.1 不参加タスク・レポート・ビュー

表34-23に、WFUNATTENDEDTASKS_VIEWレポート・ビューを示します。

表34-23 不参加タスク・レポート・ビュー

名前 タイプ

TASKID脚注1

VARCHAR2(64)

TASKNAME

VARCHAR2(200)

TASKNUMBER

NUMBER

CREATEDDATE

DATE

EXPIRATIONDATE

DATE

STATE

VARCHAR2(100)

PRIORITY

NUMBER

ASSIGNEEGROUPS

VARCHAR2(2000)


脚注1NOT NULL列

例:

  • 例34-29に、有効期限が翌週の不参加タスクの問合せを示します。

    例34-29 有効期限が翌週の不参加タスクの問合せ

    SELECT tasknumber, taskname, assigneegroups FROM WFUNATTENDEDTASKS_VIEW
     WHERE expirationdate > current_date AND expirationdate < current_date +
     7;
    
  • 例34-30に、mygroupの不参加タスクの問合せを示します。

    例34-30 mygroupの不参加タスクの問合せ

    SELECT tasknumber, taskname, assigneegroups FROM WFUNATTENDEDTASKS_VIEW
     WHERE 'mygroup' IN assigneegroups;
    
  • 例34-31に、過去30日以内に作成された不参加タスクの問合せを示します。

    例34-31 過去30日以内に作成された不参加タスクの問合せ

    SELECT tasknumber, taskname, assigneegroups FROM WFUNATTENDEDTASKS_VIEW
     WHERE createddate > current_date -30;
    

34.8.2 タスクのサイクル・タイム・レポート・ビュー

表34-24に、WFTASKCYCLETIME_VIEWレポート・ビューを示します。

表34-24 タスクのサイクル・タイム・レポート・ビュー

名前 タイプ

TASKID脚注1

VARCHAR2(64)

TASKNAME

VARCHAR2(200)

TASKNUMBER

NUMBER

CREATEDDATE

DATE

ENDDATE

DATE

CYCLETIME

NUMBER(38)


脚注1NOT NULL列

例:

  • 例34-32に、過去30日以内に作成された完了済タスクの平均サイクル・タイム(タスク完了時間)の計算を示します。

    例34-32 過去30日以内に作成された完了済タスクの平均サイクル・タイム

    SELECT avg(cycletime) FROM  WFTASKCYCLETIME_VIEW  WHERE createddate > 
     (current_date - 30);
    
  • 例34-33に、過去30日以内に作成されたすべての完了済タスクの平均サイクル・タイムの問合せおよびタスク名によるグループ化を示します。

    例34-33 過去30日以内に作成された完了済タスクの平均サイクル・タイムの問合せおよびタスク名によるグループ化

    SELECT taskname, avg(cycletime) FROM WFTASKCYCLETIME_VIEW WHERE
     createddate > (current_date - 30) GROUP BY taskname;
    
  • 例34-34に、各タスクで要した最短および最長時間の問合せを示します。

    例34-34 各タスクで要した最短および最長時間

    SELECT taskname, min(cycletime), max(cycletime) FROM WFTASKCYCLETIME_VIEW
     GROUP BY taskname;
    
  • 例34-35に、過去7日以内に完了したタスクの平均サイクル・タイムの計算を示します。

    例34-35 過去7日以内に完了したタスクの平均サイクル・タイム

    SELECT avg(cycletime) FROM  WFTASKCYCLETIME_VIEW  WHERE enddate >
      (current_date - 7);
    
  • 例34-36に、完了に8日以上要したタスクの問合せを示します。

    例34-36 完了に8日以上要したタスク

    SELECT taskname, avg(cycletime) FROM WFTASKCYCLETIME_VIEW WHERE cycletime
     > ((current_date +7) - current_date) GROUP BY taskname;
    

34.8.3 タスクの生産性レポート・ビュー

表34-25に、WFPRODUCTIVITY_VIEWレポート・ビューを示します。

表34-25 タスクの生産性レポート・ビュー

名前 タイプ

TASKNAME

VARCHAR2(200)

TASKID

VARCHAR2(200)

TASKNUMBER

NUMBER

USERNAME

VARCHAR2(200)

STATE脚注1

VARCHAR2(100)

LASTUPDATEDDATE

DATE


脚注1完了済タスクの場合、状態はNULLです。問合せでは、decode(outcome, '', 'COMPLETED', outcome)を使用します。

例:

  • 例34-37に、過去30日以内にユーザーが更新した一意のタスク数のカウントを示します。

    例34-37 過去30日以内に更新した一意のタスク数

    SELECT username, count(distinct(taskid))  FROM WFPRODUCTIVITY_VIEW WHERE
     lastupdateddate > (current_date -30) GROUP BY username;
    
  • 例34-38に、過去7日以内にユーザーが更新したタスク数(タスクによっては複数回更新された可能性があります)のカウントを示します。

    例34-38 過去7日以内に更新したタスク数

    SELECT username, count(taskid)  FROM WFPRODUCTIVITY_VIEW  WHERE
     lastupdateddate > (current_date -7) GROUP BY username;
    
  • 例34-39に、ユーザーが作業した各タスク・タイプのタスク数のカウントを示します。

    例34-39 ユーザーが作業した各タスク・タイプのタスク数

    SELECT username, taskname, count(taskid) FROM WFPRODUCTIVITY_VIEW GROUP
     BY username, taskname;
    
  • 例34-40に、過去100日以内にユーザーが作業した各タスク・タイプのタスク数のカウントを示します。

    例34-40 過去100日以内に作業した各タスク・タイプのタスク数

    SELECT username, taskname, count(taskid) FROM WFPRODUCTIVITY_VIEW WHERE
     lastupdateddate > (current_date -100) GROUP BY username, taskname;
    

34.8.4 タスクの優先度レポート・ビュー

表34-26に、WFTASKPRIORITY_VIEWレポート・ビューを示します。

表34-26 タスクの優先度レポート・ビュー

名前 タイプ

TASKID脚注1

VARCHAR2(64)

TASKNAME

VARCHAR2(200)

TASKNUMBER

NUMBER

PRIORITY

NUMBER

OUTCOME

VARCHAR2(100)

ASSIGNEDDATE

DATE

UPDATEDDATE

DATE

UPDATEDBY

VARCHAR2(64)


脚注1NOT NULL列

例:

  • 例34-41に、各タスク優先度で各ユーザーが更新したタスク数の問合せを示します。

    例34-41 各タスク優先度で各ユーザーが更新したタスク数

    SELECT updatedby, priority, count(taskid) FROM  WFTASKPRIORITY_VIEW GROUP
     BY  updatedby, priority;
    
  • 例34-42に、タスクから結果までの分布の問合せを示します。

    例34-42 タスクから結果までの分布

    SELECT taskname, decode(outcome, '', 'COMPLETED', outcome),  count
     (taskid) FROM WFTASKPRIORITY_VIEW GROUP BY taskname, outcome;
    
  • 例34-43に、各優先度で特定のユーザーが更新したタスク数の問合せを示します。

    例34-43 各優先度で特定のユーザーが更新したタスク数

    SELECT priority, count(taskid) FROM WFTASKPRIORITY_VIEW WHERE
     updatedby='jstein' GROUP BY priority;