一般的に、今日企業で利用されるすべてのソフトウェアは、ビジネスプロセスをサポートする。かかるプロセスの一部は完全に自動化され、アプリケーション間の通信のみに依存する一方、その他のプロセスはユーザに依存してプロセスを開始したり、プロセスが使用するドキュメントを承認したり、発生した例外状況を解決したりする。いずれの場合も、プロセスに関わるユーザおよびソフトウェアのアクティビティを記述する、ワークフローと呼ばれる独立した一連のステップを指定するのが一般的である。かかるワークフローを定義すれば、その定義を中心にアプリケーションを構築してビジネスプロセスをサポートできる。
言い換えると、ワークフローは一般に、かかる組織における情報および制御の流れである。企業は、効果的に競争を行うために、かかるプロセスの定義、文書化および合理化に継続的に取り組む。ビジネス環境において、これらのプロセスには、販売および注文の処理、購入タスク、在庫の制御および管理、製造および生産の制御、出荷および入荷、買掛金勘定等が含まれる。
コンピュータシステムおよび関連するソフトウェアは現在、企業および他の組織がワークフローを改善するために使用できるツールを提供している。ソフトウェアツールを使用すると、ビジネスワークフローのプロセスまたはスケジュールをモデル化し、非効率性と考えられる改善とを特定することができる。加えて、プロセスにユーザ間、部署間、工場間、さらには個別の企業間でのデータ交換が含まれる場合は、コンピュータシステムおよびコンピュータネットワークを使用して、かかる交換を実装できる。これらのシステムおよびソフトウェアツールではさらに、ビジネス関連情報に典型的に関連する大規模な計算ならびに他のデータ処理または情報処理を実装できる。
したがって、ワークフロー管理には、情報の流れの効果的な管理と、組織のビジネスプロセスの効果的な制御とが含まれ、かかる情報処理の自動化が現代のビジネス世界における多数の効率向上につながった。さらに、ワークフロー管理のかかる自動化は現在、企業および他の組織が、インターネット等のグローバルコンピュータネットワークを含むコンピュータシステムでワークフロートランザクションを実行することにより、パフォーマンスをさらに向上させることを可能にしている。
典型的なワークフローベースアプリケーションでは、複数の条件を満たすことがしばしば求められる。例えば、かかる条件の1つは、ビジネスルールに基づいて意思決定を行う機能である。これには、単純なルール(例えば、信用調査の結果に基づくイエスかノーかの意思決定等)と、より複雑なルール(例えば、最初の引き受けの意思決定を行うために評価する必要がある、潜在的に大きなセット)とが含まれ得る。別の要件は、ワークフローの外部にある他のソフトウェアおよび他のシステムとの通信である。例えば、最初の要求をアプリケーションの一部分から受け取ることがある一方で、一部の態様(例えば、信用サービスへの連絡)では他のWebサービスまたは技術を使用した通信が必要なことがある。さらに満たす必要がある条件は、ワークフローとユーザの適切な対話である。例えば、ワークフローでは通常、ユーザインターフェースを独自に表示できるか、または他のソフトウェアを通じて人間と対話できる必要がある。さらに満たす必要がある別の条件は、ワークフローの存続期間を通じて状態を維持する機能である。したがって、ワークフローをソフトウェアで作成および実行することには、独特の難題が伴う。
例えば、一部のビジネスプロセスは、完了するまでに数時間、数日、または数週間かかることがあり、かかる期間にわたってワークフローの現在の状態に関する情報を維持するのは負担が大きい。さらに、かかる種類の長期的なワークフローはまた、典型的には他のソフトウェアと非ブロッキング方式で通信し、非同期通信によって困難が生じることがある。同時に、ソフトウェア間の固定対話をモデリングするのは比較的容易だが、消費者はビジネスプロセスをその場で変更する機能等の追加の柔軟性を継続的に求める傾向がある。多様なアプリケーションを扱うことで、ワークフローの作成および管理にまつわる複雑さはさらに増す可能性がある。
ワークフローツール用のアプリケーションの多くは、企業または組織にとって内的である。モデムまたは他の種類の通信リンクを備えたネットワークコンピュータの出現により、現在では遠隔地にあるコンピュータシステムが互いに容易に通信できる。そのような強化された通信により、コンピュータシステムのワークフローアプリケーションを1つの企業内の離れた施設間で使用することが可能になる。例として、顧客注文を適切な販売員に確認してもらうために企業本社から遠隔地の営業所に転送し、確認を本社に返す処理が含まれよう。ワークフローアプリケーションはまた、異なる企業間のビジネストランザクションの処理における特定のユーティリティにもなり得る。典型的なアプリケーションでは、売り手と買い手の関係にある2つの企業が、購入注文、製品出荷、請求、および集金の生成と処理とを自動化することを望む場合がある。
例えば、顧客関係管理(customer relationship management:CRM)等の特定の問題または財務サービス等の特定の垂直市場を対象とするアプリケーションは、ワークフローを中心に構築できる。かかる種類のアプリケーションは、一般にいくつかの異なるビジネスプロセスを実装する。これらのプロセスを駆動するロジックをWindows(登録商標)Workflow Foundation等の共通ワークフロー基盤上で構築すると、アプリケーションの構築を高速化し、変更を迅速化し、カスタマイズを容易にすることができる。さらに、かかるプロセスを自動化すると、効率が大幅に向上することがあり、これは他のやり方では実現できない。ただし、ワークフロー技術のかかる企業間アプリケーションでは、企業の協力と、個々の企業の既存のコンピュータシステムおよびアプリケーションの適切なインターフェイシングと適切な永続化サービス実装とが必要である。
本発明の様々な態様を、添付の図面を参照して説明するが、これらの図面を通して、同様の符号は同様の要素または対応する要素を示す。ただし、図面と図面に関連する詳細な説明とは、特許請求の範囲に記載された主題を、開示されている特定の形式に制限するものではないことを理解されたい。むしろ目的は、特許請求の範囲に記載された主題の趣旨および範囲に含まれるすべての変形、均等物および代替物を網羅することである。
本明細書で使用される「コンポーネント」、「システム」、「サービス」等の用語は、コンピュータ関連の実体、すなわちハードウェアと、ハードウェアおよびソフトウェアの組合せと、ソフトウェアと、実行中のソフトウェアとのいずれかを示すものである。例えば、コンポーネントは、プロセッサで実行されるプロセス、プロセッサ、オブジェクト、実行可能ファイル、実行のスレッド(thread of execution)、プログラムおよび/またはコンピュータであり得るが、これに限定されるものではない。例として、コンピュータで実行されるアプリケーションとコンピュータとは、いずれもコンポーネントになり得る。1つまたはそれ以上のコンポーネントが1つのプロセス内に存在することがあり、かつ/または実行のスレッドとコンポーネントとが1台のコンピュータ上でローカル化されることがあり、かつ/または実行のスレッドとコンポーネントとが2台またはそれ以上のコンピュータ間で分散されることがある。
「例示的」という用語は、本明細書では実施例、事例、または例示としての役割を果たすことを意味するために使用されている。本明細書で「例示的」と説明されているすべての態様または設計は、必ずしも他の態様または設計よりも好ましいまたは優れていると解釈されるべきものではない。
さらに、開示される主題は、標準的なプログラミングおよび/またはエンジニアリングのテクニックを使用して、本明細書で詳細に示される態様を実装するようにコンピュータまたはプロセッサベースのデバイスを制御するソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組合せを製作することで、システム、メソッド、装置または製品として実装し得る。本明細書で使用されるコンピュータプログラムという用語は、コンピュータで読み取り可能な任意のデバイス、キャリアまたはメディアからアクセス可能なコンピュータプログラムを網羅するものである。例えば、コンピュータで読み取り可能なメディアには、磁気ストレージデバイス(例えば、ハードディスク、フロッピー(登録商標)ディスク、磁気ストライプ等)、光学ディスク(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)等)、スマートカードおよびフラッシュメモリデバイス(例えば、カード、スティック)が含まれ得るがこれに限定されるものではない。加えて、電子メールの送受信あるいはインターネットまたはローカルエリアネットワーク(LAN)等のネットワークへのアクセスで使用されるような、コンピュータで読み取り可能な電子データを伝送するために、搬送波を利用できることを理解されたい。もちろん、当業者は、特許請求の範囲に記載された主題の範囲および趣旨から離れることなく、この構成に多数の変更を加えられることを認識するであろう。
最初に図1を参照すると、ホスト110にワークフローインスタンスへのアクセスを提供するワークフローシステム130のブロック図が示されており、そこでは実行時に対話用にカスタム機能を定義することができる。かかるカスタム機能(例えば、強く型付けされたワークフロー)には、メソッド(複数も可)、イベント(複数も可)、インターフェース等が含まれ得る。ワークフローでは、アクティビティの図解として定義されるユーザまたはシステムのプロセスをモデル化できる。アクティビティは、ワークフロー内の行為であり、ワークフローの実行、再使用および編成の単位である。アクティビティの図解は、ルール、行為、状態、およびアクティビティの関係を表す。典型的には、ホスト110によって示されるように、いくつかのルールに応じて、ワークフローはワークフローエンジン/ランタイム150を介して実行され、ワークフローランタイムにはワークフローランタイムをホストする外部アプリケーションが必要である。
ホスト110は、ワークフローインスタンスへのアクセスを提供するアクセスコンポーネント120を介して、ワークフローシステム130と対話するが、そこでは実行時に対話用にカスタム機能を定義できる。かかるカスタム機能(例えば、強く型付けされたワークフロー)には、メソッド(複数も可)、イベント(複数も可)、プロパティ(複数も可)、インターフェース等が含まれ得る。したがって、ワークフローをオブジェクト型またはクラスとして公開でき、そこでは新しいメンバを追加してワークフローを拡張できる。これによって柔軟性が提供され、ユーザがカスタムプロパティと対話することが可能になる。
さらに、以下に詳細に説明するように、かかるアクセスコンポーネント120を通じて、ホスト110はワークフローシステム130のワークフローインスタンスとデータを交換できる。ホスト110は、1つまたは複数のワークフローの作成、ワークフローを適切に実行するための必要性に応じた様々なコンポーネント間の呼び出しのマーシャリング(marshaling)、および分離メカニズムの設定等、いくつかの追加の態様および重要な態様を担うことができる。加えて、ホスト110は、スケーラビリティ上の理由で複数のプロセスを作成してマシン内の複数のCPUを利用するか、またはマシンのファーム上で大量のワークフローインスタンスを実行することができる。ホスト110はさらに、ワークフローが長時間待機する場合に適用するポリシーを制御したり、特定のイベントをリッスンしてユーザまたは管理者に伝えたり、各ワークフローのタイムアウトおよび再試行を設定したり、パフォーマンスカウンタを公開したり、デバッグおよび分析の目的でログ情報を書き込んだりすることができる。
ワークフローシステム130に関連するワークフローは、外部の世界と通信するために特に確立されたサービスを通じて外部の世界と通信できるが、そこではかかるサービスはワークフロー内のイベント駆動型アクティビティがフックアップ(hook up)するイベントを発生させることができる。同様に、このサービスは、ワークフローが呼び出してデータをホスト110に送信するためのパブリックメソッドを公開する。ワークフローは、コンピュータシステムでの実行用のスケジュールの形式で定義できる。スケジュールには、指定された同時実行、依存関係およびトランザクションの属性が関連付けられた行為のセットが含まれ得る。各スケジュールは関連するスケジュール状態を持ち、このスケジュール状態には、スケジュールの定義と、スケジュール内の現在の位置とに加えて、スケジュールに関連するアクティブまたはライブのデータおよびオブジェクトが含まれる。スケジュール内には、行為のグループ分けに基づいて、トランザクション境界が存在することがある。これに関連して、トランザクションは、個々の行為またはトランザクション、あるいはそれらのグループを包含し得る。以下にさらに説明するように、行為は、順次方式で実行されるシーケンスにグループ化できることに加えて、行為が同時に実行されるタスクにもグループ化できる。したがってグループ分けに基づき、スケジュール内の行為およびトランザクションに対して同時実行属性(concurrency attribute)が解決され得る。
図1に示されているように、アクセスコンポーネント120は、ワークフローインスタンスを作成/取得し、それをさらなる対話のためにホストアプリケーションに提供することができる。アクセスコンポーネント120は、ホスト110がプロパティ、メソッドおよびイベントにアクセスするための、ワークフローインスタンスへのハンドルを供給できる。したがって、アクセスコンポーネント120はワークフローのインスタンスを提供でき、そこではワークフローインスタンスはワークフロー型である。
以下に、アクセスコンポーネント120の例示的定義を示すが、ここでメソッドGetWorkflow<WorkflowType>は、実行中のワークフロー定義とそのカスタムプロパティ、メソッドおよびイベントへのアクセスを供給する(例えば、ワークフローがアイドル状態の場合)。このように<WorkflowType>に対して総称ベースのメカニズムを使用することで、通常は強く型付けされたワークフロー定義の型セーフな方法での取得を促進することができる。
ここで図2を参照すると、本発明の一態様による基本ワークフロー定義210から作成される新規ワークフロー型220およびカスタムプロパティのブロック図が示されている。この型は、クラスメンバを追加することによって拡張できる。典型的には、かかるフレームワークの主要な構成単位はアクティビティである。これらのアクティビティは、関連する実行メソッドがフレームワークによって呼び出されたときに実行されるタスク(複数も可)または単一の論理作業単位を表す。各アクティビティは、プロパティ、メソッドおよびイベントで構成されるオブジェクトモデルを提供することができ、開発者はそれらに対してアプリケーションコードでプログラミングを行うことができる(例えば、UIコントロールおよびコンポーネントに対してプログラミングを行うのに似ている)。アクティビティには様々な種類が存在し、本発明では個別の当事者がUIコントロール等と同様にカスタムアクティビティを構築できる。
例えば、フレームワークでは、アクティビティ基本クラスのコアセットに加えて、いくつかの特定のアクティビティを定義できる。これには、StartActivityおよびStopActivity(ワークフロー内の開始点および停止点を表す)、CodeActivity(ワークフロー開発者がアクティビティに関連する機能をワークフロー型内のイベントハンドラで実装できるようにする)、ControlFlowActivity(ワークフロー開発者が条件およびルールに基づいて分岐ロジックをワークフローに導入できるようにする)、SuspendableActivity(ワークフロー開発者がワークフローの実行中の一時停止を、時間の観点で、または現在のユーザを切り替えることにより、モデル化できるようにする。例えば、DelayActivityおよびSwitchUserActivity)、InteractiveActivity(ワークフロー開発者が、エンドユーザからの行為によってワークフロー内の実行がいつ、どのように進むかが決まるユーザ対話ポイントをモデル化できるようにする。かかるInteractiveActivityは、有効な行為が実行されるまで実行を一時停止するSuspendableActivity型として扱うことができる)、CompositeActivity(ワークフロー開発者がアクティビティをグループ化できるようにする)、LoopActivity(含まれているアクティビティの実行を反復するCompositeActivityの一実施例)、IMultiActionActivity(複数の行為をサポートし、実行を進める前にそれらの行為のいずれかを選択することを要求するアクティビティによって実装されるインターフェース。InteractiveActivityはかかるインターフェースを実装できる)、IMultiResultActivity(実行時に考えられる結果のセットのいずれかを生成するアクティビティによって実装されるインターフェース。ControlFlowActivityはこのインターフェースを実装する)、ならびにISuspendableActivity(特定の待機条件のセットについてワークフローの実行を一時停止することができるアクティビティによって実装されるインターフェース)が含まれ得る。
ワークフローは、包含されているStartActivityを実行することにより実行を開始でき、StopActivityが実行されたときに終了する。実行の過程で、各アクティビティを調べて実行可能かどうか確認することができる。例えば、アクティビティがホストから何らかの情報(例えば、メッセージ、タイマー等)を待機しているために実行を継続できない場合は、ワークフローは一時停止される。アクティビティが実行可能な場合は、関連する実行メソッドが呼び出され、このメソッドが成功の結果を返す場合は、適切なアクティビティ移行が使用されて次のアクティビティが判断される。さらに、ワークフローはその継続期間中にいくつかの理由で一時停止されることがある。これらの理由には、アクティビティの実行のキャンセル、アクティビティがホストからメッセージ、タイマー等の何らかの情報を待機しているために実行を継続できない、以降の実行を延期するために導入された特定の遅延、および以降の実行を異なるユーザによって実行することが必要なユーザコンテキストの切り替え等がある。一時停止したワークフローインスタンスは、データベースまたは同等のストレージにシリアル化し、そこから後で取得、逆シリアル化、および再開することができる。アクティビティの実行がエラーになった場合、そのエラーは処理されず、ワークフローはエラー状態に入ることもある。
図3は、ホストアプリケーション310の、ワークフローインスタンス330との対話のブロック図を示しており、そこではワークフローとの間でデータが受け渡しされるカスタムプロパティ320を基本クラス上に構築して、対話型ワークフローを形成することができる。実行の過程で、各アクティビティを調べて実行可能かどうかを確認できる。例えば、アクティビティが実行できない場合は、ワークフローを一時停止できる。アクティビティが実行可能な場合は、関連する実行メソッドを呼び出すことができ、このメソッドが成功の結果を返す場合は、適切なアクティビティ移行が使用されて次のアクティビティが判断される。例示されているように、ホストアプリケーション310は、ワークフローインスタンス330とデータを交換することができる(例えば、データの取得)。それにより、ワークフローインスタンスとホストアプリケーションとの間で、制御された/同期的なデータ交換が可能となり、そこではカスタムメソッドおよびカスタムプロパティを呼び出すことができる。したがって、ホストアプリケーション310はワークフローインスタンスと対話して、ワークフロークラスにカスタム動作を関連付けることができる。例えば、ホストはかかるワークフローインスタンスにアクセスするためにカスタムイベントをサブスクライブして、ワークフローをオブジェクトとして操作できる。さらに、ワークフローのリッチ型を、プログラム的にかつ/またはビジュアルツールを通じて定義できる。
図4は、本発明の例示的態様によりカスタム機能を利用するおよび/または新規ワークフロー定義を定義する関連方法を示している。かかる新規ワークフロー定義は、基本ワークフロー定義から定義されるカスタムプロパティ、カスタムメソッド、カスタムイベント等を持ち得る。ここでは例示的方法が様々なイベントおよび/または行為を表す一連のブロックとして例示および説明されているが、本発明はかかるブロックの例示された順序に限定されるものではない。例えば、一部の行為またはイベントは、本発明に従い、ここで例示された順序とは別に、異なる順序で発生することがあり、かつ/あるいは他の動作またはイベントと同時に発生することがある。加えて、本発明による方法を実装するために、例示されたすべてのブロック、イベントまたは行為が必要だとは限らない。さらに、本発明による例示的方法およびその他の方法は、本明細書で例示および説明される方法と関連させて実装できるだけでなく、例示または説明されていない他のシステムおよび装置と関連させて実装できることも理解されよう。最初に、410においてワークフロープロバイダが取得され、その後420において、ホストアプリケーションはワークフローインスタンスに関連する識別情報を通じて、かかるワークフロープロバイダにワークフローインスタンスを要求できる。かかる識別情報は、ワークフローのインスタンスを一意に識別するものであり、プログラム的に生成するか、またはホストアプリケーションによって割り当てることができる。430において、確認(verification)が実行されて、かかるワークフローインスタンスが存在するかどうかが調べられる。ワークフローインスタンスが存在しない場合、この方法は435において停止する。
それ以外の場合、この方法は行為440に進み、そこでワークフロープロバイダはワークフローのインスタンスを生成できる。その後、ホストアプリケーションはかかるインスタンスと450において対話でき、プロパティ、メソッド、イベント等のクラスメンバを460において呼び出す。かかる対話が完了すると、以下に詳細に説明するように、ワークフロープロセスを保存できる。
図5は、本発明の一特定態様によるプロセス間での情報の流れの例示的シーケンス図を示している。最初に、ホストアプリケーションはアクセスコンポーネント(例えば、GetWorkflow<WorkflowType>)を利用してワークフロー定義とそのカスタムプロパティ、カスタムメソッドおよびカスタムイベントを取得できる(例えば、ワークフローがアイドル状態の場合)。このように<WorkflowType>に対して総称ベースのメカニズムを使用することで、通常は強く型付けされたワークフロー定義の型セーフな方法での取得を促進することができる。カスタム機能(例えば、強く型付けされたワークフロー)には、メソッド(複数も可)、イベント(複数も可)、プロパティ(複数も可)、インターフェース等が含まれ得る。したがって、ワークフローをオブジェクト型またはクラスとして公開でき、そこでは新しいメンバを追加してワークフローを拡張できる。これによって柔軟性が提供され、ユーザがカスタムプロパティと対話することが可能となる。
ワークフロープロバイダ510は、ワークフローのインスタンスを作成/取得でき、ホストアプリケーションは、プロパティ、メソッド、イベント等のクラスメンバを呼び出すことによってかかるインスタンスと対話できる。したがって、ワークフローインスタンスの識別情報(例えば、ID番号)に基づき、ワークフローインスタンスへのアクセスが可能となる(例えば、ホストアプリケーションを介して)。ホストは、ワークフロー型/クラスに関連するカスタム動作を通じて、ワークフローインスタンスと対話できる。例えば、ホストは、かかるワークフローインスタンスにアクセスするためにカスタムイベントをサブスクライブして、ワークフローをオブジェクトとして操作できる。ワークフロー定義のリッチ型は、プログラム的にかつ/またはビジュアルツールを通じて定義できる。
図6は、ホストアプリケーションとのデータ交換時にワークフローのインスタンスを読み込むための関連方法600を示している。図6に示されているように、永続化ストア(persistence store)へのアクセスが610において提供される。この永続化ストアは、ワークフローインスタンス表現を格納する。その後、620において、ワークフローインスタンスの状態表現が、対応する永続化ストアから取得される。かかる表現は、その後630においてワークフローインスタンスに変換できる。次に、640において、ワークフローインスタンスがホストアプリケーションに提供され、そこでホストはワークフロー型/クラスに関連するカスタム動作を通じてワークフローインスタンスと対話できる。例えば、ホストは、かかるワークフローインスタンスにアクセスするためにカスタムイベントをサブスクライブして、ワークフローをオブジェクトとして操作できる。ワークフローのリッチ型は、プログラム的にかつ/またはビジュアルツールを通じて定義できる。
同様に、図7に示されているように、ワークフローのインスタンスを保存するために、ワークフローインスタンスが710において取得される。その後、720において、かかるワークフローインスタンスの表現であるワークフロー状態が生成される。ホストアプリケーションは、その後725において、プロパティ、メソッド、イベント等のクラスメンバを呼び出すことによってかかるインスタンスと対話できる。かかる対話/表現に関連するデータは、その後730において、データストアおよび/または永続化サービス実装に保存できる。これにより740において、ワークフローランタイムの保存イベントを発生させることができ、そこでワークフローインスタンスが保存および/またはアクセスされる。したがって、本発明により、カスタムプロパティ、カスタムメソッドおよびカスタムイベントを有する新しいワークフロー定義を基本ワークフロー定義から定義することが可能となる。
ワークフロープロバイダは、ワークフローのインスタンスを作成/取得でき、開発者は、プロパティ、メソッド、イベント等のクラスメンバを呼び出すことによってかかるインスタンスと対話できる。
図8は、本発明の一態様により、実行中のワークフローにアクセスする特定の方法800を示している。最初に、810において、ホストアプリケーションはワークフローインスタンスの識別情報を取得することにより、実行中のワークフローにアクセスできる。その後、820において、call loadメソッドを介してワークフローインスタンスにアクセスでき、そこでは表形式の配置(tabular arrangement)によりワークフローインスタンスが関連する識別情報(ID)に対応付けられる。次に、830において、ホストアプリケーションはワークフローと対話できる。かかる対話時に、840において、ホストはワークフローの型のカスタム動作と対話できる。例えば、ホストは、かかるワークフローインスタンスにアクセスするためにカスタムイベントをサブスクライブして、ワークフローをオブジェクトとして操作できる。ワークフローのリッチ型は、プログラム的にかつ/またはビジュアルツールを通じて定義できる。
開示される主題の様々な態様のためのコンテキストを提供するために、図9および図10、並びに以下の説明は、開示される主題の様々な態様を実装し得る適切な環境の簡潔で一般的な説明を提供するものである。この主題について、1台のコンピュータおよび/または複数のコンピュータで実行されるコンピュータプログラムのコンピュータ実行可能命令の一般的なコンテキストで上述したが、当業者は、本発明が他のプログラムモジュールと組み合わせても実装可能であることを認識するであろう。一般に、プログラムモジュールは、特定のタスクを実行するおよび/または特定の抽象データ型を実装するルーチン、プログラム、コンポーネント、データ構造体等を含む。さらに当業者は、本発明の方法が、シングルプロセッサまたはマルチプロセッサのコンピュータシステム、ミニコンピューティングデバイス、メインフレームコンピュータ、さらにはパーソナルコンピュータ、ハンドヘルドコンピューティングデバイス(例えば、携帯情報端末(PDA)、電話、腕時計等)、マイクロプロセッサベースまたはプログラム可能な家庭用電子製品または工業用電子装置等を含む他のコンピュータシステム構成でも実施できることを理解するであろう。例示された態様はまた、通信ネットワークを通じてリンクされたリモート処理デバイスによってタスクが実行される分散コンピューティング環境でも実施できる。ただし、本発明のすべてではないにせよ一部の態様は、スタンドアロンのコンピュータ上で実施できる。分散コンピューティング環境では、プログラムモジュールをローカルメモリストレージデバイス内およびリモートメモリストレージデバイス内の両方に配置できる。
図9を参照すると、コンピュータ912を含む、本発明の様々な態様を実装するための例示的環境910が説明されている。コンピュータ912は、処理ユニット914と、システムメモリ916と、システムバス918とを含む。システムバス918は、システムメモリ916等を含むがそれに限定されるものではないシステムコンポーネントを処理ユニット914に結合する。処理ユニット914は、種々の使用可能なプロセッサの任意のものでよい。デュアルマイクロプロセッサおよびその他のマイクロプロセッサアーキテクチャも処理ユニット914として利用できる。
システムバス918は、メモリバスまたはメモリコントローラ、周辺機器用バスまたは外部バス、ならびに/または11ビットバス、業界標準アーキテクチャ(ISA)、マイクロチャネルアーキテクチャ(MSA)、拡張ISA(EISA)、インテリジェントドライブエレクトロニクス(IDE)、VESAローカルバス(VLB)、周辺コンポーネント相互接続(PCI)、ユニバーサルシリアルバス(USB)、アドバンスドグラフィックポート(AGP)、パーソナルコンピュータメモリカード国際協会バス(PCMCIA)、スモールコンピュータシステムインターフェース(SCSI)等を含むがそれに限定されるものではない使用可能なバスアーキテクチャの任意の種類を使用するローカルバスを含む、複数の種類のバス構造のいずれかでよい。
システムメモリ916は、揮発性メモリ920と不揮発性メモリ922とを含む。起動時等にコンピュータ912内の構成要素間で情報を転送する基本ルーチンを含む基本入力/出力システム(BIOS)は、不揮発性メモリ922内に格納される。例として、不揮発性メモリ922には、読み取り専用メモリ(ROM)、プログラマブルROM(PROM)、電気的プログラマブルROM(EPROM)、電気的消去可能ROM(EEPROM)、またはフラッシュメモリが含まれ得るがこれに限定されるものではない。揮発性メモリ920には、外部キャッシュメモリとして機能するランダムアクセスメモリ(RAM)が含まれる。例として、RAMには、同期型RAM(SRAM)、ダイナミックRAM(DRAM)、同期型DRAM(SDRAM)、ダブルデータレートSDRAM(DDR SDRAM)、および拡張SDRAM(ESDRAM)、Synchlink DRAM(SLDRAM)、Direct Rambus RAM(DRRAM)等の多数の形式があるがこれに限定されるものではない。
コンピュータ912はまた、リムーバブル/非リムーバブルの揮発性/不揮発性コンピュータストレージメディアを含む。例えば、図9は、ディスクストレージ924を示している。ディスクストレージ924には、磁気ディスクドライブ、フロッピー(登録商標)ディスクドライブ、テープドライブ、Jazドライブ、Zipドライブ、LS−100ドライブ、フラッシュメモリカード、またはメモリスティック等のデバイスが含まれるがこれに限定されるものではない。加えて、ディスクストレージ924は、ストレージメディアを単独で含むか、あるいはコンパクトディスクROMドライブ(CD−ROM)、書き込み可能CDドライブ(CD−Rドライブ)、書き換え可能CDドライブ(CD−RWドライブ)、またはデジタル多目的ディスクROMドライブ(DVD−ROM)等の光学ディスクドライブを含むがこれに限定されるものではない他のストレージメディアとの組合せで含み得る。ディスクストレージデバイス924のシステムバス918への接続を容易にするために、インターフェース926等のリムーバブルまたは非リムーバブルのインターフェースが典型的に使用される。
図9は、ユーザと、適切な運用環境910内で説明される基本コンピュータリソースとの間で仲介物として機能するソフトウェアを説明していることを理解されたい。かかるソフトウェアには、オペレーティングシステム928が含まれる。ディスクストレージ924上に格納できるオペレーティングシステム928は、コンピュータシステム912のリソースを制御および割り当てるように動作する。システムアプリケーション930は、システムメモリ916内またはディスクストレージ924上に格納されるプログラムモジュール932およびプログラムデータ934を通じて、オペレーティングシステム928によるリソースの管理を利用する。本明細書で説明される様々なコンポーネントは、様々なオペレーティングシステムまたはオペレーティングシステムの組合せと共に実装できることを理解されたい。
ユーザは、入力デバイス(複数も可)936を通じて、コンピュータ912にコマンドまたは情報を入力する。入力デバイス936には、マウス、トラックボール、スタイラス、タッチパッド、キーボード、マイク、ジョイスティック、ゲームパッド、衛星放送用アンテナ、スキャナ、TVチューナカード、デジタルカメラ、デジタルビデオカメラ、Webカメラ等のポインティングデバイスが含まれるがこれに限定されるものではない。これらおよびその他の入力デバイスは、インターフェースポート(複数も可)938を介し、システムバス918を通じて処理ユニット914に接続する。インターフェースポート(複数も可)938には、例えば、シリアルポート、パラレルポート、ゲームポート、およびユニバーサルシリアルバス(USB)が含まれる。出力デバイス(複数も可)940は、入力デバイス(複数も可)936と同じ種類のポートのいくつかを使用する。したがって、例えば、USBポートを使用して入力をコンピュータ912に提供し、またコンピュータ912からの情報を出力デバイス940に出力することができる。出力アダプタ942は、特別なアダプタを必要とする他の出力デバイス940の中に、モニタ、スピーカ、プリンタ等のいくつかの出力デバイス940があることを示すために提供されている。出力アダプタ942には、例として、出力デバイス940とシステムバス918との間の接続の手段を提供するビデオカードおよびサウンドカードが含まれるがこれに限定されるものではない。リモートコンピュータ(複数も可)944等の他のデバイスおよび/またはデバイスのシステムは、入力機能と出力機能の両方を提供することに留意されたい。
コンピュータ912は、リモートコンピュータ(複数も可)944等の1台またはそれ以上のリモートコンピュータへの論理接続を使用して、ネットワーク環境で動作できる。リモートコンピュータ(複数も可)944は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ワークステーション、マイクロプロセッサベースのアプライアンス、ピアデバイスまたはその他の一般的なネットワークノード等でよく、典型的にはコンピュータ912に関連して説明される構成要素の多数またはすべてを含む。話を簡単にするために、メモリストレージデバイス946のみがリモートコンピュータ(複数も可)944と共に示されている。リモートコンピュータ(複数も可)944は、ネットワークインターフェース948を通じてコンピュータ912に論理的に接続され、さらに通信接続950を介して物理的に接続される。ネットワークインターフェース948は、ローカルエリアネットワーク(LAN)およびワイドエリアネットワーク(WAN)等の通信ネットワークを包含する。LAN技術には、光ファイバ分散データインターフェース(FDDI)、銅線分散データインターフェース(CDDI)、イーサネット(登録商標)/IEEE 802.3、トークンリング/IEEE 802.5等が含まれる。WAN技術には、ポイントツーポイントリンク、総合デジタル通信網サービス(ISDN)およびその変形等の回線交換ネットワーク、パケット交換ネットワークならびにデジタル加入者回線(DSL)が含まれるがこれに限定されるものではない。
通信接続(複数も可)950は、ネットワークインターフェース948をバス918に接続するために利用されるハードウェア/ソフトウェアを示す。通信接続950は、例を明快にするためにコンピュータ912の内部に示されているが、コンピュータ912に対して外的でもよい。ネットワークインターフェース948への接続に必要なハードウェア/ソフトウェアには、例示のみを目的とした場合、標準電話グレードモデム、ケーブルモデムおよびDSLモデムを含むモデム、ISDNアダプタ、ならびにイーサネット(登録商標)カード等の内的および外的な技術が含まれる。
図10は、本発明のワークフロー実装を実装するために利用できるサンプルコンピューティング環境1000の概略ブロック図である。システム1000は、1つまたはそれ以上のクライアント1010を含む。クライアント(複数も可)1010は、ハードウェアおよび/またはソフトウェア(例えば、スレッド、プロセス、コンピューティングデバイス)でよい。システム1000はまた、1つまたはそれ以上のサーバ1030を含む。サーバ1030(複数も可)もまた、ハードウェアおよび/またはソフトウェア(例えば、スレッド、プロセス、コンピューティングデバイス)でよい。サーバ1030は、例えば、本明細書で説明されるコンポーネントを利用することによって変換を実行するスレッドを収容できる。クライアント1010とサーバ1030との間で考えられる通信の1つは、2つまたはそれ以上のコンピュータプロセス間で転送されるのに適したデータパケットの形式であり得る。システム1000は、クライアント(複数も可)1010とサーバ(複数も可)1030との間の通信を容易にするために利用できる通信フレームワーク1050を含む。クライアント(複数も可)1010は、情報をクライアント(複数も可)1010に対してローカルに格納するために利用できる1つまたはそれ以上のクライアントデータストア1060に動作可能に接続される。同様に、サーバ(複数も可)1030は、情報をサーバ1030に対してローカルに格納するために利用できる1つまたはそれ以上のサーバデータストア1040に動作可能に接続される。
以上の説明は、様々な例示的態様を含んでいる。これらの態様を説明するためにコンポーネントまたは方法の考え得るすべての組合せを説明することはもちろん不可能だが、当業者は、さらに多くの組合せおよび置き換えが可能であることを認識し得る。したがって、本明細書で説明される態様は、添付の特許請求の範囲の趣旨および範囲に含まれるすべての代替物、改変および変形を包含するものである。さらに、用語「含む」が詳細な説明または特許請求の範囲で使用される限り、かかる用語は、「有する」が特許請求の範囲で移行語として使用されるときに解釈されるように、用語「有する」と同様に包括的である。