BEA ホーム | 製品 | デベロッパ・センタ | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > WebLogic Integration > BPM トピック > BPM クライアント アプリケーション プログラミング > 手動によるワークフローの開始 |
BPM クライアント アプリケーション プログラミング
|
手動によるワークフローの開始
この章では、ワークフローを手動で開始する方法について説明します。内容は以下のとおりです。
注意: ワークフローの開始は、外部またはタイムアウト イベント、または 1 つのワークフローを別のワークフローから開始する ワークフロー開始アクション ActionStartWorkflow のいずれかのメカニズムを使って自動化することもできます。後者のメソッドでは、呼び出したワークフローがこれまでに開始されたかどうかをビジネス ルールを使って判断できるため、制御の幅が広くなります。またこのメカニズムにより、XML の内容を使用する変数の設定、および複数のワークフローの開始が可能になります。ワークフローの開始に使用できるアクションの詳細については、テンプレート定義 DTD、または『WebLogic Integration Worklist ユーザーズ ガイド』の「アクションの定義」を参照してください。
WebLogic Integration Worklist を使ってワークフローを手動で開始する場合の説明は、『WebLogic Integration Worklist ユーザーズ ガイド』の「ワークフローを使った作業」を参照してください。
注意: Worklist クライアント アプリケーションは、このリリースの WebLogic Integration からは非推奨になります。Worklist クライアント アプリケーションに代わる機能については、『WebLogic Integration リリース ノート』を参照してください。
開始可能なワークフローの取得
ワークリストまたはカスタムの実行時管理クライアントから手動で開始可能なすべてのワークリストを取得するには、次の com.bea.wlpi.server.worklist.Worklist メソッドを使用します。
public java.util.List getStartableWorkflows(
java.lang.String orgId
) throws java.rmi.RemoteException,
com.bea.wlpi.common.WorkflowException
getStartableWorkflows() メソッドのパラメータを次の表に示します。
このメソッドは、以下の com.bea.wlpi.common.TemplateInfo オブジェクトのリストを返します。
そのテンプレート定義情報にアクセスするには、TemplateInfo オブジェクトに記載の TemplateInfo オブジェクトのメソッドを使用します。
たとえば、次のコードでは、オーガニゼーション ID の ORG1 で指定したオーガニゼーションに対して開始可能なすべてのワークフローのリストが取得されます。このコード例では、worklist は Worklist EJB への EJBObject 参照を表します。
List template = worklist.getStartableWorkflows(“ORG1”);
getStartableWorkflows() メソッドの詳細については、Javadoc の com.bea.wlpi.server.worklist.Worklist を参照してください。
手動によるワークフローの開始
ワークフローを手動で開始するには、以下のいずれかの com.bea.wlpi.server.worklist.Worklist メソッドを使用します。
メソッド 1
public java.lang.String instantiateWorkflow(
java.lang.String orgId,
java.lang.String templateId
) throws java.rmi.RemoteException,
com.bea.wlpi.common.WorkflowException
メソッド 2
public java.lang.String instantiateWorkflow(
java.lang.String orgId,
java.lang.String templateId,
java.lang.String xml,
java.util.Map initialValues,
java.util.Map pluginData
) throws java.rmi.RemoteException,
com.bea.wlpi.common.WorkflowException
メソッド 3
public java.lang.String instantiateWorkflow(
java.lang.String orgId,
java.lang.String templateId,
java.lang.Object transactionId
) throws java.rmi.RemoteException,
com.bea.wlpi.common.WorkflowException
メソッド 4
public java.lang.String instantiateWorkflow(
java.lang.String orgId,
java.lang.String templateId,
java.lang.String xml,
java.util.Map initialValues,
java.util.Map pluginData,
java.lang.Object transactionId
) throws java.rmi.RemoteException,
com.bea.wlpi.common.WorkflowException
第 1 のメソッドは、非クラスタ化環境で使用できます。クラスタ化環境では第 2 のメソッドを使用することをお勧めします。この場合、トランザクションがコミットされた後、またはサーバ クラッシュやフェイル オーバーが発生した後に、メソッドが再発行されないよう、指定された ID を使用してメソッドの実行状態が追跡されます。
instantiateWorkflow() メソッドのパラメータを次の表に示します。
instantiateWorkflow() メソッドは、ワークフロー テンプレートの呼び出しの他に、テンプレート定義の中でリストアップされているそれぞれの手動による Start (開始) ノードに対し、テンプレート定義内で指定されている場合に、以下のタスクを実行します。
テンプレート定義の作成、および呼び出し時に実行するタスクの定義については、ワークフロー テンプレート定義の作成および管理を参照してください。
instantiateWorkflow() メソッドは、クライアント要求 DTD に準拠し、また以下のそれぞれのテンプレート定義インスタンスの情報を含む XML ドキュメントを返します。
クライアント要求 DTD の詳細については、クライアント要求 DTDを参照してください。
たとえば、次のコードでは、activeOrgId および templateId の変数で指定されたオーガニゼーションに対して、テンプレート定義が呼び出されます。このコード例では、worklist は Worklist EJB への EJBObject 参照を表します。
String clientReq = worklist.instantiateWorkflow(activeOrgId, templateId);
複数のテンプレート定義が同じ templateId で表されている場合、WebLogic Integration はアクティブで、また有効日および終了日がもっとも適切なバージョンを選択します。
instantiateWorkflows() メソッドの詳細については、Javadoc の com.bea.wlpi.server.worklist.Worklist を参照してください。
手動によるワークフロー開始のサンプル
この節では、コマンドラインおよび JSP Worklist サンプルから抜粋して、ワークフローを手動で開始する方法を示します。
注意: コマンドラインおよび JSP Worklist サンプルの詳細については、BPM API のサンプルを参照してください。
コマンドラインの Worklist サンプル
ワークフローの開始方法を示すコマンドライン Worklist サンプルから抜粋したものを以下に示します。
注意: コマンドライン Worklist サンプルの詳細については、コマンドライン Worklist サンプルを参照してください。
このサンプルでは、ユーザと通信するための入力ストリームが定義されており、ユーザは以下のアクションのいずれかを指定するよう求められます。
重要なコード行は、太字で強調されています。このコード例では、worklist は Worklist EJB への EJBObject 参照を表します。
/* ユーザとの通信のための入力ストリームを作成する */
stdIn = new BufferedReader( new InputStreamReader( System.in ) );
/* ツール タイトルを表示する */
System.out.print( "¥n--- Command Line Worklist v1.2 ---" );
/* メイン メニューを表示してユーザと交信する */
while( true ) {
/* メニューを表示する */
System.out.println( "¥n--- Main Menu ---" );
System.out.println( "¥nEnter choice:" );
System.out.println( "1) Organizations" );
System.out.println( "2) Workflows" );
System.out.println( "3) Tasks" );
System.out.println( "Q) Quit" );
System.out.print( ">> " );
.
.
.
public static void mngWorkflows( ) {
String templateId;
/* ユーザとの通信のための入力ストリームを作成する */
BufferedReader stdIn = new BufferedReader(
new InputStreamReader( System.in ) );
try {
/* メイン メニューを表示してユーザと交信する */
while( true ) {
/* メニューを表示する */
System.out.println( "¥n¥n--- Workflows ---" );
System.out.println( "¥nEnter choice:" );
System.out.println( "1) List Startable workflow templates" );
System.out.println( "2) Start a workflow" );
System.out.println( "B) Back to previous menu" );
System.out.println( "Q) Quit" );
System.out.print( ">> " );
/* ユーザの選択を取得する */
String line = stdIn.readLine( );
/* ユーザが選択を行わないで〔Enter〕を押したか ? */
if( line.equals( "" ) )
continue;
/* ユーザが複数の文字を入力したか ? */
else if( line.length( ) > 1 ) {
System.out.println( "*** Invalid choice" );
continue;
}
/* 大文字および文字へのコンバート*/
char choice = line.toUpperCase( ).charAt( 0 );
/* ユーザの選択を処理する */
switch( choice ) { ...
開始可能なワークフローを取得する
開始可能なワークフローのリストを取得する方法を示します。
/*開始可能なワークフロー テンプレートをリストアップする */
case '1' :
/* WLPI 公開 API メソッド */
/* 注意 : 発生した例外を取り込むコードを
* 追加するとよい */
String activeOrgId = worklist.getActiveOrganization( );
List templateList;
/* WLPI 公開 API メソッド */
/* 注意 : 発生した例外を取り込むコードを
* 追加するとよい */
templateList = worklist.getStartableWorkflows( activeOrgId );
/* 開始可能なワークフローがあるか ? */
if( templateList.size( ) == 0 )
System.out.println( "¥nNo Startable Workflows." );
else
System.out.println( "¥nStartable Workflows:" );
/* リストを処理して、開始可能なワークフローを表示する */
for( int i = 0; i < templateList.size( ); i++ ) {
/* リストから要素を取り出す */
TemplateInfo templateInfo = (
TemplateInfo )templateList.get( i );
/* テンプレート ID と名前を取り出して表示する */
System.out.println( "- ID: " + templateInfo.getId( ) +
" Name: " + templateInfo.getName( ) );
}
break; ...
ワークフローを手動で開始する
ワークフローを手動で開始する方法を示します。
/* ワークフロー テンプレートのインスタンス化 */
case '2' :
/* インストタンス化するワークフローのテンプレート ID を取得する */
if( ( templateId = askQuestion(
"¥nEnter Workflow Template ID" ) ) == null ) {
/* ユーザによる操作の取り消し */
System.out.println( "*** Cancelled" );
break;
}
try {
/* WLPI 公開 API メソッド */
/* アクティブなオーガニゼーション ID を取り出す */
activeOrgId = worklist.getActiveOrganization( );
/* WLPI 公開 API メソッド */
/* ワークフローをインスタンス化する */
String clientReq = worklist.instantiateWorkflow(
activeOrgId, templateId );
/* 正常終了(例外の発生なし) */
System.out.println( "- Success" );
// System.out.println( "- Client Request:¥n" + clientReq );
/* クライアントの要求 (もしあれば) を処理するために、
* サーバからの応答を解析する */
parser.handleRequest( clientReq );
}
catch( Exception e ) {
System.out.println(
"*** Failed to instantiate Workflow Template (ID: " +
templateId + ")" );
System.err.println( e );
}
break;
/* 前のメニューに戻る */
case 'B' :
return;
/* ツールを終了 */
case 'Q' :
/* サーバから切断 */
disconnect( );
System.exit( 1 );
default:
System.out.println( "*** Invalid choice" );
}
}
}
/* 「Unhandled」例外 */
catch( Exception e ) {
System.err.println( e );
}
return;
}
JSP Worklist サンプル
ここでは、JSP Worklist サンプルの抜粋から、ワークフローを手動で開始する方法を示します。
重要なコード行は、太字で強調されています。このコード例では、worklist は Worklist EJB への EJBObject 参照を表します。
JSP Worklist へのプライマリ インタフェースの図に示すように、ユーザが JSP Worklist 内の Start Workflow リンクをクリックして、開始可能なワークフローを選択すると、ワークフローが開始されます。次のように、Start Workflow リンクは startworkflow.jsp ファイルを参照します。
<a href=“startworkflow.jsp”><font color= “white”>Start Workflow</font></a>
次のサンプルでは、JSP Worklist サンプル内の startworkflow.jsp ファイルの抜粋から、ワークフローの開始方法を示します。
<%@ page import="
javax.ejb.*,
java.rmi.RemoteException,
java.util.*,
com.bea.wlpi.common.*
com.bea.wlpi.server.worklist.*
" session="true"%>
<jsp:usebean id="responseParser" class="jsp_servlet._worklist.ResponseParser" scope="session"/>
<%
Worklist worklist = null;
String name;
String error = null;
String currentOrg = (String)session.getValue("currentOrg");
worklist = (Worklist)session.getValue("worklist");
name = (String)session.getValue("name");
if (worklist != null) {
Hashtable h = new Hashtable();
h.put(javax.naming.Context.SECURITY_PRINCIPAL, name);
h.put(javax.naming.Context.SECURITY_CREDENTIALS,
(String)session.getValue("password"));
new javax.naming.InitialContext(h);
start 変数は、ユーザが開始するワークフロー テンプレート定義のテンプレート ID を格納するために使用されます。始めに JSP がロードされると、start 変数はnull に設定され、開始ワークフローの try ループはスキップされます。次に、開始可能なワークフローがリストされます。ユーザが開始可能なワークフローを選択すると、startworkflow.jsp ファイルが呼び出され、その start 変数は、TemplateInfo オブジェクトから取得するテンプレート ID の値に設定されます。結果の XML ファイル(これはクライアント要求 DTDに準拠)は、instantiateWorkflow() メソッドの呼出しから返され、解析のためにレスポンス パーサーの ResponseParser に渡されます。レスポンス パーサーの詳細については、タスクを割り当てるを参照してください。
/* 開始パラメータが設定された場合にワークフローを開始する */
String start = request.getParameter("start");
if (start != null)
try {
responseParser.parse(worklist.instantiateWorkflow(
currentOrg, start));
session.removeValue("error");
if (responseParser.isQuery())
pageContext.forward("query.jsp");
else
pageContext.forward("worklist.jsp");
return;
} catch (Exception e) {
error = e.getMessage();
} out.println(error);
%>
<html>
<title>eProcess Integrator</title>
<head>
</head>
<body bgcolor=#ffffff>
<font face="Arial" size="4">
<table dir="ltr" border="0" cellpadding="1" cellspacing="1">
<tr>
<td><img src="logo.gif"></td>
<td>
<font color="red" size="7"><strong><em>Weblogic</em></strong></font>
<font color="black" size="7"><strong><em>Process Integrator
</em></strong></font></td>
</tr>
<tr>
<td bgcolor="navy" valign="top">
<table dir="ltr" border="0" cellpadding="2" cellspacing="2" >
<tr>
<td><font color="yellow"><strong>Go ...</strong></font></td>
</tr>
<tr>
<td><a href="worklist.jsp?worklist">
<font color="white">Worklist</font></a></td>
</tr>
<tr>
<td><a href="logoff.jsp"><font color="white">Logoff</font></a></td>
</tr>
</table>
</td>
<td valign="top">
<table dir="ltr" border="0" cellpadding="2" cellspacing="2" valign="top">
<tr>
<td><font color="navy" size="5" face="Arial">
Start Workflow</font></td>
</tr>
開始可能なワークフローがリストされます。ユーザが開始可能なワークフローを選択すると、startworkflow.jsp ファイルが呼び出され、その start 変数は、TemplateInfo オブジェクトから取得するテンプレート ID の値に設定されます。
/* 開始可能なワークフロー名を取得し、それらをリストアップする /*
<%
try {
List templates = worklist.getStartableWorkflows(currentOrg);
for (int i = 0; i < templates.size(); i++) {
TemplateInfo info = (TemplateInfo)templates.get(i);
%>
<tr>
<td><a href="startworkflow.jsp?start=<%=info.getId()%>">
<%=info.getName()%></a></td>
</tr>
<%
}
} catch (Exception e) {
out.print("Error 3: " + e);
}
}
%>
</table>
</td>
</tr>
</table>
</font>
</body>
</html>
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |