(57)【要約】  ワークフローおよび管理動作のビューを、実際のワークフローインスタンスへのアクセスを供給するアクセスコンポーネントを介してオブジェクト化するシステムおよび方法。本発明により、実行時に対話用にカスタム機能を定義することができる。例えば、カスタム機能（例えば、強く型付けされたワークフロー）には、メソッド（複数も可）、イベント（複数も可）、プロパティ（複数も可）、インターフェース等が含まれ得る。したがって、ワークフローをオブジェクト型またはクラスとして公開でき、そこで、新しいメンバを追加してワークフローを拡張できる。
2009522647.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ実装システムであって、
ホスト（１１０）にワークフローインスタンスへのアクセスを提供するアクセスコンポーネント（１２０）と、
前記ワークフローインスタンスとのデータ交換時にカスタム機能を呼び出す前記ホスト（１１０）と
の各コンピュータ実行可能コンポーネントを含むことを特徴とするコンピュータ実装システム。
【請求項２】
前記カスタム機能は、強く型付けされたワークフローのためのメソッド、プロパティおよびイベントのうちの少なくとも１つであることを特徴とする請求項１に記載のコンピュータ実装システム。
【請求項３】
前記ワークフローインスタンスに関連するワークフローは、オブジェクト型またはクラスとして公開可能であることを特徴とする請求項１に記載のコンピュータ実装システム。
【請求項４】
前記ワークフローの定義は、新しいメンバを追加することによって拡張可能であることを特徴とする請求項３に記載のコンピュータ実装システム。
【請求項５】
前記ワークフローインスタンスに関連するカスタムワークフロー定義は、前記ホストとのデータ交換時に一時停止可能であることを特徴とする請求項１に記載のコンピュータ実装システム。
【請求項６】
前記ワークフローインスタンスを取得するワークフロープロバイダをさらに含むことを特徴とする請求項５に記載のコンピュータ実装システム。
【請求項７】
前記ワークフローインスタンスは前記ホストの行為によって再開可能であることを特徴とする請求項５に記載のコンピュータ実装システム。
【請求項８】
ワークフロー定義は、新しいワークフロー定義の派生元となる基本クラスを有することを特徴とする請求項５に記載のコンピュータ実装システム。
【請求項９】
コンピュータ実装方法であって、
前記ワークフローシステムのアクセスコンポーネントを介してワークフローインスタンスにアクセスする行為と、
ホストと前記ワークフローインスタンスとの間のデータ交換時にカスタム機能を呼び出す行為と
の各コンピュータ実行可能行為を含むことを特徴とするコンピュータ実装方法。
【請求項１０】
前記ワークフローインスタンスに関連する識別情報に基づいて前記ワークフローインスタンスを要求する行為をさらに含むことを特徴とする請求項９に記載のコンピュータ実装方法。
【請求項１１】
前記ワークフローインスタンスの存在を確認する行為をさらに含むことを特徴とする請求項１０に記載のコンピュータ実装方法。
【請求項１２】
前記ホストと前記ワークフローインスタンスとの間のデータ交換時にクラスメンバを利用する行為をさらに含むことを特徴とする請求項９に記載のコンピュータ実装方法。
【請求項１３】
前記ワークフローインスタンスのためのワークフロー状態表現を生成する行為をさらに含むことを特徴とする請求項９に記載のコンピュータ実装方法。
【請求項１４】
前記ホストと前記ワークフローインスタンスとの間のデータ交換時にカスタム機能を定義する行為をさらに含むことを特徴とする請求項１３に記載のコンピュータ実装方法。
【請求項１５】
前記ワークフローインスタンスに関連するワークフロー定義またはワークフロー型にカスタム動作を関連付ける行為をさらに含むことを特徴とする請求項１４に記載のコンピュータ実装方法。
【請求項１６】
前記ホストがカスタムイベントをサブスクライブする行為をさらに含むことを特徴とする請求項１５に記載のコンピュータ実装方法。
【請求項１７】
前記ワークフローインスタンスのリッチ型をプログラム的に定義する行為をさらに含むことを特徴とする請求項１６に記載のコンピュータ実装方法。
【請求項１８】
新しいメンバを追加することによって前記ワークフロー定義またはワークフロー型を拡張する行為をさらに含むことを特徴とする請求項１７に記載のコンピュータ実装方法。
【請求項１９】
保存メソッドを呼び出して前記ワークフローインスタンスを格納する行為をさらに含むことを特徴とする請求項１８に記載のコンピュータ実装方法。
【請求項２０】
コンピュータ実装システムであって、
ワークフローインスタンスに関連するカスタムワークフロー定義に基づいて前記ワークフローインスタンスにアクセスするための手段（１２０）と、
基本ワークフロー定義から新規ワークフローを作成するための手段（１１０）と
の各コンピュータ実行可能コンポーネントを含むことを特徴とするコンピュータ実装システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ワークフローおよび管理動作のビューをオブジェクト化するシステムおよび方法に関する。
【背景技術】
【０００２】
一般的に、今日企業で利用されるすべてのソフトウェアは、ビジネスプロセスをサポートする。かかるプロセスの一部は完全に自動化され、アプリケーション間の通信のみに依存する一方、その他のプロセスはユーザに依存してプロセスを開始したり、プロセスが使用するドキュメントを承認したり、発生した例外状況を解決したりする。いずれの場合も、プロセスに関わるユーザおよびソフトウェアのアクティビティを記述する、ワークフローと呼ばれる独立した一連のステップを指定するのが一般的である。かかるワークフローを定義すれば、その定義を中心にアプリケーションを構築してビジネスプロセスをサポートできる。
【０００３】
言い換えると、ワークフローは一般に、かかる組織における情報および制御の流れである。企業は、効果的に競争を行うために、かかるプロセスの定義、文書化および合理化に継続的に取り組む。ビジネス環境において、これらのプロセスには、販売および注文の処理、購入タスク、在庫の制御および管理、製造および生産の制御、出荷および入荷、買掛金勘定等が含まれる。
【０００４】
コンピュータシステムおよび関連するソフトウェアは現在、企業および他の組織がワークフローを改善するために使用できるツールを提供している。ソフトウェアツールを使用すると、ビジネスワークフローのプロセスまたはスケジュールをモデル化し、非効率性と考えられる改善とを特定することができる。加えて、プロセスにユーザ間、部署間、工場間、さらには個別の企業間でのデータ交換が含まれる場合は、コンピュータシステムおよびコンピュータネットワークを使用して、かかる交換を実装できる。これらのシステムおよびソフトウェアツールではさらに、ビジネス関連情報に典型的に関連する大規模な計算ならびに他のデータ処理または情報処理を実装できる。
【０００５】
したがって、ワークフロー管理には、情報の流れの効果的な管理と、組織のビジネスプロセスの効果的な制御とが含まれ、かかる情報処理の自動化が現代のビジネス世界における多数の効率向上につながった。さらに、ワークフロー管理のかかる自動化は現在、企業および他の組織が、インターネット等のグローバルコンピュータネットワークを含むコンピュータシステムでワークフロートランザクションを実行することにより、パフォーマンスをさらに向上させることを可能にしている。
【０００６】
典型的なワークフローベースアプリケーションでは、複数の条件を満たすことがしばしば求められる。例えば、かかる条件の１つは、ビジネスルールに基づいて意思決定を行う機能である。これには、単純なルール（例えば、信用調査の結果に基づくイエスかノーかの意思決定等）と、より複雑なルール（例えば、最初の引き受けの意思決定を行うために評価する必要がある、潜在的に大きなセット）とが含まれ得る。別の要件は、ワークフローの外部にある他のソフトウェアおよび他のシステムとの通信である。例えば、最初の要求をアプリケーションの一部分から受け取ることがある一方で、一部の態様（例えば、信用サービスへの連絡）では他のＷｅｂサービスまたは技術を使用した通信が必要なことがある。さらに満たす必要がある条件は、ワークフローとユーザの適切な対話である。例えば、ワークフローでは通常、ユーザインターフェースを独自に表示できるか、または他のソフトウェアを通じて人間と対話できる必要がある。さらに満たす必要がある別の条件は、ワークフローの存続期間を通じて状態を維持する機能である。したがって、ワークフローをソフトウェアで作成および実行することには、独特の難題が伴う。
【０００７】
例えば、一部のビジネスプロセスは、完了するまでに数時間、数日、または数週間かかることがあり、かかる期間にわたってワークフローの現在の状態に関する情報を維持するのは負担が大きい。さらに、かかる種類の長期的なワークフローはまた、典型的には他のソフトウェアと非ブロッキング方式で通信し、非同期通信によって困難が生じることがある。同時に、ソフトウェア間の固定対話をモデリングするのは比較的容易だが、消費者はビジネスプロセスをその場で変更する機能等の追加の柔軟性を継続的に求める傾向がある。多様なアプリケーションを扱うことで、ワークフローの作成および管理にまつわる複雑さはさらに増す可能性がある。
【０００８】
ワークフローツール用のアプリケーションの多くは、企業または組織にとって内的である。モデムまたは他の種類の通信リンクを備えたネットワークコンピュータの出現により、現在では遠隔地にあるコンピュータシステムが互いに容易に通信できる。そのような強化された通信により、コンピュータシステムのワークフローアプリケーションを１つの企業内の離れた施設間で使用することが可能になる。例として、顧客注文を適切な販売員に確認してもらうために企業本社から遠隔地の営業所に転送し、確認を本社に返す処理が含まれよう。ワークフローアプリケーションはまた、異なる企業間のビジネストランザクションの処理における特定のユーティリティにもなり得る。典型的なアプリケーションでは、売り手と買い手の関係にある２つの企業が、購入注文、製品出荷、請求、および集金の生成と処理とを自動化することを望む場合がある。
【０００９】
例えば、顧客関係管理（customer relationship management：ＣＲＭ）等の特定の問題または財務サービス等の特定の垂直市場を対象とするアプリケーションは、ワークフローを中心に構築できる。かかる種類のアプリケーションは、一般にいくつかの異なるビジネスプロセスを実装する。これらのプロセスを駆動するロジックをＷｉｎｄｏｗｓ（登録商標）Ｗｏｒｋｆｌｏｗ  Ｆｏｕｎｄａｔｉｏｎ等の共通ワークフロー基盤上で構築すると、アプリケーションの構築を高速化し、変更を迅速化し、カスタマイズを容易にすることができる。さらに、かかるプロセスを自動化すると、効率が大幅に向上することがあり、これは他のやり方では実現できない。ただし、ワークフロー技術のかかる企業間アプリケーションでは、企業の協力と、個々の企業の既存のコンピュータシステムおよびアプリケーションの適切なインターフェイシングと適切な永続化サービス実装とが必要である。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
これまで、ワークフロースケジュールを定義することによってビジネスワークフローを自動化するための何らかの機能を提供するワークフローアプリケーションツールが開発されてきた。それでもなお、問題空間（problem space）（企業／プロセスドメイン）で見られるオブジェクトと、ソリューション（実際のワークフローモデル／定義）で利用されるオブジェクトとの間にさらに高度な同形性（isomorphism）を確立する機能は厄介であり、にもかかわらず高品質なソフトウェアにとっての重要な要件であると考えられる。
【００１１】
したがって、従来のシステムおよびデバイスに関連する前述の例示的欠点を克服することが求められている。
【課題を解決するための手段】
【００１２】
特許請求の範囲に記載された主題のいくつかの態様についての基本的な知識を提供するために、以下に簡単な概要を示す。この概要は広範な要約ではない。この概要は、特許請求の範囲に記載された主題の主要または重要な構成要素を識別したり、特許請求の範囲に記載された主題の範囲を線引きしたりするものではない。この概要の唯一の目的は、後述するより詳細な説明への前置きとして、いくつかの概念を簡単な形式で示すことである。
【００１３】
本発明は、ワークフローおよび管理動作のビューを、ワークフローインスタンスへのホストアクセスを提供するアクセスコンポーネント（例えば、ＧｅｔＷｏｒｋｆｌｏｗ＜ｗｏｒｋｆｌｏｗ＞メソッド）を介してオブジェクト化するシステムおよび方法を提供するが、そこでは実行時に対話用にカスタム機能を定義することができる。かかるカスタム機能（例えば、強く型付けされたワークフロー）には、プロパティ（複数も可）、メソッド（複数も可）、イベント（複数も可）、インターフェース等が含まれ得る。さらに、本発明は、ワークフロー定義から作成され、典型的には実際のワークフローインスタンスオブジェクトのプロキシ、ファサード（facade）またはラッパー（wrapper）ではないワークフローインスタンスを提供する。そのため、実際のワークフローインスタンスに直接アクセスできる。したがって、ワークフローをオブジェクト型またはクラスとして公開でき、そこでは新しいメンバを追加してワークフローを拡張できる。これによって柔軟性が提供され、ユーザがカスタムプロパティと対話することが可能となる。
【００１４】
関連する一態様では、ホストとワークフローインスタンスとの間のデータ交換時に、カスタムメソッドおよびカスタムプロパティを呼び出すことができる。ホストは、ワークフローインスタンスと対話して、ワークフロークラスにカスタム動作を関連付けることができる。例えば、ホストはそのようなワークフローインスタンスにアクセスするためにカスタムイベントをサブスクライブし、ワークフローをオブジェクトとして操作できる。ワークフロー用のリッチ型は、プログラム的にかつ／またはビジュアルツールを通じて定義できる。
【００１５】
本発明の方法によると、カスタムプロパティ、カスタムメソッド、カスタムイベント等を有する新しいワークフロー定義を、基本ワークフロー定義から定義できる。さらに、ホストアプリケーションは、ワークフローインスタンスに関連する識別情報を通じて、ワークフロープロバイダからワークフローインスタンスを要求できる。この識別情報は、ワークフローのインスタンスを一意に識別するものであり、プログラム的に生成するか、またはホストアプリケーションによって割り当てる／アクセスすることができる。ワークフロープロバイダは、ワークフローのインスタンスを生成する／返すことができ、ユーザは、プロパティ、メソッド、イベント等のクラスメンバを呼び出すことによってかかるインスタンスと対話できる。その後、かかる対話が完了したときに、ワークフローインスタンスを保存できる。
【００１６】
前述および関連する目的を達成するために、特許請求の範囲に記載された主題の特定の例示的態様が、以下の説明および添付の図面を通じて本明細書で説明されている。これらの態様は、主題を実施し得る種々の方法を示しており、それらの方法のすべては特許請求の範囲に記載された主題の範囲内に含まれるように意図される。他の利点および新しい機能は、以下の詳細な説明を図面と組み合わせて検討することで明らかになり得る。
【発明を実施するための最良の形態】
【００１７】
本発明の様々な態様を、添付の図面を参照して説明するが、これらの図面を通して、同様の符号は同様の要素または対応する要素を示す。ただし、図面と図面に関連する詳細な説明とは、特許請求の範囲に記載された主題を、開示されている特定の形式に制限するものではないことを理解されたい。むしろ目的は、特許請求の範囲に記載された主題の趣旨および範囲に含まれるすべての変形、均等物および代替物を網羅することである。
【００１８】
本明細書で使用される「コンポーネント」、「システム」、「サービス」等の用語は、コンピュータ関連の実体、すなわちハードウェアと、ハードウェアおよびソフトウェアの組合せと、ソフトウェアと、実行中のソフトウェアとのいずれかを示すものである。例えば、コンポーネントは、プロセッサで実行されるプロセス、プロセッサ、オブジェクト、実行可能ファイル、実行のスレッド（thread of execution）、プログラムおよび／またはコンピュータであり得るが、これに限定されるものではない。例として、コンピュータで実行されるアプリケーションとコンピュータとは、いずれもコンポーネントになり得る。１つまたはそれ以上のコンポーネントが１つのプロセス内に存在することがあり、かつ／または実行のスレッドとコンポーネントとが１台のコンピュータ上でローカル化されることがあり、かつ／または実行のスレッドとコンポーネントとが２台またはそれ以上のコンピュータ間で分散されることがある。
【００１９】
「例示的」という用語は、本明細書では実施例、事例、または例示としての役割を果たすことを意味するために使用されている。本明細書で「例示的」と説明されているすべての態様または設計は、必ずしも他の態様または設計よりも好ましいまたは優れていると解釈されるべきものではない。
【００２０】
さらに、開示される主題は、標準的なプログラミングおよび／またはエンジニアリングのテクニックを使用して、本明細書で詳細に示される態様を実装するようにコンピュータまたはプロセッサベースのデバイスを制御するソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組合せを製作することで、システム、メソッド、装置または製品として実装し得る。本明細書で使用されるコンピュータプログラムという用語は、コンピュータで読み取り可能な任意のデバイス、キャリアまたはメディアからアクセス可能なコンピュータプログラムを網羅するものである。例えば、コンピュータで読み取り可能なメディアには、磁気ストレージデバイス（例えば、ハードディスク、フロッピー（登録商標）ディスク、磁気ストライプ等）、光学ディスク（例えば、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）等）、スマートカードおよびフラッシュメモリデバイス（例えば、カード、スティック）が含まれ得るがこれに限定されるものではない。加えて、電子メールの送受信あるいはインターネットまたはローカルエリアネットワーク（ＬＡＮ）等のネットワークへのアクセスで使用されるような、コンピュータで読み取り可能な電子データを伝送するために、搬送波を利用できることを理解されたい。もちろん、当業者は、特許請求の範囲に記載された主題の範囲および趣旨から離れることなく、この構成に多数の変更を加えられることを認識するであろう。
【００２１】
最初に図１を参照すると、ホスト１１０にワークフローインスタンスへのアクセスを提供するワークフローシステム１３０のブロック図が示されており、そこでは実行時に対話用にカスタム機能を定義することができる。かかるカスタム機能（例えば、強く型付けされたワークフロー）には、メソッド（複数も可）、イベント（複数も可）、インターフェース等が含まれ得る。ワークフローでは、アクティビティの図解として定義されるユーザまたはシステムのプロセスをモデル化できる。アクティビティは、ワークフロー内の行為であり、ワークフローの実行、再使用および編成の単位である。アクティビティの図解は、ルール、行為、状態、およびアクティビティの関係を表す。典型的には、ホスト１１０によって示されるように、いくつかのルールに応じて、ワークフローはワークフローエンジン／ランタイム１５０を介して実行され、ワークフローランタイムにはワークフローランタイムをホストする外部アプリケーションが必要である。
【００２２】
ホスト１１０は、ワークフローインスタンスへのアクセスを提供するアクセスコンポーネント１２０を介して、ワークフローシステム１３０と対話するが、そこでは実行時に対話用にカスタム機能を定義できる。かかるカスタム機能（例えば、強く型付けされたワークフロー）には、メソッド（複数も可）、イベント（複数も可）、プロパティ（複数も可）、インターフェース等が含まれ得る。したがって、ワークフローをオブジェクト型またはクラスとして公開でき、そこでは新しいメンバを追加してワークフローを拡張できる。これによって柔軟性が提供され、ユーザがカスタムプロパティと対話することが可能になる。
【００２３】
さらに、以下に詳細に説明するように、かかるアクセスコンポーネント１２０を通じて、ホスト１１０はワークフローシステム１３０のワークフローインスタンスとデータを交換できる。ホスト１１０は、１つまたは複数のワークフローの作成、ワークフローを適切に実行するための必要性に応じた様々なコンポーネント間の呼び出しのマーシャリング（marshaling）、および分離メカニズムの設定等、いくつかの追加の態様および重要な態様を担うことができる。加えて、ホスト１１０は、スケーラビリティ上の理由で複数のプロセスを作成してマシン内の複数のＣＰＵを利用するか、またはマシンのファーム上で大量のワークフローインスタンスを実行することができる。ホスト１１０はさらに、ワークフローが長時間待機する場合に適用するポリシーを制御したり、特定のイベントをリッスンしてユーザまたは管理者に伝えたり、各ワークフローのタイムアウトおよび再試行を設定したり、パフォーマンスカウンタを公開したり、デバッグおよび分析の目的でログ情報を書き込んだりすることができる。
【００２４】
ワークフローシステム１３０に関連するワークフローは、外部の世界と通信するために特に確立されたサービスを通じて外部の世界と通信できるが、そこではかかるサービスはワークフロー内のイベント駆動型アクティビティがフックアップ（hook up）するイベントを発生させることができる。同様に、このサービスは、ワークフローが呼び出してデータをホスト１１０に送信するためのパブリックメソッドを公開する。ワークフローは、コンピュータシステムでの実行用のスケジュールの形式で定義できる。スケジュールには、指定された同時実行、依存関係およびトランザクションの属性が関連付けられた行為のセットが含まれ得る。各スケジュールは関連するスケジュール状態を持ち、このスケジュール状態には、スケジュールの定義と、スケジュール内の現在の位置とに加えて、スケジュールに関連するアクティブまたはライブのデータおよびオブジェクトが含まれる。スケジュール内には、行為のグループ分けに基づいて、トランザクション境界が存在することがある。これに関連して、トランザクションは、個々の行為またはトランザクション、あるいはそれらのグループを包含し得る。以下にさらに説明するように、行為は、順次方式で実行されるシーケンスにグループ化できることに加えて、行為が同時に実行されるタスクにもグループ化できる。したがってグループ分けに基づき、スケジュール内の行為およびトランザクションに対して同時実行属性（concurrency attribute）が解決され得る。
【００２５】
図１に示されているように、アクセスコンポーネント１２０は、ワークフローインスタンスを作成／取得し、それをさらなる対話のためにホストアプリケーションに提供することができる。アクセスコンポーネント１２０は、ホスト１１０がプロパティ、メソッドおよびイベントにアクセスするための、ワークフローインスタンスへのハンドルを供給できる。したがって、アクセスコンポーネント１２０はワークフローのインスタンスを提供でき、そこではワークフローインスタンスはワークフロー型である。
【００２６】
以下に、アクセスコンポーネント１２０の例示的定義を示すが、ここでメソッドＧｅｔＷｏｒｋｆｌｏｗ＜ＷｏｒｋｆｌｏｗＴｙｐｅ＞は、実行中のワークフロー定義とそのカスタムプロパティ、メソッドおよびイベントへのアクセスを供給する（例えば、ワークフローがアイドル状態の場合）。このように＜ＷｏｒｋｆｌｏｗＴｙｐｅ＞に対して総称ベースのメカニズムを使用することで、通常は強く型付けされたワークフロー定義の型セーフな方法での取得を促進することができる。
【００２７】
【表１】
2009522647.tif 000003
【００２８】
ここで図２を参照すると、本発明の一態様による基本ワークフロー定義２１０から作成される新規ワークフロー型２２０およびカスタムプロパティのブロック図が示されている。この型は、クラスメンバを追加することによって拡張できる。典型的には、かかるフレームワークの主要な構成単位はアクティビティである。これらのアクティビティは、関連する実行メソッドがフレームワークによって呼び出されたときに実行されるタスク（複数も可）または単一の論理作業単位を表す。各アクティビティは、プロパティ、メソッドおよびイベントで構成されるオブジェクトモデルを提供することができ、開発者はそれらに対してアプリケーションコードでプログラミングを行うことができる（例えば、ＵＩコントロールおよびコンポーネントに対してプログラミングを行うのに似ている）。アクティビティには様々な種類が存在し、本発明では個別の当事者がＵＩコントロール等と同様にカスタムアクティビティを構築できる。
【００２９】
例えば、フレームワークでは、アクティビティ基本クラスのコアセットに加えて、いくつかの特定のアクティビティを定義できる。これには、ＳｔａｒｔＡｃｔｉｖｉｔｙおよびＳｔｏｐＡｃｔｉｖｉｔｙ（ワークフロー内の開始点および停止点を表す）、ＣｏｄｅＡｃｔｉｖｉｔｙ（ワークフロー開発者がアクティビティに関連する機能をワークフロー型内のイベントハンドラで実装できるようにする）、ＣｏｎｔｒｏｌＦｌｏｗＡｃｔｉｖｉｔｙ（ワークフロー開発者が条件およびルールに基づいて分岐ロジックをワークフローに導入できるようにする）、ＳｕｓｐｅｎｄａｂｌｅＡｃｔｉｖｉｔｙ（ワークフロー開発者がワークフローの実行中の一時停止を、時間の観点で、または現在のユーザを切り替えることにより、モデル化できるようにする。例えば、ＤｅｌａｙＡｃｔｉｖｉｔｙおよびＳｗｉｔｃｈＵｓｅｒＡｃｔｉｖｉｔｙ）、ＩｎｔｅｒａｃｔｉｖｅＡｃｔｉｖｉｔｙ（ワークフロー開発者が、エンドユーザからの行為によってワークフロー内の実行がいつ、どのように進むかが決まるユーザ対話ポイントをモデル化できるようにする。かかるＩｎｔｅｒａｃｔｉｖｅＡｃｔｉｖｉｔｙは、有効な行為が実行されるまで実行を一時停止するＳｕｓｐｅｎｄａｂｌｅＡｃｔｉｖｉｔｙ型として扱うことができる）、ＣｏｍｐｏｓｉｔｅＡｃｔｉｖｉｔｙ（ワークフロー開発者がアクティビティをグループ化できるようにする）、ＬｏｏｐＡｃｔｉｖｉｔｙ（含まれているアクティビティの実行を反復するＣｏｍｐｏｓｉｔｅＡｃｔｉｖｉｔｙの一実施例）、ＩＭｕｌｔｉＡｃｔｉｏｎＡｃｔｉｖｉｔｙ（複数の行為をサポートし、実行を進める前にそれらの行為のいずれかを選択することを要求するアクティビティによって実装されるインターフェース。ＩｎｔｅｒａｃｔｉｖｅＡｃｔｉｖｉｔｙはかかるインターフェースを実装できる）、ＩＭｕｌｔｉＲｅｓｕｌｔＡｃｔｉｖｉｔｙ（実行時に考えられる結果のセットのいずれかを生成するアクティビティによって実装されるインターフェース。ＣｏｎｔｒｏｌＦｌｏｗＡｃｔｉｖｉｔｙはこのインターフェースを実装する）、ならびにＩＳｕｓｐｅｎｄａｂｌｅＡｃｔｉｖｉｔｙ（特定の待機条件のセットについてワークフローの実行を一時停止することができるアクティビティによって実装されるインターフェース）が含まれ得る。
【００３０】
ワークフローは、包含されているＳｔａｒｔＡｃｔｉｖｉｔｙを実行することにより実行を開始でき、ＳｔｏｐＡｃｔｉｖｉｔｙが実行されたときに終了する。実行の過程で、各アクティビティを調べて実行可能かどうか確認することができる。例えば、アクティビティがホストから何らかの情報（例えば、メッセージ、タイマー等）を待機しているために実行を継続できない場合は、ワークフローは一時停止される。アクティビティが実行可能な場合は、関連する実行メソッドが呼び出され、このメソッドが成功の結果を返す場合は、適切なアクティビティ移行が使用されて次のアクティビティが判断される。さらに、ワークフローはその継続期間中にいくつかの理由で一時停止されることがある。これらの理由には、アクティビティの実行のキャンセル、アクティビティがホストからメッセージ、タイマー等の何らかの情報を待機しているために実行を継続できない、以降の実行を延期するために導入された特定の遅延、および以降の実行を異なるユーザによって実行することが必要なユーザコンテキストの切り替え等がある。一時停止したワークフローインスタンスは、データベースまたは同等のストレージにシリアル化し、そこから後で取得、逆シリアル化、および再開することができる。アクティビティの実行がエラーになった場合、そのエラーは処理されず、ワークフローはエラー状態に入ることもある。
【００３１】
図３は、ホストアプリケーション３１０の、ワークフローインスタンス３３０との対話のブロック図を示しており、そこではワークフローとの間でデータが受け渡しされるカスタムプロパティ３２０を基本クラス上に構築して、対話型ワークフローを形成することができる。実行の過程で、各アクティビティを調べて実行可能かどうかを確認できる。例えば、アクティビティが実行できない場合は、ワークフローを一時停止できる。アクティビティが実行可能な場合は、関連する実行メソッドを呼び出すことができ、このメソッドが成功の結果を返す場合は、適切なアクティビティ移行が使用されて次のアクティビティが判断される。例示されているように、ホストアプリケーション３１０は、ワークフローインスタンス３３０とデータを交換することができる（例えば、データの取得）。それにより、ワークフローインスタンスとホストアプリケーションとの間で、制御された／同期的なデータ交換が可能となり、そこではカスタムメソッドおよびカスタムプロパティを呼び出すことができる。したがって、ホストアプリケーション３１０はワークフローインスタンスと対話して、ワークフロークラスにカスタム動作を関連付けることができる。例えば、ホストはかかるワークフローインスタンスにアクセスするためにカスタムイベントをサブスクライブして、ワークフローをオブジェクトとして操作できる。さらに、ワークフローのリッチ型を、プログラム的にかつ／またはビジュアルツールを通じて定義できる。
【００３２】
図４は、本発明の例示的態様によりカスタム機能を利用するおよび／または新規ワークフロー定義を定義する関連方法を示している。かかる新規ワークフロー定義は、基本ワークフロー定義から定義されるカスタムプロパティ、カスタムメソッド、カスタムイベント等を持ち得る。ここでは例示的方法が様々なイベントおよび／または行為を表す一連のブロックとして例示および説明されているが、本発明はかかるブロックの例示された順序に限定されるものではない。例えば、一部の行為またはイベントは、本発明に従い、ここで例示された順序とは別に、異なる順序で発生することがあり、かつ／あるいは他の動作またはイベントと同時に発生することがある。加えて、本発明による方法を実装するために、例示されたすべてのブロック、イベントまたは行為が必要だとは限らない。さらに、本発明による例示的方法およびその他の方法は、本明細書で例示および説明される方法と関連させて実装できるだけでなく、例示または説明されていない他のシステムおよび装置と関連させて実装できることも理解されよう。最初に、４１０においてワークフロープロバイダが取得され、その後４２０において、ホストアプリケーションはワークフローインスタンスに関連する識別情報を通じて、かかるワークフロープロバイダにワークフローインスタンスを要求できる。かかる識別情報は、ワークフローのインスタンスを一意に識別するものであり、プログラム的に生成するか、またはホストアプリケーションによって割り当てることができる。４３０において、確認（verification）が実行されて、かかるワークフローインスタンスが存在するかどうかが調べられる。ワークフローインスタンスが存在しない場合、この方法は４３５において停止する。
【００３３】
それ以外の場合、この方法は行為４４０に進み、そこでワークフロープロバイダはワークフローのインスタンスを生成できる。その後、ホストアプリケーションはかかるインスタンスと４５０において対話でき、プロパティ、メソッド、イベント等のクラスメンバを４６０において呼び出す。かかる対話が完了すると、以下に詳細に説明するように、ワークフロープロセスを保存できる。
【００３４】
図５は、本発明の一特定態様によるプロセス間での情報の流れの例示的シーケンス図を示している。最初に、ホストアプリケーションはアクセスコンポーネント（例えば、ＧｅｔＷｏｒｋｆｌｏｗ＜ＷｏｒｋｆｌｏｗＴｙｐｅ＞）を利用してワークフロー定義とそのカスタムプロパティ、カスタムメソッドおよびカスタムイベントを取得できる（例えば、ワークフローがアイドル状態の場合）。このように＜ＷｏｒｋｆｌｏｗＴｙｐｅ＞に対して総称ベースのメカニズムを使用することで、通常は強く型付けされたワークフロー定義の型セーフな方法での取得を促進することができる。カスタム機能（例えば、強く型付けされたワークフロー）には、メソッド（複数も可）、イベント（複数も可）、プロパティ（複数も可）、インターフェース等が含まれ得る。したがって、ワークフローをオブジェクト型またはクラスとして公開でき、そこでは新しいメンバを追加してワークフローを拡張できる。これによって柔軟性が提供され、ユーザがカスタムプロパティと対話することが可能となる。
【００３５】
ワークフロープロバイダ５１０は、ワークフローのインスタンスを作成／取得でき、ホストアプリケーションは、プロパティ、メソッド、イベント等のクラスメンバを呼び出すことによってかかるインスタンスと対話できる。したがって、ワークフローインスタンスの識別情報（例えば、ＩＤ番号）に基づき、ワークフローインスタンスへのアクセスが可能となる（例えば、ホストアプリケーションを介して）。ホストは、ワークフロー型／クラスに関連するカスタム動作を通じて、ワークフローインスタンスと対話できる。例えば、ホストは、かかるワークフローインスタンスにアクセスするためにカスタムイベントをサブスクライブして、ワークフローをオブジェクトとして操作できる。ワークフロー定義のリッチ型は、プログラム的にかつ／またはビジュアルツールを通じて定義できる。
【００３６】
図６は、ホストアプリケーションとのデータ交換時にワークフローのインスタンスを読み込むための関連方法６００を示している。図６に示されているように、永続化ストア（persistence store）へのアクセスが６１０において提供される。この永続化ストアは、ワークフローインスタンス表現を格納する。その後、６２０において、ワークフローインスタンスの状態表現が、対応する永続化ストアから取得される。かかる表現は、その後６３０においてワークフローインスタンスに変換できる。次に、６４０において、ワークフローインスタンスがホストアプリケーションに提供され、そこでホストはワークフロー型／クラスに関連するカスタム動作を通じてワークフローインスタンスと対話できる。例えば、ホストは、かかるワークフローインスタンスにアクセスするためにカスタムイベントをサブスクライブして、ワークフローをオブジェクトとして操作できる。ワークフローのリッチ型は、プログラム的にかつ／またはビジュアルツールを通じて定義できる。
【００３７】
同様に、図７に示されているように、ワークフローのインスタンスを保存するために、ワークフローインスタンスが７１０において取得される。その後、７２０において、かかるワークフローインスタンスの表現であるワークフロー状態が生成される。ホストアプリケーションは、その後７２５において、プロパティ、メソッド、イベント等のクラスメンバを呼び出すことによってかかるインスタンスと対話できる。かかる対話／表現に関連するデータは、その後７３０において、データストアおよび／または永続化サービス実装に保存できる。これにより７４０において、ワークフローランタイムの保存イベントを発生させることができ、そこでワークフローインスタンスが保存および／またはアクセスされる。したがって、本発明により、カスタムプロパティ、カスタムメソッドおよびカスタムイベントを有する新しいワークフロー定義を基本ワークフロー定義から定義することが可能となる。
【００３８】
ワークフロープロバイダは、ワークフローのインスタンスを作成／取得でき、開発者は、プロパティ、メソッド、イベント等のクラスメンバを呼び出すことによってかかるインスタンスと対話できる。
【００３９】
図８は、本発明の一態様により、実行中のワークフローにアクセスする特定の方法８００を示している。最初に、８１０において、ホストアプリケーションはワークフローインスタンスの識別情報を取得することにより、実行中のワークフローにアクセスできる。その後、８２０において、ｃａｌｌ  ｌｏａｄメソッドを介してワークフローインスタンスにアクセスでき、そこでは表形式の配置（tabular arrangement）によりワークフローインスタンスが関連する識別情報（ＩＤ）に対応付けられる。次に、８３０において、ホストアプリケーションはワークフローと対話できる。かかる対話時に、８４０において、ホストはワークフローの型のカスタム動作と対話できる。例えば、ホストは、かかるワークフローインスタンスにアクセスするためにカスタムイベントをサブスクライブして、ワークフローをオブジェクトとして操作できる。ワークフローのリッチ型は、プログラム的にかつ／またはビジュアルツールを通じて定義できる。
【００４０】
開示される主題の様々な態様のためのコンテキストを提供するために、図９および図１０、並びに以下の説明は、開示される主題の様々な態様を実装し得る適切な環境の簡潔で一般的な説明を提供するものである。この主題について、１台のコンピュータおよび／または複数のコンピュータで実行されるコンピュータプログラムのコンピュータ実行可能命令の一般的なコンテキストで上述したが、当業者は、本発明が他のプログラムモジュールと組み合わせても実装可能であることを認識するであろう。一般に、プログラムモジュールは、特定のタスクを実行するおよび／または特定の抽象データ型を実装するルーチン、プログラム、コンポーネント、データ構造体等を含む。さらに当業者は、本発明の方法が、シングルプロセッサまたはマルチプロセッサのコンピュータシステム、ミニコンピューティングデバイス、メインフレームコンピュータ、さらにはパーソナルコンピュータ、ハンドヘルドコンピューティングデバイス（例えば、携帯情報端末（ＰＤＡ）、電話、腕時計等）、マイクロプロセッサベースまたはプログラム可能な家庭用電子製品または工業用電子装置等を含む他のコンピュータシステム構成でも実施できることを理解するであろう。例示された態様はまた、通信ネットワークを通じてリンクされたリモート処理デバイスによってタスクが実行される分散コンピューティング環境でも実施できる。ただし、本発明のすべてではないにせよ一部の態様は、スタンドアロンのコンピュータ上で実施できる。分散コンピューティング環境では、プログラムモジュールをローカルメモリストレージデバイス内およびリモートメモリストレージデバイス内の両方に配置できる。
【００４１】
図９を参照すると、コンピュータ９１２を含む、本発明の様々な態様を実装するための例示的環境９１０が説明されている。コンピュータ９１２は、処理ユニット９１４と、システムメモリ９１６と、システムバス９１８とを含む。システムバス９１８は、システムメモリ９１６等を含むがそれに限定されるものではないシステムコンポーネントを処理ユニット９１４に結合する。処理ユニット９１４は、種々の使用可能なプロセッサの任意のものでよい。デュアルマイクロプロセッサおよびその他のマイクロプロセッサアーキテクチャも処理ユニット９１４として利用できる。
【００４２】
システムバス９１８は、メモリバスまたはメモリコントローラ、周辺機器用バスまたは外部バス、ならびに／または１１ビットバス、業界標準アーキテクチャ（ＩＳＡ）、マイクロチャネルアーキテクチャ（ＭＳＡ）、拡張ＩＳＡ（ＥＩＳＡ）、インテリジェントドライブエレクトロニクス（ＩＤＥ）、ＶＥＳＡローカルバス（ＶＬＢ）、周辺コンポーネント相互接続（ＰＣＩ）、ユニバーサルシリアルバス（ＵＳＢ）、アドバンスドグラフィックポート（ＡＧＰ）、パーソナルコンピュータメモリカード国際協会バス（ＰＣＭＣＩＡ）、スモールコンピュータシステムインターフェース（ＳＣＳＩ）等を含むがそれに限定されるものではない使用可能なバスアーキテクチャの任意の種類を使用するローカルバスを含む、複数の種類のバス構造のいずれかでよい。
【００４３】
システムメモリ９１６は、揮発性メモリ９２０と不揮発性メモリ９２２とを含む。起動時等にコンピュータ９１２内の構成要素間で情報を転送する基本ルーチンを含む基本入力／出力システム（ＢＩＯＳ）は、不揮発性メモリ９２２内に格納される。例として、不揮発性メモリ９２２には、読み取り専用メモリ（ＲＯＭ）、プログラマブルＲＯＭ（ＰＲＯＭ）、電気的プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能ＲＯＭ（ＥＥＰＲＯＭ）、またはフラッシュメモリが含まれ得るがこれに限定されるものではない。揮発性メモリ９２０には、外部キャッシュメモリとして機能するランダムアクセスメモリ（ＲＡＭ）が含まれる。例として、ＲＡＭには、同期型ＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、同期型ＤＲＡＭ（ＳＤＲＡＭ）、ダブルデータレートＳＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、および拡張ＳＤＲＡＭ（ＥＳＤＲＡＭ）、Ｓｙｎｃｈｌｉｎｋ  ＤＲＡＭ（ＳＬＤＲＡＭ）、Ｄｉｒｅｃｔ  Ｒａｍｂｕｓ  ＲＡＭ（ＤＲＲＡＭ）等の多数の形式があるがこれに限定されるものではない。
【００４４】
コンピュータ９１２はまた、リムーバブル／非リムーバブルの揮発性／不揮発性コンピュータストレージメディアを含む。例えば、図９は、ディスクストレージ９２４を示している。ディスクストレージ９２４には、磁気ディスクドライブ、フロッピー（登録商標）ディスクドライブ、テープドライブ、Ｊａｚドライブ、Ｚｉｐドライブ、ＬＳ−１００ドライブ、フラッシュメモリカード、またはメモリスティック等のデバイスが含まれるがこれに限定されるものではない。加えて、ディスクストレージ９２４は、ストレージメディアを単独で含むか、あるいはコンパクトディスクＲＯＭドライブ（ＣＤ−ＲＯＭ）、書き込み可能ＣＤドライブ（ＣＤ−Ｒドライブ）、書き換え可能ＣＤドライブ（ＣＤ−ＲＷドライブ）、またはデジタル多目的ディスクＲＯＭドライブ（ＤＶＤ−ＲＯＭ）等の光学ディスクドライブを含むがこれに限定されるものではない他のストレージメディアとの組合せで含み得る。ディスクストレージデバイス９２４のシステムバス９１８への接続を容易にするために、インターフェース９２６等のリムーバブルまたは非リムーバブルのインターフェースが典型的に使用される。
【００４５】
図９は、ユーザと、適切な運用環境９１０内で説明される基本コンピュータリソースとの間で仲介物として機能するソフトウェアを説明していることを理解されたい。かかるソフトウェアには、オペレーティングシステム９２８が含まれる。ディスクストレージ９２４上に格納できるオペレーティングシステム９２８は、コンピュータシステム９１２のリソースを制御および割り当てるように動作する。システムアプリケーション９３０は、システムメモリ９１６内またはディスクストレージ９２４上に格納されるプログラムモジュール９３２およびプログラムデータ９３４を通じて、オペレーティングシステム９２８によるリソースの管理を利用する。本明細書で説明される様々なコンポーネントは、様々なオペレーティングシステムまたはオペレーティングシステムの組合せと共に実装できることを理解されたい。
【００４６】
ユーザは、入力デバイス（複数も可）９３６を通じて、コンピュータ９１２にコマンドまたは情報を入力する。入力デバイス９３６には、マウス、トラックボール、スタイラス、タッチパッド、キーボード、マイク、ジョイスティック、ゲームパッド、衛星放送用アンテナ、スキャナ、ＴＶチューナカード、デジタルカメラ、デジタルビデオカメラ、Ｗｅｂカメラ等のポインティングデバイスが含まれるがこれに限定されるものではない。これらおよびその他の入力デバイスは、インターフェースポート（複数も可）９３８を介し、システムバス９１８を通じて処理ユニット９１４に接続する。インターフェースポート（複数も可）９３８には、例えば、シリアルポート、パラレルポート、ゲームポート、およびユニバーサルシリアルバス（ＵＳＢ）が含まれる。出力デバイス（複数も可）９４０は、入力デバイス（複数も可）９３６と同じ種類のポートのいくつかを使用する。したがって、例えば、ＵＳＢポートを使用して入力をコンピュータ９１２に提供し、またコンピュータ９１２からの情報を出力デバイス９４０に出力することができる。出力アダプタ９４２は、特別なアダプタを必要とする他の出力デバイス９４０の中に、モニタ、スピーカ、プリンタ等のいくつかの出力デバイス９４０があることを示すために提供されている。出力アダプタ９４２には、例として、出力デバイス９４０とシステムバス９１８との間の接続の手段を提供するビデオカードおよびサウンドカードが含まれるがこれに限定されるものではない。リモートコンピュータ（複数も可）９４４等の他のデバイスおよび／またはデバイスのシステムは、入力機能と出力機能の両方を提供することに留意されたい。
【００４７】
コンピュータ９１２は、リモートコンピュータ（複数も可）９４４等の１台またはそれ以上のリモートコンピュータへの論理接続を使用して、ネットワーク環境で動作できる。リモートコンピュータ（複数も可）９４４は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ワークステーション、マイクロプロセッサベースのアプライアンス、ピアデバイスまたはその他の一般的なネットワークノード等でよく、典型的にはコンピュータ９１２に関連して説明される構成要素の多数またはすべてを含む。話を簡単にするために、メモリストレージデバイス９４６のみがリモートコンピュータ（複数も可）９４４と共に示されている。リモートコンピュータ（複数も可）９４４は、ネットワークインターフェース９４８を通じてコンピュータ９１２に論理的に接続され、さらに通信接続９５０を介して物理的に接続される。ネットワークインターフェース９４８は、ローカルエリアネットワーク（ＬＡＮ）およびワイドエリアネットワーク（ＷＡＮ）等の通信ネットワークを包含する。ＬＡＮ技術には、光ファイバ分散データインターフェース（ＦＤＤＩ）、銅線分散データインターフェース（ＣＤＤＩ）、イーサネット（登録商標）／ＩＥＥＥ  ８０２．３、トークンリング／ＩＥＥＥ  ８０２．５等が含まれる。ＷＡＮ技術には、ポイントツーポイントリンク、総合デジタル通信網サービス（ＩＳＤＮ）およびその変形等の回線交換ネットワーク、パケット交換ネットワークならびにデジタル加入者回線（ＤＳＬ）が含まれるがこれに限定されるものではない。
【００４８】
通信接続（複数も可）９５０は、ネットワークインターフェース９４８をバス９１８に接続するために利用されるハードウェア／ソフトウェアを示す。通信接続９５０は、例を明快にするためにコンピュータ９１２の内部に示されているが、コンピュータ９１２に対して外的でもよい。ネットワークインターフェース９４８への接続に必要なハードウェア／ソフトウェアには、例示のみを目的とした場合、標準電話グレードモデム、ケーブルモデムおよびＤＳＬモデムを含むモデム、ＩＳＤＮアダプタ、ならびにイーサネット（登録商標）カード等の内的および外的な技術が含まれる。
【００４９】
図１０は、本発明のワークフロー実装を実装するために利用できるサンプルコンピューティング環境１０００の概略ブロック図である。システム１０００は、１つまたはそれ以上のクライアント１０１０を含む。クライアント（複数も可）１０１０は、ハードウェアおよび／またはソフトウェア（例えば、スレッド、プロセス、コンピューティングデバイス）でよい。システム１０００はまた、１つまたはそれ以上のサーバ１０３０を含む。サーバ１０３０（複数も可）もまた、ハードウェアおよび／またはソフトウェア（例えば、スレッド、プロセス、コンピューティングデバイス）でよい。サーバ１０３０は、例えば、本明細書で説明されるコンポーネントを利用することによって変換を実行するスレッドを収容できる。クライアント１０１０とサーバ１０３０との間で考えられる通信の１つは、２つまたはそれ以上のコンピュータプロセス間で転送されるのに適したデータパケットの形式であり得る。システム１０００は、クライアント（複数も可）１０１０とサーバ（複数も可）１０３０との間の通信を容易にするために利用できる通信フレームワーク１０５０を含む。クライアント（複数も可）１０１０は、情報をクライアント（複数も可）１０１０に対してローカルに格納するために利用できる１つまたはそれ以上のクライアントデータストア１０６０に動作可能に接続される。同様に、サーバ（複数も可）１０３０は、情報をサーバ１０３０に対してローカルに格納するために利用できる１つまたはそれ以上のサーバデータストア１０４０に動作可能に接続される。
【００５０】
以上の説明は、様々な例示的態様を含んでいる。これらの態様を説明するためにコンポーネントまたは方法の考え得るすべての組合せを説明することはもちろん不可能だが、当業者は、さらに多くの組合せおよび置き換えが可能であることを認識し得る。したがって、本明細書で説明される態様は、添付の特許請求の範囲の趣旨および範囲に含まれるすべての代替物、改変および変形を包含するものである。さらに、用語「含む」が詳細な説明または特許請求の範囲で使用される限り、かかる用語は、「有する」が特許請求の範囲で移行語として使用されるときに解釈されるように、用語「有する」と同様に包括的である。
【図面の簡単な説明】
【００５１】
【図１】アクセスコンポーネントを介してワークフローと対話して、ワークフローのカスタム機能を定義するホストアプリケーションの例示的システム図である。
【図２】基本ワークフロー定義上に構築されるカスタム機能を示す図である。
【図３】基本クラス上にカスタム機能を構築できる、ワークフローインスタンスとのホストアプリケーション対話のブロック図である。
【図４】カスタムプロパティを使用してワークフロー型を利用する例示的方法を示す図である。
【図５】本発明の一特定態様によるプロセス間の情報の流れの例示的シーケンス図である。
【図６】ワークフローのインスタンスを保存する例示的方法を示す図である。
【図７】ワークフローのインスタンスを読み込むための例示的方法を示す図である。
【図８】本発明の例示的態様によるホストとワークフローインスタンスとの間のデータ交換のための別の方法を示す図である。
【図９】本発明の様々な態様を実装するための例示的環境を示す図である。
【図１０】本技術の１つの態様によりワークフローをリッチ化するために利用できる追加のコンピューティング環境の概略ブロック図である。
【図１】
2009522647.tif 000004
【図２】
2009522647.tif 000005
【図３】
2009522647.tif 000006
【図４】
2009522647.tif 000007
【図５】
2009522647.tif 000008
【図６】
2009522647.tif 000009
【図７】
2009522647.tif 000010
【図８】
2009522647.tif 000011
【図９】
2009522647.tif 000012
【図１０】
2009522647.tif 000013
【国際調査報告】
2009522647.tif 000014
2009522647.tif 000015