(57)【要約】  ワークフロー自身の一部として対話を実装するシステムおよび方法を提供する。対話アクティビティコンポーネントを介して、ワークフローとデータの受け渡しをして、対話ワークフローを形成する。この対話アクティビティコンポーネントは、ワークフロー定義内の一時停止ポイントをモデル化する。ユーザ入力を要求するさまざまな対話の中断の間、ユーザ入力と関連する対話をワークフローに提供することができる。このような構成により、ワークフローとそのワークフローに関連付けられたホストアプリケーションとの間の制御された／同期式データ交換を可能にする。
2009522645.tif 000002
【特許請求の範囲】
【請求項１】
ワークフロー内の一時停止ポイントをモデル化する対話アクティビティコンポーネント（１４０）を有するワークフローシステム（１００）、および
前記一時停止ポイントで前記ワークフローとデータ交換を行うホスト（１２０）
のコンピュータ実行可能コンポーネントを備えることを特徴とするコンピュータ実装システム。
【請求項２】
前記一時停止ポイントは、ユーザ入力のために対話が中断することを特徴とする請求項１に記載のコンピュータ実装システム。
【請求項３】
前記対話アクティビティコンポーネントは、ユーザを切り替える機能を有することを特徴とする、請求項１に記載のコンピュータ実装システム。
【請求項４】
前記ワークフローは、前記ワークフローに関連付けられた識別に基づいてロード可能であることを特徴とする請求項２に記載のコンピュータ実装システム。
【請求項５】
前記一時停止ポイントは、前記ワークフローの変更可能なユーザインタフェース（ＵＩ）の外観に関連付けられることを特徴とする請求項１に記載のコンピュータ実装システム。
【請求項６】
前記ＵＩは、一時停止の間、前記ワークフローの状態に基づいて駆動可能であることを特徴とする請求項５に記載のコンピュータ実装システム。
【請求項７】
前記ワークフローは、前記ホストのアクティビティにより再開可能であることを特徴とする請求項５に記載のコンピュータ実装システム。
【請求項８】
前記ワークフローシステムは、前記ホストと通信するためのワークフロープロバイダクラスを有することを特徴とする請求項５に記載のコンピュータ実装システム。
【請求項９】
ワークフローを一時停止するアクティビティに遭遇し、
前記ワークフローの一時停止の間にホストと前記ワークフローとの間でデータを交換する
コンピュータ実行可能な動作を有することを特徴とする、コンピュータ実装方法。
【請求項１０】
前記ホストによりデータを設定する動作をさらに有することを特徴とする請求項９に記載のコンピュータ実装方法。
【請求項１１】
前記ホストによるイベントを前記ワークフローに送信して、実行を再開する動作をさらに有することを特徴とする請求項９に記載のコンピュータ実装方法。
【請求項１２】
ワークフローインスタンスの識別に基づいて、ワークフローをロードすることを特徴とする請求項９に記載のコンピュータ実装方法。
【請求項１３】
データが再開イベントであるか否かを検証する動作をさらに有することを特徴とする請求項９に記載のコンピュータ実装方法。
【請求項１４】
前記ホストに一時停止イベントを提起する動作をさらに含むことを特徴とする、請求項９に記載のコンピュータ実装方法。
【請求項１５】
前記一時停止イベントに基づいて、ＵＩを切り替える動作およびＵＩを変更する動作のうちの１つをさらに有することを特徴とする請求項１４に記載のコンピュータ実装方法。
【請求項１６】
前記ワークフローにユーザ入力を提供する動作をさらに有することを特徴とする請求項１４に記載のコンピュータ実装方法。
【請求項１７】
前記ホストがワークフロー内のイベントを一時停止することに同意する動作をさらに有することを特徴とする請求項１４に記載のコンピュータ実装方法。
【請求項１８】
ワークフローインスタンスに問い合わせることにより、前記ワークフローの状態を判定し、前記ワークフローの一時停止を発生させる対話アクティビティを識別する動作をさらに有することを特徴とする請求項１４に記載のコンピュータ実装方法。
【請求項１９】
一時停止ポイントに基づいて、前記ワークフローの外観を変更する動作をさらに有することを特徴とする請求項１４に記載のコンピュータ実装方法。
【請求項２０】
ワークフローを一時停止する手段（１１０）、および
前記ワークフローの一時停止の間、ホストと前記ワークフローとの間でデータを交換する手段（１４０）
のコンピュータ実行可能コンポーネントを備えることを特徴とするコンピュータ実装システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ワークフローベースのアプリケーションにおけるユーザ入力および対話のモデル化に関する。
【０００２】
一般に、ワークフローとは組織における情報および制御の流れのことである。企業は効果的に競争するために、プロセスを定義付け、文書化し、そして効率化することを常に目指している。ビジネス環境においては、これらのプロセスには、販売や注文処理、仕入れ業務、在庫調整や在庫管理、製造や生産管理、出荷や入荷、売掛金勘定などが挙げられる。
【背景技術】
【０００３】
最近のコンピュータシステムおよび関連ソフトウェアは、企業や他の組織がワークフローを改善できるツールを提供する。ソフトウェアツールは、ビジネスのワークフローのプロセスやスケジュールをモデル化し、非効率性や改善の可能性を識別するのに使用できる。さらに、あるプロセスが人、部署、工場の間で、または別の会社間でデータ交換を伴う場合に、コンピュータシステムやネットワークを使用してこれらの交換を実施することができる。該システムとソフトウェアツールはさらに、大量の計算、およびビジネス関連情報に典型的に関連付けられた他のデータまたは情報処理を実施することができる。
【０００４】
したがって、ワークフロー管理には、情報フローの効果的な管理と組織のビジネスプロセスにおける制御が含まれる。そのような情報処理を自動化することにより、現代のビジネスの世界における多くの効率改善につながった。さらに、ワークフロー管理を自動化することより、今日、企業や他の組織は、インターネットなどのグローバルなコンピュータネットワークを含むコンピュータシステムのワークフロートランザクションを実行することで、業績をさらに改善することができるようになってきている。
【０００５】
典型的なワークフローベースのアプリケーションは、複数の条件を満たさなければならない。たとえば、１つの条件は、ビジネスルールに基づいた決定を行う能力である。これには、簡単なルール（たとえば、信用調査の結果に基づくイエスまたはノーの決定）と、より複雑なルール（たとえば、引受業務の最初の決定を行うために検討すべき多数の可能性）が含まれる。他の要件は、そのワークフローの外部の他のソフトウェアおよび他のシステムとの通信である。たとえば、アプリケーションの一部から初期要求が受信されるが、いくつかの態様においては（たとえば、クレジットサービスに連絡を取る場合）、他のウェブサービスまたはウェブ技術を使用する通信が必要である場合がある。さらに満たすべき条件は、ユーザとのワークフローの適切な対話（interaction）である。たとえば、典型的にはワークフローは、ユーザインタフェース自身を表示するか、または他のソフトウェアを通して人間と対話できなければならない。さらに、満たすべき他の条件は、ワークフローの有効期間を通して状態を維持する能力である。したがって、ソフトウェアでワークフローを作成し、実行することは、独自の課題を突きつけている。
【０００６】
たとえば、ビジネスプロセスには、完了するまでに数時間、数日、または数週間かかる場合がある。それだけの時間、ワークフローの現在の状態に関する情報を維持することは困難である。さらにそのような長期間にわたる種類のワークフローは、典型的にノンブロッキングな方法で他のソフトウェアと通信することになり、非同期通信は困難になる可能性がある。同時に、ソフトウェア間の固定化した対話のモデル化は比較的簡単であるが、消費者は断続的に、オンザフライでビジネスプロセスを変更する能力などの追加の柔軟性を必要とする傾向にある。多様なアプリケーションを扱うと、さらにワークフローの作成や管理が複雑になる可能性がある。
【０００７】
ワークフローツール用アプリケーションの多くは、企業や組織内部にある。モデムまたは他の種類の通信リンクを有するネットワークコンピュータの出現で、今では遠隔地のコンピュータシステムも簡単に互いに通信することが可能である。そのような高度通信により、コンピュータシステムのワークフローアプリケーションを企業内の複数の遠隔施設間で使用することができる。一例として、顧客注文を適切な販売員が確認するために本社から遠隔地の営業所に転送すること、および本社へ確認を返送することが挙げられる。またワークフローアプリケーションは、異なる会社間でのビジネストランザクションの処理における特定のユーティリティにもなりうる。典型的なアプリケーションでは、売買関係のある２社が発注、製品出荷、請求書作成および代金回収を行い、処理するのを自動化することを望むことができる。
【０００８】
たとえば、顧客関係管理（ＣＲＭ）などの特定の課題、または金融サービスなどの特定のバーティカルマーケットを目的としたアプリケーションを、ワークフロー中心に構築することができる。そのような種類のアプリケーションは、一般に多数の異なるビジネスプロセスを実装する。Ｗｉｎｄｏｗｓ（登録商標）  Ｗｏｒｋｆｌｏｗ  Ｆｏｕｎｄａｔｉｏｎなどの一般的なワークフロー基盤上でこれらのプロセスを進めるロジックを構築することで、アプリケーションを早期に構築し、素早く変更し、容易にカスタマイズすることができる。さらに、そのプロセスを自動化することで、かなりの効率改善ができる。これは、自動化でなければ不可能である。しかし、このようなワークフロー技術の企業間アプリケーションは、企業の連携、および個々の企業の既存のコンピュータシステムとアプリケーションの適切なインタフェースと適切な持続性サービスの実装が必要となる。
【０００９】
これまでは、ワークフロースケジュールを定義することによりビジネスワークフローを自動化する機能を提供するワークフローアプリケーションツールが開発されてきた。たとえば、買い手が購入予定の製品リストと一緒に発注番号を売り手に送信したいと望み、売り手が注文請書と出荷予定日をつけて返信したいと望む場合がある。そのようなトランザクションは、一般消費者が小売業者から製品を購入する場合が対象であり、または定期的に取引のある２つの大きな企業体が対象である。発注書と確認書に関連付けられたデータは比較的小さく、データの送信時間はおよそコンマ数秒である。コンピュータシステム内で実行するワークフロースケジュールアプリケーションは、未決（pendency）の間にシステムリソースをそのトランザクションに割り当てることができる。この未決期間は、一般に非常に短い。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかし、ワークフロー内のユーザ対話のモデル化には問題が伴う。特に、人が関わるときに、ワークフローは完了するのに長い時間がかかる可能性があり、拡張可能なシステムの構築にはユーザとの対話のワークフローを非アクティブにする必要がある。さらに、ワークフローの状態に基づいてユーザインタフェース（ＵＩ）を駆動することは、アプリケーションの種類に関わらず、複雑性がさらに増大する可能性がある。
【００１１】
したがって、従来のシステムおよび装置に関連付けられた上記に例示した欠陥を克服する必要がある。
【課題を解決するための手段】
【００１２】
以下に、特許請求の範囲の主題のいくつかの態様について基本的に理解できるように、簡略した概要を示す。本概要は、広範な要約ではない。主要な／クリティカルな要素を特定するものでもなく、また特許請求の範囲の主題の範囲を示すものでもない。後述するより詳細な説明の前置きとして、簡略した形でいくつかの概念を示すのが唯一の目的である。
【００１３】
本発明は、ワークフロー自身の一部として対話／ユーザ入力を実装するシステムおよび方法を提供するものである。これは、対話アクティビティコンポーネントの使用により、ワークフローとデータを受け渡しして対話ワークフローを形成するものである。そのような対話アクティビティコンポーネントは、ワークフロー定義内の一時停止ポイントをモデル化するもので、ウェブサービスアプリケーション、コンソール、デスクトップ、ウェブサービスなどを含むアプリケーションの型にとらわれない。したがって、ユーザ入力を要求するさまざまな対話の中断の間、ユーザ入力と関連する対話をワークフローに提供して、ワークフローとそのワークフローに関連付けられたホストアプリケーションとの間の制御された／同期式データ交換を可能にする。こうして、ワークフローの実行の範囲内の定義された時間に、ユーザコンテキストをワークフローインスタンスに関連付けることができる。
【００１４】
関連する態様において、対話アクティビティコンポーネントと一時停止ポイントは、ワークフローのユーザの切り替えに関係する。たとえば、ワークフローは一時停止の間、ワークフローのユーザに関する情報などのワークフローの状態に基づいてユーザインタフェース（ＵＩ）を駆動することができる。したがって、特定のポイントまで実行して、ホスティングアプリケーションにフィードバックする対話ワークフローを提供する。さらに、ホスティングアプリケーションは、一時停止状態に基づいてワークフローの外観を変更することができる。ワークフローの型は、（たとえば、プログラムで、または視覚的ツールを介して）定義することができる。ホストアプリケーションは、イベントを一時停止することに同意して、ワークフローの実行にフック（hook）を提供することができる。次いで一時停止イベント（単数または複数）を提起し、該イベントの情報（たとえば、ワークフローの現在のユーザに関する情報）に基づいて、ＵＩの外観を変更することができる。こうして、ワークフロークラスとデータの受け渡しをして、実行時の対話に対してカスタム機能（たとえば、強く型付けされたワークフロー）を定義することができる。
【００１５】
たとえば、経費報告書のコンテキストでは、最初のユーザが経費報告書のワークフローを開始し、次いで、承認者であるユーザがその経費報告書を承認することができる。こうして、プロセスをワークフロークラスに抽象化することができる。このプロセスとワークフロークラスは、承認者が関係するポイントまで実行中である。このポイントで、最初のユーザの対話は停止する。次いで、承認者はワークフローを実行するためにアプリケーションを開始し（たとえば、別のマシンから）、承認者が指定したアクション（たとえば、承認、不承認など）でワークフローインスタンスを再開することができる。こうして、ワークフローインスタンスの有効期間中、一時停止ポイントでワークフローインスタンスとデータを受け渡しすることができる。
【００１６】
本発明の方法によれば、ワークフローにおける動作をチェックして、それが対話アクティビティであるか否かを確認することができる。それが対話アクティビティである場合、ワークフローを一時停止する。続いて、一時停止イベントを提起し、ホストに通信する。そうして、ワークフローインスタンスが一時停止している間、データをホストから取得し、ワークフローとデータを受け渡しする。さらに、ホストから取得したデータが再開イベントを示す場合、ワークフローを再開することができる。ワークフローは、ワークフローインスタンス識別に基づいて（たとえば、ルックアップコンポーネントを介して）ロードすることもできる。再開イベントは、ワークフローが受信し、実行されて、プロセス内の次の動作に移ることができる。
【００１７】
上述のおよび関連する目的を達成するために、特許請求の範囲の主題のいくつかの例示的態様を以下の説明と図面とを関連させてここに説明する。これらの態様は、主題を実施できるさまざまな方法を示すものであり、これらの方法全ては特許請求の範囲の主題の範囲内にあるものである。他の利点および新たな特徴は、図面と併せて考慮すれば、以下の詳細な説明から明らかであろう。
【発明を実施するための最良の形態】
【００１８】
ここで、本発明の種々の態様を、添付図面を参照して説明する。全体にわたって、同じ番号は同じまたは対応する要素を示す。しかし、図面とそれに関する詳細な説明は特許請求の範囲の主題を開示した特定の形式に限定するものではないことを理解されたい。むしろ、本発明は、特許請求の範囲の主題の本質と範囲内であれば、変更したもの、均等物、および代替物の全てを対象とするものである。
【００１９】
ここで使用するように、「コンポーネント」「システム」「サービス」などの用語は、コンピュータ関連のエンティティを指し、ハードウェア、ハードウェアとソフトウェアとの組み合わせ、ソフトウェア、または実行中のソフトウェアを指す。たとえば、コンポーネントは、プロセッサ上で実行しているプロセス、プロセッサ、オブジェクト、実行ファイル、実行スレッド、プログラム、および／またはコンピュータであってもよいが、これらに限定されない。例として、コンピュータ上で実行しているアプリケーションもコンピュータもコンポーネントにできる。１つまたは複数のコンポーネントがプロセスおよび／または実行スレッド内に存在してもよく、１つのコンポーネントを１つのコンピュータにローカライズしてもよく、および／または２つ以上のコンピュータの間に分散させてもよい。
【００２０】
単語「例示的」は、ここでは一例、事例、実例となるという意味で使用されている。本明細書内で「例示的」として記載したいずれの態様または設計も、必ずしも他の態様または設計より好適または有利であると解釈すべきでない。
【００２１】
さらに、開示事項をシステム、方法、装置、または標準的なプログラミング技術および／またはエンジニアリング技法を使用してソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを作成する製品として実装して、本明細書内で説明する態様を実装するコンピュータベースの装置またはプロセッサベースの装置を制御することができる。本明細書内で使用する用語コンピュータプログラムは、任意のコンピュータ可読装置、キャリアまたは媒体からアクセス可能なコンピュータプログラムを含むものである。たとえば、コンピュータ可読媒体は、磁気記憶装置（たとえば、ハードディスク、フロッピー（登録商標）ディスク、磁気ストリップ…）、光ディスク（たとえば、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）…）、スマートカード、およびフラッシュメモリ装置（たとえば、カード、スティック）を含むが、これらに限定されない。さらに、搬送波を使用して、電子メールの送受信に使用する、またはインターネットまたはローカルエリアネットワーク（ＬＡＮ）などのネットワークにアクセスするのに使用するようなコンピュータ可読電子データを搬送できることを理解されたい。もちろん、当業者は、特許請求の範囲の主題の範囲または本質から逸脱することなく、この構成に多くの変更を加えてもよいことは理解できるであろう。
【００２２】
まず初めに、図１はシステム１０１のブロック図を示す。これは、ワークフロー自身の一部として対話を実装する。ここでワークフローとデータの受け渡しをして、対話ワークフローを形成する。システム１０１は、ワークフロー定義内の一時停止ポイントをモデル化する対話アクティビティコンポーネント１４０を採用し、アプリケーションの型にとらわれず、ウェブサービスアプリケーション、コンソール、デスクトップ、ウェブサービスなどを含む。
【００２３】
さらに、システム１０１は、ワークフローシステム１００と対話するホストアプリケーション１２０を含む。ワークフローは、アクティビティのマップとして定義されるヒューマンプロセスまたはシステムプロセスをモデル化することができる。アクティビティはワークフローのステップであり、ワークフローの実行、再使用、および構成の単位である。アクティビティのマップは、ルール、アクション、状態、およびそれらの関係を表す。典型的に、ワークフローは、ワークフローエンジン／ランタイム１１０を介して実行し、ワークフローランタイムは、ホスト１２０として示すようにいくつかのルールに従ってワークフローランタイムをホストする外部アプリケーションが必要である。ホスト１２０とワークフローシステム１００との間のデータ交換は、ビジネス文書および他のオブジェクトに関連し、および／またはそれらを記述するものである。このビジネス文書および他のオブジェクトは、データ交換に使用される、またはワークフローアクティビティ若しくはホストアプリケーション１２０とデータを通信するのに使用するワークフローの複数のローカル変数の間のフローを促進するものである。
【００２４】
たとえば、ホストアプリケーション１２０は、ワークフロープロバイダ基本クラス（Ｗｏｒｋｆｌｏｗ  Ｐｒｏｖｉｄｅｒ  Ｂａｓｅ  Ｃｌａｓｓ）１１７および／またはそれに関連付けられた実装を介して、ワークフローシステム１００に関連付けられたワークフロープロバイダ（Ｗｏｒｋｆｌｏｗ  Ｐｒｏｖｉｄｅｒ）１１５と対話することができる。さらに、ホスト１２０は、１つまたは複数のワークフローの作成、ワークフローの適切な実行に対して必要に応じて種々のコンポーネント間のコールをマーシャリングすること、および分離機構のセットアップなど、追加の重要な多数の態様に責任を負うことができる。さらに、ホスト１２０は、拡張の意味から複数の中央処理装置（ＣＰＵ）を１つのマシン内で活用し、または複数のマシンのファーム上で多数のワークフローインスタンスを実行させる、複数のプロセスを作成することができる。ホスト１２０はさらにポリシーを制御することができる。このポリシーは、ワークフローが長い待機状態のときに適用し、特定のイベントをリッスン（listen）してそのイベントをユーザまたは管理者に通信し、各ワークフローのタイムアウトおよび終了を設定し、パフォーマンスカウンタを公開し、デバッグや診断目的でログ情報を書き込むポリシーである。
【００２５】
ワークフローシステム１０１に関連付けられたワークフローは、その目的に向けて特別に確立されたサービスを介して外部世界と通信することができる。このサービスでは、ワークフロー内のイベントドリブンアクティビティが接続するイベントを提起することができる。また、このサービスは、ホストをコールし、ホストにデータを送信するワークフローのパブリックメソッドを公開する。
【００２６】
図１に示すように、対話アクティビティコンポーネント１４０は、ワークフロー自身の一部として対話を実装することができる。ここでワークフローとデータの受け渡しをして、対話ワークフローを形成する。対話アクティビティコンポーネント１４０は、ワークフロー定義内の一時停止ポイントをモデル化する。したがって、ユーザ入力を要求するさまざまな対話の中断の間、ユーザ入力および関連する対話をワークフローに提供して、ワークフローとそのワークフローに関連付けられたホストアプリケーションとの間の制御された／同期式データ交換を可能にすることができる。こうして、ワークフローの実行の範囲内の定義された時間に、ユーザコンテキストをワークフローインスタンスに関連付けることができる。
【００２７】
図２は、ユーザとの対話を必要とする複数の一時停止ポイントを有するワークフロー２００の実行を示す図である。一時停止ポイント２１２〜２１５（１個からｎ個、ここでｎは整数）は、ワークフロー実行時のインスタンスに対応するように、対話アクティビティコンポーネントによりモデル化することができる。たとえば、ホストアプリケーションとのデータ交換のためにワークフローを一時停止することができる。さらに、この一時停止ポイント２１２〜２１５はワークフローのユーザの切り替えに関係する。たとえば、一時停止の間、ワークフローのユーザに関する情報などのワークフローの状態に基づいて、ユーザインタフェース（ＵＩ）を駆動することができる。
【００２８】
ワークフロー２００は、コンピュータシステム内で実行スケジュールの形式で定義することができる。スケジュールは、指定した並行性、依存性、およびそれに関連付けられたトランザクション属性を有するアクションのセットを含む。各スケジュールは関連するスケジュール状態を有し、スケジュール状態はスケジュールの定義、スケジュール内の現在の位置、スケジュールに関連付けられたアクティブまたは生のデータおよびオブジェクトを含む。スケジュールの中には、アクションのグルーピングに基づいてトランザクション境界を設けることができる。この点について、トランザクションは、個々のアクション、トランザクション、またはトランザクションのグループを含めることができる。アクションは順番にグループ化され、連続して実行される。たとえば、アクションを同時に実行するタスクも同様である。したがって、グルーピングに基づいて、並行性の属性をスケジュール内のアクションおよびトランザクションに対して決定することができる。
【００２９】
アクションはスケジュール内で行うワークに対応し、スケジュール内の構成の基本単位である。そのようなアクションは、スケジュールのコンテキスト内に待ち時間、並行性、および補償に関する属性を選択的にまたは組み合わせて含むことができる。たとえば、アクションが外部からの刺激をスケジュールに送信することができる。これにより、外部のプログラムがスケジュール状態を向上させることができる。これらの刺激は、保護されたコンポーネント上のイベント、メッセージ、またはコールである。イベントの場合、実行中のスケジュールはサブスクライバとして機能する。特定のスケジュールのインスタンスを、保護されたコンポーネント上のイベント、メッセージ、またはコールなどのアクションに対して配置することになる。
【００３０】
さらに、アクションはコンポーネント上のメソッドコールを駆動することができる。そのようなアクションは、典型的にコンポーネントをインスタンス化（たとえば、コンポーネントのインスタンスを作成）し、そのインスタンス上のメソッドをコールし、続いてそのインスタンスに対する参照をスケジュール内の後の方で使用しない場合は、それを解放する。アプリケーションがスケジュールを実行するとき、スケジューラエンジンのインスタンスを作成することができる。そして、スケジュールと関連するバインディングをロードする。さらにアクションは、予想される、または実際の終了時間や待ち時間に関する情報を含むことができる。この情報は、スケジュールを定義しているときにスケジュール定義に組み込むことができ、および／またはアクションの待ち時間に関する履歴情報または予測情報に基づいて実行時に動的に提供してもよい。
【００３１】
一時停止ポイント２１２〜２１５はまた、ワークフロー内のデハイドレーション（ｄｅｈｙｄｒａｔｉｏｎ）ポイントを示すことができる。ワークフローが何時間、何日、または何週間も実行するかもしれないので、ランタイム２００は自動的に実行中のワークフローを停止して、ワークフローがある期間アクティブでないとき、一時停止ポイント２１２〜２１５で持続的にワークフロー状態を記憶することができる。デハイドレーションとは一般に、待ち時間を考慮して記憶媒体にスケジュール状態を選択的に記憶するメソッドのことである。たとえば、スケジュール内のアクションが受信メールを５時間待つと予測されると、スケジュール状態をメッセージが受信されるまでディスクにデハイドレーションしてもよい。そのような場合に、システムはメッセージを受信するまで他のタスクを実行してもよい。それにより、ワーク出力とシステムの効率を大幅に向上させることができる。したがって、ユーザ入力を要求するさまざまな対話の中断の間、ユーザ入力および関連する対話をワークフローに提供して、ワークフローとそのワークフローに関連付けられたホストアプリケーションとの間の制御された／同期式データ交換を可能にすることができる。ワークフローの実行の範囲内の定義された時間に、ユーザコンテキストをワークフローインスタンスに関連付けることができる。
【００３２】
以下に、対話アクティビティコンポーネントの例示的な定義を示す。これは一時停止ポイント２１２〜２１５でワークフローインスタンスを一時停止および／または再開する定義である。
【００３３】
【表１】
2009522645.tif 000003
【００３４】
【表２】
2009522645.tif 000004
【００３５】
示したように、アクティビティクラスは対話サービス（Ｉｎｔｅｒａｃｔｉｖｉｔｙ  Ｓｅｒｖｉｃｅ）上の一時停止（Ｓｕｓｐｅｎｄ）メソッドをコールすることで、ワークフローの実行をブロックするために自身のエグゼキュータを使用することができる。そして、ホストハンドラまで対話アクティビティコンポーネントに関連付けられたＩｎｔｅｒａｃｔｉｏｎＩｄｅｎｔｉｆｉｅｒの伝播を開始する。
【００３６】
したがって、特定のポイントまで実行して、ホストアプリケーションにフィードバックする対話ワークフローを提供することができる。ホストアプリケーションは、一時停止状態に基づいてワークフローの外観を変更することができる。ワークフローの型は、（たとえば、プログラムで、またはビジュアルツールを介して）定義することができる。ホストアプリケーションは、イベントを一時停止することに同意して、ワークフローの実行にフックを提供することができる。次いで一時停止イベント（単数または複数）を提起し、該イベントの情報（たとえば、ワークフローの現在のユーザに関する情報）に基づいて、ＵＩの外観を変更することができる。こうして、ワークフロークラスとデータの受け渡しをして、実行時の対話に対してカスタム機能（たとえば、強く型付けされたワークフロー）を定義することができる。
【００３７】
図３および図４は、一時停止ポイントを有する経費報告書の詳細なフローチャートである。このフローチャートにより、ユーザ入力を要求するさまざまな対話の中断の間、ユーザ入力および関連する対話は、ワークフローとそのワークフローに関連付けられたホストアプリケーションとの間の制御されたおよび／または同期式のデータ交換が可能になる。フローチャート３００および４００は、汎用のＥｘｐｅｎｓｅ  Ｒｅｐｏｒｔｉｎｇワークフロー内の一時停止ポイントとして、ＳｗｉｔｃｈＵｓｅｒアクティビティコンポーネントおよびＩｎｔｅｒａｃｔｉｖｅＡｃｔｉｖｉｔｙ（対話アクティビティ）コンポーネントを使用する例を示すものである。
【００３８】
そのように、経費報告書のコンテキストでは、最初のユーザが経費報告書のワークフローを開始し、次いで、承認者であるユーザがその経費報告書を承認することができる。こうして、プロセスをワークフロークラスに抽象化することができる。このプロセスとワークフロークラスは承認者が関係するポイントまで実行中である。このポイントで、最初のユーザの対話は停止する。次いで、承認者はワークフローを実行するためにアプリケーションを開始し（たとえば、別のマシンから）、承認者が指定したアクション（たとえば、承認、不承認など）でワークフローインスタンスを再開することができる。こうして、ワークフローインスタンスの有効期間中、一時停止ポイントでワークフローインスタンスとデータを受け渡しすることができる。
【００３９】
図３に示すように、ボックス３１０はＳｕｂｍｉｔｔｅｄＥＲ動作を表す。この動作では、以下図５で詳細に述べるように、一時停止状態を示して、ホストアプリケーションがグラフィカルインタフェース（たとえば、専用形式）を介して、提出した経費報告書ビューをレンダリングする。さらにワークフロー定義３００内の動作３２０は、ＳｗｉｔｃｈＵｓｅｒアクティビティのインスタンスを表す。このＳｗｉｔｃｈＵｓｅｒアクティビティのインスタンスを介して、本発明は次のワークフローセグメントの実行に責任を負うユーザとワークフローインスタンスとの間の現在の関係を変更する。これにより、典型的には、適切なユーザのみの実行コンテキストで行った承認／却下のアクションによって、ワークフローを確実に再開できるようになる。同様にして、動作３３０および動作４３０は、本発明の例示的態様によるＩｎｔｅｒａｃｔｉｖｅＡｃｔｉｖｉｔｙ中断のインスタンスを表す。同様に、ＮｅｗＥＲとして設計されたボックス４２０は、Ｎｅｗ  Ｅｘｐｅｎｓｅ  Ｒｅｐｏｒｔを示す。ワークフローは、グローバルな経費報告データを待つ間一時停止して、グラフィカルインタフェース（たとえば、図５の専用形式）を介して、ユーザ入力の結果として提供される。
【００４０】
このワークフローは、経費報告書を提出、承認するアプリケーションを特徴とする。このアプリケーションは、ワークフローにより統合された複数のページを含む。種々のアクティビティおよび制御フロー構成に加えて、たとえば、ワークフローは、経費報告書の承認を提示されたとき、関連ユーザの切り替え方法を明示する。すでに説明したが、ＦｉｌｌＥＲ動作４３０の間、ワークフローは一時停止し、ユーザは経費報告書に行項目の追加を続けることができる。利用可能な進行中のワークフローのリストへの問い合わせを行い、アプリケーションワークフロー内に表示することも含まれる。
【００４１】
たとえば、経費報告アプリケーションは、現在のユーザが提出した進行中の経費報告書およびユーザの承認を待つ任意の経費報告書を記載したホームページを含むことができる。このアプリケーションは、経費報告書などを目的とした情報を特定すること、個別の行項目を追加すること、および情報の正確さを検証することにより、新規の経費報告書を作成することが可能になる。さらに、アプリケーションは、新規の経費報告書が提出されたときに、電子メール通知４６０を承認者に送信することができる。続いて、承認者はその経費報告書を見て、承認または却下し、その際に、最終メールを送信する。
【００４２】
以下は、本発明の例示的な態様による、対話を組み入れた例示的なＥｘｐｅｎｓｅ  Ｒｅｐｏｒｔｉｎｇ（経費報告）ワークフロー定義を示す。
<Workflow Name="ExpenseReportingWorkflow"
Inherits="InteractiveWorkflow" 
Implements="ITrackingWorkflowStateHandler"
xmlns="System. ApplicationServices .Workflows, System.ApplicationServices . Workflow" 
xmlns :w="System.Web.Workflows, System.Web" 
xmlns : s="SampleApp"> 
<StartActivity Name="Start">
<Transitions>
<ActivityTransition Destination="NewER" />
</Transitions> 
</StartActivity> 
<UIActivity Name="NewER" Interactionldentifier="NewER" Actions="Submit">
<Transitions>
<ActivityTransition Destination=="FillER" Action="Submit" />
</Transitions> 
</UIActivity>
<UIActivity Name="FillER" Interactionldentifier="FillER" Actions="AddItem, Submit">
<Transitions>
<ActivityTransition Destination="FiIlER" Action="AddItem" />
<ActivityTransition Destination="FillApprover" Action=""Submit" />
</Transitions> 
</UIActivity>
<CodeActivity Name="FillApprover" CustomExecute="FillApprover_CustomExecute">
<Transitions>
<ActivityTransition Destination="VerifyER" /> 
</Transitions> 
</CodeActivity>
<UIActivity Name="VerifyER" Interactionldentifier="VerifyER" Actions="Submit">
<Transitions>
<ActivityTransition Destination="MailActivityl" Action="Submit" />
</Transitions>
</UIActivity>
<s:.MailActivity Name="MailActivityl"
From="expenses@example . com" Subject="New expense report submitted; approval required. ">
<Transitions>
<ActivityTransition Destination="SwitchUserl" /> 
</Transitions> 
</s :MailActivity>
<SwitchUserActivity Name="SwitchUserl"> 
<Transitions>
<ActivityTransition Destination="ApproveER" /> 
</Transitions> 
<Bindings>
<ActivityBinding ActivityPropertyName="UserName" WorkflowPropertyName="Approver">
</Bindings>
</CodeActivity>
<UIActivity Name="ApproveER" Interactionldentifier="ApproveER" Actions="Approve, Reject">
<Transitions>
<ActivityTransition Destination="Payment"" Action="Approve" />
<ActivityTransition Destination="MailActivity2" Action="Reject" />
</Transitions>
</UIActivity>
<s :MailActivity Name="MailActivity2"
From="expenses@example . com" Subject="Expense report was rejected. ">
<Transitions>
<ActivityTransition Destination="Stop" /> 
</Transitions> 
</s :MailActivity>
<CodeActivity Name="Payment" CustoraExecute="Payment_CustomExecute">
<Transitions>
<ActivityTransition Destination="MailActivity3" /> 
</Transitions>
</CodeActivity>
<s :MailActivity Name="MailActivity3" 
From="expenses@example . com" Subject="Expense report was 
approved . ">
<Transitions>
<ActivityTransition Destination="Stop" /> 
</Transitions>
</s :MailActivity>
<StopActivity Name="Stop" />
<Code Language="C#">
private Guid _expenseReportI D ;
private ExpenseReport _expenseReport ;
public ExpenseReport ExpenseReport { 
get { return _expenseReport ; } 
}
public Guid ExpenseReportI D {
get { return _expenseReportID; } 
set { _expenseReportID = value ; } 
}
protected override void OnStarting (EventArgs e ) { 
base . OnStarting ( e ) ;
_expenseReport = new ExpenseReport ( ) ;
_expenseReportID = __expenseReport . ID; 
}
private void FillAρprover_CustomExecute (object sender, ActivityExecuteEventArgs e) {
// TODO: Use current user and expense report amount to determine approver e. Result = true;
}
private void Payment_CustomExecute (object sender, ActivityExecuteEventArgs e) { 
// TODO: Make payment by calling a Web service e. Result = true; 
}
#region Implementation of ITrackingWorkflowStateHandler 
void ITrackingWorkflowStateHandler .BeginLoad ( ) {
}
void ITrackingWorkflowStateHandler .BeginSave () {
ExpensesDB. UpdateExpenseReport (_expenseReport) ; . 
}
void ITrackingWorkflowStateHandler . EndLoad () {
_expenseReport = 
ExpensesDB . GetExpenseReport (ExpenseReportID) ;
}
void ITrackingWorkflowStateHandler .EndSave () {
}
#endregion
</Code>
</Workflow>
Web . config
<system.web>
<pageFlows>
<pageFlow name="ExpenseReporting" 
workflow="ExpenseReporting . workflow" 
provider="SqlWorkflowProvider" 
startPagePath="Default . aspx"> 
<pages>
<add name="NewER" pagePath="NewER. aspx" behavior="CreateWorkflow" /> 
<add name="FillER" pagePath="FillER. aspx" behavior="ResumeWorkflow" />
・・・
</pages>
</pageFlow>
</pageFlows>
</system. web>
Default . aspx
<%@ Page %>
<html>
<body>
<form runat="server">
<asp :WorkflowDataSource runat="server" id="pendingWorkflows"
pageFlowName="ExpenseReporting" Filter="CreatedByUser" 
/>
<asp :WorkflowDataSource runat="server" id="approvalWorkflows" 
pageFlowName="ExpenseReporting" Filter="AssignedToUser" 
/>
Expense Reports Pending Approval:
<asp : GridView runat="server"
DataSourceID="pendingWorkflows" />
Expense Reports Needing Approval:
<asp: GridView runat="server" 
DataSourceID="approvalWorkflows" />
<a href="NewER.aspx">Create New Expense Report</a>
</form> 
</body> 
</html> 
Approve . aspx
<%@ Page %>
<asp:PageFlowManager runat="server" id="pageFlowManagerl" PageFlowName="ExpenseReporting" />
<html> 
<body> 
<form runat="server">
<asp : FormView runat="server" 1 DataSourceID="pageFlowManagerl">
<ItemTemplate>
・・・
</ItemTemplate> 
</asp : FormView> 
<asp:ActionButton runat="server" Text="Approve">
<ClickActions>
<asp: PageFlowAction Type="Resume" ResumeAction="Approve" />
</ClickActions> 
</asp : ActionButton> 
<asp :ActionButton runat="server" Text="Reject">
<ClickActions>
<asp: PageFlowAction Type="Resume" ResumeAction="Reject" />
</ClickActions> 
</asp : ActionButton> 
</form> 
</body> 
</html>
【００４３】
図５は、本発明の種々の態様と併せて使用できるグラフィカルインタフェース（たとえば、専用形式）を示す。たとえば、ページフロー５１０の経費報告アプリケーションは、経費報告書を提出し、承認するためのウェブアプリケーションを特徴とする。このアプリケーションはワークフローにより統合された複数のページを含む。種々のアクティビティと制御フロー構成に加えて、ワークフローは関連ユーザの切り替え方法を明示する。ページフロー５１０はまた、利用可能な進行中のワークフローのリストに問い合わせをして、アプリケーションワークフロー内に表示することを示す。たとえば、ワークフローは一時停止の間、ワークフローのユーザに関する情報などのワークフローの状態に基づいて、ユーザインタフェース（ＵＩ）を駆動することができる。したがって、特定のポイントまで実行して、ホスティングアプリケーションにフィードバックする対話ワークフローを提供する。さらに、ホスティングアプリケーションは、一時停止状態に基づいてワークフローの外観を変更することができる。上述したように、経費報告書のコンテキストにおいて、ワークフローの型は、（たとえば、プログラムで、またはビジュアルツールを介して）定義することができる。ホストアプリケーションは、イベントを一時停止することに同意して、ワークフローの実行にフックを提供することができる。次いで一時停止イベント（単数または複数）を提起し、該イベントの情報（たとえば、ワークフローの現在のユーザに関する情報）に基づいて、ＵＩの外観を変更することができる。こうして、ワークフロークラスとデータの受け渡しをして、実行時の対話に対してカスタム機能（たとえば、強く型付けされたワークフロー）を定義することができる。また、ホストはワークフローインスタンスに問い合わせをして、ワークフローを一時停止および／またはアイドル（待ち状態）にする、現在の対話アクティビティを識別することができる。
【００４４】
図６は、ワークフロー定義内で一時停止ポイントをモデル化できるシステム６００のブロック図である。ここで、ワークフローとデータの受け渡しをして対話ワークフローを形成する。典型的には、ワークフローインスタンス６４０において、一時停止イベントを提起することができる。ワークフローインスタンス６４０は、その一部としてつくられた対話アクティビティコンポーネント６１０を有し、たとえば、時間設定で、または現在のユーザの切り替えにより、ワークフローの実行の一時停止を可能にする。ワークフローは、含まれているＳｔａｒｔＡｃｔｉｖｉｔｙを実行することにより実行を開始でき、ＳｔｏｐＡｃｔｉｖｉｔｙを実行したときに、実行を終了することができる。実行している間、各アクティビティをチェックして、各アクティビティが実行されているか否かを検証する。たとえば、アクティビティが実行されていなければ、ワークフローは一時停止している。アクティビティが実行されていれば、関連するＥｘｅｃｕｔｅメソッドを呼び出す。そのメソッドが成功結果を返せば、適切なアクティビティ遷移を使用して次のアクティビティを判断する。ワークフローは、多数の理由で一時停止することができる。たとえば、アクティビティの実行をキャンセルするため、アクティビティが実行を継続できないため、次の実行を遅らせるために導入される特定の遅延のため、および異なるユーザが実行するために次の実行が必要なユーザコンテキストの切り替えのためなどの理由がある。一時停止に入ると、ワークフローインスタンスはデータベースまたは同等の記憶装置に保存され、および／またはシリアライズされる。このデータベースまたは同等の記憶装置は、それからワークフローを順次取り出し、デシリアライズし、および再開する。また、アクティビティの実行が処理できないエラー結果になった場合、ワークフローはエラー状態に入ることもできる。
【００４５】
図６に示すように、対話アクティビティコンポーネント６１０は、ワークフローエンジン／ランタイム６３５に関連付けられた対話サービス６２０を介して、イベントを提起することができる。続いて、ワークフローは一時停止し、ホスト６３０がワークフローインスタンス６４０とデータ交換（たとえば、データ取得）をすることができる。ホストは、次いで、ワークフロー実行を再開するために、対話アクティビティサービス６２０をコールすることによりワークフローを再開することができる。したがって、ユーザ入力を要求するさまざまな対話の中断の間、ユーザ入力と関連する対話をワークフローに提供して、ワークフローとそのワークフローに関連付けられたホストアプリケーションとの間の制御された／同期式データ交換を可能にすることができる。
【００４６】
図７〜９は、本発明の一態様による、ワークフローの実行フローの例示的なフローチャートを示す図である。例示的な方法を示し、本明細書では種々のイベントおよび／または動作を表す一連のブロックとして説明するが、本発明はこの示したブロックの順序付けに限定されない。たとえば、本発明による本明細書内で示した順序付けの他に、いくつかの動作またはイベントは、異なる順序で、および／または他の動作またはイベントと同時に発生する場合がある。また、示した全てのブロック、イベント、および動作に本発明による方法を実装する必要があるわけではない。さらに、本発明による例示的な方法および他の方法を、本明細書内で図示し、説明した方法に関連付けて、また図示、説明していない他のシステムおよび装置に関連付けて実装してもよい。図７の方法７００で示すように、ワークフロープロセス７０５は実行してプロセス内の次の動作に移行する。ワークフロー実行は、７１０において、実行すべき動作がワークフローの終了を示すか否かを検証することができる。その動作がワークフローの終了を示す場合、７２０においてワークフローの実行は終了する。その動作がワークフローの終了を示さない場合、方法は動作７３０に進み、ワークフローが実行すべき動作をチェックして、その動作が対話アクティビティであるか否かを検証する。その動作が対話アクティビティである場合、７４０においてワークフローは一時停止して、上記で詳述したホストアプリケーションとの対話が可能になる。その動作が対話アクティビティでない場合、方法は動作７０５に戻り、ワークフローは現在の動作を実行し、次の動作に進む。
【００４７】
図７に示すように、７４０におけるワークフローの一時停止の後、実行フローは進んで、７５０においてホストに対して一時停止イベントを提起する。そのようにして、図８に示すように、８６０においてワークフローインスタンスが一時停止している間、８６２においてホストとワークフローとの間でデータを交換する。こうして、ワークフローとデータの受け渡しを行う。このデータの受け渡しは、８６４におけるワークフローインスタンスからのデータの取得、および／または８６６におけるホストによるデータの設定を含むことができる。したがって、ユーザ入力を要求するさまざまな対話の中断の間、ユーザ入力と関連する対話をワークフローに提供して、ワークフローとそのワークフローに関連付けられたホストアプリケーションとの間の制御された／同期式データ交換を可能にすることができる。そのため、ワークフローの実行の範囲内の定義された時間に、ユーザコンテキストをワークフローインスタンスに関連付けることができる。
【００４８】
８７０において検証を行って、ホストにより送出されたデータが再開イベントであるか否かをチェックすることができる。そしてそのデータが再開イベントでない場合、ワークフローインスタンスは一時停止状態にとどまり、データ交換を続けることができ、方法は動作８６２に戻る。そのデータが再開イベントである場合、方法は図９に進み、９８０において、ホストはワークフローにイベントを送信し、実行を再開することができる。９８２において、ワークフローがロードされるか否かに関する検証を行うことができる。ワークフローがロードされる場合、ワークフローは９８６において再開イベントを受信し、次に動作７０５に戻って実行フローの次の動作を実行する。ワークフローがロードされない場合、９８４において、ワークフローに関連付けられた識別に基づいて（たとえば、ワークフローインスタンスが作成されたときに）、ワークフローはロードされ、次いで、ワークフローを再開する動作９８６に進む。
【００４９】
開示事項の種々の態様のコンテキストを提供するために、図１０、図１１および以下の説明は、開示事項の種々の態様を実装できる適切な環境を、簡単に、一般的に記述するものである。開示事項を１つのコンピュータおよび／または複数のコンピュータ上で実行するコンピュータプログラムのコンピュータ実行可能命令の一般的なコンテキストで上述したが、本発明を他のプログラムモジュールとの組み合わせで実装してもよいことは、当業者には理解できるだろう。一般に、プログラムモジュールは、特定のタスクを実行する、および／または特定の抽象データ型を実装する、ルーチン、プログラム、コンポーネント、データ構造体などを含む。さらに、当業者は、本発明の方法は他のコンピュータシステム構成で実施できることを理解するだろう。コンピュータシステム構成には、シングルプロセッサまたはマルチプロセッサコンピュータシステム、小型コンピューティングデバイス、メインフレームコンピュータ、およびパーソナルコンピュータ、ハンドヘルドコンピューティングデバイス（たとえば、携帯端末（ＰＤＡ）、携帯電話、時計…）、マイクロプロセッサベースのまたはプログラム可能な家電製品または産業用電子機器などが含まれる。示した態様は、通信ネットワークを介してリンクしたリモート処理装置によりタスクを実行する、分散コンピューティング環境で実施してもよい。しかし、本発明の全ての態様ではなく、いくつかの態様については、スタンドアロンのコンピュータで実施することができる。分散コンピューティング環境においては、プログラムモジュールはローカルメモリ記憶装置およびリモートメモリ記憶装置の両方に配置することができる。
【００５０】
図１０を参照して、コンピュータ１０１２を含む、本発明の種々の態様を実装する例示的な環境１０１０を説明する。コンピュータ１０１２は、処理ユニット１０１４、システムメモリ１０１６、およびシステムバス１０１８を含む。システムバス１０１８は、システムコンポーネントを処理ユニット１０１４に接続する。システムコンポーネントはシステムメモリ１０１６を含むが、これに限定されない。処理ユニット１０１４は、種々の利用可能なプロセッサのいずれかであってよい。デュアルマイクロプロセッサおよび他のマルチプロセッサのアーキテクチャを、処理ユニット１０１４として使用することもできる。
【００５１】
システムバス１０１８は、いくつかのタイプのバス構造（単数または複数）のいずれかであってよい。このバス構造には、メモリバスまたはメモリコントローラ、周辺バスまたは外部バス、および／または利用可能なバスアーキテクチャの任意の種類を使用するローカルバスが含まれる。利用可能なバスアーキテクチャには、１１ビットバス、業界標準アーキテクチャ（ＩＳＡ）、マイクロチャネルアーキテクチャ（ＭＳＡ）、拡張ＩＳＡ（ＥＩＳＡ）、インテリジェントドライブエレクトロニクス（ＩＤＥ）、ＶＥＳＡローカルバス（ＶＬＢ）、周辺コンポーネント相互接続（ＰＣＩ）、ユニバーサルシリアルバス（ＵＳＢ）、アドバンストグラフィックスポート（ＡＧＰ）、パーソナルコンピュータメモリカード国際協会バス（ＰＣＭＣＩＡ）、およびスモールコンピュータシステムインタフェース（ＳＣＳＩ）が含まれるが、これらに限定されない。
【００５２】
システムメモリ１０１６は、揮発性メモリ１０２０および不揮発性メモリ１０２２を含む。起動時などにコンピュータ１０１２内の要素間で情報を転送する基本ルーチンを含む、基本入出力システム（ＢＩＯＳ）は、不揮発性メモリ１０２２内に格納される。例として、不揮発性メモリ１０２２には、ＲＯＭ（Read Only Memory）、プログラム可能ＲＯＭ（ＰＲＯＭ）、電気的プログラム可能ＲＯＭ（ＥＰＲＯＭ）、電気的消去可能ＲＯＭ（ＥＥＰＲＯＭ）またはフラッシュメモリが含まれるが、これらに限定されない。揮発性メモリ１０２０は、外部キャッシュメモリとして機能するＲＡＭ（Random Access Memory）を含む。例として、ＲＡＭは以下の多くの形式で利用可能である。その形式は、同期ＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、同期ＤＲＡＭ（ＳＤＲＡＭ）、ダブルデータレートＳＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、拡張ＳＤＲＡＭ（ＥＳＤＲＡＭ）、シンクリンク（Ｓｙｎｃｈｌｉｎｋ）ＤＲＡＭ（ＳＬＤＲＡＭ）、およびダイレクトランバス（ｄｉｒｅｃｔ  Ｒａｍｂｕｓ）ＲＡＭ（ＤＲＲＡＭ）などである。
【００５３】
コンピュータ１０１２はまた、取り外し可能／取り外し不能、揮発性／不揮発性のコンピュータ記憶媒体を含む。たとえば、図１０で示しているのはディスク記憶装置１０２４である。ディスク記憶装置１０２４には、磁気ディスクドライブ、フロッピー（登録商標）ディスクドライブ、テープドライブ、ジャズ（Ｊａｚ）ドライブ、ジップ（Ｚｉｐ）ドライブ、ＬＳ−１００ドライブ、フラッシュメモリカード、またはメモリスティックなどの装置が含まれるが、これらに限定されない。さらに、ディスク記憶装置１０２４は、単独で、または他の記憶媒体と組み合わせて記憶媒体を含むことができる。この記憶媒体には、コンパクトディスクＲＯＭ装置（ＣＤ−ＲＯＭ）、ＣＤ記録可能ドライブ（ＣＤ−Ｒドライブ）、ＣＤ書き換え可能ドライブ（ＣＤ−ＲＷドライブ）またはデジタル多用途ディスクＲＯＭドライブ（ＤＶＤ−ＲＯＭ）などの光ディスクドライブが含まれるが、これらに限定されない。ディスク記憶装置１０２４とシステムバス１０１８との接続を容易にするために、典型的には、インタフェース１０２６などの取り外し可能または取り外し不能なインタフェースを使用する。
【００５４】
図１０は、ユーザと適切な動作環境１０１０で示される基本コンピュータリソースとの仲介役として機能するソフトウェアを示していることを理解されたい。このソフトウェアはオペレーティングシステム１０２８を含む。オペレーティングシステム１０２８は、ディスク記憶装置１０２４に格納することが可能であり、コンピュータシステム１０１２のリソースを制御し、割り当てるために機能する。システムアプリケーション１０３０は、システムメモリ１０１６内またはディスク記憶装置１０２４上のいずれかに格納されたプログラムモジュール１０３２およびプログラムデータ１０３４を介して、オペレーティングシステム１０２８によるリソース管理を利用する。本明細書内で説明した種々のコンポーネントは、種々のオペレーティングシステムまたはオペレーティングシステムの組み合わせで実装可能であることを理解されたい。
【００５５】
ユーザは、入力装置（単数または複数）１０３６を介してコンピュータ１０１２にコマンドまたは情報を入力する。入力装置１０３６には、マウスなどのポインティングデバイス、トラックボール、スタイラス、タッチパッド、キーボード、マイクロフォン、ジョイスティック、ゲームパッド、パラボラアンテナ、スキャナ、テレビチューナカード、デジタルカメラ、デジタルビデオカメラ、ウェブカメラなどが含まれるが、これらに限定されない。これらの入力装置および他の入力装置は、インタフェースポート（単数または複数）１０３８を経由してシステムバス１０１８を介して、処理ユニット１０１４に接続する。たとえば、インタフェースポート（単数または複数）１０３８には、シリアルポート、パラレルポート、ゲームポート、およびユニバーサルシリアルバス（ＵＳＢ）が含まれる。出力装置（単数または複数）１０４０は、入力装置（単数または複数）１０３６と同一タイプのポートをいくつか使用する。そのためたとえば、ＵＳＢポートを使用して、コンピュータ１０１２に入力を提供し、コンピュータ１０１２からの情報を出力装置１０４０に出力することができる。出力アダプタ１０４２を提供して、特定のアダプタを必要とする他の出力装置１０４０のうち、モニタ、スピーカ、およびプリンタのような出力装置１０４０があることを示している。例として、出力アダプタ１０４２には、出力装置１０４０とシステムバス１０１８との間の接続手段を提供するビデオカードおよびサウンドカードが含まれるが、これらに限定されない。他の装置および／または装置のシステムは、リモートコンピュータ（単数または複数）１０４４などの入力機能と出力機能の両方を備えることに留意されたい。
【００５６】
コンピュータ１０１２は、リモートコンピュータ（単数または複数）１０４４などの１つまたは複数のリモートコンピュータに対する論理接続を使用するネットワーク化環境で動作することができる。リモートコンピュータ（単数または複数）１０４４は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ワークステーション、マイクロプロセッサベースの機器、ピア装置または他の共通ネットワークノードなどであってよく、典型的に、コンピュータ１０１２に関して説明した要素の多くまたは全てを含む。簡潔にするために、メモリ記憶装置１０４６に限っては、リモートコンピュータ（単数または複数）１０４４と一緒に示している。リモートコンピュータ（単数または複数）１０４４は、ネットワークインタフェース１０４８を介してコンピュータ１０１２に論理的に接続され、その後、通信接続１０５０経由で物理的に接続される。ネットワークインタフェース１０４８は、ローカルエリアネットワーク（ＬＡＮ）および広域ネットワーク（ＷＡＮ）などの通信ネットワークを含む。ＬＡＮ技術には、光ファイバ分散データインタフェース（ＦＤＤＩ）、銅線分散データインタフェース（ＣＤＤＩ）、イーサネット（登録商標）／ＩＥＥＥ  ８０２．３、トークンリング／ＩＥＥＥ  ８０２．５などが含まれる。ＷＡＮ技術には、ポイントツーポイントリンク、総合デジタル通信網（ＩＳＤＮ）およびその変形のような回路交換ネットワーク、パケット交換ネットワーク、およびデジタル加入者線（ＤＳＬ）が含まれるが、これらに限定されない。
【００５７】
通信接続（単数または複数）１０５０は、ネットワークインタフェース１０４８をバス１０１８に接続するのに使用するハードウェア／ソフトウェアを指す。通信接続１０５０は、コンピュータ１０１２内部を明確に示すために図示しているが、コンピュータ１０１２の外部にあってもよい。ネットワークインタフェース１０４８への接続に必要なハードウェア／ソフトウェアには、例示としてのみ、通常の電話級モデム、ケーブルモデムおよびＤＳＬモデム、ＩＳＤＮアダプタ、およびイーサネット（登録商標）カードを含むモデムのような内部技術および外部技術が挙げられる。
【００５８】
図１１は、本発明の対話コンポーネントを有するワークフローを実装するのに使用できる、サンプルコンピューティング環境１１００の概略のブロック図である。システム１１００は、１つまたは複数のクライアント１１１０を含む。クライアント（単数または複数）１１１０は、ハードウェア、および／またはソフトウェア（たとえば、スレッド、プロセス、コンピューティングデバイス）であってよい。システム１１００はまた、１つまたは複数のサーバ１１３０を含む。サーバ（単数または複数）１１３０も、ハードウェア、および／またはソフトウェア（たとえば、スレッド、プロセス、コンピューティングデバイス）であってよい。サーバ１１３０は、たとえば、スレッドを収容して、本明細書内で記載したコンポーネントを使用することにより変換を実行することができる。クライアント１１１０とサーバ１１３０との間の可能な通信の１つは、２つ以上のコンピュータプロセスの間で伝送されるように適合されたデータパケットの形式であってよい。システム１１００は、クライアント（単数または複数）１１１０とサーバ（単数または複数）１１３０との間の通信を容易にするために使用できる通信フレームワーク１１５０を含む。クライアント（単数または複数）１１１０は、クライアント（単数または複数）１１１０にローカルな情報を格納するのに使用できる、１つまたは複数のクライアントデータストア（単数または複数）１１６０に動作可能に接続される。同様に、サーバ（単数または複数）１１３０は、サーバ（単数または複数）１１３０にローカルな情報を格納するのに使用できる、１つまたは複数のサーバデータストア（単数または複数）１１４０に動作可能に接続される。
【００５９】
上述の内容は、種々の例示的な態様を含む。もちろん、これらの態様を説明するために、コンポーネントまたは方法の考えられるあらゆる組み合わせを説明することは不可能であるが、当業者は、さらに多数の組み合わせや順序の入れ替えが可能であることは理解できるだろう。したがって、本明細書で示した態様は、添付した請求項の精神と範囲内にある全ての代替、変更、変形を包含するものである。さらに、「含む（ｉｎｃｌｕｄｅ）」という用語は、詳細な説明または請求項のいずれかで使用する限り、請求項の移行語として使用するときに「備える（ｃｏｍｐｒｉｓｉｎｇ）」という用語が解釈されるのと同様に、包括的であることを意図するものである。
【図面の簡単な説明】
【００６０】
【図１】対話アクティビティコンポーネントを介してワークフローと対話するホストアプリケーションの例示的なシステム図である。
【図２】ユーザおよび／またはホストとの対話を必要とする複数の一時停止ポイントを有するワークフロー実行を示す図である。
【図３】本発明の例示的な態様による、一時停止ポイントを有する経費報告書の詳細なフローチャートである。
【図４】本発明の例示的な態様による、一時停止ポイントを有する経費報告書の詳細なフローチャートである。
【図５】ワークフロー実行時に実行する種々の動作のプレゼンテーションに使用する、例示的なグラフィカルインタフェースを示す図である。
【図６】本発明の一態様による、ワークフローインスタンスとホストアプリケーションとの間のデータ交換を示す図である。
【図７】本発明の一態様による、ワークフローの実行フローの例示的な方法を示す図である。
【図８】本発明の一態様による、ワークフローの実行フローの例示的な方法を示す図である。
【図９】本発明の一態様による、ワークフローの実行フローの例示的な方法を示す図である。
【図１０】本発明の種々の態様を実装する例示的な環境を示す図である。
【図１１】本発明の対話アクティビティコンポーネントを有するワークフローを実装するのに使用できる、追加のコンピューティング環境の略ブロック図である。
【図１】
2009522645.tif 000005
【図２】
2009522645.tif 000006
【図３】
2009522645.tif 000007
【図４】
2009522645.tif 000008
【図５】
2009522645.tif 000009
【図６】
2009522645.tif 000010
【図７】
2009522645.tif 000011
【図８】
2009522645.tif 000012
【図９】
2009522645.tif 000013
【図１０】
2009522645.tif 000014
【図１１】
2009522645.tif 000015
【国際調査報告】
2009522645.tif 000016
2009522645.tif 000017