BEA ホーム | 製品 | デベロッパ・センタ | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > WebLogic Integration > B2B トピック > B2B Integration ワークフローの作成 > 協調的ワークフローの開始 |
B2B Integration ワークフローの作成
|
協調的ワークフローの開始
以下の節では、協調的ワークフローの開始アクションを定義する方法について説明します。
注意: このドキュメントで説明する B2B 機能でサポートしている XOCP ビジネス プロトコルは、WebLogic Integration の本リリースより廃止されています。 XOCP の代替となるビジネス プロトコルに関する詳細については、『WebLogic Integration リリース ノート』を参照してください。
協調的ワークフローの開始について
注意: RosettaNet プロトコルに基づく会話とワークフローを実装する場合、手順については『B2B Integration RosettaNet の実装』を参照してください。 これらの手順は RosettaNet 1.1 および 2.0 プロトコルに基づいています。
ebXML ビジネス プロトコルは、このドキュメントで説明しているものよりシンプルな会話モデルを採用しています。 このため、使用するのが ebXML ビジネス プロトコルのみであれば、このドキュメントではなく ebXML ドキュメントを直接参照されることをお勧めします。 ebXML ビジネス プロトコルのワークフロー作成に関する情報については、『B2B Integration ebXML の実装』の「ワークフローで ebXML を使用する」を参照してください。
協調的ワークフローの開始作業は、以下の 2 つのタスクで構成されます。
以降の 2 節では、各タスクの設計およびプログラミングの関係について説明します。
協調的ワークフロー開始プロパティの定義
協調的ワークフローは、以下の 3 つの方法で開始できます。
ワークフローの開始プロパティは、設計するワークフローのタイプ(会話開始者か会話参加者か)に基づき、以下のルールに従って定義します。
注意: ワークフローをインスタンス化するには、ワークフロー テンプレート定義がアクティブかつ有効である必要があります。
実行時の協調的ワークフローの開始
実行時に協調的ワークフローを開始する方法は、ワークフローが会話開始者または会話参加者のどちらなのかによって異なります。
会話開始者ワークフローの開始
会話開始者ワークフローは、以下のいずれかの方法で開始します。
プログラム的に開始される会話開始者ワークフローでは、開始ノードのプロパティで [手動] を定義する必要があります。 プログラム的に会話開始者ワークフローを開始する方法の詳細については、会話開始者ワークフローを開始するアプリケーションの開発を参照してください。
別のローカル ワークフローを通じて開始される会話開始者ワークフローでは、開始ノードで開始プロパティを [呼び出し] に定義する必要があります。 ローカル ワークフロー(サンプル アプリケーションで使用する設計パターンではプライベート ワークフローと呼ぶ)では、会話開始者ワークフローをサブワークフローとして開始できます。 サンプル アプリケーションの詳細については、『WebLogic Integration チュートリアル』および『B2B Integration サンプルの使い方』を参照してください。
会話開始者ワークフローの開始プロパティを定義するには、次の手順を行います。
図3-1 [開始のプロパティ] ダイアログ ボックス : 手動開始
会話参加者ワークフローの開始ノードの定義
会話参加者ワークフローは、トレーディング パートナから最初のビジネス メッセージを受信したときに開始されます。 そのようなワークフローでは、ビジネス メッセージで開始するように定義する必要があります。
会話参加者ワークフローのビジネス メッセージで開始するように定義するには、次の手順を行います。
図3-2 ビジネス メッセージで開始するように選択
XOCP 1.1 プロトコルに基づく会話参加者ワークフローの開始(非推奨)
[開始のプロパティ] ダイアログ ボックスで、XOCP 1.1 プロトコルに基づくワークフローの以下の情報を入力します。
図3-4 XOCP 1.1 開始プロパティ
RosettaNet 2.0 プロトコルに基づく会話参加者ワークフローの開始
[開始のプロパティ] ダイアログ ボックスで、RosettaNet 2.0 プロトコルに基づくワークフローの以下の情報を入力します。
図3-5 RosettaNet 2.0 開始プロパティ
RosettaNet 2.0 プロトコルに基づくワークフローの開始プロパティ作成の詳細については、『B2B Integration RosettaNet の実装』を参照してください。
RosettaNet 1.1 プロトコルに基づく会話参加者ワークフローの開始
[開始のプロパティ] ダイアログ ボックスで、RosettaNet 1.1 プロトコルに基づくワークフローの以下の情報を入力します。
図3-6 RosettaNet 1.1 開始プロパティ
RosettaNet 1.1 プロトコルに基づくワークフローの開始プロパティ作成の詳細については、『B2B Integration RosettaNet の実装』を参照してください。
Start Public Workflowアクションの定義
Start Public Workflow アクションを使用すると、親ワークフローから協調的ワークフローを開始できます。 Start Public Workflow アクションを使用するときには、以下の事項を指定する必要があります。
Start Public Workflow アクションを通じて協調的ワークフローを開始する場合、その協調的ワークフローには親ワークフローと同期を取るための手段が必要です。
以降の節では、Start Public Workflow アクションを定義する方法、および呼び出される協調的ワークフローと親ワークフローを同期させる方法について説明します。
Start Public Workflow アクションの定義
Start Public Workflow アクションはどのワークフロー ノードとでも関連付けることができますが、通常はタスク ノードと関連付けます。 Start Public Workflow アクションは明示的にワークフロー テンプレート定義に追加する必要があります。
Start Public Workflow アクションの追加
Studio で親ワークフローの Start Public Workflow アクションを定義するには、次の手順を行います。
図3-7 [アクションを追加] ダイアログ ボックス
図3-8 [アクションを追加] ダイアログ ボックスと統合アクション
図3-9 [パブリック ワークフローを開始] ダイアログ ボックス
図3-10 [パブリック ワークフローを開始] ダイアログ ボックスの [ワークフロー] ページ
[パブリック ワークフローを開始] ダイアログ ボックスでの Expression Builder を使用した値の指定
Studio の Expression Builder を使用して、[パブリック ワークフローを開始] ダイアログ ボックスで以下の値を指定できます。
Expression Builder を表示するには、上記のいずれかの値を指定するセルを右クリックして [式] を選択します。 次の図のように Expression Builder が表示されます。
図3-11 Studio の Expression Builder
Expression Builder の使い方については、『WebLogic Integration Studio ユーザーズ ガイド』の「ワークフロー式の使用法」を参照してください。 子ワークフローと親ワークフローの同期 Start Public Workflowアクションの定義で説明したように、Start Public Workflow アクションを通じて協調的ワークフローを開始するためには、その協調的ワークフローと親ワークフローの同期を取る手段が必要です。 同期は、以下のいずれかの方法で実現できます。
会話開始者ワークフローを開始するアプリケーションの開発
会話開始者ワークフローは、Java アプリケーション(ワークフロー アプリケーション)を通じて実行時に開始できます。 以下の節では、会話開始者ワークフローをプログラム的に開始するワークフロー アプリケーションの作成方法を説明します。
会話開始者ワークフローをプログラム的に開始するためには、会話開始者ワークフローの開始で説明されているようにワークフロー テンプレートの開始ノードで [手動] 開始プロパティが必要です。
注意: WebLogic Integration リリース 2.0 以降では、Worklist を通じて協調的ワークフローを開始しようとするとエラーが発生します。
Message Manipulator API
ワークフロー アプリケーションでは、com.bea.b2b.wlpi パッケージを使用してワークフローを開始できます。 このパッケージでは、以下のインタフェースとクラスが提供されます。
このパッケージの詳細については、『BEA WebLogic Integration Javadoc』を参照してください。 会話開始者ワークフローにアクセスするためのプログラミング手順 会話開始者ワークフローにアクセスするために、ワークフロー アプリケーションでは次の手順を行います。
ワークフロー アプリケーションでは、例外処理で説明されているように Message Manipulator API の各メソッド呼び出しで送出される例外も処理する必要があります。
注意: ワークフローを開始するアプリケーションを作成する前に、以下の事項を確認してください。
手順 1 : 必要なパッケージをインポートする
ワークフローにアクセスするために、ワークフロー アプリケーションではまず必要なパッケージをインポートします。 最低でも、ワークフロー アプリケーションでは次の例のように com.bea.b2b.wlpi パッケージをインポートする必要があります。
コード リスト 3-1 com.bea.b2b.wlpi パッケージのインポート
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.naming.*;
import com.bea.wlpi.common.*;
import com.bea.b2b.wlpi.*;
import com.bea.eci.logging.*;
手順 2 : 特定のワークフロー テンプレートのワークフロー インスタンス オブジェクトを作成する
次に、ワークフロー アプリケーションでは、次の例のように特定のワークフロー テンプレート定義のワークフロー インスタンス オブジェクトを作成する必要があります。
コード リスト 3-2 ワークフロー インスタンス オブジェクトの作成
Hashtable[] array = new Hashtable[2];
Hashtable party1 = new Hashtable();
Hashtable party2 = new Hashtable();
party1.put(WorkflowInstance.PARTYNAME_KEY, PARTY_SOURCE);
party2.put(WorkflowInstance.PARTYNAME_KEY, PARTY_DEST);
array[0] = party1;
array[1] = party2;
WorkflowInstance wi = new WorkflowInstance(BUSINESS_PROCESS_NAME,
BUSINESS_PROCESS_MAJOR,
BUSINESS_PROCESS_MINOR,
BUSINESS_PROCESS_ROLE,
array);
手順 3 : 入力変数を初期化する
会話開始者ワークフローで入力変数が定義されている場合は、ワークフロー インスタンスを開始する前にそれらの変数を初期化して値を割り当てる必要があります。 それらの入力変数は、ワークフロー変数の使用についてで説明されているように Studio においてテンプレート定義で最初に宣言する必要があります。
ワークフロー アプリケーションでは、ワークフロー インスタンスで setVariable メソッドを呼び出し、そのメソッドに変数の名前と値を渡してインスタンス変数を設定します。 setVariable メソッドでは、以下のパラメータが必要です。
次の例は、setVariable メソッドを使用して、開始するワークフローの 2 つの変数の値を指定する方法を示しています。 コード リスト 3-3 入力変数の値の設定 手順 4 : ワークフロー インスタンスの開始 ワークフロー インスタンスを作成して入力変数を初期化した後、ワークフロー アプリケーションは次の例のようにインスタンス オブジェクトの start メソッドを呼び出してワークフロー インスタンスを開始します。 コード リスト 3-4 ワークフロー インスタンスの開始 手順 5 : ワークフロー インスタンスの完了を待つ ワークフロー インスタンスが開始された後、ワークフロー アプリケーションはワークフロー インスタンスの waitForCompletion メソッドを呼び出してその完了を待つことができます。 ワークフロー インスタンスが完了するまで処理はブロックされます。 コード リスト 3-5 ワークフロー インスタンスの完了を待つ ワークフロー インスタンスの完了を待つ間、ワークフロー アプリケーションではワークフロー インスタンスの isCompleted メソッドを呼び出してワークフロー インスタンスの完了状態を確認できます。 このメソッドは、ワークフローの実行が完了している場合は true を返し、それ以外の場合は false を返します。 手順 6 : 出力変数の結果を処理する ワークフロー インスタンスが完了した後、ワークフロー アプリケーションでは出力変数に格納された情報を取り出してワークフロー インスタンスの結果を処理できます。 それらの出力変数は、Studio においてテンプレート定義で最初に宣言する必要があります。 ワークフロー アプリケーションでは、次の例のように、ワークフロー インスタンスの getVariable メソッドを呼び出し、取り出す変数の名前をそのメソッドに渡してインスタンス変数の値を取り出します。 コード リスト 3-6 出力変数の結果の取り出し getVariable メソッドは、適切な Java データ型にキャストする必要のある Java オブジェクトを返します。 対応するワークフロー変数の型に応じて戻り値をキャストする Java の型の詳細については、『WebLogic Integration Studio ユーザーズ ガイド』を参照してください。 例外処理 ワークフロー アプリケーションの実行中にエラーが発生した場合は、com.bea.b2b.wlpi.WLPIException が送出されます。 ワークフロー API の各メソッド呼び出しで、ワークフロー アプリケーションでは次の例のようにこの例外を捕捉して適切に処理できます。 コード リスト 3-7 ワークフロー アプリケーションでの WLPIExceptions の処理
wi.setVariable( INTEGER_ONE_VAR, new Long( 3 ) );
wi.setVariable( INTEGER_ONE_VAR, new Long( 5 ) ); wi.start();
wi.waitForCompletion();
product = (String)wi.getVariable(MULTIPLY_REPLY_VAR);
note = (String)wi.getVariable(NOTE_VAR);catch (WorkflowException we){
debug("Error starting workflow");
we.printStackTrace();
}
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |