チュートリアル: サイトのカスタム ワークフロー アクティビティの作成

このチュートリアルでは、サイト レベルのワークフローに使用するカスタム アクティビティを Visual Studio で作成する方法について説明します。サイト レベルのワークフローは、サイト上のリストだけでなく、サイト全体に適用されます。カスタム アクティビティによって、バックアップのお知らせリストが作成され、そこにお知らせリストの内容がコピーされます。

このチュートリアルでは、次のタスクを実行します。

  • サイト レベルのワークフローを作成する。

  • カスタム ワークフロー アクティビティを作成する。

  • SharePoint リストを作成および削除する。

  • リスト間で項目をコピーする。

  • クイック起動バーにリストを表示する。

[!メモ]

お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。

必須コンポーネント

このチュートリアルを実行するには、次のコンポーネントが必要です。

サイトのカスタム ワークフロー アクティビティ プロジェクトの作成

まず、カスタム ワークフロー アクティビティを格納し、テストするプロジェクトを作成します。

サイトのカスタム ワークフロー アクティビティ プロジェクトを作成するには

  1. メニュー バーで、新しいプロジェクト のダイアログ ボックスを表示するに ファイル新規作成プロジェクト を選択します。

  2. SharePoint のノードを [Visual C#]Visual Basicの下に配置し、2010 のノードを選択します。

  3. テンプレート のペインで、SharePoint 2010 プロジェクト テンプレートを選択します。

  4. 名前 ボックスに " AnnouncementBackup " を入力し、を OK のボタンをクリックします。

    SharePoint カスタマイズ ウィザードが表示されます。

  5. デバッグのサイトとセキュリティ レベルの指定 のページで、ファーム ソリューションとして配置する のオプション ボタンを選択し、信頼レベルと既定のサイトを受け入れるように 完了 のボタンをクリックします。

    また、この段階で、ソリューションの信頼レベルがファーム ソリューション (ワークフロー プロジェクトではこれ以外は選択できません) として設定されます。

  6. 次に ソリューション エクスプローラーで、プロジェクト ノードを選択し、メニュー バーで、をクリックします プロジェクト新しい項目の追加を選択します。

  7. [Visual C#]Visual Basicの下に、SharePoint のノードを展開し、2010 のノードを選択します。

  8. テンプレート のペインで、シーケンシャル ワークフロー (ファーム ソリューションのみ) テンプレートを選択し、追加 のボタンをクリックします。

    SharePoint カスタマイズ ウィザードが表示されます。

  9. デバッグのワークフロー名の指定 のページで、既定の名前 (AnnouncementBackup - Workflow1) を受け入れます。ワークフロー テンプレートの種類を サイト ワークフローに変更し、次へ のボタンをクリックします。

  10. 残りの既定の設定をそのまま使用する場合 完了 のボタンをクリックします。

カスタム ワークフロー アクティビティ クラスの追加

次に、カスタム ワークフロー アクティビティのコードを記述するためのクラスをプロジェクトに追加します。

カスタム ワークフロー アクティビティ クラスを追加するには

  1. メニュー バーで、新しい項目の追加 のダイアログ ボックスを表示するに プロジェクト新しい項目の追加 を選択します。

  2. インストールされているテンプレート のツリー ビューで、コード のノードを選択し、プロジェクト項目テンプレートの一覧の クラス テンプレートを選択します。既定の名前である Class1 を使用します。[追加] ボタンをクリックします。

  3. 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 Namespace
    
    using 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);
            }
    
    
        }
    }
    
  4. 次に、プロジェクトを保存し、メニュー バーで、ビルドソリューションのビルドを選択します。

    Class1 が [AnnouncementBackup のコンポーネント] のタブの ツールボックス カスタム動作として表示されます。

サイトのワークフローへのカスタム アクティビティの追加

次に、カスタム コードを含んだアクティビティをワークフローに追加します。

サイトのワークフローにカスタム アクティビティを追加するには

  1. ワークフロー デザイナーのデザイン ビューで Workflow1 を開きます。

  2. onWorkflowActivated1 のアクティビティの下に表示されるドラッグ、または Class1 のショートカット メニューを開き、コピーを選択し、onWorkflowActivated1 のアクティビティの下に行のショートカット メニューを開き、を選択します。貼り付けように ツールボックス の Class1 が。

  3. プロジェクトを保存します。

サイトのカスタム ワークフロー アクティビティのテスト

次に、プロジェクトを実行して、サイトのワークフローを開始します。カスタム アクティビティによって、バックアップのお知らせリストが作成され、そこに最新のお知らせリストの内容がコピーされます。このコードは、バックアップ リストの作成前に、既存のバックアップ リストが存在するかどうかもチェックします。既存のバックアップ リストが存在する場合は、それを削除します。また、このコードは、SharePoint サイトのクイック起動バーに新しいリストへのリンクを追加します。

サイトのカスタム ワークフロー アクティビティをテストするには

  1. プロジェクトを実行し、SharePoint に配置するには、F5 キーを選択します。

  2. クイック起動バーで、SharePoint サイトで使用できる一覧を表示するに リスト のリンクを選択します。**[お知らせ]**という名前のお知らせのリストが 1 つだけ表示されます。

  3. SharePoint Web ページの一番上に、サイト ワークフロー のリンクを選択します。

  4. 新しいワークフローの開始] セクションで、[AnnouncementBackup – Workflow1] のリンクを選択します。これで、サイトのワークフローが開始されて、カスタム動作のコードが実行されます。

  5. クイック起動バーで、[バックアップのお知らせ] のリンクを選択します。[お知らせ] ボックスにあるすべてのお知らせが、この新しいリストにコピーされていることがわかります。

参照

処理手順

方法: イベント レシーバーを作成する

その他の技術情報

SharePoint ソリューションの開発