(57)【要約】  【課題】  既存のワークフロー管理技術に機能追加することにより、Ｗｅｂサービス・フロー定義言語のスコープ機能を実現する。  【解決手段】  アクティビティ情報テーブル１８０は、アクティビティの各々について状態情報を記憶する。スコープ情報テーブル１９０は、スコープの各々について状態情報を記憶する。スコープ監視部１３０は、アクティビティが実行完了したとき、当該アクティビティが所属する同一スコープに所属する他のアクティビティがすべて完了した場合に当該アクティビティが所属するスコープの状態を完了に設定する。【選択図】  図１
2005149332.tif 000002
【特許請求の範囲】
【請求項１】
複数のアクティビティの実行手順と前記アクティビティをグループ化するスコープの実行手順が定義されるビジネスプロセス定義を格納する記憶装置と、
前記アクティビティの各々について状態情報と前記アクティビティが所属するスコープの識別子を記憶するアクティビティ情報テーブルと、
前記スコープの各々について状態情報を記憶するスコープ情報テーブルと、
前記ビジネスプロセス定義に従って前記アクティビティを実行し、前記アクティビティの実行状態を変更するワークフローエンジンと、
前記アクティビティの状態を監視する状態監視部と、
前記アクティビティの状態が変化したとき起動され、当該アクティビティが完了したとき当該アクティビティが所属する同一スコープに所属する他のアクティビティがすべて完了した場合に当該アクティビティが所属する前記スコープの状態を完了に設定する手段を有するスコープ監視部とを有することを特徴とするワークフロー管理システム。
【請求項２】
前記スコープ情報テーブルは、前記スコープの各々について状態情報と所属する親スコープの識別子を記憶し、
前記スコープ監視部は、前記アクティビティの状態が変化したとき起動され、当該アクティビティが完了したとき当該アクティビティが所属する同一スコープに所属する他のアクティビティまたはスコープがすべて完了した場合に当該アクティビティが所属する前記スコープの状態を完了に設定する手段と、当該アクティビティが所属する前記スコープが所属する親スコープに所属するスコープまたは他のアクティビティがすべて完了した場合に当該親スコープの状態を完了に設定する手段とを有することを特徴とする請求項１記載のワークフロー管理システム。
【請求項３】
前記スコープの状態情報は、スコープの処理が完了していないことを示す「活性」、当該スコープの正常終了を示す「完了」及び「異常終了」を含むことを特徴とする請求項１記載のワークフロー管理システム。
【請求項４】
前記アクティビティ情報テーブルは、前記アクティビティの各々について状態情報を記憶し、前記スコープ情報テーブルは、前記アクティビティの各々について所属するスコープの識別子および前記所属するスコープの状態情報を記憶することを特徴とする請求項１又は２記載のワークフロー管理システム。
【請求項５】
前記スコープ監視部は、さらに前記アクティビティが異常終了したとき当該アクティビティが所属する同一スコープに所属する他の完了していないアクティビティの状態を強制終了に設定する手段と、当該アクティビティが所属するスコープの状態を異常終了に設定する手段とを有することを特徴とする請求項１記載のワークフロー管理システム。
【請求項６】
コンピュータに、
複数のアクティビティの実行手順と前記アクティビティをグループ化するスコープの実行手順が定義されるビジネスプロセス定義に従って前記アクティビティを実行し、前記アクティビティの実行状態を変更するワークフローエンジン機能、
前記アクティビティの状態を監視する状態監視機能、および
前記アクティビティの状態が変化したとき起動され、当該アクティビティが完了したとき、前記アクティビティの各々について状態情報と前記アクティビティが所属するスコープの識別子を記憶するアクティビティ情報テーブルと、前記スコープの各々について状態情報を記憶するスコープ情報テーブルとを参照し、当該アクティビティが所属する同一スコープに所属する他のアクティビティがすべて完了した場合に当該アクティビティが所属する前記スコープの状態を完了に設定するスコープ監視機能
を実現させるためのワークフロープログラム。
【請求項７】
前記スコープ情報テーブルは、前記スコープの各々について状態情報と所属する親スコープの識別子を記憶し、
前記スコープ監視機能として、前記コンピュータに、前記アクティビティの状態が変化したとき起動され、当該アクティビティが完了したとき当該アクティビティが所属する同一スコープに所属する他のアクティビティまたはスコープがすべて完了した場合に当該アクティビティが所属する前記スコープの状態を完了に設定する機能、および当該アクティビティが所属する前記スコープが所属する親スコープに所属するスコープまたは他のアクティビティがすべて完了した場合に当該親スコープの状態を完了に設定する機能を実現させるための請求項６記載のワークフロープログラム。
【請求項８】
前記スコープの状態情報は、スコープの処理が完了していないことを示す「活性」、当該スコープの正常終了を示す「完了」及び「異常終了」を含むことを特徴とする請求項６記載のワークフロープログラム。
【請求項９】
前記アクティビティ情報テーブルは、前記アクティビティの各々について状態情報を記憶し、前記スコープ情報テーブルは、前記アクティビティの各々について所属するスコープの識別子および前記所属するスコープの状態情報を記憶することを特徴とする請求項６又は７記載のワークフロープログラム。
【請求項１０】
前記スコープ監視機能として、前記コンピュータに、さらに前記アクティビティが異常終了したとき当該アクティビティが所属する同一スコープに所属する他の完了していないアクティビティの状態を強制終了に設定する機能、および当該アクティビティが所属するスコープの状態を異常終了に設定する機能を実現させるための請求項６記載のワークフロープログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の作業ステップであるアクティビティから構成されるワークフローを定義に従い実行するワークフロー管理技術に関するものである。
【背景技術】
【０００２】
ＳＯＡＰ（Ｓｉｍｐｌｅ  Ｏｂｊｅｃｔ  Ａｃｃｅｓｓ  Ｐｒｏｔｏｃｏｌ）によりインターネット経由でサービスを利用するＷｅｂサービスの技術が開発されてきている。当初は、ＷｅｂサービスをＲＰＣ（Ｒｅｍｏｔｅ  Ｐｒｏｃｅｄｕｒｅ  Ｃａｌｌ）型で利用するパターンが主流であった。しかし近年では、複数のＷｅｂサービスを連続して実行し一つのワークフローを実現するパターンが出現し、フロー定義のための言語（以下、Ｗｅｂサービス・フロー定義言語と呼ぶ）が次々と開発されてきている。Ｗｅｂサービス・フロー定義言語として、ｈｔｔｐ：／／ｗｗｗ−１０６．ｉｂｍ．ｃｏｍ／ｄｅｖｅｌｏｐｅｒｗｏｒｋｓ／ｌｉｂｒａｒｙ／ｗｓ−ｂｐｅｌ／で紹介される、Ｍｉｃｒｏｓｏｆｔ、ＩＢＭ、ＢＥＡが提案するＢＰＥＬ４ＷＳ（Ｂｕｓｉｎｅｓｓ  Ｐｒｏｃｅｓｓ  Ｅｘｅｃｕｔｉｏｎ  Ｌａｎｇｕａｇｅ  ｆｏｒ  Ｗｅｂ  Ｓｅｒｖｉｃｅｓ）が注目を集めている。
【０００３】
一方、Ｗｅｂサービス・フロー定義言語で記述したフローを実行するエンジンとして、既存のワークフロー技術によるものが有望視されている。
【０００４】
なお既存のワークフロー技術として、非特許文献１に開示される技術が挙げられる。
【０００５】
【非特許文献１】日立ＷｏｒｋＣｏｏｒｄｉｎａｔｏｒ（船橋他、「ＮｅｔＣｏｍライブラリ―ネットベース・アプリケーション」裳華房、ｐｐ．１１４−１１８）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
Ｗｅｂサービス・フロー定義言語で記述するワークフローは、既存ワークフロー技術のフロー定義／制御能力により、ある程度実現可能である。前述のＢＰＥＬ４ＷＳと非特許文献１を例にとると、 “Ｓｗｉｔｃｈ”（条件分岐）、“Ｆｌｏｗ”（並行実行）などに代表されるＢＰＥＬ４ＷＳのフロー記述要素である構造化アクティビティは、ＷｏｒｋＣｏｏｒｄｉｎａｔｏｒの分岐ノード／先着ノード、分業ノード／待合ノードなどの組み合わせにより対応が可能である。
【０００７】
しかしＷｅｂサービス・フロー定義言語に既存ワークフロー技術で対応する場合、以下のような問題があった。ＢＰＥＬ４ＷＳなどのＷｅｂサービス・フロー定義言語は、ワークフローの一部をグループ化する“スコープ”の機能を備える。スコープは、フロー内で使用する変数や、失敗時、補償時などに実行するハンドラの有効範囲を定義／制御する機能であり、ワークフローの制御内容をより木目細かく指定できるといったユーザメリットがある。またスコープの状態により、ハンドラの実行を決定したりするなど、ワークフローの制御にも影響がある。一方、既存ワークフロー技術は、このスコープの機能を備えていないという問題があった。
【課題を解決するための手段】
【０００８】
前記の課題を解決するための本発明は、ビジネスプロセスを構成するアクティビティの各々について状態情報を記憶するアクティビティ情報テーブルと、スコープの各々について状態情報を記憶するスコープ情報テーブルとを用いて、アクティビティの状態が実行完了となったとき、当該アクティビティが所属する同一スコープに所属する他のアクティビティがすべて完了した場合に当該アクティビティが所属するスコープの状態を完了に設定するワークフロー管理技術を特徴とする。
【発明の効果】
【０００９】
本発明によれば、既存ワークフロー管理システムへの機能追加によって、Ｗｅｂサービス・フロー定義言語のスコープ機能を実現できる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の実施形態について説明する。
【００１１】
図１は、本発明の実施例を示すためのシステム構成図である。１１０はワークフローエンジンであり、アクティビティ間の遷移などのフロー制御を行う。１４０はビジネスプロセス定義であり、ワークフローエンジン１１０が制御するフローを定義する。ビジネスプロセス定義１４０は、作業ステップである複数のアクティビティ１５０と、フロー分岐／先着などを行う制御ノード１６０とから構成される。１７０はスコープであり、ワークフローの一部を構成する１つ以上のアクティビティ１５０をグループ化する。
【００１２】
１２０は状態監視部であり、アクティビティ１５０の状態変化を検知する。１３０はスコープ監視部であり、状態監視部１２０により起動され、アクティビティの状態変化に伴って発生するスコープの状態変化を監視する。
【００１３】
１８０は、アクティビティ１５０に関する情報を記憶するアクティビティ情報テーブルである。アクティビティ情報テーブル１８０は、アクティビティ識別子１８１、状態情報１８２およびスコープ情報１８３の３つの記憶領域を持つ。状態情報１８２は、そのアクティビティの実行状態を示す。アクティビティの実行状態は、「未実行」「実行中」「完了」「異常終了」「強制終了」のいずれかによって区分される。スコープ情報１８３は、アクティビティ識別子１８１で識別されるアクティビティ１５０が所属するスコープ１７０の識別子を記憶する。
【００１４】
１９０は、スコープ１６０に関する情報を記憶するスコープ情報テーブルである。スコープ情報テーブル１９０は、スコープ識別子１９１、状態情報１９２および親スコープ情報１９３の３つの記憶領域を持つ。状態情報１９２は、そのスコープの実行状態を示す。スコープの実行状態は、「活性」「完了」「異常終了」のいずれかによって区分される。「活性」は、そのスコープの処理が完了していないことを示す。親スコープ情報１９３は、スコープ識別子１９１で識別されるスコープ１７０が所属する上位のスコープ１７０が存在すればその識別子を記憶する。
【００１５】
なおアクティビティ情報テーブル１８０にスコープ情報１８３を設ける代わりに、スコープ情報テーブル１９０に繰り返しアクティビティ識別子１８１を設け、アクティビティ識別子１８１に対応してスコープ情報１８３、スコープ識別子１９１、状態情報１９２および親スコープ情報１９３のデータ項目を設けるようなスコープ情報テーブル１９０のデータ形式にしてもよい。
【００１６】
ワークフローシステムのハードウェアは、ＣＰＵ、メモリ、記憶装置、入力装置および出力装置を備える計算機（コンピュータ）によって実現される。ワークフローエンジン１１０、状態監視部１２０およびスコープ監視部１３０は、この計算機のメモリに格納され、ＣＰＵによって実行されるプログラムモジュールである。なお図示しないが、このほか業務依存の処理をするアプリケーションプログラムが存在する。アプリケーションプログラムは、ＡＰＩ（アプリケーションプログラム・インタフェース）を介してワークフローエンジン１１０と通信する。ビジネスプロセス定義１４０、アクティビティ情報テーブル１８０およびスコープ情報テーブル１９０は、この計算機の記憶装置に格納される。アクティビティ情報テーブル１８０およびスコープ情報テーブル１９０は、案件、すなわちプロセス・インスタンスごとに管理される。本実施例では、プロセス・インスタンスを管理するテーブルなど、既存のワークフロー技術に関する説明を省略する。ワークフローシステムは、サーバ・クライアント・システムの形態でも実施可能である。この場合にクライアント計算機は、ユーザインタフェースのプログラムを備え、主としてユーザに対する入出力部分を受け持つ。本発明は、Ｗｅｂをベースとする分散環境にも適用できる。
【００１７】
図２は、ＢＰＥＬ４ＷＳによるフロー定義の記述例の一部を示すものである。図で＜ｓｅｑｕｅｎｃｅ＞は、出現するアクティビティ又はスコープを順に実行するよう定義する。＜ｆｌｏｗ＞は、出現するアクティビティ又はスコープを並列して実行するよう定義する。このフロー定義を従来のワークフロー管理システムで実施する場合、図１に示す２つの制御ノード１６０をそれぞれ分業ノード、待合ノードとする場合のビジネスプロセス定義１４０により定義することができる。
【００１８】
図１に示すビジネスプロセス定義１４０をワークフロー管理システムに登録するとき、システムは、アクティビティ情報テーブル１８０とスコープ情報テーブル１９０の初期設定を行う。システムは、アクティビティ情報テーブル１８０にビジネスプロセス定義１４０内に存在する各アクティビティ１５０についての情報を書き込む。すなわち各アクティビティ１５０の識別子１８１、状態情報１８２およびスコープ情報１８３が格納される。スコープ情報１８３には、そのアクティビティ１５０が所属する上位のスコープの識別子が書き込まれる。システムは、スコープ情報テーブル１９０にビジネスプロセス定義１４０内に存在する各スコープ１７０についての情報を書き込む。すなわち各スコープ１７０のスコープ識別子１９１、状態情報１９２および親スコープ情報１９３が格納される。親スコープ情報１９３には、そのスコープ１７０が所属する親スコープ１７０が存在すればその親スコープの識別子が書き込まれる。
【００１９】
図１に示すビジネスプロセス定義１４０について初期設定されたアクティビティ情報テーブル１８０とスコープ情報テーブル１９０の例を図３に示す。アクティビティ情報テーブル１８０内の各アクティビティ識別子１８１で示されるアクティビティの状態情報１８２は、そのアクティビィの実行が開始されていないことを示す“未実行”が設定される。スコープ情報テーブル１９０内の各スコープ識別子１９１で示されるスコープの状態情報１９２は、スコープの処理が完了してないことを示す“活性（アクティブ）”が設定される。なおアクティビティ情報テーブル１８０とスコープ情報テーブル１９０の初期設定は、定義ツールを利用して行っても良いし、ユーザが手作業にて行っても良い。
【００２０】
図４〜図６は、スコープ監視部１３０の処理手順を示す図である。図に示すように、この手順は、処理ステップ４１〜４５、５１〜５４、および６１〜６５から構成される。
【００２１】
以下、スコープ監視部１３０の処理手順について図１に示す他のプログラムモジュールの動作とともに図４〜図６に示すフローチャートを用いて説明する。ビジネスプロセス定義１４０として、図１に示す例を用いる。なお以下の説明において、アクティビティの状態情報１８２の終了状態とは、そのアクティビティの実行が正常終了したことを示す“完了”、エラーが発生し終了したことを示す“異常終了”、またはアプリケーションなどの指示により強制的に終了された“強制終了”のいずれかを示す。同様にスコープの状態情報１９２の終了状態とは、そのスコープ内の処理が正常に終了したことを示す“完了”、そのスコープ内のアクティビティ又は制御ノードの処理中にエラーが発生して終了したことを示す“異常終了”のいずれかを示す。
【００２２】
ビジネスプロセス定義１４０が定義するワークフローの実行が開始すると、ワークフローエンジン１１０は、アクティビティ“Ａ”の状態情報１８２を“実行中”にする。あるいは、状態監視部１２０がワークフローエンジン１１０からアクティビティ“Ａ”の状態を検知して、そのアクティビティの状態情報１８２を“実行中”に設定してもよい。状態監視部１２０は、アクティビティ“Ａ”の状態変化を検知し、スコープ監視部１３０を起動して通知する（ステップ４１）。スコープ監視部１３０は、アクティビティ情報テーブル１８０からアクティビティ“Ａ”の状態情報１８２を取得するが、“実行中”であるため（ステップ４２：その他）、処理を終了する。なおアクティビティの状態情報１８２が“実行中”のとき、状態監視部１２０は、スコープ監視部１３０を起動しないようにしてもよい。そうすれば、ステップ４２：その他に分岐するケースはない。
【００２３】
アクティビティ“Ａ”の処理が正常終了すると、ワークフローエンジン１１０は、アクティビティ“Ａ”の状態情報１８２を“完了”に変更する。あるいは、状態監視部１２０がワークフローエンジン１１０からアクティビティ“Ａ”の状態を検知して、そのアクティビティの状態情報１８２を“完了”に変更してもよい。状態監視部１２０はアクティビティ“Ａ”の状態変化を検知し、スコープ監視部１３０を起動して通知する（ステップ４１）。スコープ監視部１３０は、アクティビティ情報テーブル１８０からアクティビティ“Ａ”の状態情報１８２を取得する。その状態情報１８２が“完了”であるため（ステップ４２：完了）、スコープ監視部１３０は、アクティビティ“Ａ”のスコープ情報１８３に設定される所属するスコープ“Ｓ２”に所属する他のアクティビティまたは“Ｓ２”を親スコープとする下位のスコープの有無について、アクティビティ情報テーブル１８０およびスコープ情報テーブル１９０を検索する（ステップ４３）。同一スコープ“Ｓ２”に所属する他のアクティビティ“Ｄ”が存在するため（ステップ４３：Ｙｅｓ）、処理はステップ４４に進む。同一スコープ“Ｓ２”に所属する全てのアクティビティまたはスコープの状態情報１８２、１９２を取得し、全ての状態情報１８２、１９２が終了状態であれば（ステップ４４：Ｙｅｓ）、処理はステップ４５に進む。そうでなければ（ステップ４４：Ｎｏ）、処理を終了する。ここではアクティビティ“Ｄ”の状態情報１８２が“未実行”であるため（ステップ４４：Ｎｏ）、処理を終了する。
【００２４】
実行中のワークフローは、次に制御ノード１６０である分業ノードにより、アクティビティ“Ｂ”および“Ｃ”が“実行中”になる。状態監視部１２０は、アクティビティ“Ｂ”および“Ｃ”の状態変化を検知し、スコープ監視部１３０を起動して通知する（ステップ４１）。スコープ監視部１３０は、アクティビティ情報テーブル１８０からアクティビティ“Ｂ”および“Ｃ”の状態情報１８２を取得するが、“実行中”であるため（ステップ４２：その他）、処理を終了する。
【００２５】
次に“実行中”であるアクティビティ“Ｂ”および“Ｃ”のうち、“Ｂ”の処理が先に正常終了し、状態情報１８２が“完了”に変化したとする。この場合の状態監視部１２０およびスコープ監視部１３０の動作は、先に説明したアクティビティ“Ａ”の正常終了時と同様になる。
【００２６】
この時点におけるアクティビティ情報テーブル１８０とスコープ情報テーブル１９０の例を図７に示す。
【００２７】
次にアクティビティ“Ｃ”の処理が正常終了し、状態情報１８２が“完了”に変化したとする。状態監視部１２０は、アクティビティ“Ｃ”の状態変化を検知し、スコープ監視部１３０を起動して通知する（ステップ４１）。スコープ監視部１３０は、アクティビティ情報テーブル１８０からアクティビティ“Ｃ”の状態情報１８２を取得するが、“完了”であるため（ステップ４２：完了）、アクティビティ“Ｃ”のスコープ情報１８３に設定される所属するスコープ“Ｓ１”に所属する他のアクティビティまたは“Ｓ１”を親スコープとする下位のスコープの有無について、アクティビティ情報テーブル１８０を検索する（ステップ４３）。同一スコープ“Ｓ１”に所属する他のアクティビティ“Ｂ”が存在するため（ステップ４３：Ｙｅｓ）、ステップ４４に進む。同一スコープ“Ｓ１”に所属する全てのアクティビティまたはスコープの状態情報１８２、１９２を取得し、全ての状態情報１８２、１９２が終了状態であれば（ステップ４４：Ｙｅｓ）、処理はステップ４５に進む。そうでなければ（ステップ４４：Ｎｏ）、処理を終了する。ここではアクティビティ“Ｂ”の状態情報１８２が“完了”であるため（ステップ４４：Ｙｅｓ）、ステップ４５に進む。ステップ４５では、スコープ監視部１３０は、スコープ識別子１９１が当該スコープであるスコープの状態情報１９２を“完了”にする。ここではスコープ“Ｓ１”の状態情報１９２を“完了”にし、ステップ６１に進む。
【００２８】
ステップ６１では、スコープ監視部１３０は、当該スコープの親スコープの有無について、スコープ情報テーブル１９０を検索して判定する。親スコープが存在すれば（ステップ６１：Ｙｅｓ）、処理はステップ６２に進み、存在しなければ（ステップ６１：Ｎｏ）、処理を終了する。ここではスコープ“Ｓ１”に親スコープ“Ｓ２”が存在するため（ステップ６１：Ｙｅｓ）、処理はステップ６２に進む。ステップ６２では、この親スコープと同一の親スコープに所属するスコープまたは所属するスコープが当該親スコープであるようなアクティビティの有無について、アクティビティ情報テーブル１８０およびスコープ情報テーブル１９０を検索する。そのようなスコープまたはアクティビティが存在すれば（ステップ６２：Ｙｅｓ）、処理はステップ６３に進み、存在しなければ（ステップ６２：Ｎｏ）、処理を終了する。ここでは所属するスコープが“Ｓ２”であるアクティビティ“Ａ”および“Ｄ”が存在するため（ステップ６２：Ｙｅｓ）、処理はステップ６３に進む。ステップ６３では、ステップ６２で取得した全てのスコープまたはアクティビティの状態情報１９２または１８２が全て終了状態であれば（ステップ６３：Ｙｅｓ）、ステップ６４に進む。そうでなければ（ステップ６３：Ｎｏ）、処理を終了する。ここではアクティビティ“Ａ”の状態情報１８２は“完了”であるが“Ｄ”の状態情報１８２は“未実行”であるため、処理を終了する。
【００２９】
この時点におけるアクティビティ情報テーブル１８０とスコープ情報テーブル１９０の例を図８に示す。
【００３０】
実行中のワークフローは、次に制御ノード１６０である待合ノードにより、アクティビティ“Ｄ”が“実行中”になる。状態監視部１２０は、アクティビティ“Ｄ”の状態変化を検知し、スコープ監視部１３０を起動して通知する（ステップ４１）。スコープ監視部１３０は、アクティビティ情報テーブル１８０からアクティビティ“Ｄ”の状態情報１８２を取得するが、“実行中”であるため（ステップ４２：その他）、処理を終了する。
【００３１】
アクティビティ“Ｄ”の処理が正常終了し、状態情報１８２が“完了”に変化したとする。状態監視部１２０はアクティビティ“Ｄ”の状態変化を検知し、スコープ監視部１０３０を起動して通知する（ステップ４１）。スコープ監視部１３０は、アクティビティ情報テーブル１８０からアクティビティ“Ｄ”の状態情報１８２を取得するが、“完了”であるため（ステップ４２：完了）、ステップ４３に進む。アクティビティ“Ｄ”のスコープ情報１８３に設定される所属するスコープ“Ｓ２”に所属する他のアクティビティ“Ａ”およびスコープ“Ｓ１”が存在するため（ステップ４３：Ｙｅｓ）、ステップ４４に進む。アクティビティ“Ａ”の状態情報１８２およびスコープ“Ｓ１”の状態情報１９２が“完了”であるので（ステップ４４：Ｙｅｓ）、処理はステップ４５に進む。次にスコープ監視部１３０は、スコープ“Ｓ２”の状態情報１９２を“完了”にしてステップ６１に進む。スコープ“Ｓ２”の親スコープが存在しないため（ステップ６１：Ｎｏ）、処理を終了する。
【００３２】
この時点におけるアクティビティ情報テーブル１８０とスコープ情報テーブル１９０の例を図９に示す。図９に示すように、ビジネスプロセス定義１４０の図１に示す範囲のワークフロー実行が終了したことが分かる。
【００３３】
なおステップ４３で、当該アクティビティの所属するスコープに所属する他のアクティビティまたは当該スコープを親スコープとする下位のスコープがいずれも存在しない場合（ステップ４３：Ｎｏ）、当該スコープには当該アクティビティのみが所属するため、スコープ監視部１３０は、当該スコープの状態情報１９２を直ちに“完了”にする（ステップ４５）。
【００３４】
同様にステップ６２で、当該親スコープと同一の親スコープに所属するスコープまたは所属するスコープが当該親スコープであるようなアクティビティがいずれも存在しない場合（ステップ６２：Ｎｏ）、当該親スコープには当該スコープのみが所属するため、スコープ監視部１３０は、当該親スコープの状態情報１９２を直ちに“完了”にする（ステップ６４）。
【００３５】
さらにステップ６４で、親スコープの状態を“完了”に書き換えた後に、スコープ識別子１９１が当該親スコープであるスコープについて、スコープ監視部１３０は、ステップ６１以降の処理を繰り返す（ステップ６５）。これにより、親スコープに所属するスコープまたはアクティビティがすべて終了するとその親スコープが“完了”するというＢＰＥＬ４ＷＳの仕様を実現できる。
【００３６】
以上、ワークフローが正常に実行される場合の、図１に示す各プログラムモジュールの動作について説明した。
【００３７】
次にワークフロー実行中にアクティビティ１５０が異常終了する場合の図１に示す各プログラムモジュールの動作について説明する。
【００３８】
ビジネスプロセス定義１４０で定義するワークフローの実行が開始され、アクティビティ“Ａ”の状態が“未実行”、“実行中”、“完了”と変化したとする。実行中のワークフローは、次に制御ノード１６０である分業ノードにより、アクティビティ“Ｂ”および“Ｃ”が“実行中”になる。この場合の状態監視部１２０およびスコープ監視部１３０の動作は、前記のワークフロー正常終了時の処理手順と同様になる。
【００３９】
次に“実行中”であるアクティビティ“Ｂ”でエラーが発生し、アクティビティ“Ｂ”が“異常終了”したとする。このときワークフローエンジン１１０又は状態監視部１２０は、アクティビティ“Ｂ”の状態情報１８２を“異常終了”に変更する。状態監視部１２０はアクティビティ“Ｂ”の状態変化を検知し、スコープ監視部１３０を起動して通知する（ステップ４１）。スコープ監視部１３０は、アクティビティ情報テーブル１８０からアクティビティ“Ｂ”の状態情報１８２を取得する。この状態情報１８２が“異常終了”であるため（ステップ４２：異常）、スコープ監視部１３０は、アクティビティ“Ｂ”のスコープ情報１８３に設定される所属するスコープ“Ｓ１”に所属する他のアクティビティの有無についてアクティビティ情報テーブル１８０を検索する（ステップ５１）。同一スコープ“Ｓ１”に所属するアクティビティ“Ｃ”が存在するため（ステップ５１：Ｙｅｓ）、ステップ５２に進み、取得したアクティビティの状態情報１８２が終了状態でないアクティビティを“強制終了”にする。ここではスコープ監視部１３０は、アクティビティ“Ｃ”を“強制終了”にし、ステップ５３に進む。ステップ５３では、スコープ識別子１９１がスコープ情報１８３で示されるスコープについてスコープ識別子１９１の状態情報１９２を“異常終了”にする。ここではスコープ“Ｓ１”の状態情報１９２を“異常終了”にし、ステップ５４に進む。スコープ監視部１３０は、ステップ５４で状態監視部１２０を経由してワークフローエンジン１１０に、スコープ“Ｓ１”の失敗ハンドラの実行を指示する。失敗ハンドラの処理内容は、ビジネスプロセス定義１４０であらかじめ定義される。ワークフローエンジン１１０から失敗の通知を受けたアプリケーションは、動的に処理ステップを生成するなどし、ワークフローエンジン１１０が失敗ハンドラを実行する。スコープ監視部１３０は、状態監視部１２０を経由してワークフローエンジン１１０から失敗ハンドラの実行終了を通知され、ステップ６１に進む。
【００４０】
ステップ６１では、スコープ“Ｓ１”に親スコープが存在するため（ステップ６１：Ｙｅｓ）、ステップ６２に進み、その親スコープに所属するアクティビティ“Ａ”および“Ｄ”が存在するため（ステップ６２：Ｙｅｓ）、処理はステップ６３に進む。ここでアクティビティ“Ａ”の状態情報１８２は“完了”であるが、“Ｄ”の状態が“未実行”であるため処理を終了する。
【００４１】
この時点におけるアクティビティ情報テーブル１８０とスコープ情報テーブル１９０の例を図１０に示す。
【００４２】
実行中のワークフローは、次に制御ノード１６０である待合ノードにより、アクティビティ “Ｄ”が“実行中”になる。これ以降、アクティビティ “Ｄ”が“完了”するまでの状態監視部１２０およびスコープ監視部１３０の処理手順は、前記のワークフロー正常終了時の処理手順と同様になる。
【００４３】
アクティビティ“Ｄ”が“完了”した時点におけるアクティビティ情報テーブル１８０とスコープ情報テーブル１９０の例を図１１に示す。図１１に示すように、ビジネスプロセス定義１４０の図１に示す範囲のワークフロー実行が終了したことが分かる。
【００４４】
なおステップ５１で、当該アクティビティの所属スコープに所属する他のアクティビティが存在しない場合（ステップ５１：Ｎｏ）、当該スコープには当該アクティビティのみが所属するため、スコープ監視部１３０は、当該スコープの状態を直ちに“異常終了”にする（ステップ５３）。
【００４５】
以上、ワークフローが正常に実行される場合と、ワークフロー実行中にスコープ内のアクティビティが異常終了する場合の図１に示す各プログラムモジュールの動作について説明した。
【００４６】
上記実施例によれば、スコープ内でエラーが発生した場合、同一スコープに所属するアクティビティのみを直ちに終了し、当該スコープの失敗ハンドラで定義した処理を実行することができる。
【００４７】
また上記実施例によれば、スコープの終了状態が“完了”であるか“異常終了”のいずれであるか記憶されるため、ＡＰＩなどにより終了したスコープの補償ハンドラの実行が指示された場合、そのスコープが“完了”であれば補償ハンドラを実行し、“異常終了”であれば実行しないなどの制御を行うことができる。
【００４８】
さらに上記実施例によれば、スコープ情報テーブルからスコープの範囲を知ることができるため、ＢＰＥＬ４ＷＳの仕様で定めるように、使用されるワークフロー変数をスコープ内でのみ有効にすることができる。
【図面の簡単な説明】
【００４９】
【図１】実施例のワークフロー管理システムの構成図である。
【図２】ＢＰＥＬ４ＷＳによるフロー記述例の一部を示す図である。
【図３】アクティビティ情報テーブルとスコープ情報テーブルの初期設定の例を示す図である。
【図４】スコープ監視部の実施手順を説明する図である。
【図５】スコープ監視部の実施手順を説明する図（続き）である。
【図６】スコープ監視部の実施手順を説明する図（続き）である。
【図７】アクティビティ “Ａ”、“Ｂ”が完了した時点におけるアクティビティ情報テーブルとスコープ情報テーブルの例を示す図である。
【図８】アクティビティ “Ａ”、“Ｂ”、“Ｃ”が完了した時点におけるアクティビティ情報テーブルとスコープ情報テーブルの例を示す図である。
【図９】アクティビティ “Ａ”、“Ｂ”、“Ｃ”、“Ｄ”が完了した時点におけるアクティビティ情報テーブルとスコープ情報テーブルの例を示す図である。
【図１０】アクティビティ “Ａ”が完了し、“Ｂ”が異常終了した時点におけるアクティビティ情報テーブルとスコープ情報テーブルの例を示す図である。
【図１１】アクティビティ “Ａ”が完了し、“Ｂ”が異常終了した後、“Ｄ”が完了した時点におけるアクティビティ情報テーブルとスコープ情報テーブルの例を示す図である。
【符号の説明】
【００５０】
１１０…ワークフローエンジン、１２０…状態監視部、１３０…スコープ監視部、１４０…ビジネスプロセス定義、１５０…アクティビティ、１７０…スコープ、１８０…アクティビティ情報テーブル、１９０…スコープ情報テーブル。
【図１】
2005149332.tif 000003
【図２】
2005149332.tif 000004
【図３】
2005149332.tif 000005
【図４】
2005149332.tif 000006
【図５】
2005149332.tif 000007
【図６】
2005149332.tif 000008
【図７】
2005149332.tif 000009
【図８】
2005149332.tif 000010
【図９】
2005149332.tif 000011
【図１０】
2005149332.tif 000012
【図１１】
2005149332.tif 000013