このチュートリアルでは、基本的なシーケンシャル ワークフロー テンプレートを作成する方法について説明します。 ワークフローは、共有ドキュメント ライブラリのプロパティをチェックして、ドキュメントの校閲が終了しているかどうかを確認します。 ドキュメントの校閲が終了している場合、ワークフローは完了します。
このチュートリアルでは、次の作業について説明します。
SharePoint リスト定義シーケンシャル ワークフロー プロジェクトを Visual Studio で作成する。
ワークフロー アクティビティを作成する。
ワークフロー アクティビティのイベントを処理する。
注意
このチュートリアルではシーケンシャル ワークフロー プロジェクトを使用していますが、ステート マシン ワークフロー プロジェクトでも手順は同じです。
また、次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前または場所が異なる場合があります。 これらの要素は、使用する Visual Studio のエディションとその設定によって決まります。 詳細については、「設定の操作」を参照してください。
必須コンポーネント
このチュートリアルを実行するには、次のコンポーネントが必要です。
サポート対象エディションの Microsoft Windows および SharePoint。 詳細については、「SharePoint ソリューションの開発要件」を参照してください。
Visual Studio 2010.
SharePoint 共有ドキュメント ライブラリへのプロパティの追加
共有ドキュメント ライブラリでドキュメントの校閲ステータスを追跡するため、SharePoint サイトの共有ドキュメントに、Status、Assignee、および Review Comments という新しいプロパティを 3 つ作成します。 これらのプロパティは共有ドキュメント ライブラリで定義します。
SharePoint 共有ドキュメント ライブラリにプロパティを追加するには
Web ブラウザーで SharePoint サイトを開きます (http://<システム名>/SitePages/Home.aspx など)。
クイック起動バーの [共有ドキュメント] をクリックします。
[ライブラリ ツール] リボンの [ライブラリ] をクリックし、リボンの [列の作成] ボタンをクリックして、新しい列を作成します。
列に "Document Status" という名前を付け、そのタイプを [選択肢 (メニューから選択)] に設定します。次の 3 つのオプションを指定し、[OK] をクリックします。
Review Needed
Review Complete
Changes Requested
Assignee と Review Comments という名前でさらに 2 つの列を作成します。 [Assignee] 列はテキストを 1 行だけ表示するように設定し、[Review Comments] 列は複数行のテキストを表示するように設定します。
チェックアウトせずにドキュメントを編集できるようにする
チェックアウトせずにドキュメントを編集できると、ワークフロー テンプレートのテストが容易になります。 次の手順では、これを行うことができるように SharePoint サイトを構成します。
チェックアウトせずにドキュメントを編集できるようにするには
クイック起動バーの [共有ドキュメント] をクリックします。
[ライブラリ ツール] リボンの [ライブラリ] をクリックし、[ライブラリの設定] をクリックして、[ドキュメント ライブラリの設定] ページを表示します。
[全般設定] セクションの [バージョン設定] をクリックして、[バージョン設定] ページを表示します。
[ドキュメントを編集する前に必ずチェックアウトする] の設定が [いいえ] であることを確認します。 [いいえ] ではない場合、[いいえ] に変更し、[OK] をクリックします。
ブラウザーを閉じます。
SharePoint シーケンシャル ワークフロー プロジェクトの作成
シーケンシャル ワークフローは、最後のアクティビティが完了するまで順番に実行される一連の手順です。 この手順では、共有ドキュメント リストに適用するシーケンシャル ワークフローを作成します。 ワークフロー ウィザードを使用すると、サイト定義とリスト定義のいずれかにワークフローを関連付け、ワークフローを開始するタイミングを指定することができます。
SharePoint シーケンシャル ワークフロー プロジェクトを作成するには
Visual Studio を起動して、[ファイル] メニューの [新規作成] をポイントし、[新しいプロジェクト] ダイアログ ボックスを表示して、[プロジェクト] をクリックします。
[Visual C#] または [Visual Basic] の [SharePoint] ノードを展開して、[2010] をクリックします。
[テンプレート] ウィンドウでシーケンシャル ワークフローを選択します。
[名前] ボックスに「MySharePointWorkflow」と入力し、[OK] をクリックします。
SharePoint カスタマイズ ウィザードが表示されます。
[デバッグのサイトとセキュリティ レベルの指定] ページで、[次へ] をクリックして、既定のサイトと信頼レベルをそのまま使用します。
また、この段階で、ソリューションの信頼レベルがファーム ソリューション (ワークフロー プロジェクトではこれ以外は選択できません) として設定されます。 詳細については、「サンドボックス ソリューションの考慮事項」を参照してください。
[デバッグのワークフロー名の指定] ページで、既定の名前 (MySharePointWorkflow - Workflow1) を受け入れます。 既定のワークフロー テンプレートの種類である [リスト ワークフロー] を受け入れて、[次へ] をクリックします。
[デバッグ セッション中に Visual Studio によってワークフローが自動的に関連付けられるようにする] ページで、[次へ] をクリックして、すべての既定の設定をそのまま使用します。
この段階で、ワークフローが共有ドキュメント ライブラリに自動的に関連付けられます。
[ワークフローの開始方法に関する条件の指定] ページで、[ワークフローの開始方法] セクションで選択されている既定のオプションをそのままにして、[完了] をクリックします。
このページでは、ワークフローを開始するタイミングを指定できます。 既定では、ユーザーが SharePoint でワークフローを手動で開始すると、またはワークフローが関連付けられている項目が作成されると、ワークフローが開始します。
ワークフロー アクティビティの作成
ワークフローには、実行するアクションを表すアクティビティが 1 つ以上含まれています。 ワークフローのアクティビティを調整するには、ワークフロー デザイナーを使用します。 この手順では、HandleExternalEventActivity と OnWorkFlowItemChanged の 2 つのアクティビティをワークフローに追加します。 これらのアクティビティは、共有ドキュメント リスト内のドキュメントの校閲ステータスを監視します。
ワークフロー アクティビティを作成するには
ワークフロー デザイナーにワークフローが表示されている必要があります。 表示されていない場合は、ソリューション エクスプローラーで [Workflow1.cs] または [Workflow1.vb] をダブルクリックして開きます。
デザイナーで、OnWorkflowActivated1 アクティビティをクリックして選択します。
[プロパティ] ウィンドウで、[Invoked] プロパティの横に「onWorkflowActivated」と入力し、Enter キーを押します。
コード エディターが開き、onWorkflowActivated という名前のイベント ハンドラー メソッドが Workflow1 コード ファイルに追加されます。
ワークフロー デザイナーに戻り、ツールボックスを開いて、[Windows Workflow v3.0] ノードを展開します。
ツールボックスの [Windows Workflow v3.0] ノードから While アクティビティをドラッグし、onWorkflowActivated1 アクティビティの下の線につなげます。
WhileActivity1 アクティビティをクリックして選択します。
[プロパティ] ウィンドウで、[Condition] を [Code Condition] に設定します。
[Condition] プロパティを展開し、子の [Condition] プロパティの横に「isWorkflowPending」と入力して、Enter キーを押します。
コード エディターが開き、isWorkflowPending という名前のメソッドが Workflow1 コード ファイルに追加されます。
ワークフロー デザイナーに戻り、ツールボックスを開いて、[SharePoint ワークフロー] ノードを展開します。
ツールボックスの [SharePoint ワークフロー] ノードから 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 列の下にある値が In Progress に設定されていることを確認します。 これは、ワークフローが処理中であり、ドキュメントが校閲待ちの状態であることを示します。
[共有ドキュメント] ページで、ドキュメントをポイントし、下向きの矢印をクリックして、[プロパティの編集] をクリックします。
[Document Status] を [Review Complete] に設定し、[保存] をクリックします。
既定の SharePoint Web サイトの [共有ドキュメント] ページに戻ります。
[共有ドキュメント] ページで、MySharePointWorkflow 列の下にある値が Review Complete に設定されていることを確認します。 これは、ワークフローが完了し、ドキュメントが校閲済みであることを示します。
次の手順
ワークフロー テンプレートの作成方法の詳細については、以下のトピックを参照してください。
SharePoint ワークフロー アクティビティの詳細については、「Workflow Activities for SharePoint Foundation (SharePoint Foundation のワークフロー アクティビティ)」を参照してください。
Windows Workflow Foundation アクティビティの詳細については、「System.Workflow.Activities Namespace (System.Workflow.Activities 名前空間)」を参照してください。