Share via


<開発者向け> Windows SharePoint Services Version 3 および SharePoint Server 2007 のワークフロー入門

  

Andrew May
Microsoft Corporation

May 2006

適用対象:
   Microsoft Windows SharePoint Services (Version 3)
   Microsoft Office SharePoint Server 2007

要約: Microsoft Windows SharePoint Services (Version 3) での Windows Workflow Foundation のワークフロー機能の実装方法、および Microsoft Office SharePoint Server 2007 での対称的な Microsoft Office InfoPath 2007 のフォームを使用したこれらの機能の拡張方法について概要を詳しく説明します。

目次

ワークフローとは
ワークフロー アーキテクチャ
ワークフローのタイプ
ワークフローの構成
ワークフロー マークアップ
Windows SharePoint Services および SharePoint Server 2007 におけるワークフロー
SharePoint ワークフローの作成
Visual Studio 2005 での SharePoint ワークフローの作成
SharePoint Designer 2007 での SharePoint ワークフローの作成
Visual Studio 2005 Designer for Windows Workflow Foundation と SharePoint Designer 2007 の比較
Windows SharePoint Services でのワークフロー構造
ワークフローの名前空間の使用
まとめ
その他の参考資料

ワークフローとは

Microsoft Windows SharePoint Services は、重要なビジネス情報の作成、共同作業、および保存を行うための強力でカスタマイズ可能な作業環境をユーザーに提供します。Microsoft Windows SharePoint Services (Version 3) と Microsoft Office SharePoint Server 2007 を使用すると、これらのドキュメントまたはリスト アイテムにカスタム ビジネス プロセスを追加できます。

これらのカスタム ビジネス プロセスは、ワークフローを使用して表すことができます。ワークフローは、作業プロセスの実行可能な表現を作成するために、一連の作業単位 (アクティビティ) を編成および実行する適切な方法です。このプロセスは、アイテムのライフ サイクルなど、Windows SharePoint Services 内のアイテムのほぼすべての機能を制御できます。ワークフローは、柔軟性があるため、ワークフローを完了するのに必要なシステム機能および人間のアクションの両方をモデル化できます。

ビジネス プロセスの要件に応じて、単純なワークフローや複雑なワークフローを作成できます。また、ユーザーが開始するワークフローや、アイテムが作成または変更されたときなど、あるイベントに基づいて Windows SharePoint Services により自動的に開始されるワークフローを作成することもできます。

一連のユーザーにドキュメントを回覧して承認またはコメントを求める単純なワークフローを作成する必要があるとします。このワークフローには、システムで実行する必要があるアクションが含まれ、ユーザーにはあらかじめ決められた方法でワークフローと対話するためのインターフェイスが用意されます。たとえば、ドキュメントの校閲の準備ができると、選択されたユーザーに Windows SharePoint Services から電子メール メッセージが送信されます。これらのユーザーは、校閲が完了すると、Windows SharePoint Services に通知し、必要に応じてコメントを入力します。Windows SharePoint Services Version 3 に含まれ、SharePoint Server 2007 で拡張されるワークフロー フレームワークでは、このような複雑な作業プロセスをモデル化し、わかりやすい方法で各プロセスを手順を追ってエンド ユーザーに示します。

この記事では、Windows SharePoint Services に実装され、SharePoint Server で拡張されるワークフローの概要について詳しく説明します。両方の環境でワークフローを作成できる開発ツールや、これらのツールの機能および利点についても説明します。

ワークフロー アーキテクチャ

Windows SharePoint Services Version 3 のワークフローの機能は、Windows Workflow Foundation (WF) 上に構築されます。WF は、ワークフローベースのアプリケーションの開発および実行に対してプログラミング インフラストラクチャおよびツールを提供する Microsoft Windows プラットフォーム コンポーネントです。WF は、ステートフルで長時間実行できる永続的なワークフロー アプリケーションを作成するための非同期プログラミングのプロセスを単純化します。WF のランタイム エンジンは、ワークフローの実行を管理します。このエンジンによって、ワークフローを長時間アクティブな状態に保持したり、コンピュータを再起動しても存続したままにすることができます。ランタイム サービスには、エラーを適切に管理するためのトランザクションやデータ保持などの機能があります。

WF ランタイム エンジンには、シーケンス、状態管理、トラッキング機能、およびトランザクション サポートなど、すべてのワークフロー アプリケーションが必要とするサービスが用意されています。WF ランタイム エンジンは、ワークフローの読み込みやアンロード、および実行中の各ワークフローの現在の状態の管理を行うステート マシンとして機能します。WF では、すべてのアプリケーション プロセスまたはサービス コンテナは、WF をホストする (つまり、そのプロセス内で WF を読み込む) ことによってワークフローを実行できます。

Windows SharePoint Services では、WF ランタイム エンジンをホストしています。Windows SharePoint Services では、WF に含まれるプラグ可能なサービスの代わりに、エンジンに対する、トランザクション、データ保持、通知、役割、トラッキング、およびメッセージングなどのサービスのカスタム実装が用意されています。このため、開発者は、Windows SharePoint Services 内で実行できるワークフロー ソリューションを作成できます。

図 1 は、Windows SharePoint Services のワークフロー アーキテクチャを表しています。Windows SharePoint Services は、そのプロセス内で WF ランタイム エンジンをホストし、必要なサービスのカスタム実装を提供します。WF ランタイム エンジンの機能、および Windows SharePoint Services が提供するホスト機能は、Windows SharePoint Services のオブジェクト モデルを介して公開されます。

Windows SharePoint Services Version 3 のワークフロー アーキテクチャ

図 1. Windows SharePoint Services Version 3 のワークフロー アーキテクチャ

Windows Workflow Foundation には、Visual Studio 2005 Designer for Windows Workflow Foundation も用意されています。これは、Microsoft Visual Studio 2005 開発システム内でホストされるアドインで、開発者は独自のカスタム ワークフローおよびワークフロー アクティビティを作成できます。詳細については、「Visual Studio 2005 での SharePoint ワークフローの作成」を参照してください。

SharePoint Server では、Windows SharePoint Services (Version 3) のワークフロー機能を採用し、InfoPath フォームとの統合や追加のワークフロー アクティビティを通じてその機能を拡張します。詳細については、「SharePoint Designer 2007 での SharePoint ワークフローの作成」で説明します。

Windows Workflow Foundation のランタイム エンジンは、Microsoft ダウンロード センターでダウンロードできる Microsoft Windows Workflow Foundation Runtime Components Beta 2.2 と Visual Studio 2005 Extensions for Windows Workflow Foundation Beta 2.2 の一部として利用可能です。このダウンロードには、Visual Studio 2005 Designer for Windows Workflow Foundation および Windows Workflow Foundation ソフトウェア開発キット (SDK) も含まれます。

ここまで、Windows SharePoint Services に用意されたワークフロー インフラストラクチャについて簡単に説明しました。これ以降は、WF ワークフロー自体の内部構成および構造について検討します。その次に、Windows SharePoint Services および SharePoint Server 2007 でのワークフロー ソリューションの作成のために Microsoft が提供する各種開発ツールを紹介します。

ワークフローのデータ保持

Windows SharePoint Services が WF ワークフロー エンジンに対して提供する最も重要なサービスの 1 つは、"データ保持" です。人間による処理を含むワークフローは、基本的に実行に時間がかかります。理想的な状況においても、人間はコンピュータに比べて作業を完了するのに比較的長い時間がかかります。Microsoft Office の数多くのシナリオでは通常、実際にはそれほどかからなくても、ワークフローの処理に数日間必要とする想定になっています。たとえば、ドキュメントを回覧して承認を求めるワークフローをでは、承認者は、ドキュメントの校閲に数日必要とする場合があります。

その作業の全実行期間を通じて、実行中の各ワークフローをメモリ内に保持したままにしておくことは、明らかに現実的ではありません。これを行うと、蓄積された長時間実行中のワークフローがリソースを必要とし、システムの停止につながります。

代わりに、ワークフロー インスタンスがユーザー入力の待機状態になると、Windows SharePoint Services はそのワークフロー インスタンスをメモリからアンロードし、そのデータを保持します。ユーザーによる入力など、適切なイベントによって再びそのワークフローを開始する必要があるときに、Windows SharePoint Services は保持していたデータを使用してワークフロー インスタンスを再作成するため、ワークフロー インスタンスは必要に応じてイベントを受け取ったり、処理することができます。

所定の時間内で数多くのワークフロー インスタンスが実行されている場合でも、それらのワークフローのほんの一部のみがメモリ内に保持され、システム リソースを使用します。

ワークフローのタイプ

Windows Workflow Foundation では、次の 2 つの基本的なワークフロー スタイルをサポートしています。

  • シーケンシャル ワークフロー   最後のアクティビティが完了するまで、次々に実行されるステップのパイプラインとしてのワークフローを表します。ただし、シーケンシャル ワークフローの実行は、単なる順次実行ではありません。外部イベントの受信や、同時に複数のタスクを起動することも可能であるため、正確な実行の順序は異なることがあります。
  • ステート マシン ワークフロー   一連の状態、遷移、およびアクションを表します。1 つの状態を開始状態として示し、その後はイベントに基づいて別の状態への遷移が可能になります。ステート マシン ワークフローには、ワークフローの終わりを特定する最終状態を指定できます。

シーケンシャル ワークフロー

シーケンシャル ワークフローは、開始点と終了点があり、開始から終了までのシーケンス フローの方向が表示された、アクションのフローチャートを視覚的に表現する場合に最適です。シーケンシャル ワークフローには、繰り返し、ループ、および並列分岐などのフロー構造を組み込むことができますが、最終的には最初のアクションから最後のアクションまで処理されます。

たとえば、Windows SharePoint Services でドキュメントを回覧して承認を求める単純なワークフローを図に表すとします。ワークフローが開始すると、特定の校閲者に電子メール メッセージで、校閲の準備ができたドキュメントがあることがシステムから通知されます。校閲者は、そのドキュメントの内容を確認し、作業が完了したことと、そのドキュメントを承認するかどうかをシステムに通知します。校閲者の回答に基づいて、ワークフローでは、2 つの並列分岐のうちの 1 つを実行します。校閲者がドキュメントを承認した場合、承認されたドキュメントは特定の SharePoint ドキュメント ライブラリに移動され、そのドキュメントが承認されたことを通知する電子メール メッセージがチーム全体に送信されます。校閲者がドキュメントを承認しなかった場合は、システムからドキュメントの作成者に通知されます。いずれの場合も、ワークフローは最後まで達して終了します。図 2 は、このワークフローを表しています。

シーケンシャル ワークフローの概念図

図 2. シーケンシャル ワークフローの概念図

ステート マシン ワークフロー

シーケンシャル ワークフローとは異なり、ステート マシン ワークフローには、所定の実行フローがありません。また、終了も必要ありません。代わりに、ステート マシン ワークフローでは、アイテムが存在するさまざまな状態、およびアイテムがある状態から別の状態に遷移するイベントを定義します。

図 3 は、ステート マシン ワークフローをモデル化した、単純なドキュメント発行プロセスを表しています。ワークフローは、ドキュメントの作成時に開始され、ドキュメントの状態が完了に設定されると終了します。しかし、開始と終了の間では、ドキュメントはあらかじめ決められたパスに沿って進むのではなく、代わりにイベントの発生時に状態から状態へ遷移します。

ステート マシン ワークフローは、"状態アクティビティ" から構成されます。それぞれの状態アクティビティは、アイテムの状態を表します。各状態アクティビティには、必要に応じて、開始の状態、終了の状態、および 1 つ以上のイベント ハンドラを追加できます。各イベント ハンドラ アクティビティは、1 つのイベントを処理できます。処理されたイベントに応じて、一部のプロセスが実行可能になり、別の状態への遷移が行われます。

ステート マシン ワークフローの概念図

図 3. ステート マシン ワークフローの概念図

シーケンシャル ワークフローとステート マシン ワークフローの両方に共通する特徴の 1 つは、いずれのタイプのワークフローも、個別のアクションの集合体に細分化できることです。個別のアクションの集合体は、システムによって実行されたり、ユーザーによって行われたりします。これらのアクションは、ワークフローの基本単位と考えることができます。WF のワークフローでは、これらのアクションを "アクティビティ" と呼びます。

ワークフローの構成

前の説明で、ワークフローは、作業プロセスの実行可能な表現を作成するために、一連の作業単位 (アクティビティ) を編成および実行する適切な方法であると定義しました。したがって、WF の各ワークフローは、一連の関連するアクティビティから構成されます。アクティビティは、Windows Workflow Foundation 内でのモデリング、プログラミング、再利用、および実行の基本的な単位です。アクティビティは、システムによって実行される場合と、ユーザーによって実行される場合があります。たとえば、システムが警告としてユーザーに電子メール メッセージを送信する場合や、人間が配布ドキュメントを承認する場合があります。

概念的には、ここで使用するシーケンシャル ワークフローの例には、次の 5 つのアクティビティが含まれます。

  • 承認者に通知するための電子メール メッセージの送信
  • ドキュメントの承認または非承認
  • 「承認済み」ドキュメント ライブラリへのドキュメントの移動
  • チームに通知するための電子メール メッセージの送信
  • ドキュメントの作成者に通知するための電子メール メッセージの送信

アクティビティでは、If Then および Do While ループなどのコード論理制御がコード内のプログラム フローを制御するように、ワークフローの実行フローの範囲および方向を定義する論理制御構造を表すこともできます。

アクティビティには、プロパティ、メソッド、およびイベントを定義できます。"単一アクティビティ" は、「1 日間の遅延」や「Web サービスの呼び出し」など、単一の作業単位を実行します。"複合アクティビティ" には、2 つの分岐を持つ条件などのその他のアクティビティが含まれます。アクティビティには、エラー ハンドラや補正ハンドラなどのハンドラを追加することもできます。これは、特に複合アクティビティに適しています。

基本的に、ワークフロー自体は、そのワークフロー内の他のすべてのアクティビティを含む単なる複合アクティビティです。

したがって、ワークフローは、現実世界のプロセスを説明するモデルとして保存された一連のアクティビティと見なすことができます。作業は開始から終了まで順を追ってモデルを通過し、アクティビティはユーザーまたはシステム機能によって実行されます。ワークフローは、実行順序、および短時間実行する作業と長時間実行する作業の間の依存関係を説明する方法です。

Windows Workflow Foundation には、ワークフローで使用できる数多くの定義済みのアクティビティが含まれています。または、独自のカスタム アクティビティを作成することができます。Windows SharePoint Services ワークフロー プロジェクト テンプレート パックには、明示的に Windows SharePoint Services 環境で使用するように設計された多くのアクティビティが含まれています。テンプレート パックには、Windows SharePoint Services オブジェクト モデルに対するプログラムに必要なリファレンスも含まれています。同様に、SharePoint Server プロジェクト テンプレート パックは、SharePoint Server 環境で使用するようにカスタマイズされています。詳細については、「Visual Studio 2005 での SharePoint ワークフローの作成」を参照してください。

ワークフロー マークアップ

WF の各ワークフローは、次のファイルの組み合わせによって表すことができます。

  • ワークフローの宣言メタデータを含む XML ファイル (マークアップ ファイル)
  • ワークフローのプロパティおよび動作を表すカスタム コードを含む分離コード ファイルと組み合わせたマークアップ ファイル
  • ワークフローの宣言ロジックおよび動作の両方を含む 1 つまたは複数のコード ファイル

マークアップ ファイルは、ファイルが準拠しなければならない公開されたスキーマを持つ Extensible Application Markup Language (XAML) で記述され、.xoml というファイル拡張子になります。

XAML には公開されたスキーマがあるため、選択した任意のテキスト エディタまたは XML エディタを使用して XAML ファイルを作成できます。ただし、この記事で説明する Visual Studio 2005 Designer for Windows Workflow Foundation および Microsoft Office SharePoint Designer 2007 の 2 つのワークフロー作成ツールには、ワークフローを作成して自動的に適切なマークアップ ファイルを生成できるグラフィカル インターフェイスが開発者向けに用意されています。

開発者は、ワークフローに含まれるビジネス ロジックに宣言メタデータを統合するか、またはこれらのロジックからメタデータを分離するかを選択できます。概念的には、WF ワークフローが採用する「コード分離」パラダイムは、Microsoft ASP.NET で使用されているものに似ています。つまり、宣言メタデータは、ビジネス ロジックをカプセル化するファイルから分離されています。したがって、マークアップ ファイルにはワークフロー内のアクティビティのメタデータは含まれますが、これらのアクティビティのプロパティおよび動作は別のファイルに記述されます。

コード分離を使用して作成されたワークフローでは、既に説明したように、マークアップ ファイルと、次の 2 つのタイプのいずれかのファイルに情報が保持されます。

  • ビジネス ロジックをカプセル化するコードを含む code-beside ファイル。このファイルは、Microsoft Visual C# または Microsoft Visual Basic .NET のいずれかで記述されます。
  • コードではなく、宣言ルールにビジネス ロジックをカプセル化するワークフロー ルール ファイル

この方法で作成される各ワークフローは、実際には、XOML および分離コード ファイルまたはルール ファイルによって表される 2 つの部分クラスから構築される一意の Microsoft .NET 型です。ワークフロー プロジェクトのコンパイル時には、これら 2 つの部分クラスが .NET アセンブリに統合されます。以上が、Visual Studio 2005 Designer for Windows Workflow Foundation を使用して Windows SharePoint Services または SharePoint Server のワークフローを作成する場合に行われる方法です。

コード ファイルのみで作成されたワークフローは、同様の一般的なコンパイル プロセスに従います。つまり、コード ファイルは、.NET 型にコンパイルされます。

また、マークアップ ファイルのみで作成されたワークフローをコンパイルすることができます。ただし、WF ランタイム エンジンは、コンパイルされていないマークアップ ワークフローを読み込んで実行できるため、この処理は必須ではありません。以上が、SharePoint Designer 2007 を使用して Windows SharePoint Services または SharePoint Server のワークフローを作成する場合に行われる方法です。

Windows SharePoint Services および SharePoint Server 2007 におけるワークフロー

これまで、Windows Workflow Foundation を実装するアプリケーションのワークフローの属性について説明しました。これ以降は、実際に Windows SharePoint Services に実装されているワークフローについて詳しく説明します。また、その実装における重要事項についても説明します。

ワークフロー テンプレートおよびインスタンス

Windows SharePoint Services では、サイトまたはリスト上で利用可能なワークフローをワークフローの "テンプレート" と呼びます。また、特定の SharePoint アイテム上で実際に実行中のワークフローは、ワークフローの "インスタンス" と呼びます。したがって、指定されたリスト上で、同じワークフロー テンプレートの複数のインスタンスが、それぞれ異なる SharePoint アイテム上で同時に実行されている場合があります。指定された SharePoint アイテム上で複数のワークフローを同時に実行することができます。

ワークフローは、ドキュメントまたはリスト アイテム上で実行できます。この記事の後で説明する "関連付け" と呼ばれるプロセスで、ワークフロー テンプレートをサイト上で利用可能にします。

Windows SharePoint Services との対話を可能にするフォームの使用

Windows SharePoint Services ワークフローを使用して数多くの固有のビジネス プロセスをモデル化することができますが、ユーザーがワークフロー テンプレートまたはワークフロー インスタンスと対話することができるいくつかの共通の段階があります。

ユーザーがワークフローに情報を渡すことができるように、開発者はフォームを使用して、対話を可能にするインターフェイスを提供する必要があります。ワークフローにフォームを追加すると、ワークフローをよりダイナミックで柔軟性のある状態にすることができます。フォームの使用により、ワークフローの有効期間内のあらかじめ決められた期間でユーザーから情報を収集することができ、またユーザーもそのワークフローのタスクを操作できるようになります。

技術的には、WF ワークフローではどのようなフォーム テクノロジも採用できますが、使用するフォームは以下の条件を満たす必要があります。

  • Windows SharePoint Services オブジェクト モデルを呼び出せる
  • Windows SharePoint Services オブジェクト モデルへの送信に必要なデータを生成できる
  • Windows SharePoint Services オブジェクト モデルから必要なデータを受信および解析できる

読み込み時にフォームに渡されるすべての情報は、文字列としてフォーマットされます。これは、ユーザーがフォームを送信する際に、フォームが Windows SharePoint Services Vesion 3 オブジェクト モデルに戻さなければならないデータも同様です。通常、この文字列は XML ですが、フォームが文字列を生成して受け取った文字列を解析できるのであれば、どのようなデータ形式でもかまいません。

Windows SharePoint Services では、ASP.NET 2.0 のフォームを使用できます。これらのフォームの実装方法は、開発者がワークフロー作成ツールとして、Visual Studio 2005 Designer for Windows Workflow Foundation と SharePoint Designer 2007 のどちらを使用するかによって決まります。また、SharePoint Server 2007 では、ワークフローに Microsoft Office InfoPath のフォームを統合できます。これらの InfoPath のフォームは、Microsoft Office Word、Microsoft Office PowerPoint、Microsoft Office Excel、および InfoPath などの Microsoft Office クライアント アプリケーションや、クライアント ブラウザ内でホストすることができ、操作性が大きく向上します。各ワークフロー作成ツールでのワークフロー フォームの実装方法の詳細については、「Windows SharePoint Services ワークフローでの ASP.NET のフォーム」、「SharePoint Server ワークフローでの InfoPath のフォーム」、および「SharePoint Designer ワークフローでの ASP.NET フォーム」を参照してください。

どのようなフォーム テクノロジを使用した場合でも、各フォームの処理方法は基本的に同じです。ワークフロー内の適切な時点で、Windows SharePoint Services によってユーザーにフォームが表示されます。ユーザーは、情報を入力し、フォームを送信します。

ワークフローの開発者として、ユーザーがフォームを送信した際に発生する事項をプログラミングしておく必要があります。多くの場合、フォームは Windows SharePoint Services オブジェクト モデルへの呼び出しを行い、適切なメソッドを呼び出して、フォームの情報を正しいワークフロー インスタンスに渡します。

フォームおよびワークフロー アクティビティの両方が文字列を解析できるようにプログラムされている場合、その情報文字列の形式はどのようなものでもかまいません。通常は、XML を選択します。

Windows SharePoint Services は、文字列情報を WF ランタイム エンジン、ワークフロー インスタンス、最終的にはワークフロー インスタンス内の正しいアクティビティに渡します。情報を受け取ったアクティビティは、プログラムされた指示に従って応答します。図 4 は、フォームがどのようにワークフローに統合されているかを示しています。

フォームとワークフローとの統合

図 4. フォームとワークフローとの統合

Windows SharePoint Services のワークフローでは、次の 3 つのタイプのフォームが使用されます。

  • 関連付けおよび初期化フォーム   関連付けおよび初期化の入力フォームは、ワークフローが開始する前にユーザーに対して表示されます。これらのフォームを使用すると、ユーザーは、ワークフローが開始する前にそのワークフローのパラメータおよびその他の情報を設定できます。
  • 変更フォーム   変更は、ワークフローがアイテム上で実行中にそのワークフローを変更するためにユーザーに提示されるオプションです。変更フォームを作成すると、ユーザーは、変更するパラメータを指定できます。
  • タスク フォーム   ワークフロー内のタスクに対して、そのワークフロー タスクのタイプに基づいて、カスタム フォームを指定することもできます。Windows SharePoint Services のワークフロー タスクの各タイプは、コンテンツ タイプに割り当てられます。コンテンツ タイプの定義は、所定のワークフロー タスク タイプにカスタム フォームを指定するかどうかを決定します。

これらの 3 つのタイプのフォームは、ユーザーがワークフローと対話することができる定義済みの段階で表示されます。それぞれの段階については、次に説明します。

ワークフローのユーザー操作の各段階

ここでは、Windows SharePoint Services および SharePoint Server 内のワークフローをユーザー操作できるそれぞれの段階について詳しく説明します。

関連付け

関連付けは、サイトの管理者がワークフロー テンプレートを特定のドキュメント ライブラリ、リスト、またはコンテンツ タイプで利用可能にする場合に発生します。この段階では、サイトの管理者は、次のパラメータ情報を指定することにより、この特定のドキュメント ライブラリ、リスト、またはコンテンツ タイプ向けにワークフローをカスタマイズします。

  • ワークフローの一意の名前。
  • 指定されたアイテムへのワークフローの適用方法。アイテムが作成または変更されたときに自動的に適用する方法と手動で適用する方法があります。また、管理者や投稿者など、ワークフローを開始できる役割。
  • タスク リスト。この中に、ワークフローがタスクを作成できます。
  • 履歴リスト。この中に、ワークフローは、定義されているとおりに履歴イベントを保存できます。

また、ワークフローの開発者は、特定のワークフローに固有のパラメータ情報を設定することにより、サイトの管理者がさらに詳しくワークフローをカスタマイズできるようにすることができます。管理者は、ワークフローの関連付けに使用するリスト、ライブラリ、またはコンテンツ タイプ上のアイテムにワークフローを適用するのと同様に、ワークフローのパラメータ、既定値、およびその他の情報を指定する必要があります。

ワークフローの関連付けは、実際には、ワークフローの外で発生しています。つまり、関連付けの際に、ワークフロー インスタンスは開始していません。Windows SharePoint Services では、関連付け情報が特定の内部ワークフロー関連付けテーブルに格納されます。ワークフロー インスタンスが開始されると、Windows SharePoint Services は、関連付けデータおよび初期化データ (存在する場合) を使用して新しいワークフロー インスタンスのパラメータを設定します。

初期化

関連付けでは特定のリスト、ライブラリ、またはコンテンツ タイプに適用される際のワークフローを扱うのに対し、初期化では特定の SharePoint アイテムに適用される際のワークフローを扱います。

初期化は、ユーザーが実際に特定のアイテム上でワークフロー インスタンスを開始したときに発生します。ユーザーは、必要に応じて、そのアイテムにある特定のワークフローに情報を提供し、ワークフローを開始します。

ワークフローの開発者は、初期化を使用することにより、指定された SharePoint アイテムにワークフローが適用される際に、ユーザーに、管理者によって設定された関連付けパラメータを上書きまたは追加、またはワークフローに関するその他のパラメータや情報を指定させることができます。初期化は、すべてのワークフローに必要なわけではありません。実際には、自動的に開始するよう設定されているワークフローでは、初期化パラメータを指定できません。

Visual Studio 2005 Designer for Windows Workflow Foundation の Windows SharePoint Services ワークフロー プロジェクトには、ワークフローの初期化時に、イベント ハンドラとして機能するアクティビティが含まれています。このアクティビティは、すべての Windows SharePoint Services ワークフロー内の最初のアクティビティです。

変更

変更により、ユーザーは、ワークフロー インスタンスの実行中にパラメータまたはワークフロー インスタンスのフローを変更できます。開発者として、ワークフローがアイテムで実行中に、ユーザーに作成したワークフローを変更させたい場合があります。たとえば、ユーザーが他のユーザーにタスクを割り当てることや、ワークフローに特定のタスクを追加することを許可する場合などです。ワークフローがアイテムで実行中にそのワークフローを変更するためにユーザーに提示されるオプションのことを、"変更" と呼びます。

Visual Studio 2005 Designer for Windows Workflow Foundation の Windows SharePoint Services ワークフロー プロジェクトには、ワークフローの変更を許可するアクティビティ、およびワークフローの変更が許可されたときにイベント ハンドラとして機能するアクティビティが含まれています。

タスク

人によって実行されるワークフロー アクティビティは、Windows SharePoint Services ワークフロー内でタスクとして表されます。

ワークフローの作成者として、タスクのスキーマを指定できます。たとえば、タスク リストには、次の項目が含まれます。

  • タスク タイトル
  • タスクが割り当てられるユーザーの名前
  • タスクの進捗状況
  • タスクの優先順位
  • タスクの期限
  • 参照アイテムへのリンク

ユーザーは、必要に応じてタスクを編集できます。ワークフロー インスタンスは、ワークフロー タスクへの変更について通知され、ワークフローで指定されたとおりにその変更に対して応答することを選択できます。

Visual Studio 2005 Designer for Windows Workflow Foundation の Windows SharePoint Services ワークフロー プロジェクトには、タスクを作成、削除、および更新するアクティビティと、タスクが作成、更新、または削除されたときにイベント ハンドラとして機能するアクティビティが含まれています。

SharePoint ワークフローの作成

Microsoft では、Windows SharePoint Services のワークフローの作成用に Visual Studio 2005 Designer for Windows Workflow Foundation と Office SharePoint Designer 2007 という 2 つの開発ツールを提供しています。それぞれのツールで作成されるワークフローは、異なる属性と機能を持つため、これらのツールについて詳しく検討しておくことは有用です。

図 5 は、それぞれの作成ツールでワークフローを作成、展開、関連付け、および実行するために行う必要があるさまざまな手順を示しています。一般的に、2 つのツールの大きな相違点は、以下のとおりです。

  • Visual Studio 2005 Designer for Windows Workflow Foundation で作成されたワークフローは、複数のサイトで展開でき、カスタム コードおよびアクティビティを含むワークフロー テンプレートを作成するような専門的な開発者によって実行されます。開発者は、実際の展開および関連付けのために、このワークフロー テンプレートをサーバー管理者に渡します。
  • SharePoint Designer で作成されたワークフローは、通常、特定のリストまたはドキュメント ライブラリ向けにワークフローを作成する Web デザイナや知識のある作業者など、専門的な開発者以外のユーザーによって実行されます。この場合、デザイナは、安全なコントロール リストにあるワークフロー アクティビティに制限され、ワークフローにはカスタム コードを含めることができません。ワークフローの作成者は、ワークフロー作成プロセスの一部として、ワークフロー テンプレートをリストまたはドキュメント ライブラリに直接展開します。

2 つのツールの機能の比較については、「Visual Studio 2005 Designer for Windows Workflow Foundation と SharePoint Designer 2007 の比較」を参照してください。

ワークフローの作成、展開、および初期化プロセス

図 5. ワークフローの作成、展開、および初期化プロセス

Visual Studio 2005 での SharePoint ワークフローの作成

Visual Studio 2005 Designer for Windows Workflow Foundation は、Visual Studio 2005 のアドインです。このツールのグラフィカル インターフェイスでは、Visual Studio 開発環境の知識を活用できるため、ワークフローを迅速に開発することができます。

Visual Studio 2005 Designer for Windows Workflow Foundation は、ビジネス プロセスをカプセル化するコードの開発と統合する方法でワークフローを迅速に作成するためのツールです。これを実現するため、Visual Studio 2005 Designer for Windows Workflow Foundation には、使い慣れた Visual Studio 開発環境内でホストされた、直感的なコントロールを使用したグラフィカル インターフェイスが用意されています。機能には次のようなものがあります。

  • [ツールボックス] からドラッグする定義済みワークフロー アクティビティから、カスタム ワークフローを作成できるドラッグ アンド ドロップ デザイン画面
  • 直感的なグラフィカル ツールを使用してワークフロー マークアップ上で作業できるインターフェイス
  • [プロパティ] ウィンドウとの統合。この機能により、開発者は、ワークフロー アクティビティのプロパティを、グラフィカル インターフェイスを介して、または code-beside ファイルで直接のいずれかの方法で構成することができます。これら 2 つの同期は常に保たれています。
  • ワークフローにブレークポイントを設定するなど、Windows SharePoint Services プロセスに接続することによるワークフローのデバッグ
  • アクティビティにエラー ハンドラ、補正ハンドラ、およびイベント ハンドラを関連付けられる機能、およびアクティビティを視覚的に「コメント アウト」できる機能

Visual Studio 2005 Designer for Windows Workflow Foundation は、Microsoft ダウンロード センターでダウンロードできる Microsoft Windows Workflow Foundation Runtime Components Beta 2.2 と Visual Studio 2005 Extensions for Windows Workflow Foundation Beta 2.2 の一部として利用可能です。このダウンロードには、Windows Workflow Foundation ランタイム エンジンと Windows Workflow Foundation SDK が含まれます。

ワークフローの開発をさらに支援するため、Microsoft では、Visual Studio 2005 Designer for Windows Workflow Foundation で使用する 2 つの Visual Studio プロジェクト テンプレート パックを提供しています。1 つは Windows SharePoint Services のワークフロー用にカスタマイズされたもので、もう 1 つは SharePoint Server のワークフローの作成用にカスタマイズされたものです。

Window SharePoint Services ワークフロー プロジェクト テンプレートには、Windows SharePoint 名前空間への参照、および Windows SharePoint Services 環境用に設計されたカスタム ワークフロー アクティビティが含まれています。これらのカスタム アクティビティにより、SharePoint タスクの作成、更新、完了、および削除、電子メールの送信、およびワークフロー変更の許可など、Windows SharePoint Services 環境に共通の機能の実行が可能になります。

SharePoint Server ワークフロー プロジェクトには、Window SharePoint Services ワークフロー プロジェクト テンプレートのすべて、SharePoint Server 名前空間への参照、および SharePoint Server 作業環境におけるワークフロー タスクの管理のためのその他の機能が含まれています。

Visual Studio でのワークフロー開発プロセス

通常、Windows SharePoint Services または Office SharePoint Server のワークフローを Visual Studio 2005 Designer for Windows Workflow Foundation で作成する場合は、以下の基本的な手順に従います。

  1. Visual Studio 2005 Designer for Windows Workflow Foundation でワークフロー (必要に応じて code-beside ファイルを含む) を作成します。
  2. ワークフローで使用するフォームを設計および公開します。
  3. 機能の定義、およびワークフロー アセンブリに関する情報を含むワークフロー テンプレート定義ファイルを作成し、フォームをワークフロー アセンブリにバインドします。
  4. ワークフロー ファイルを.NET アセンブリにコンパイルします。
  5. ワークフロー アセンブリとワークフロー定義をパッケージ化し、Windows SharePoint Services の機能を使用してそれらを展開します。
  6. Visual Studio 2005 Designer for Windows Workflow Foundation を使用してリアルタイムにワークフロー アセンブリをデバッグします。
  7. 見つかったバグの修正で必要な場合は、ワークフロー アセンブリを再コンパイルして、展開します。

次のセクションでは、これらの開発手順のそれぞれについて概要を説明します。

Visual Studio 2005 Designer for Windows Workflow Foundation を使用したワークフローの作成

Windows SharePoint Services または Office SharePoint Server の新規ワークフロー プロジェクトを選択すると、Visual Studio で Visual Studio 2005 Designer for Windows Workflow Foundation のデザイン画面が表示されます (図 6)。このデザイン画面には、[ツールボックス] から各種アクティビティをドラッグ アンド ドロップしてワークフローを作成できるグラフィカル インターフェイスが用意されています。

Visual Studio 2005 Designer for Windows Workflow Foundation のインターフェイス

図 6. Visual Studio 2005 Designer for Windows Workflow Foundation のインターフェイス

特定のアクティビティをワークフローにドラッグすると、Visual Studio 2005 Designer for Windows Workflow Foundation では、ワークフロー内でそのアクティビティが有効な場所が示されます。有効ではない場所にアクティビティを配置することはできません。たとえば、Send アクティビティを Listen アクティビティ分岐の最初のアクティビティとして配置することはできません。図 7 に示すように、Visual Studio 2005 Designer for Windows Workflow Foundation では、特定のアクティビティの有効な位置に緑色のプラス記号のアイコンが表示されます。

ワークフロー アクティビティの有効な位置

図 7. ワークフロー アクティビティの有効な位置

ワークフローを視覚的に設計すると、実際には Visual Studio 2005 Designer for Windows Workflow Foundation によって対応するマークアップが生成されます。

また、コード分離を使用している場合は、ワークフロー プロジェクトに、ワークフローのビジネス ロジックをプログラムした分離コード ファイルが含まれます。ワークフローのデザイン画面と code-beside ファイルは、いつでも切り替えることができます。

ワークフロー プロパティの設定

ワークフローにアクティビティを追加した後は、そのアクティビティがワークフロー内で有効になるようにプロパティを設定する必要があります。これらのプロパティは、標準の Visual Studio の [プロパティ] ウィンドウを使用して設定できます。指定できるデータ型は、プロパティ自体が受け取ることができるデータ型 (リテラル値、変数、またはメソッド名) によって異なります。

プロパティに変数を指定する場合は、[プロパティ] ウィンドウに変数名を入力するか (この場合、変数は、Visual Studio 2005 Designer for Windows Workflow Foundation によって自動的に分離コード ファイル内に宣言されます)、または変数を分離コード ファイル内に宣言して、[プロパティ] ウィンドウでその変数を選択します。

一部のアクティビティのプロパティは、基本的に、特定のシグニチャに準拠する code-beside ファイル内のメソッドを参照します。変数の場合と同様、[プロパティ] ウィンドウにメソッド名を入力して、Visual Studio 2005 Designer for Windows Workflow Foundation によってメソッド シグニチャを分離コード ファイルに追加させるか、またはメソッドを分離コード ファイル内に作成して、[プロパティ] ウィンドウでそのメソッドを選択できます。

別のアクティビティのプロパティに、プロパティをバインドすることもできます。

ハンドラ アクティビティ

ワークフローには、いくつかのエラーが発生する可能性のあるポイントがあります。問題を的確かつ最小限の作業で解決するには、ワークフローの状態を追跡し、発生したエラーを報告することが重要です。ワークフローでは、非常に関連性の高い一連のアクティビティとの整合性を維持することも同じように重要です。これを行うことで、一部の処理が実行されて別の処理が実行されない場合でも、処理全体をロールバックすることができます。エラーの処理、ワークフローの状態の維持、および発生した問題の解決を行うには、FaultHandlerActivityTransactionScopeActivityCompensationHandlerActivity、および CancellationHandlersActivity の各アクティビティを使用できます。

FaultHandlersActivity アクティビティは C 言語の try ブロックと考えることができ、このアクティビティに対して、例外ハンドラとして機能する順序付けられた一連の FaultHandlerActivity アクティビティを関連付けることができます。これらの例外ハンドラは、C 言語の catch ブロックと考えることができます。複合アクティビティの実行時に例外がスローされると、WF ランタイム エンジンは、FaultHandlerActivity アクティビティで処理される例外の種類に対して、その例外の照合を行います。ランタイム エンジンによって、一致する例外ハンドラが検出されない場合は、1 つ上位の複合アクティビティに問い合わせが行われ、適切なハンドラが見つかるまでそのプロセスが繰り返されます。

EventHandlerScopeActivity アクティビティにイベント ハンドラを追加することにより、イベントに応答する EventHandlersActivity アクティビティも使用することができます。概念的には、これらのイベント ハンドラは、C 言語または Visual Basic .NET 言語のイベント ハンドラに非常によく似ています。イベント ハンドラを作成するには、EventDrivenActivity アクティビティを使用する必要があります。

CompensationHandlerActivity アクティビティには、複合アクティビティの実行が失敗した場合に、その処理を補正、またはロールバックするコードが含まれています。

Windows SharePoint Services ワークフローでの ASP.NET のフォーム

既に説明したように、ASP.NET を使用して Windows SharePoint Services のワークフローで使用するフォームを作成できます。これらのフォームは、ワークフローの適切な段階で、Windows SharePoint Services のユーザー インターフェイスに表示されます。

ワークフローのフォームは、ワークフロー テンプレート定義の XML ファイルに記述した情報を介して、ワークフロー アセンブリに遅延バウンドされます。ワークフロー テンプレート定義スキーマには、Windows SharePoint Services ワークフローで使用できる各種のフォームの URL を示す要素が含まれます。このことにより、任意のカスタム ワークフロー変更用のフォーム、およびワークフローで使用される各種の SharePoint タスクのフォームの要素を作成できます。

多くの場合、ワークフロー アセンブリ自体には、ワークフローのフォームについての情報、またはそのフォームへのリンクは含まれません。開発者は、ワークフロー定義 XML を編集するだけで、使用するワークフローのフォームを変更することができ、ワークフロー アセンブリ自体を再コンパイルする必要はありません。ただし、ワークフローの変更は例外です。ワークフローの変更を可能にする各アクティビティには、そのワークフローの変更用のフォームの GUID が含まれている必要があります。

SharePoint Server ワークフローでの InfoPath のフォーム

SharePoint Server ワークフローでは ASP.NET ワークフローのフォームも使用できますが、SharePoint Server には、作成したワークフローのフォームを拡張して、Microsoft Office クライアント アプリケーションで表示できる機能があります。

ワークフローでは、InfoPath のフォームが使用できます。InfoPath では、対照的なフォームを作成できます。つまり、SharePoint Server Web インターフェイスに表示される場合も、Word、Excel、または PowerPoint などの Microsoft Office クライアント アプリケーション内に表示される場合も、外観と動作が完全に同一のフォームとなります。このフォームにより、ユーザーは、クライアントを実行したまま SharePoint Server Web インターフェイスに切り替える必要がなく、ワークフローと直接対話できるようになり、操作性が格段に向上します。開発者として、サーバー用とクライアント用の 2 つの個別のフォームを作成することなく、ユーザーはクライアント アプリケーションの統合を実現できます。

対照的なフォーム作成の一般的な情報については、Microsoft Office InfoPath 2007 クライアントのヘルプ、または Office オンライン (英語) を参照してください。

SharePoint Server では、InfoPath フォームのサーバー ベースのランタイム環境である、Office Forms Services を使用してワークフローのフォームをホストします。Office Forms Services は、InfoPath クライアント アプリケーションで作成したフォームを使用して、それをフォームのランタイム環境として機能する ASP.NET フレームワークで表示します。この環境では、InfoPath クライアント アプリケーションに調和する方法でフォームを編集できます。

Office Forms Services の詳細については、Microsoft Office SharePoint Server 2007 SDK (英語) を参照してください。

**注:   **Word、PowerPoint、Excel などの Office 2007 クライアント アプリケーションには、InfoPath のフォームをホストする機能が含まれるため、この統合機能を利用するために InfoPath クライアント アプリケーションをインストールする必要はありません。

InfoPath のワークフロー フォームの表示

SharePoint Server では、関連付け、初期化、変更、またはタスク編集の各フォームを含む InfoPath のすべてのカスタム ワークフロー フォームの表示に同じような技法を使用します。

SharePoint Server のインターフェイスでワークフロー フォームを表示するリンクをクリックすると、Office Forms Services の Web パーツを含む ASPX ページが読み込まれます。次に、この Web パーツが適切な InfoPath フォームを ASP.NET に変換し、これを読み込みます。ユーザーがこのフォームを送信すると、Web パーツはフォームからデータを受け取り、これを処理します。

Office Forms Services の Web パーツを含む ASPX ページは、SharePoint Server 内にあります。

InfoPath のワークフロー フォームの指定

ここでも、ワークフロー自体ではなく、ワークフロー テンプレート定義で使用するカスタム フォームを指定します。多くの場合、これには、次の 2 つの要素を設定します。まず、そのワークフロー プロセス (関連付け、初期化、変更など) のフォームの URL を、SharePoint Server に同梱されている適切な ASPX ホスト ページに設定します。次に、そのタイプのワークフロー プロセスの InfoPath カスタム フォームの URN を指定する要素を追加します。

InfoPath ワークフロー フォームの使用による情報の送信

ホストされたフォームからデータを受け取る ASPX ページ用に、フォームに [送信] ボタンを追加します。このボタンは、ホスト環境へのデータ接続を使用してデータを送信するというルールを使用します。この接続では、ユーザーが [送信] ボタンをクリックすると、データがホスト ASPX ページに自動的に戻されます。ホスト ASPX ページは、データの解析処理を行い、必要に応じてそのデータをワークフローまたはドキュメント ライブラリに戻します。

ワークフローの展開

ワークフローの指定が完了したら、ワークフローとしてコンパイルするか、またはアクティビティとしてコンパイルするかを選択できます。

ワークフローのコンパイルが終了した後は、SharePoint Features の機能を使用してワークフロー アセンブリおよびその他の必要なサポート ファイルをパッケージ化および展開できます。

Feature のパッケージ化では、展開しやすいように、Windows SharePoint Services ソリューションおよび機能をカプセル化します。開発者はこのメカニズムを利用して、ワークフロー、Web パーツ、リスト、およびサイトの定義などのソリューションに必要なファイルを配布および展開しやすいようにパッケージ化できます。開発者は、必要なファイルを .wsp ファイルにパッケージ化します。.wsp ファイルは、基本的にそのコンテンツを一覧するマニフェストを含む .cab ファイルです。SharePoint Features の詳細については、Microsoft Windows SharePoint Services Version 3 の SDK を参照してください。

展開する各ワークフロー テンプレートには、ワークフロー テンプレート定義ファイルが含まれている必要があります。ワークフロー テンプレート定義は、Windows SharePoint Services でワークフローのインスタンス化および実行の際に必要な次の情報を含む XML ファイルです。

  • ワークフロー テンプレートの名前、GUID、および説明
  • アセンブリ
  • このワークフロー テンプレートで使用される任意のカスタム フォームの URL (または IP フォームの URN)
  • ワークフローの実行時に使用するワークフローの名前、ワークフロー エンジン、およびホスト サービス アセンブリ (省略可)
  • これらのアセンブリ内の呼び出しのための正しいクラス (省略可)

ワークフロー アセンブリ自体は、グローバル アセンブリ キャッシュに展開する必要があります。

サイトに展開された後、ワークフローはワークフロー テンプレートとして使用可能になり、SharePoint 管理者はそのサイトにあるドキュメント ライブラリおよびリストに関連付けることができます。

ワークフローのデバッグ

ワークフロー アセンブリを展開した後は、ワークフロー プロジェクトを開いて、Windows SharePoint Service w3wp プロセスに接続することにより、ワークフローをデバッグできます。

Visual Studio 2005 Designer for Windows Workflow Foundation は Visual Studio 内でホストされているため、Visual Studio のデバッグ機能を完全に活用することができます。code-beside ファイルに記述したコード、およびデザイン画面のワークフロー アクティビティの両方にブレークポイントを設定できます。

**注:   **デバッグを簡単にするため、ワークフロー テンプレートは、展開しようとするサーバー上で開発することをお勧めします。

Visual Studio 2005 Designer for Windows Workflow Foundation では、[ブレークポイント] ウィンドウや [呼び出し履歴] ウィンドウなどの標準の Visual Studio デバッグ機能のみではなく、デバッグ プロセス時に情報を表示できる視覚的なインジケータなどの機能もサポートしています。アセンブリのデバッグ時に、ワークフロー アクティビティにブレークポイントを追加することもできます。

ワークフロー コード内を移動して、ステップ イン、ステップ アウト、およびステップ オーバーの処理を実行することができます。

以下のデバッグ機能は、Visual Studio 2005 Designer for Windows Workflow Foundation ではサポートされていません。

  • ホスト プロセスの実行時例外の Just-In-Time デバッグ
  • タスク マネージャのプロセスを選択することによる Just-In-Time デバッグ

Visual Studio 2005 Designer for Windows Workflow Foundation を使用したデバッグの詳細については、Windows Workflow Foundation SDK を参照してください。

**注:   **Windows Workflow Foundation SDK は、Microsoft ダウンロード センターでダウンロードできる Microsoft Windows Workflow Foundation Runtime Components Beta 2.2 と Visual Studio 2005 Extensions for Windows Workflow Foundation Beta 2.2 の一部として利用可能です。このダウンロードには、Visual Studio 2005 Designer for Windows Workflow Foundation および Windows Workflow Foundation ランタイム エンジンも含まれます。

SharePoint Designer 2007 での SharePoint ワークフローの作成

Office SharePoint Designer 2007 でワークフローを作成する場合は、Windows SharePoint Services の特定のリストまたはドキュメント ライブラリに対して直接そのワークフローを作成し、データ バインドすることになります。定義済みのワークフロー アクティビティのリストを使用し、コードは使用しません。設計したワークフローは、アセンブリとしてコンパイルされるのではなく、そのワークフローを最初に実行する際に Windows SharePoint Services によってコンパイルされるまで、ソース ファイルとして保存されます。

このようなアプローチには、以下のようないくつかの利点があります。

  • ワークフローを迅速に開発およびテストできる。

  • ワークフローが指定されたリストに対して固有であるため、開発プロセスがかなり単純化される

  • 同様の理由から、セキュリティの問題もかなり単純化される

  • ワークフローがアセンブリにコンパイルされないため、SharePoint Designer で作成されたワークフローは、管理ポリシーでカスタム コード アセンブリを禁止しているサーバーに展開できる。

    **注:   **SharePoint Designer で作成されたワークフローは、定義済みアクティビティの「安全なリスト」から作成されます。このリストは、管理者によってサーバーでの実行が許可されていると仮定します。

  • Web デザイナや知識のある作業者など、開発経験の少ないユーザーでもワークフローを作成できる。

また、このアプローチから、SharePoint Designer で作成されたワークフローと、Visual Studio 2005 Designer for Windows Workflow Foundation で作成されたワークフローには、以下のいくつかの重要な相違点があることがわかります。

  • SharePoint Designer で作成されたワークフローは、複数のリストに展開できない。作成されたリストに対してのみ有効です。
  • リストに対して直接ワークフローを作成するため、ワークフローはデザイン時にリストに関連付けできない。したがって、SharePoint Designer で作成されたワークフローには、関連付けの段階がありません。
  • SharePoint Designer で作成されたワークフローでは、ワークフローの変更ができない。
  • SharePoint Designer では、コンテンツ タイプに対して作成することができない。

比較の詳細については、「Visual Studio 2005 Designer for Windows Workflow Foundation と SharePoint Designer 2007 の比較」を参照してください。

SharePoint Designer 2007 で作成されたワークフローの実行

SharePoint Designer 2007 で作成されたワークフローには、カスタム コードが含まれないため、アセンブリとしてコンパイルおよび展開されません。これらのワークフローは、Windows SharePoint Services 内にソース ファイルとして保存され、必要なときのみメモリにコンパイルされます。

各サイトでは、このようなタイプのワークフローは、個別のドキュメント ライブラリに保存されます。このドキュメント ライブラリには、SharePoint Designer で作成された各ワークフロー用のフォルダがあります。このフォルダには、ワークフローに必要な以下のようなソース ファイルがすべて保存されます。

  • ワークフロー マークアップ ファイル
  • ワークフロー ルール ファイル
  • 任意のカスタム ワークフロー フォームに必要な ASPX フォーム

Windows SharePoint Services には、ワークフローがアイテム上で最初に開始されるときにソース ファイルをワークフローにコンパイルするための Just-In-Time コンパイラが同梱されています。Windows SharePoint Services では、再び呼び出されるまで、コンパイルされたワークフローをメモリに保持します。これは、実行速度を向上させるために、次にページが呼び出されるまで、サーバーで .aspx ページをメモリに保持しておくのに似ています。

アイテムでワークフローが開始されるたびに、Windows SharePoint Services は、ワークフローをアセンブリとして展開するか、ソース ファイルとして展開するかを決定します。ワークフロー アセンブリが存在する場合、Windows SharePoint Services はそのアセンブリを呼び出してワークフロー インスタンスを作成します。ワークフローがソース ファイルとして展開された場合、Windows SharePoint Services は、メモリ内で既にソース ファイルからコンパイルされたワークフローがあるかどうかを確認します。そのようなワークフローがある場合、Windows SharePoint Services はメモリ内にあるコンパイル済みのワークフローを呼び出してワークフロー インスタンスを作成します。このようなワークフローがない場合、Windows SharePoint Services は、Just-In-Time コンパイラを使用してソース ファイルをメモリ内ワークフローにコンパイルします。その後、コンパイルされたワークフローを呼び出してワークフロー インスタンスを作成します。

SharePoint Designer 2007 でのワークフロー開発プロセス

ワークフローの設計と展開を支援するため、SharePoint Designer の開発プロセスは Visual Studio の場合よりも単純化されています。

通常、Windows SharePoint Services または SharePoint Server のワークフローを SharePoint Designer 2007 で作成する場合は、以下の基本的な手順に従います。

  1. SharePoint Designer で利用可能な定義済みのアクティビティと条件を作成および構成して、ワークフローを作成します。
  2. 必要に応じて、SharePoint Designer でワークフローの初期化および任意のカスタム SharePoint タスク用の ASP.NET フォームを自動的に生成します。
  3. 必要に応じて、ワークフロー フォームをカスタマイズします。

SharePoint Designer では、ワークフロー定義テンプレートの生成、および指定されたリストへのワークフローの展開は自動的に行われます。

次のセクションでは、これらの開発手順のそれぞれについて概要を説明します。

SharePoint Designer 2007 を使用したワークフローの作成

SharePoint Designer では、ウィザードを使用したインターフェイスにより、定義済みのアクティビティからシーケンシャル ワークフローを作成できます。SharePoint Designer のインターフェイスを使用して、あらかじめ決められたリストからアクティビティを選択し、それらを構成します。これらのアクティビティは、Visual Studio 2005 Designer for Windows Workflow Foundation のものと同じです。2 つのツールの間で、アクティビティには相違点はありません。

ただし、SharePoint Designer では、各アクティビティは、アクションとして表現され、ドロップダウン メニューやルックアップ ダイアログ ボックスを使用して構成できる変数を含む文で表されます。また、ワークフローのフローを指示する構成可能な条件句を選択することもできます。

ワークフロー インターフェイスで条件やアクションを選択および構成すると、SharePoint Designer によってワークフロー クラスを表現する 2 つのファイルが生成されます。

  • ワークフロー マークアップ ファイル。ワークフローに含まれるアクティビティを説明するマークアップを含みます。
  • ワークフロー ルール ファイル。コードではなく、宣言ルール フォーム内のワークフローのビジネス ロジックを含みます。
カスタム アクティビティと条件の追加

既に説明したとおり、SharePoint Designer のワークフロー デザイナは、ワークフローで使用するカスタム アクティビティを作成できません。代わりに、SharePoint Designer に表示される安全なコントロール リスト (サーバー管理者によって承認されたものと仮定) で利用可能になっているアクティビティと条件に制限されます。

条件は、一部の条件を評価し、呼び出されたときにブール値を返す静的なメソッドを持つカスタム アセンブリです。

開発者は、カスタム アクティビティおよび条件を作成して、それらを安全なリストで利用可能にすることができます。これを行うには、次の処理を実行する必要があります。

  1. アクティビティまたは条件を作成し、厳密な名前を持つアセンブリとしてコンパイルし、グローバル アセンブリ キャッシュに展開します。
  2. アクティビティまたは条件を web.config ファイルにあるアクションの安全なリストに追加します。
  3. ワークフローのフォルダにある WSS.Actions ファイルで、SharePoint Designer のユーザー インターフェイスのアクティビティまたは条件を表す文のルールおよびパラメータを追加します。この情報はアクティビティまたは条件のアセンブリでは提供されないため、これらの情報はインターフェイスでのアクティビティまたは条件の表示方法および実行方法を指定するマークアップとなります。

カスタム アクティビティおよび条件の展開の詳細については、SharePoint Designer のヘルプを参照してください。

SharePoint Designer ワークフローでの ASP.NET のフォーム

SharePoint Designer では、ワークフローの初期化段階を作成できます。これを作成する場合は、指定した初期化の設定に従って、SharePoint Designer によりASP.NET を使用して初期化フォームが自動的に生成されます。

同様に、ワークフローに対してカスタム SharePoint タスクを作成できます。ここでも、指定した設定に従って、SharePoint Designer によりタスクに対して ASP.NET のフォームが自動的に生成されます。

これらの aspx フォームは、ワークフローのソース ファイルと共に SharePoint のサイトに格納されます。これらのフォームは、他の aspx フォームと同様に開いたり、カスタマイズしたりできます。

**注:   **SharePoint Designer 2007 には、InfoPath フォームとの統合機能はありません。

SharePoint Designer 2007 でのワークフローの展開

ワークフローを特定のリストに対して作成しているため、Office SharePoint Designer で作成されたワークフローの展開は、Visual Studio 2005 Designer for Windows Workflow Foundation で作成されたワークフローの場合より簡単です。SharePoint Designer では、指定されたリストに対してワークフローの展開を処理します。

SharePoint Designer には、カスタムのデバッグ機能はありません。

SharePoint Designer で作成されたワークフローをリストから削除しても、メモリ内でそのワークフローをコンパイルするために使用する実際のソース ファイルは削除されません。ワークフローとリストとの関連付けはなくなりますが、ソース ファイルは、サイト上のワークフロー ドキュメント ライブラリに格納されたままです。

Windows SharePoint Services オブジェクト モデルでは、SharePoint Designer で作成されたワークフローと Visual Studio 2005 Designer for Windows Workflow Foundation で作成されたワークフローは区別できません。

Visual Studio 2005 Designer for Windows Workflow Foundation と SharePoint Designer 2007 の比較

次の表は、Visual Studio 2005 Designer for Windows Workflow Foundation の機能と Office SharePoint Designer 2007 の機能、およびそれぞれのツールで作成できるワークフローの比較を詳しく示しています。

表 1. 機能の詳細な比較

Visual Studio 2005 Designer for Windows Workflow Foundation SharePoint Designer 2007
Windows SharePoint Services または SharePoint Server のワークフローを作成できる Windows SharePoint Services または SharePoint Server のワークフローを作成できる
分離コード ファイルにより、カスタムの Visual C# または Visual Basic .NET のコードを記述してビジネス ロジックを表現できる 分離コード ファイルは存在しない。ビジネス ロジックは、ワークフロー ルール ファイルによって宣言的にカプセル化される
ワークフロー マークアップ ファイルが生成される ワークフロー マークアップ ファイルが生成される
ワークフローは、テンプレートとして作成され、複数のサイトおよびリストに関連付けることができる ワークフローは、デザイン時に特定のリストに対して作成およびデータバインドされる。
ワークフロー マークアップ ファイル、またはマークアップおよび分離コード ファイルは、ワークフロー アセンブリにコンパイルされる ワークフロー マークアップ、ワークフロー ルール、およびサポート ファイルは、コンパイルされずにサイト上の特定のドキュメント ライブラリに格納される
ワークフロー テンプレートは、利用可能になる各リストに関連付ける必要がある 関連付けは、ワークフローが特定のリストに対して作成されたときに発生する (それ以降に関連付けが必要になることはない)
あらゆるフォーム テクノロジが使用可能。たとえば、Windows SharePoint Services ワークフロー用の ASP フォームや、SharePoint Server ワークフロー用の InfoPath フォームなど カスタマイズできる ASP.NET フォームが自動的に生成される
ワークフローの変更を利用できる ワークフローの変更を利用できない
カスタム ワークフロー フォームと Office クライアントとの統合を実現できる InfoPath の対照的なカスタム フォームを使用できる InfoPath のフォームとの統合が利用できない
ワークフローに追加するカスタム アクティビティを作成できる 提供されたアクティビティを使用する必要がある
ワークフローアセンブリおよびワークフロー定義を SharePoint Feature としてパッケージ化し、サイトに展開する 特定のリストへの展開を自動的に処理する
ワークフローの開始時に、初期化フォームを使用してユーザーから情報を収集できる ワークフローの開始時に、初期化フォームを使用してユーザーから情報を収集できる
ユーザーが SharePoint タスクと対話するためのカスタム フォームを使用できる ユーザーが SharePoint タスクと対話するためのカスタム フォームを使用できる
Visual Studio のデバッグ機能が使用可能 手順を追ったデバッグ機能が利用できない

Windows SharePoint Services でのワークフローの構造

図 8 は、Windows SharePoint Services のワークフロー構造のさまざまな要素がどのように作成、展開され、特定のコンテンツ タイプ、リスト、またはドキュメント ライブラリに関連付けられるかを示したものです。

指定されたコンテンツ タイプ、リスト、またはドキュメント ライブラリにワークフロー テンプレートを関連付けると、Windows SharePoint Services は、管理者によって設定された関連付けのパラメータ情報をファームレベル ワークフロー関連付けテーブルに書き込みます。この関連付けテーブルのエントリによって、特定のコンテンツ タイプ、リスト、またはドキュメント ライブラリが関連付けられたワークフローのワークフロー テンプレート定義にリンクされます。ワークフロー テンプレート定義内の情報には、ワークフロー アセンブリ自体への参照、およびワークフローが使用する任意のカスタム ワークフロー フォームへの参照が含まれます。

SharePoint Designer 2007 で作成されたワークフローの場合、Designer によってワークフロー関連付けテーブルへの関連付けのパラメータ情報の書き込み、ワークフロー テンプレート定義の生成とインストールが自動的に行われます。また、ワークフローは、コンパイルされたアセンブリとしてではなく、マークアップおよびワークフロー ルールのソース ファイルとして、サイトレベルのワークフロー ドキュメント ライブラリに格納されます。

Windows SharePoint Services でのワークフロー コンポーネント構造

図 8. Windows SharePoint Services でのワークフロー コンポーネント構造

ワークフローの名前空間の使用

ワークフロー ソリューションを展開した後は、Windows SharePoint Services オブジェクト モデルを使用してワークフロー プロセスへの照会を行ったり、ワークフローのリストへの追加やアイテムに対するワークフローの開始など、ワークフロー アクションをプログラムによって実行できます。

主要な Microsoft.Windows.SharePoint.Workflow オブジェクト

Microsoft.Windows.SharePoint.Workflow 名前空間は、Windows SharePoint Services に含まれるワークフローの機能を表します。

SPWorkflowTemplateCollection オブジェクトは、現在サイトに展開されているワークフロー テンプレートを表します。各 SPWorkflowTemplate オブジェクトはワークフロー テンプレートを表します。このオブジェクトには、インスタンス化データや、テンプレートの履歴リストおよびタスク リストなどのテンプレートに関する情報を取得または設定するために使用できるプロパティが含まれます。

ワークフローをリストまたはドキュメント ライブラリに関連付けるには、SPList.AddWorkflowAssociation メソッドを使用します。このオーバーロードされたメソッドは、次の 4 つのパラメータを取ります。

  • ワークフロー テンプレートの名前または ID
  • ワークフローに付ける名前
  • このワークフローで使用するタスク リストの名前または ID
  • ワークフローの履歴リスト

ユーザー インターフェイスを介してワークフローを追加する場合と同様、このメソッドは、ワークフローの状態列をリストに追加します。リストからワークフロー テンプレートを削除するには、SPList.RemoveWorkflowAssociation メソッドを使用します。

SPWorkflowAssociationCollection オブジェクトは、サイトの内部ワークフロー関連付けテーブルを表します。つまり、サイト コレクション上に配置されたリストで、それぞれの関連付け情報と共に、現在関連付けられているワークフローを表します。各 SPWorkflowAssociation オブジェクトは、特定のリストに関連付けられているワークフロー テンプレートを表します。この中には、ワークフローが使用可能になっているかどうか、ワークフローが変更されているかどうか、ワークフローが関連付けられているリスト、この SPWorkflowAssociation オブジェクトのベースとして機能する SPWorkflowTemplate オブジェクトへの参照など、関連付けのカスタム情報を返すプロパティが含まれます。

プロパティは、SharePoint Designer で作成されたファイルなどのコンパイルされていないファイルとして格納されているワークフローに対して True を返します。

SPWorkflowCollection は、指定されたリスト アイテム上で実行された、または現在実行中のワークフロー インスタンスを表します。各 SPWorkflow オブジェクトには、ワークフローが完了しているかどうか、ワークフローの内部状態、およびワークフローの基になるワークフロー テンプレートなど、ワークフロー インスタンスについての情報を返すプロパティが含まれます。さらに、各ワークフローには、ワークフローのタスクのコレクションである SPWorkflowTaskCollection が含まれます。

該当するリスト アイテムに対して現在実行中のワークフローを表す SPWorkflowCollection オブジェクトを返すには、SPListItem.Workflows プロパティを使用します。

プログラムによるワークフロー インターフェイスの実行の管理

ユーザーは、Windows SharePoint Services のユーザー インターフェイスを介して、アイテムで実行中のワークフローと個別に対話できます。しかし、Windows SharePoint Services には、オブジェクト モデルを介してサーバー ファーム全体の実行中のワークフロー インスタンスを集中管理できる機能が用意されています。ファーム全体の実行中のワークフロー インスタンスを管理するには、SPWorkflowManager オブジェクトを使用します。ユーザー インターフェイスには、SPWorkflowManager オブジェクトと同等の機能はありません。オブジェクトは、SPSite オブジェクトを介してアクセスされますが、これを使用してファーム全体で実行中のワークフロー インスタンスを管理することができます。SPWorkflowManager オブジェクトを使用すると、次の処理が可能です。

  • ワークフローの開始、実行、または取り消し
  • 特定のアイテムで現在実行中のすべてのワークフローを返す
  • リスト内の特定のワークフロー テンプレートに基づくすべてのワークフロー インスタンスの取り消し
  • その他のワークフロー管理操作の実行

アイテムの特定のワークフロー (自動的に開始するように構成されていないワークフロー) を手動で開始するには、SPSite.WorkflowManager.StartWorkflow メソッドを使用します。このメソッドは、リスト アイテムの名前、ワークフロー テンプレートの名前、および開始イベントの 3 つのパラメータを取ります。

図 9 は、SPWorkflowManager オブジェクトの階層表示およびその中に含まれるオブジェクトを示しています。

SPWorkflowManager オブジェクトの階層

図 9. SPWorkflowManager オブジェクトの階層

まとめ

Windows SharePoint Services Version 3 は、シーケンシャル ワークフローまたはステート マシン ワークフローとして実装されるカスタム ビジネス プロセスを SharePoint アイテムに追加することを可能にする Windows Workflow Foundation をホストしています。この実装には、対話のためのフォームの統合を備えたカスタム ワークフローの作成機能が含まれます。SharePoint Server 2007 では、Word、PowerPoint、Excel、および InfoPath などの Office クライアント アプリケーションでホストできる InfoPath の対照的なフォームと統合することにより、これらのワークフローの機能を拡張します。

Microsoft では、Windows SharePoint Services のワークフローの作成用に 2 つの強力なツールを提供しています。Visual Studio 2005 Designer for Windows Workflow Foundation は、Visual Studio 2005 のアドインで、複数のサイトおよびリストに展開できるカスタム コードを備えたワークフロー テンプレートを開発できます。また、SharePoint Designer を使用してワークフロー アクティビティの定義済みのリストからリスト固有のワークフローを迅速に開発および展開することもできます。

いずれの場合でも、ワークフロー ソリューションの展開後に、Windows SharePoint Services オブジェクト モデルを使用してワークフロー プロセスへのクエリーを行ったり、プログラムによってワークフロー アクションを実行することができます。

その他の参考資料