次の方法で共有


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

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

このチュートリアルでは、次のタスクについて説明します。

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

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

  • SharePoint リストの作成と削除。

  • リスト間での項目のコピー。

  • クイック起動バーでのリストの表示。

    Note

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

必須コンポーネント

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

  • サポート対象エディションの Microsoft Windows および SharePoint。

  • Visual Studio.

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

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

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

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

  2. [Visual C#] または [Visual Basic][SharePoint] ノードを展開し、[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 内のすべてのコードを次のものに置き換えます。

    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. プロジェクトを保存してから、メニュー バーで [ビルド]>[ソリューションのビルド] を選択します。

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

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

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

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

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

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

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

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

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

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

  1. F5 キーを押し、プロジェクトを実行して SharePoint に配置します。

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

  3. SharePoint Web ページの上部にある [サイト ワークフロー] リンクを選択します。

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

  5. クイック起動バーの Announcements Backup リンクを選択します。 [お知らせ] リストに含まれているすべてのお知らせが、この新しいリストにコピーされていることに注目してください。