チュートリアル : SharePoint ワークフロー ソリューションの作成とデバッグ
このチュートリアルでは、基本的なシーケンシャル ワークフロー テンプレートを作成する方法について説明します。ワークフローは、共有ドキュメント ライブラリのプロパティをチェックして、ドキュメントの校閲が終了しているかどうかを確認します。ドキュメントの校閲が終了している場合、ワークフローは完了します。
このチュートリアルでは、次の作業について説明します。
SharePoint リスト定義シーケンシャル ワークフロー プロジェクトを Visual Studio で作成する。
ワークフロー アクティビティを作成する。
ワークフロー アクティビティのイベントを処理する。
[!メモ]
このチュートリアルではシーケンシャル ワークフロー プロジェクトを使用していますが、ステート マシン ワークフロー プロジェクトでも手順は同じです。
また、次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前または場所が異なる場合があります。これらの要素は、使用する Visual Studio のエディションとその設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。
必須コンポーネント
このチュートリアルを実行するには、次のコンポーネントが必要です。
サポート対象エディションの Microsoft Windows および SharePoint。詳細については、「SharePoint ソリューションの開発要件」を参照してください。
Visual Studio
SharePoint 共有ドキュメント ライブラリへのプロパティの追加
共有ドキュメント ライブラリでドキュメントの校閲ステータスを追跡するため、SharePoint サイトの共有ドキュメントに、Status、Assignee、および Review Comments という新しいプロパティを 3 つ作成します。これらのプロパティは共有ドキュメント ライブラリで定義します。
SharePoint 共有ドキュメント ライブラリにプロパティを追加するには
Web ブラウザーで SharePoint サイトを開きます (http://<システム名>/SitePages/Home.aspx など)。
クイック起動バーで、**共有される[ドキュメント]**を選択します。
[ライブラリ ツール] のリボン [ライブラリ] を選択し、新しい列を作成するに [列の作成] リボンのボタンをクリックします。
列のドキュメント状態を付け、**[選択肢 (メニューから選択)]**に型を設定し、次の 3 とおりの方法を指定し、を [OK] のボタンを選択する:
Review Needed
Review Complete
Changes Requested
Assignee と Review Comments という名前でさらに 2 つの列を作成します。[Assignee] 列はテキストを 1 行だけ表示するように設定し、[Review Comments] 列は複数行のテキストを表示するように設定します。
チェックアウトせずにドキュメントを編集できるようにする
チェックアウトせずにドキュメントを編集できると、ワークフロー テンプレートのテストが容易になります。次の手順では、これを行うことができるように SharePoint サイトを構成します。
チェックアウトせずにドキュメントを編集できるようにするには
クイック起動バーで、[共有ドキュメント] のリンクを選択します。
[ライブラリ ツール] のリボンで、[ライブラリ] のタブをクリックし、ドキュメント ライブラリの設定 のページを表示するに [ライブラリの設定] のボタンをクリックします。
[全般設定] のセクションでは、[バージョン設定] のページを表示するに [バージョン設定] のリンクを選択します。
[ドキュメントを編集する前に必ずチェックアウトする] の設定が [いいえ] であることを確認します。そうでない場合は、なし に変更し、[OK] のボタンをクリックします。
ブラウザーを閉じます。
SharePoint シーケンシャル ワークフロー プロジェクトの作成
シーケンシャル ワークフローは、最後のアクティビティが完了するまで順番に実行される一連の手順です。この手順では、共有ドキュメント リストに適用するシーケンシャル ワークフローを作成します。ワークフロー ウィザードを使用すると、サイト定義とリスト定義のいずれかにワークフローを関連付け、ワークフローを開始するタイミングを指定することができます。
SharePoint シーケンシャル ワークフロー プロジェクトを作成するには
Visual Studio を起動します。
メニュー バーで、[新しいプロジェクト] のダイアログ ボックスを表示するに [ファイル]、新規、[プロジェクト] を選択します。
[SharePoint] のノードを Visual C# か **[Visual Basic]**の下に配置し、2010 年 のノードを選択します。
[テンプレート] のペインで、[SharePoint 2010 プロジェクト] テンプレートを選択します。
[名前] ボックスに " MySharePointWorkflow " を入力し、を [OK] のボタンをクリックします。
SharePoint カスタマイズ ウィザードが表示されます。
[デバッグのサイトとセキュリティ レベルの指定] のページで、[ファーム ソリューションとして配置する] のオプション ボタンを選択し、信頼レベルと既定のサイトを受け入れるように [完了] のボタンをクリックします。
また、この段階で、ソリューションの信頼レベルがファーム ソリューション (ワークフロー プロジェクトではこれ以外は選択できません) として設定されます。詳細については、「サンドボックス ソリューションの考慮事項」を参照してください。
次に **[ソリューション エクスプローラー]で、プロジェクト ノードを選択し、メニュー バーで、をクリックします [プロジェクト]、[新しい項目の追加]**を選択します。
Visual C# か [Visual Basic]の下に、[SharePoint] のノードを展開し、2010 年 のノードを選択します。
[テンプレート] のペインで、[シーケンシャル ワークフロー (ファーム ソリューションのみ)] テンプレートを選択し、追加 のボタンをクリックします。
SharePoint カスタマイズ ウィザードが表示されます。
[デバッグのワークフロー名の指定] ページで、既定の名前 (MySharePointWorkflow - Workflow1) を受け入れます。既定のワークフロー テンプレートの種類である、**[リスト ワークフロー]**を保持し、次に 次へ のボタンをクリックします。
[デバッグ セッション中に Visual Studio によってワークフローが自動的に関連付けられるようにする] のページでは、すべての既定の設定をそのまま使用する場合 次へ のボタンをクリックします。
この段階で、ワークフローが共有ドキュメント ライブラリに自動的に関連付けられます。
[ワークフローの開始方法に関する条件の指定] のページで、既定のオプションを選択する [ワークフローの開始方法] のセクションのままにして、[完了] のボタンをクリックします。
このページでは、ワークフローを開始するタイミングを指定できます。既定では、ユーザーが SharePoint でワークフローを手動で開始すると、またはワークフローが関連付けられている項目が作成されると、ワークフローが開始します。
ワークフロー アクティビティの作成
ワークフローには、実行するアクションを表すアクティビティが 1 つ以上含まれています。ワークフローのアクティビティを調整するには、ワークフロー デザイナーを使用します。この手順では、HandleExternalEventActivity と OnWorkFlowItemChanged の 2 つのアクティビティをワークフローに追加します。これらのアクティビティは、共有ドキュメント リスト内のドキュメントの校閲ステータスを監視します。
ワークフロー アクティビティを作成するには
ワークフロー デザイナーにワークフローが表示されている必要があります。そうでない場合、**[ソリューション エクスプローラー]**の Workflow1.cs か Workflow1.vb を開きます。
デザイナーで、[onWorkflowActivated1] のアクティビティを選択します。
[プロパティ] のペインで、呼び出される のプロパティの横に onWorkflowActivated " " と入力し、Enter キーを選択します。
コード エディターが開き、onWorkflowActivated という名前のイベント ハンドラー メソッドが Workflow1 コード ファイルに追加されます。
ワークフロー デザイナーに戻り、ツールボックスを開いて、[Windows Workflow v3.0] ノードを展開します。
**[ツールボックス]**の Windows Workflow v3.0 のノードで、次のいずれかの手順 1 を実行します:
間 アクティビティのショートカット メニューを開き、**[コピー]を選択します。ワークフロー デザイナーで、行のショートカット メニューを [onWorkflowActivated1] のアクティビティの下で開き、[貼り付け]**を選択します。
[ツールボックス] からワークフロー デザイナーに 間 のアクティビティをドラッグして線に [onWorkflowActivated1] のアクティビティの下でアクティビティを接続します。
[whileActivity1] のアクティビティを選択します。
[プロパティ] のウィンドウで、をコードに [条件] を設定します。
[条件] のプロパティを展開し、子の [条件] のプロパティの横に " isWorkflowPending " と入力し、Enter キーを選択します。
コード エディターが開き、isWorkflowPending という名前のメソッドが Workflow1 コード ファイルに追加されます。
ワークフロー デザイナーに戻り、ツールボックスを開いて、[SharePoint ワークフロー] ノードを展開します。
**[ツールボックス]**の [SharePoint ワークフロー] のノードで、次のいずれかの手順 1 を実行します:
OnWorkflowItemChanged アクティビティのショートカット メニューを開き、[コピー]を選択します。ワークフロー デザイナーで、[whileActivity1] のアクティビティ内の行のショートカット メニューを開き、**[貼り付け]**を選択します。
[ツールボックス] からワークフロー デザイナーに OnWorkflowItemChanged のアクティビティをドラッグし、[whileActivity1] のアクティビティ内の行にアクティビティを接続します。
onWorkflowItemChanged1 のアクティビティを選択します。
[プロパティ] ウィンドウで、次の表に示すようにプロパティを設定します。
プロパティ
値
CorrelationToken
workflowToken
Invoked
onWorkflowItemChanged
アクティビティのイベントの処理
最後に、各アクティビティからドキュメントのステータスをチェックします。ドキュメントの校閲が終了している場合、ワークフローは完了します。
アクティビティのイベントを処理するには
Workflow1.cs または Workflow1.vb で、Workflow1 クラスの先頭に次のフィールドを追加します。アクティビティ内のこのフィールドを使用して、ワークフローを完了させるかどうかを判断します。
Dim workflowPending As Boolean = True
Boolean workflowPending = true;
Workflow1 クラスに次のメソッドを追加します。このメソッドは、Documents リストの Document Status プロパティの値をチェックして、ドキュメントの校閲が終了しているかどうかを確認します。Document Status プロパティが Review Complete に設定されている場合、checkStatus メソッドは workflowPending フィールドに false を設定し、ワークフロー完了の準備が整っていることを示します。
Private Sub checkStatus() If CStr(workflowProperties.Item("Document Status")) = "Review Complete" Then workflowPending = False End If End Sub
private void checkStatus() { if ((string)workflowProperties.Item["Document Status"] == "Review Complete") workflowPending = false; }
onWorkflowActivated メソッドと onWorkflowItemChanged メソッドに次のコードを追加して、checkStatus メソッドを呼び出します。ワークフローが開始すると、onWorkflowActivated メソッドは checkStatus メソッドを呼び出して、ドキュメントの校閲が既に行われているかどうかを確認します。まだ校閲が行われていない場合は、ワークフローは続行します。ドキュメントが保存されると、onWorkflowItemChanged メソッドはもう一度 checkStatus メソッドを呼び出して、ドキュメントの校閲が行われたかどうかを確認します。workflowPending フィールドが true に設定されている間は、ワークフローは処理を続行します。
Private Sub onWorkflowActivated(ByVal sender As System.Object, ByVal e As System.Workflow.Activities.ExternalDataEventArgs) checkStatus() End Sub Private Sub onWorkflowItemChanged(ByVal sender As System.Object, ByVal e As System.Workflow.Activities.ExternalDataEventArgs) checkStatus() End Sub
private void onWorkflowActivated(object sender, ExternalDataEventArgs e) { // Check the status. checkStatus(); } private void onWorkflowItemChanged(object sender, ExternalDataEventArgs e) { // Check the status. checkStatus(); }
isWorkflowPending メソッドに次のコードを追加して、workflowPending プロパティのステータスをチェックします。ドキュメントが保存されるたびに、whileActivity1 アクティビティは isWorkflowPending メソッドを呼び出します。このメソッドは、ConditionalEventArgs オブジェクトの Result プロパティを調べて、WhileActivity1 アクティビティを続行すべきか完了すべきかを判断します。プロパティが true に設定されていると、アクティビティは続行します。それ以外の場合は、アクティビティが完了し、ワークフローも完了します。
Private Sub isWorkflowPending(ByVal sender As System.Object, ByVal e As System.Workflow.Activities.ConditionalEventArgs) e.Result = workflowPending End Sub
private void isWorkflowPending(object sender, ConditionalEventArgs e) { e.Result = workflowPending; }
プロジェクトを保存します。
SharePoint ワークフロー テンプレートのテスト
デバッガーを起動すると、ワークフロー テンプレートが Visual Studio によって SharePoint サーバーに配置され、ワークフロー が共有ドキュメント リストに関連付けられます。ワークフローをテストするため、共有ドキュメント リスト内のドキュメントからワークフローのインスタンスを起動します。
SharePoint ワークフロー テンプレートをテストするには
Workflow1.cs または Workflow1.vb で onWorkflowActivated メソッドの横にブレークポイントを設定します。
ソリューションをビルドして実行するには、F5 キーを選択します。
SharePoint サイトが表示されます。
SharePoint のナビゲーション ペインで、[共有ドキュメント] のリンクを選択します。
[共有ドキュメント] のページで、[ライブラリ ツール] のタブの [ドキュメント] のリンクを選択し、[ドキュメントのアップロード] のボタンをクリックします。
[ドキュメントのアップロード] のダイアログ ボックスで、[参照] のボタンを選択し、ドキュメント ファイルを選択し、[開く] のボタンを選択し、を [OK] のボタンをクリックします。
選択されたドキュメントが共有ドキュメント リストにアップロードされ、ワークフローが開始します。
Visual Studio で、onWorkflowActivated メソッドの横に指定したブレークポイントでデバッガーが停止することを確認します。
実行を継続するには、F5 キーを選択します。
ドキュメントの設定をここに変更できますが、既定で 上書き保存 のボタンをクリックして、それらをのまま
既定の SharePoint Web サイトの [共有ドキュメント] ページに戻ります。
[共有ドキュメント] のページで、MySharePointWorkflow – Workflow1 の列の値が **[実行中]**に設定されていることを確認します。これは、ワークフローが処理中であり、ドキュメントが校閲待ちの状態であることを示します。
[共有ドキュメント] のページで、ドキュメントを選択し、次に、表示される選択します [プロパティの編集] のメニュー項目を選択し、矢印が。
[ドキュメントの状態] を 完全なレビューに設定し、上書き保存 のボタンをクリックします。
既定の SharePoint Web サイトの [共有ドキュメント] ページに戻ります。
[共有ドキュメント] のページで、[ドキュメントの状態] の列の値が 完全なレビューに設定されていることを確認します。[共有ドキュメント] のページの更新、MySharePointWorkflow – Workflow1 の列の値が 完了に設定されていることを確認します。これは、ワークフローが完了し、ドキュメントが校閲済みであることを示します。
次の手順
ワークフロー テンプレートの作成方法の詳細については、以下のトピックを参照してください。
SharePoint ワークフロー アクティビティの詳細については、「Workflow Activities for SharePoint Foundation (SharePoint Foundation のワークフロー アクティビティ)」を参照してください。
Windows Workflow Foundation アクティビティの詳細については、「System.Workflow.Activities Namespace (System.Workflow.Activities 名前空間)」を参照してください。