Oracle® Fusion Middleware Oracle Business Process Management Studioでのビジネス・プロセスの開発 12c (12.2.1.2.0) E82789-01 |
|
前 |
次 |
この章では、ガイド付きビジネス・プロセスの作成時に定義したマイルストンを使用して、プロセス・インスタンスを表示するクライアント・アプリケーションの構築方法について説明します。
この章の内容は次のとおりです。
ガイド付きビジネス・プロセスは、ガイド付きビジネス・プロセスを表示および実行するADFアプリケーションの構築に使用できる事前定義済ADFタスクフローを提供します。
提供されたADFタスクフローが要件を満たさない場合、UIクライアント・アプリケーションが表示する情報を取得するために、ガイド付きビジネス・プロセスが提供する一連のAPIを使用できます。これらのAPIを使用すると、WebサービスおよびEnterprise Java Beansを使用して、マイルストンおよびタスクに関するデータを取得できます。
ガイド付きビジネス・プロセスのクライアント・アプリケーションは、ガイド付きビジネス・プロセスのタスク・フローのユーザー・インタフェースを提供します。任意の構成で、シンプルなADF JSPXページに、クライアント・アプリケーションを開発できます。
通常、クライアント・アプリケーションには、アクティビティ・ガイド・ツリーを表示するリージョンと、ツリーから選択された特定のノードの詳細を表示する別のリージョンが含まれます。これらの2つのリージョンを表示する方法として、JSPXページの左側に動的なリージョン、右側にヒューマン・タスク・フローを配置します。ただし、構成することはできます。
ガイド付きビジネス・プロセスのクライアント・アプリケーションを開発するには:
例31-1 ツリー・タスク・フローへのShowRefreshButton
パラメータの追加
<taskFlow id="dynamicRegion1" taskFlowId="${backingBeanScope.dynamicLeft.dynamicTaskFlowId}" xmlns="http://xmlns.oracle.com/adf/controller/binding" > <parameters> <parameter id="ShowRefreshButton" value="true" xmlns="http://xmlns.oracle.com/adfm/uimodel"/> </parameters> </taskFlow>
例31-2 activityguide.properties
ファイルへの参照を使用したadfc-config.xml
ファイル
<managed-bean id="__10"> <managed-bean-name id="__12">agProps</managed-bean-name> <managed-bean-class id="__11">oracle.bpel.activityguide.ui.beans.model.AGProperties</managed-bean-class> <managed-bean-scope id="__9">session</managed-bean-scope> <managed-property id="__15"> <property-name>agPropsFilePath</property-name> <property-class>java.lang.String</property-class> <value id="__14"><!-- relative path or absolute path should be given here-->/activityguide.properties</value> </managed-property> </managed-bean>
例31-3 ワークフロー・サービス・クライアント構成ファイル
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <workflowServicesClientConfiguration xmlns="http://xmlns.oracle.com/bpel/services/client"> <server default="true" name="default"> <localClient> <participateInClientTransaction>false</participateInClientTransaction> </localClient> <remoteClient> <serverURL>t3://host:port</serverURL> <initialContextFactory>weblogic.jndi.WLInitialContextFactory</initialContextFactory> <participateInClientTransaction>false</participateInClientTransaction> </remoteClient> <soapClient> <rootEndPointURL>http://host:port</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>
ADF Webプロジェクトを使用したJDeveloperアプリケーションが作成されます。アプリケーションには次のものが含まれます。
1つがアクティビティ・ガイド・ツリー用、もう1つがアクティビティ・ガイド・ノード詳細用の、2つのリージョンを持つJSFページ。
activityguide.properties
ファイル。
ランタイムに、Oracle ADFアプリケーションでは、デザインタイムに開発されたガイド付きビジネス・プロセスが表示されます。共通のADFレイヤーのコンテキスト・イベント・メカニズムによって、対応するアクティビティ・ガイド・ツリーとアクティビティ・ガイド・ノード詳細の間の通信を処理します。
ガイド付きビジネス・プロセス・インスタンスを選択すると、アクティビティ・ガイド・ツリーにそのガイド付きビジネス・プロセス・インスタンスのアクティビティ・ガイド、マイルストンおよびタスクの情報が表示されます。
または、JSFページのactivityguide.propertiesファイルのAGInstanceIDプロパティを構成して、特定のガイド付きビジネス・プロセス・インスタンスの次の情報をレンダリングすることができます。
アクティビティ・ガイド
マイルストン
タスク
アクティビティ・ガイド・ツリーのマイルストン・ノードを選択すると、そのマイルストンの下のサブツリーが取得またはリフレッシュされます。
アクティビティ・ガイド・ツリーのタスク・ノードを選択すると、そのタスクの詳細タスク情報が表示されます。
ガイド付きビジネス・プロセスのクライアント・アプリケーションを保護するには、適切な資格証明を持つユーザーのみが、ガイド付きビジネス・プロセスで説明されたタスクを完了できることを確認します。
セキュリティ機能には、認証、認可およびポリシー施行があります。
ガイド付きビジネス・プロセス・クライアント・アプリケーションをローカライズすると、定義したすべてのサポート言語でこのクライアントを実行できます。
ガイド付きビジネス・プロセス・アプリケーションをローカライズする場合は、ガイド付きビジネス・プロセスの設計時に次のコンポーネントをローカライズする必要があります。
AGのタイトル
AGの説明
マイルストンのタイトル
マイルストンの説明
ブロックされたタスクの説明テキスト
ガイド付きビジネス・プロセスは、ユーザー・インタフェースの一部である文字列(表示タイトル、説明など)を自動的に翻訳します。ガイド付きビジネス・プロセスは、次のロケールをサポートします。
フランス語
ドイツ語
イタリア語
スペイン語
ブラジル語
日本語
韓国語
簡体字中国語
繁体字中国語
アラビア語
チェコ語
デンマーク語
オランダ語
フィンランド語
ギリシャ語
ヘブライ語
ハンガリー語
ノルウェー語
ポーランド語
ポルトガル語
ルーマニア語
ロシア語
スロバキア語
スウェーデン語
タイ語
トルコ語
ガイド付きビジネス・プロセスのローカライズ方法の詳細は、「ガイド付きビジネス・プロセス・クライアント・アプリケーションでサポートされるロケールの構成方法」を参照してください。
ガイド付きビジネス・プロセス・アプリケーションで他のロケールをサポートするように構成するには、ガイド付きビジネス・プロセスの開発時に、そのロケールに必要なバンドルが提供されていることを確認します。
ガイド付きビジネス・プロセス・クライアント・アプリケーションでサポートされるロケールを構成するには:
例31-4 faces-config.xmlファイル
<locale-config> <default-locale>en</default-locale> <supported-locale>ar</supported-locale> <supported-locale>ca</supported-locale> <supported-locale>cs</supported-locale> <supported-locale>da</supported-locale> <supported-locale>de</supported-locale> <supported-locale>zh_CN</supported-locale> </locale-config>
ガイド付きビジネス・プロセスでは、使用可能なマイルストンおよびマイルストンを構成するタスクに関する詳細を取得できる一連のAPIが提供されます。
事前定義されたアクティビティ・ガイドADFタスクフローが要件を満たさない場合、これらのAPIを使用して、クライアント・アプリケーションに表示する情報を取得できます。
このAPIは、ガイド付きビジネス・プロセスを表示するアプリケーションの次のユーザー・ナビゲーション・シナリオをサポートするように設計されます。
フィルタを使用して、ガイド付きビジネス・プロセス・インスタンスのリストを表示します。使用可能なフィルタは次のとおりです。
MY
: ユーザーに割り当てられたアクティブなタスクを含むガイド付きビジネス・プロセス・インスタンス。
REPORTEES
: 現在のユーザーへの報告先に割り当てられたアクティブなタスクを含むガイド付きビジネス・プロセス・インスタンス。
PREVIOUS
: ユーザーに割り当てられた完了済タスクを含むガイド付きビジネス・プロセス・インスタンス、および、特定のタスクを別のユーザーに再割当てするインスタンス。
ADMIN
: ガイド付きビジネス・プロセス管理者に表示されるガイド付きビジネス・プロセス・インスタンス。アクティブなインスタンスは、すべてのユーザーに割り当てることができます。
注意:
BPMAGAdminロールは、管理者ロールが割り当てられたユーザーにマップされます。このロールによって、ユーザーは、完了済インスタンス、アクティブなインスタンスおよびエラーのあるインスタンスなど、サーバーで使用可能なすべてのガイド付きビジネス・プロセス・インスタンスを問合せできます。$DOMAIN_HOME/config/fmwconfig/system-jazn-data.xmlにある構成ファイルには、このロールの定義が含まれています。
注意:
ガイド付きビジネス・プロセスAPIを使用すると、タスクIDを指定して、詳細タスク情報を取得できますが、タスク情報は取得されません。これを行うには、ワークフロー・サービスAPIなど、別のAPIが必要です。
ワークフロー・サービスの詳細は、Oracle SOA SuiteでのSOAアプリケーションの開発のヒューマン・ワークフロー・サービスの概要に関する項を参照してください。
表31-1 ガイド付きビジネス・プロセス問合せサービスAPI
メソッド | 説明 |
---|---|
|
文字列パラメータ
マイルストンおよびタスクはアクティビティ・ガイド・インスタンス・ビューに表示されないので、不要なパフォーマンスのオーバーヘッドを避けるために、 |
|
アクティビティ・ガイド・インスタンスIDによって指定された 戻された 文字列パラメータ
文字列パラメータ
|
|
アクティビティ・ガイド・インスタンス内のマイルストンの表示情報を戻します。 戻された 文字列パラメータ
文字列パラメータ
|
APIによって、カスタム・アプリケーション内からガイド付きビジネス・プロセス問合せおよびメタデータ・サービスにアクセスできます。
次の例は、ガイド付きビジネス・プロセスのランタイム・サービスにアクセスするためのJava APIの使用を示しています。
例31-5 EJBを使用したガイド付きビジネス・プロセスのランタイム・サービスへのアクセス
package client; import com.oracle.bpel.activityguide.metadata.definition.model.AGDefinition; import java.util.ArrayList; import java.util.List; import oracle.bpel.services.workflow.IWorkflowConstants; import oracle.bpel.services.workflow.task.model.Task; import oracle.bpel.services.workflow.verification.IWorkflowContext; import oracle.bpel.services.workflow.client.IWorkflowServiceClient; import oracle.bpel.services.workflow.client.IWorkflowServiceClientConstants; import oracle.bpel.services.workflow.client.WorkflowServiceClientFactory; import oracle.bpel.services.workflow.query.ITaskQueryService; import oracle.bpel.services.workflow.query.impl.TaskQueryService; import oracle.bpel.services.workflow.client.WorkflowServiceClientContext; import oracle.bpel.services.workflow.metadata.config.ResourceBundleInfo; import oracle.bpel.services.workflow.activityguide.query.IAGQueryService; import oracle.bpel.services.workflow.activityguide.query.impl.AGQueryService; import oracle.bpel.services.workflow.activityguide.query.model.AGDisplayInfo; import oracle.bpel.services.workflow.activityguide.query.model.MilestoneDisplayInfo; import oracle.bpel.services.workflow.activityguide.metadata.IAGMetadataService; import oracle.bpel.services.workflow.activityguide.metadata.impl.AGMetadataService; import sun.security.util.Password; public class AGServiceSampleCode { private static String USERNAME = "jcooper"; private static String PASSWORD = "welcome1"; private static IWorkflowServiceClient wfSvcClient; private static IWorkflowContext sJCooperCtx; public static void main(String[] args) { try { testSetUp(); // GetAGDefinition API requires an AG instance as input, which is not easily accessible in customer's env. // As a result, the sample code for invoking this API is not provided. //testGetAGDefinition(); testGetAGDefinitionById(); testGetAGResourceBundleInfo(); testQueryAGDisplayInfos(); testQueryAGDisplayInfoDetailsById(); testQueryAGMilestoneDisplayInfo(); } catch (Exception e) { e.printStackTrace(); } } private static void testSetUp() throws Exception { wfSvcClient = WorkflowServiceClientFactory.getWorkflowServiceClient(WorkflowServiceClientFactory.REMOTE_CLIENT); sJCooperCtx = wfSvcClient.getTaskQueryService().authenticate(USERNAME, PASSWORD, null); } private static void testGetAGDefinitionById() throws Exception { String agDefinitionId = "HelpDeskRequestSCAApp/HelpDeskRequestComposite!1.0*2007-10-22_13-32-50_536//HelpDeskRequestProcess//HelpDeskRequestProcess.ag"; // Need to supply a valid AG definition id here AGDefinition agDefinition = wfSvcClient.getAGMetadataService().getAGDefinitionById (sJCooperCtx, agDefinitionId); if (agDefinition != null) { System.out.println("ag def obtained"); System.out.println("ag def name: " + agDefinition.getName()); System.out.println("ag def milestone display mode: " + agDefinition.getMilestoneDisplayMode()); } } private static void testGetAGResourceBundleInfo() throws Exception { String agDefinitionId = "HelpDeskRequestSCAApp/HelpDeskRequestComposite!1.0*2007-10-22_13-32-50_536//HelpDeskRequestProcess//HelpDeskRequestProcess.ag"; // Need to supply a valid AG definition id here ResourceBundleInfo resourceBundleInfo = wfSvcClient.getAGMetadataService().getResourceBundleInfo(sJCooperCtx, agDefinitionId, sJCooperCtx.getLocale()); System.out.println("bundle name: " + resourceBundleInfo.getName()); } private static void testQueryAGDisplayInfos() throws Exception { List agQueryColumns = new ArrayList(); agQueryColumns.add("MILESTONE_STATE"); agQueryColumns.add("DEFINITION_ID"); // Query for all AG instances belonging to user jcooper List agDisplayInfoList = wfSvcClient.getAGQueryService().queryAGDisplayInfos(sJCooperCtx, agQueryColumns, IAGQueryService.AGAssignmentFilter.MY, null, //agPredicate, null, //ordering, 0, 0); System.out.println("ag display info list size:" + agDisplayInfoList.size()); if ( agDisplayInfoList.size() > 0 ) { AGDisplayInfo agDisplayInfo = (AGDisplayInfo) agDisplayInfoList.get(0); System.out.println("AG title:" + agDisplayInfo.getTitle()); System.out.println("milestone display info list size:" + agDisplayInfo.getMilestoneDisplayInfo().size()); for (int i=0; i< agDisplayInfo.getMilestoneDisplayInfo().size(); i++) { System.out.println("i = " + i + " milestone display info:" + ((MilestoneDisplayInfo) agDisplayInfo.getMilestoneDisplayInfo().get(i)).getMilestoneInstance().getName()); } } } private static void testQueryAGDisplayInfoDetailsById() throws Exception { long cikey = 1; // Need to supply a valid AG cikey here List taskQueryColumns = new ArrayList(); taskQueryColumns.add("TASKID"); taskQueryColumns.add("TITLE"); taskQueryColumns.add("OUTCOME"); AGDisplayInfo agDisplayInfo = wfSvcClient.getAGQueryService().getAGDisplayInfoDetailsById (sJCooperCtx, cikey, taskQueryColumns); System.out.println("AG display info status:" + agDisplayInfo.getAGInstanceInfo().getStatus()); System.out.println("AG display info bpel status:" + agDisplayInfo.getAGInstanceInfo().getBpelStatus()); } private static void testQueryAGMilestoneDisplayInfo() throws Exception { long cikey = 1; // Need to supply a valid AG cikey here String milestoneName = "ApprovePricing"; // Need to supply a valid AG milestone name here List taskQueryColumns = new ArrayList(); taskQueryColumns.add("TASKID"); taskQueryColumns.add("TITLE"); taskQueryColumns.add("OUTCOME"); MilestoneDisplayInfo milestoneDisplayInfo = null; milestoneDisplayInfo = wfSvcClient.getAGQueryService().getMilestoneDisplayInfo (sJCooperCtx, cikey, milestoneName, taskQueryColumns); System.out.println("milestone display info name:" + milestoneDisplayInfo.getMilestoneInstance().getName()); System.out.println("milestone display info title:" + milestoneDisplayInfo.getTitle()); System.out.println("milestone display info task list size:" + milestoneDisplayInfo.getTask().size()); } }
EJBおよびWebサービスAPIの詳細は、Javadocを参照してください。
ガイド付きビジネス・プロセスは、ログ・ファイルを使用して、実行する様々な操作に関する情報を格納します。このファイルには、アプリケーションの動作を追跡するログ・メッセージ、およびアプリケーションの実行中に発生する可能性のあるエラーが含まれます。
このログ・ファイルの情報を使用して、アプリケーションの予期しない動作の原因を見つけることができます。
ログ・メッセージの重要度は、メッセージのレベルに応じて異なります。デバッグ目的で使用されるメッセージのレベルは、警告またはエラーを含むメッセージのレベルと異なります。
ガイド付きビジネス・プロセスのロギングを構成して、必要に応じて、あるレベルのメッセージのみを記録できます。
ログ・メッセージには、問題の重大度を識別するレベルが含まれています。
表28-3は、使用可能なログ・レベルを示しています。重大度の列では、ある重大度を識別するのに使用される共通の用語を説明しています。ログ・レベル値の列では、logging.xmlファイルで使用する必要がある値を指定しています。
表31-2 ログ・レベル値
重大度 | ログ・レベル値 | 説明 |
---|---|---|
致命的 |
INCIDENT_ERROR:1 |
原因が不明の重大な問題を示しています。ユーザーは自分で問題を解決できないため、Oracleサポートに連絡する必要があります。 |
重大 |
ERROR:1 |
システム管理者がすぐに対処する必要がある重大な問題を示しています。 |
警告 |
WARNING:1 |
潜在的な問題を示しています。システム管理者は、これらのログ・メッセージを確認する必要があります。 |
情報 |
NOTIFICATION:1 |
主要サブコンポーネントや機能のアクティブ化または非アクティブ化などの、主要なライフサイクル・イベントを示しています。 |
構成 |
NOTIFICATION:16 |
下位レベルで発生した標準イベントを指定します。 |
普通 |
TRACE:1 |
パブリックAPIのエントリ・ポイント/終了ポイントなどの、製品のエンド・ユーザーにとって意味のあるイベントのトレースまたはデバッグ情報を示しています。 |
詳細 |
TRACE:16 |
Oracleサポートが特定のサブシステムでの問題を診断するのに役立つ可能性のある、詳細なトレースまたはデバッグ情報を指定します。 |
ガイド付きビジネス・プロセスのロギングを構成して、ガイド付きビジネス・プロセスのログに格納された情報の詳細のレベルを指定できます。
ログ・レベルを設定するには、logging.xmlファイルのロガー要素で、属性レベルの値を変更する必要があります。
ログ・レベルをある重大度に設定すると、それより高い重大度に対応するすべてのメッセージも格納されます。たとえば、ログ・レベルを「重大」に設定した場合、重大度が「致命的」のログ・メッセージも記録されます。
ログ・メッセージは、ファイル<DOMAIN HOME>/servers/<Server Name>/logs/
Server Name-diagnostic.log
に格納されています。
テキスト・エディタを使用して、ログ・メッセージを含むファイルを表示できます。
ログ・メッセージには、ガイド付きビジネス・プロセス・アプリケーションの問題を識別するのに役立つ情報が含まれています。
表28-3は、ログ・メッセージを構成する項目を説明しています。
表31-3 ログ・メッセージ項目
ログ・メッセージ項目 | 説明 |
---|---|
日付と時間 |
このログ・メッセージが生成された日付および時間を指定します。 |
メッセージ・タイプ |
メッセージの重大度を指定します。 |
実行コンテキストID (ECID) |
元のコンポーネントが実行中のスレッドに対応するグローバル一意識別子および順序番号。これを使用して、同一のスレッドに含まれる可能性がある複数のコンポーネントからのメッセージを関連付けることができます。 |
アプリケーション名 |
ログ・メッセージを生成したアプリケーションの名前を指定します。 |
クラス・パッケージ名 |
ログ・メッセージを生成したクラスのパッケージを指定します。 |
メッセージID |
メッセージを一意に識別する短い識別子を指定します。 |
メッセージ・テキスト |
イベントを説明します。このメッセージはローカライズされているため、システムのロケールに対応した言語で表示されます。 |
ログ・ファイルを読む際には、メッセージ・テキストを見つける必要があります。このテキストは、何が発生したかを説明しています。メッセージ・タイプは、問題がどの程度重大かを識別するのに役立ちます。様々なメッセージ・タイプの詳細は、表31-2を参照してください。
ログ・メッセージの日付と時間を使用して、問題の原因となるアクションを特定できます。
注意:
Oracleサポートに連絡する前に、メッセージIDおよび実行コンテキストIDをOracleサポートに提供できることを確認してください。
例31-6 ログ・メッセージの例
DefaultServer-diagnostic.log:[2009-07-10T17:39:35.220-07:00] [DefaultServer] [NOTIFICATION] [AGU-12605] [oracle.bpel.activityguide.ui.beans] [tid: [ACTIVE].ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'] [userId: jstein] [ecid: 0000I9bG2R3DScQ6ube9UH1ALxd1000007,0] [APP: AGNonUIshellApp#V2.0] [arg: jstein] Setting user, jstein as the loginUserId in server interfacing bean.[[
例28-12は、loginUserIdの変更に関する情報を含む通知ログ・メッセージを示しています。この例での各ログ・メッセージ項目は、次のとおりです。
日付と時間: 2009-07-10T17:39:35.220-07:00
メッセージ・タイプ: NOTIFICATION
実行コンテキストID: ecid: 0000I9bG2R3DScQ6ube9UH1ALxd1000007,0
アプリケーション名: APP: AGNonUIshellApp#V2.0
クラス・パッケージ名: oracle.bpel.activityguide.ui.beans
メッセージID: AGU-12605
メッセージ・テキスト: Setting user, jstein as the loginUserId in server interfacing bean.