BEA ホーム | 製品 | デベロッパ・センタ | support | askBEA
 ドキュメントのダウンロード   サイト マップ   用語集 
検索

B2B Integration ワークフローの作成

 前 次 目次 索引 PDFで表示  

協調的ワークフローの開始

以下の節では、協調的ワークフローの開始アクションを定義する方法について説明します。

注意: このドキュメントで説明する 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 サンプルの使い方』を参照してください。

会話開始者ワークフローの開始プロパティを定義するには、次の手順を行います。

  1. WebLogic Integration Studio ユーザーズ ガイド』の「ワークフロー テンプレートの定義」の説明に従って開始シェイプを表示または追加します。

  2. 開始シェイプをダブルクリックして [開始のプロパティ] ダイアログ ボックスを表示します。

    図3-1 [開始のプロパティ] ダイアログ ボックス : 手動開始


     

  3. 必要に応じて、[説明] フィールドのテキストをユニークで識別可能な名前に変更します。

  4. ワークフローがプログラム的に開始される場合は、[手動] を選択します。 ワークフローが別のワークフローを通じて開始される場合は、[呼び出し] を選択します。

    これらのオプションに関する詳細については、『WebLogic Integration Studio ユーザーズ ガイド』の「ワークフロー テンプレートの定義」を参照してください。

  5. [OK] をクリックします。

 


会話参加者ワークフローの開始ノードの定義

会話参加者ワークフローは、トレーディング パートナから最初のビジネス メッセージを受信したときに開始されます。 そのようなワークフローでは、ビジネス メッセージで開始するように定義する必要があります。

会話参加者ワークフローのビジネス メッセージで開始するように定義するには、次の手順を行います。

  1. WebLogic Integration Studio ユーザーズ ガイド』の「ワークフロー テンプレートの定義」の説明に従って開始シェイプを表示または追加します。

  2. 開始シェイプをダブルクリックして [開始のプロパティ] ダイアログ ボックスを表示します。

  3. [開始のプロパティ] ダイアログ ボックスで [イベント] を選択し、右側に表示されるドロップダウン リストで [Business Message] を選択します。

    図3-2 ビジネス メッセージで開始するように選択


     

    [開始のプロパティ] ダイアログ ボックスが、次の図のようにフィールドを追加して再表示されます。 これらのフィールドでは、協調的ワークフローに固有の情報(特にワークフローが基づくビジネス プロトコルに関連する情報)を追加します。 次の図は、XOCP プロトコルに基づくワークフローの [開始のプロパティ] ダイアログ ボックスを示しています。

    図3-3 会話参加者ワークフローの開始プロパティ


     

  4. [説明] フィールドのテキストをユニークで識別可能な名前に変更します。

  5. ワークフローが基づくビジネス プロトコルで必要な情報を入力します。詳細については、以下の節を参照してください。

  6. WebLogic Integration Studio ユーザーズ ガイド』の「ワークフロー テンプレートの定義」の説明に従って開始オーガニゼーションを指定します。

  7. [OK] をクリックします。

XOCP 1.1 プロトコルに基づく会話参加者ワークフローの開始(非推奨)

[開始のプロパティ] ダイアログ ボックスで、XOCP 1.1 プロトコルに基づくワークフローの以下の情報を入力します。

図3-4 XOCP 1.1 開始プロパティ


 

  1. [対象変数] は、内部型のインスタンスが格納される object 型のワークフロー変数です。内部型のインスタンスには、ビジネス メッセージが格納されます。

  2. [ルータ式] は、ビジネス メッセージの送信側で設定されたルータ式が格納される string 型のワークフロー変数です。

  3. [送信側の名前] は、ビジネス メッセージを送信したトレーディング パートナの名前が格納される string 型のワークフロー変数です。

    送信側の名前を XPath 式に変換する場合は、[XPath 変換] ボタンを選択します。

RosettaNet 2.0 プロトコルに基づく会話参加者ワークフローの開始

[開始のプロパティ] ダイアログ ボックスで、RosettaNet 2.0 プロトコルに基づくワークフローの以下の情報を入力します。

図3-5 RosettaNet 2.0 開始プロパティ


 

  1. [内容変数] は、ビジネス メッセージの内容が格納される XML 型のワークフロー変数です。

  2. [添付ファイル記述子変数] は、ビジネス メッセージの添付ファイルを記述する XML データが格納される XML 型のワークフロー変数(オプション)です。

RosettaNet 2.0 プロトコルに基づくワークフローの開始プロパティ作成の詳細については、『B2B Integration RosettaNet の実装』を参照してください。

RosettaNet 1.1 プロトコルに基づく会話参加者ワークフローの開始

[開始のプロパティ] ダイアログ ボックスで、RosettaNet 1.1 プロトコルに基づくワークフローの以下の情報を入力します。

図3-6 RosettaNet 1.1 開始プロパティ


 

  1. [内容変数] は、ビジネス メッセージの内容が格納される XML 型のワークフロー変数です。

  2. [添付ファイル記述子変数] は、ビジネス メッセージの添付ファイルを記述する XML データが格納される XML 型のワークフロー変数(オプション)です。

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 アクションを定義するには、次の手順を行います。

  1. Start Public Workflow アクションを追加するワークフローを開きます。ワークフローはアクティブかつ有効でなければなりません。

  2. (通常はタスク ノードで)アクションを指定できるダイアログ ボックスで、[追加] をクリックして [アクションを追加] ダイアログ ボックスを表示します。

    図3-7 [アクションを追加] ダイアログ ボックス


     

  3. [統合アクション] フォルダをクリックして展開します。

    図3-8 [アクションを追加] ダイアログ ボックスと統合アクション


     

  4. [B2B Integration] フォルダをクリックして展開します。

  5. [Start Public Workflow] を選択します。

  6. [OK] をクリックして、[パブリック ワークフローを開始] ダイアログ ボックスを表示します。

    図3-9 [パブリック ワークフローを開始] ダイアログ ボックス


     

  7. [パブリック ワークフローを開始] ダイアログ ボックスの [会話] ページの以下のセクションを設定します。 このページで指定した値と変数は、会話で必要なワークフローが含まれるコラボレーション アグリーメントをユニークに識別します。

    表3-1 [会話] ページのセクション

    ダイアログ ボックスのセクション

    説明

    [会話]

    以下の情報を入力する。

    [パーティ]

    ワークフローが適用される関連付けられている会話定義のコラボレーション アグリーメントでコンフィグレーションされたパーティのトレーディング パートナ名、ロール、および配信チャネル。 すべてのパーティを指定する必要はないが、ワークフローと関連付けられたコラボレーション アグリーメントをユニークに識別できなければならない。

    ロールおよび配信チャネルで入力する情報は、リポジトリの対応するトレーディング パートナでコンフィグレーションされた情報と正確に同じでなければならない。 ロールと配信チャネルの指定はオプションであり、その情報がコラボレーション アグリーメントをユニークに識別するために必要かどうかによって異なる。

    Expression Builder を使用すると、[パブリック ワークフローを開始] ダイアログ ボックスでパーティの値を指定できる。 詳細については、[パブリック ワークフローを開始] ダイアログ ボックスでの Expression Builder を使用した値の指定 を参照してください。

    [メモ]

    説明テキスト(省略可能)

    [アクション]

    ワークフロー アクションを追加できるタブ。 [アクション] タブでは、通常は、パブリック ワークフローと親ワークフローの同期を取るために「タスクに完了マークを付ける」プロパティを追加する。 詳細については、子ワークフローと親ワークフローの同期 を参照してください。


     

  8. [ワークフロー] タブを選択します。 次のページが表示されます。

    図3-10 [パブリック ワークフローを開始] ダイアログ ボックスの [ワークフロー] ページ


     

  9. [ワークフロー] タブの以下のフィールドとセクションを設定します。子ワークフローのワークフロー インスタンス ID が格納される変数と親ワークフローと子ワークフローの間で渡される変数の両方を識別します。

    表3-2 [ワークフロー] タブのフィールドとセクション

    フィールドまたはセクション

    説明

    [参照を媒介する変数]

    子ワークフローのインスタンス ID が格納される String 型のワークフロー変数。 この変数は、親ワークフローと子ワークフローの標準の通信メカニズムを実装する手段として使用する。

    [パラメータ]

    親ワークフローから子ワークフローに渡される変数の名前([名前] カラム)と値([式] カラム)。 ここで指定する変数名は、子ワークフローに対する入力変数としても指定する必要がある。 ワークフロー変数の使用についてで説明されているように、これらの変数はこのダイアログ ボックスで選択する前に親ワークフローと子ワークフローの両方で定義する必要がある。 そうすることで、選択された変数が適切な名前と型を持つようになる。

    Studio の Expression Builder を使用すると、各変数の値の式を作成できる。 Expression Builder の使い方については、[パブリック ワークフローを開始] ダイアログ ボックスでの Expression Builder を使用した値の指定を参照。

    [結果]

    子ワークフローの実行が完了した後に、子ワークフローから親ワークフローに返される出力変数の名前と値。 入力変数と同じように、それらの出力変数はこのダイアログ ボックスで選択する前に親ワークフローと子ワークフローの両方で定義する必要がある。

    [メモ]

    説明テキスト(省略可能)


     

  10. [OK] をクリックして変更を保存します。

[パブリック ワークフローを開始] ダイアログ ボックスでの 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 パッケージを使用してワークフローを開始できます。 このパッケージでは、以下のインタフェースとクラスが提供されます。

表3-3 com.bea.b2b.wlpi パッケージの構成要素

オブジェクト

説明

MessageManipulator インタフェース

ワークフロー タスク内の Manipulate Message アクションで使用されるすべてのクラスで実装される。

WorkflowInstance クラス

実行中のワークフロー インスタンスを表す。

WLPIException クラス

処理エラーが発生した場合にワークフロー API のパブリック メソッドによって送出される。


 

このパッケージの詳細については、『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 メソッドでは、以下のパラメータが必要です。

表3-4 setVariable メソッドのパラメータ

パラメータ

説明

name

設定する変数の名前

Value

変数の値。 ワークフロー変数と Java データ型の関連付けで説明されているように、値は Java オブジェクトとして表す必要がある。


 

次の例は、setVariable メソッドを使用して、開始するワークフローの 2 つの変数の値を指定する方法を示しています。

コード リスト 3-3 入力変数の値の設定

wi.setVariable( INTEGER_ONE_VAR, new Long( 3 ) );
wi.setVariable( INTEGER_ONE_VAR, new Long( 5 ) );

手順 4 : ワークフロー インスタンスの開始

ワークフロー インスタンスを作成して入力変数を初期化した後、ワークフロー アプリケーションは次の例のようにインスタンス オブジェクトの start メソッドを呼び出してワークフロー インスタンスを開始します。

コード リスト 3-4 ワークフロー インスタンスの開始

wi.start();

手順 5 : ワークフロー インスタンスの完了を待つ

ワークフロー インスタンスが開始された後、ワークフロー アプリケーションはワークフロー インスタンスの waitForCompletion メソッドを呼び出してその完了を待つことができます。 ワークフロー インスタンスが完了するまで処理はブロックされます。

コード リスト 3-5 ワークフロー インスタンスの完了を待つ

wi.waitForCompletion();

ワークフロー インスタンスの完了を待つ間、ワークフロー アプリケーションではワークフロー インスタンスの isCompleted メソッドを呼び出してワークフロー インスタンスの完了状態を確認できます。 このメソッドは、ワークフローの実行が完了している場合は true を返し、それ以外の場合は false を返します。

手順 6 : 出力変数の結果を処理する

ワークフロー インスタンスが完了した後、ワークフロー アプリケーションでは出力変数に格納された情報を取り出してワークフロー インスタンスの結果を処理できます。 それらの出力変数は、Studio においてテンプレート定義で最初に宣言する必要があります。

ワークフロー アプリケーションでは、次の例のように、ワークフロー インスタンスの getVariable メソッドを呼び出し、取り出す変数の名前をそのメソッドに渡してインスタンス変数の値を取り出します。

コード リスト 3-6 出力変数の結果の取り出し

product = (String)wi.getVariable(MULTIPLY_REPLY_VAR);
note = (String)wi.getVariable(NOTE_VAR);

getVariable メソッドは、適切な Java データ型にキャストする必要のある Java オブジェクトを返します。 対応するワークフロー変数の型に応じて戻り値をキャストする Java の型の詳細については、『WebLogic Integration Studio ユーザーズ ガイド』を参照してください。

例外処理

ワークフロー アプリケーションの実行中にエラーが発生した場合は、com.bea.b2b.wlpi.WLPIException が送出されます。 ワークフロー API の各メソッド呼び出しで、ワークフロー アプリケーションでは次の例のようにこの例外を捕捉して適切に処理できます。

コード リスト 3-7 ワークフロー アプリケーションでの WLPIExceptions の処理

catch (WorkflowException we){    
debug("Error starting workflow");
we.printStackTrace();
}

 

ページの先頭 前 次