このチュートリアルでは、サイト レベルのワークフローに使用するカスタム アクティビティを Visual Studio で作成する方法について説明します。サイト レベルのワークフローは、サイト上のリストだけでなく、サイト全体に適用されます。カスタム アクティビティによって、バックアップのお知らせリストが作成され、そこにお知らせリストの内容がコピーされます。
このチュートリアルでは、次のタスクを実行します。
サイト レベルのワークフローを作成する。
カスタム ワークフロー アクティビティを作成する。
SharePoint リストを作成および削除する。
リスト間で項目をコピーする。
クイック起動バーにリストを表示する。
[!メモ]
お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。
必須コンポーネント
このチュートリアルを実行するには、次のコンポーネントが必要です。
サポート対象エディションの Microsoft Windows および SharePoint。詳細については、「SharePoint ソリューションの開発要件」を参照してください。
Visual Studio
サイトのカスタム ワークフロー アクティビティ プロジェクトの作成
まず、カスタム ワークフロー アクティビティを格納し、テストするプロジェクトを作成します。
サイトのカスタム ワークフロー アクティビティ プロジェクトを作成するには
メニュー バーで、新しいプロジェクト のダイアログ ボックスを表示するに ファイル、新規作成、プロジェクト を選択します。
SharePoint のノードを [Visual C#] か Visual Basicの下に配置し、2010 のノードを選択します。
テンプレート のペインで、SharePoint 2010 プロジェクト テンプレートを選択します。
名前 ボックスに " AnnouncementBackup " を入力し、を OK のボタンをクリックします。
SharePoint カスタマイズ ウィザードが表示されます。
デバッグのサイトとセキュリティ レベルの指定 のページで、ファーム ソリューションとして配置する のオプション ボタンを選択し、信頼レベルと既定のサイトを受け入れるように 完了 のボタンをクリックします。
また、この段階で、ソリューションの信頼レベルがファーム ソリューション (ワークフロー プロジェクトではこれ以外は選択できません) として設定されます。
次に ソリューション エクスプローラーで、プロジェクト ノードを選択し、メニュー バーで、をクリックします プロジェクト、新しい項目の追加を選択します。
[Visual C#] か Visual Basicの下に、SharePoint のノードを展開し、2010 のノードを選択します。
テンプレート のペインで、シーケンシャル ワークフロー (ファーム ソリューションのみ) テンプレートを選択し、追加 のボタンをクリックします。
SharePoint カスタマイズ ウィザードが表示されます。
デバッグのワークフロー名の指定 のページで、既定の名前 (AnnouncementBackup - Workflow1) を受け入れます。ワークフロー テンプレートの種類を サイト ワークフローに変更し、次へ のボタンをクリックします。
残りの既定の設定をそのまま使用する場合 完了 のボタンをクリックします。
カスタム ワークフロー アクティビティ クラスの追加
次に、カスタム ワークフロー アクティビティのコードを記述するためのクラスをプロジェクトに追加します。
カスタム ワークフロー アクティビティ クラスを追加するには
メニュー バーで、新しい項目の追加 のダイアログ ボックスを表示するに プロジェクト、新しい項目の追加 を選択します。
インストールされているテンプレート のツリー ビューで、コード のノードを選択し、プロジェクト項目テンプレートの一覧の クラス テンプレートを選択します。既定の名前である Class1 を使用します。[追加] ボタンをクリックします。
Class1 のすべてのコードを次のコードに置き換えます。
Imports System Imports System.Collections.Generic Imports System.Linq Imports System.Text Imports Microsoft.SharePoint Namespace AnnouncementBackup ' This custom activity will back up all of the announcements ' in the Announcements list on the SharePoint site. Public Class Class1 Inherits System.Workflow.ComponentModel.Activity Public Sub New() MyBase.New() End Sub ' Triggers when the activity is executed. Protected Overrides Function Execute(ByVal executionContext As System.Workflow.ComponentModel.ActivityExecutionContext) As System.Workflow.ComponentModel.ActivityExecutionStatus Try ' Get a reference to the SharePoint site. Dim site As SPSite = New SPSite(("http://" + System.Environment.MachineName)) Dim web As SPWeb = site.OpenWeb("/") ' Reference the original Announcements list. Dim aList As SPList = web.GetList("/Lists/Announcements") ' If the Announcements Backup list already exists, delete it. Try Dim bList As SPList = web.GetList("/Lists/Announcements Backup") bList.Delete() Catch End Try ' Create a new backup Announcements list and reference it. Dim newAnnID As Guid = web.Lists.Add("Announcements Backup", "A backup Announcements list.", SPListTemplateType.Announcements) Dim bakList As SPList = web.Lists(newAnnID) ' Copy announcements from original to backup Announcements list. For Each item As SPListItem In aList.Items Dim newAnnItem As SPListItem = bakList.Items.Add For Each field As SPField In aList.Fields If Not field.ReadOnlyField Then newAnnItem(field.Id) = item(field.Id) End If Next newAnnItem.Update() Next ' Put the Backup Announcements list on the QuickLaunch bar. bakList.OnQuickLaunch = True bakList.Update() Catch errx As Exception System.Diagnostics.Debug.WriteLine(("Error: " + errx.ToString)) End Try Return MyBase.Execute(executionContext) End Function End Class End Namespaceusing System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.SharePoint; namespace AnnouncementBackup { // This custom activity will back up all of the announcements in // the Announcements list on the SharePoint site. public class Class1 : System.Workflow.ComponentModel.Activity { public Class1() { } // Triggers when the activity is executed. protected override System.Workflow.ComponentModel.ActivityExecutionStatus Execute(System.Workflow.ComponentModel.ActivityExecutionContext executionContext) { try { // Get a reference to the SharePoint site. SPSite site = new SPSite("http://" + System.Environment.MachineName); SPWeb web = site.OpenWeb("/"); // Reference the original Announcements list. SPList aList = web.GetList("/Lists/Announcements"); // If the Announcements Backup list already exists, delete it. try { SPList bList = web.GetList("/Lists/Announcements Backup"); bList.Delete(); } catch { } // Create a new backup Announcements list and reference it. Guid newAnnID = web.Lists.Add("Announcements Backup", "A backup Announcements list.", SPListTemplateType.Announcements); SPList bakList = web.Lists[newAnnID]; // Copy announcements from original to backup Announcements list. foreach (SPListItem item in aList.Items) { SPListItem newAnnItem = bakList.Items.Add(); foreach (SPField field in aList.Fields) { if (!field.ReadOnlyField) newAnnItem[field.Id] = item[field.Id]; } newAnnItem.Update(); } // Put the Backup Announcements list on the QuickLaunch bar. bakList.OnQuickLaunch = true; bakList.Update(); } catch (Exception errx) { System.Diagnostics.Debug.WriteLine("Error: " + errx.ToString()); } return base.Execute(executionContext); } } }次に、プロジェクトを保存し、メニュー バーで、ビルド、ソリューションのビルドを選択します。
Class1 が [AnnouncementBackup のコンポーネント] のタブの ツールボックス カスタム動作として表示されます。
サイトのワークフローへのカスタム アクティビティの追加
次に、カスタム コードを含んだアクティビティをワークフローに追加します。
サイトのワークフローにカスタム アクティビティを追加するには
ワークフロー デザイナーのデザイン ビューで Workflow1 を開きます。
onWorkflowActivated1 のアクティビティの下に表示されるドラッグ、または Class1 のショートカット メニューを開き、コピーを選択し、onWorkflowActivated1 のアクティビティの下に行のショートカット メニューを開き、を選択します。貼り付けように ツールボックス の Class1 が。
プロジェクトを保存します。
サイトのカスタム ワークフロー アクティビティのテスト
次に、プロジェクトを実行して、サイトのワークフローを開始します。カスタム アクティビティによって、バックアップのお知らせリストが作成され、そこに最新のお知らせリストの内容がコピーされます。このコードは、バックアップ リストの作成前に、既存のバックアップ リストが存在するかどうかもチェックします。既存のバックアップ リストが存在する場合は、それを削除します。また、このコードは、SharePoint サイトのクイック起動バーに新しいリストへのリンクを追加します。
サイトのカスタム ワークフロー アクティビティをテストするには
プロジェクトを実行し、SharePoint に配置するには、F5 キーを選択します。
クイック起動バーで、SharePoint サイトで使用できる一覧を表示するに リスト のリンクを選択します。**[お知らせ]**という名前のお知らせのリストが 1 つだけ表示されます。
SharePoint Web ページの一番上に、サイト ワークフロー のリンクを選択します。
新しいワークフローの開始] セクションで、[AnnouncementBackup – Workflow1] のリンクを選択します。これで、サイトのワークフローが開始されて、カスタム動作のコードが実行されます。
クイック起動バーで、[バックアップのお知らせ] のリンクを選択します。[お知らせ] ボックスにあるすべてのお知らせが、この新しいリストにコピーされていることがわかります。