サンドボックス ソリューションでワークフロー アクションを作成および展開する

ここでは、サンドボックス ソリューションでカスタム ワークフロー アクションを作成および展開する方法について説明します。

最終更新日: 2011年4月13日

適用対象: SharePoint Foundation 2010

SharePoint Online で使用可能

展開したカスタム ワークフロー アクションは、Microsoft SharePoint Designer などの宣言型ワークフロー デザイナーで使用できます。

ヒントヒント

他の例については、「How to: Create a Sandboxed Workflow Action」を参照してください。

カスタム ワークフロー アクションをサイト コレクションのユーザーが SharePoint Designer で使用できるようにする必要がある場合、ファーム ソリューションをインストールする権限がないときは、サンドボックス ソリューションにアクションをインストールします。そのプロセスは、ファーム ソリューションでカスタム ワークフロー アクションを作成およびインストールする方法と 2 つの点で異なります。

  • ワークフロー エンジンで呼び出され、セキュリティで保護されたワーカー プロセスで実行されるカスタム クラスとメソッドを作成する必要があります。このメソッドは、カスタム ワークフロー アクションのワークフロー アクティビティを構成します。

  • SharePoint Designer のワークフロー アクションを定義する宣言型マークアップがフィーチャー マニフェストでコンテンツ データベースに展開されます。.actions ファイルでフロントエンド Web サーバーのファイル システムに展開されるのではありません。フィーチャー マニフェストで使用される WorkflowActions マークアップは, .actions ファイルで使用される WorkflowInfo マークアップとはある程度異なります。

アクティビティ メソッドを作成するには

  1. Microsoft Visual Studio SharePoint プロジェクトを開始します。空の SharePoint プロジェクトを含め、サンドボックス ソリューションで許可されている任意のプロジェクトの種類を使用できます (Business Data Connectivity モデルサイト テンプレート視覚的 Web パーツシーケンシャル ワークフロー、またはステート マシンのワークフローは使用できません)。

  2. ソリューション エクスプローラーで .feature ファイルをダブルクリックし、フィーチャー デザイナーを開きます。

  3. フィーチャー デザイナーで、[範囲] を [Site] に設定します。

  4. [クラス] アイテムをプロジェクトに追加します。

  5. クラスと名前空間に適切な名前を付けて、System.CollectionsMicrosoft.SharePoint、および Microsoft.SharePoint.UserCode について using ステートメントを追加します。

  6. カスタム ワークフロー アクティビティのロジックが格納されるメソッドをクラス内で宣言します。この宣言方法には以下の制限があります。

    • public である必要があります。

    • static である必要があります。

    • Hashtable オブジェクトを返す必要があります。

    • 最初のパラメーターとして SPUserCodeWorkflowContext オブジェクトを取る必要があります (必要に応じて追加のパラメーターを指定できます)。

    この段階での内容の例を次に示します。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using System.Collections;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.UserCode;
    
    namespace Contoso.SharePoint.Workflow.Actions
    {
        class ListCreation
        {
            public static Hashtable CreateList(SPUserCodeWorkflowContext context, String listTitle, String listDescription, String listType)
            {
    
            }
        }
    }
    
  7. メソッド内でアクティビティのロジックを指定します。

    重要重要

    このメソッドは、セキュリティで保護されたワーカー プロセス内で実行されるので、そのプロセス内で実行できる操作に対する制限に従う必要があります。たとえば、コードは、現在のサイト コレクション外にアクセスできません。また、サーバーのファイル システムに対しては読み取りも書き込みも行えません。詳細については、「サンドボックス ソリューションに対する制限」を参照してください。

    前の例の続きを次に示します。

    public static Hashtable CreateList(SPUserCodeWorkflowContext context, String listTitle, String listDescription, String listType)
    {
        using (SPSite siteCollection = new SPSite(context.SiteUrl))
        {
            SPWeb currentWeb = siteCollection.OpenWeb(context.WebUrl);  
            SPListTemplateCollection availableListTypes = currentWeb.ListTemplates;
            SPListTemplate listTemplate = availableListTypes[listType];
            Guid listID = currentWeb.Lists.Add(listTitle, listDescription, listTemplate);
            Hashtable result = new Hashtable();
            result["ListID"] = listID.ToString();
            return result;
        }
    }
    

WorkflowActions マークアップを作成するには

  1. プロジェクトで、Visual Studio の [SharePoint 2010] テンプレートから [空の要素] アイテムを追加します。

  2. ソリューション エクスプローラーで Elements.xml ファイルを開きます。

  3. WorkflowActions 要素を Elements 要素の子として追加します。

  4. Action 子要素を WorkflowActions 要素に追加し、その属性を設定します。次に例を示します。

    <Action Name="Create a List" 
            SandboxedFunction="true" 
            Assembly="$SharePoint.Project.AssemblyFullName$" 
            ClassName="Contoso.SharePoint.Workflow.Actions.ListCreation" 
            FunctionName="CreateList" 
            AppliesTo="all" 
            UsesCurrentItem="true"
            Category="Contoso Actions">
    </ Action>
    
  5. RuleDesigner 子を Actions 要素に追加し、その Sentence 属性を指定します。

    <RuleDesigner Sentence="Create a %1 list named %2, and described as %3">
    
    </RuleDesigner>
    
  6. Sentence の変数フィールドごとに、FieldBind 子要素を追加し、その属性を構成します。

    <RuleDesigner Sentence="Create a %1 list named %2, and described as %3">
      <FieldBind Id="1" Field="listType" DesignerType="Text" Text="list type"/>
      <FieldBind Id="2" Field="listTitle" DesignerType="Text" Text="list name"/>
      <FieldBind Id="3" Field="listDescription" DesignerType="Text" Text="description"/>
    </RuleDesigner>
    

    注意

    前の例の RuleDesigner では、アクティビティ メソッドで返された Hashtable は使用されませんが、規則内で戻り値を使用できます。この場合、RuleDesigner 要素に戻り値に対する FieldBind 要素が必要です。たとえば、"Result: %4" を Action 要素の Sentence 属性に追加し、追加の FieldBind 要素を追加します (例: <FieldBind Id="4" Field="result" DesignerType="Text" Text="ID of new list"/>)。

    注意注意

    Sentence で参照されないパラメーターに対して FieldBind 要素を追加しないでください。追加してもワークフロー アクションが展開できなくなることはありませんが、ユーザーがワークフロー内でそのアクションを使用しようとすると、修正できないエラーがそのユーザーに表示されます。

  7. ワークフロー エンジンは独自のコードではなくカスタム アクティビティ メソッドを呼び出すので、そのメソッドのパラメーターについて通知する必要があります。Parameter 要素 (WorkflowActions) を Action 要素に追加します。

  8. 定義されている最初のパラメーターは常に必須 SPUserCodeWorkflowContext パラメーターで、そのマークアップは常に同じです。この例を次に示します。

    <Parameters>
      <Parameter Name="__Context" Type="Microsoft.SharePoint.WorkflowActions.WorkflowContext, Microsoft.SharePoint.WorkflowActions" Direction="In" DesignerType="Hide" />
    </Parameters>
    

    型は Microsoft.SharePoint.UserCode.SPUserCodeWorkflowContext ではなく Microsoft.SharePoint.WorkflowActions.WorkflowContext として識別されます。これは、ワークフロー エンジンが、WorkflowContext オブジェクトのプロパティ値から SPUserCodeWorkflowContext オブジェクトを生成するからです。

  9. RuleDesigner 要素に追加した各 FieldBind 要素の他の Parameter 要素を追加します。Parameter 要素の Name 属性は、対応する FieldBind 要素の Field 属性の値と一致している必要があります。例の続きを次に示します。

    <Parameters>
      <Parameter Name="__Context" Type="Microsoft.SharePoint.WorkflowActions.WorkflowContext, Microsoft.SharePoint.WorkflowActions" Direction="In" DesignerType="Hide" />
      <Parameter Name="listType" Type="System.String, mscorlib" Direction="In" DesignerType="TextBox"/>
      <Parameter Name="listTitle" Type="System.String, mscorlib" Direction="In" DesignerType="TextBox" />
      <Parameter Name="listDescription" Type="System.String, mscorlib" Direction="In" DesignerType="TextBox" />
    </Parameters>
    

    注意

    戻り値の FieldBind 要素がある場合、その戻り値には Parameter 要素も必要です。Parameter の Direction 属性は "Out" です (例: <Parameter Name="result" Type="System.String, mscorlib" Direction="Out" DesignerType="ParameterNames" />)。

  10. ソリューションを構築およびパッケージ化し、SharePoint ソリューション パッケージ (.wsp ファイル) をサイト コレクション管理者が利用できるようにします。

ワークフロー アクションをサイト コレクションに展開するには

  • サンドボックス ソリューション は、サイト コレクション管理者がインストールおよび展開します。サイト コレクション管理者は、このソリューションをサイト コレクションのソリューション ギャラリーにインストールします。この処理は、2 つの手順で実行されます。

    1. サイト コレクション管理者がソリューション パッケージをギャラリーにアップロードします。

    2. サイト コレクション管理者がパッケージを展開します。これは、サンドボックス ソリューションでは "アクティブ化" と呼ばれます。この手順により、パッケージ内のすべてのフィーチャーが自動的にアクティブ化されます。ソリューションの検証機能がサイト コレクションに登録されている場合は、その機能もアクティブ化 (展開) ステージで実行されます。

    ソリューションが検証を通過し、ファーム管理者によってブロックされていない場合、そのソリューションはサイト コレクションで使用する準備ができています。

ワークフロー アクションをテストするには

  1. ソリューションのフィーチャーがアクティブ化されている Web サイトを開きます。

  2. [サイトの操作] メニューで [SharePoint Designer で編集] を選択します。

  3. 新しいワークフロー アクションを使用するワークフローを作成し、テストします。この例でワークフロー アクションをテストする手順を次に示します。

    1. SharePoint Designer で、お知らせリストが含まれる Web サイトを開き、ナビゲーション ウィンドウで [ワークフロー] をクリックします。

    2. リボンで [リスト ワークフロー] をクリックし、ドロップダウン リストから [お知らせ] を選択します。

    3. [リスト ワークフローの作成] ダイアログ ボックスの [名前] ボックスに「Return From Trade Show」と入力し、[OK] をクリックします。

    4. ワークフロー デザイン画面でリボンの [条件] をクリックし、ドロップダウン リストから [現在のアイテム フィールドと値が等しいかどうか] を選択します。手順 1. に [フィールドが値に等しい] という条件が表示されます。

    5. [フィールド] リンクをクリックし、ドロップダウン リストで [タイトル] を選択します。

    6. [に等しい] リンクをクリックし、ドロップダウン リストで [で終わる] を選択します。

    7. [] リンクをクリックし、表示されたテキスト ボックスに「trade show」と入力して、Enter キーを押します。

    8. 条件の下にある入力を開始する領域をクリックし、フォーカスを与えます。

    9. リボンで [アクション] をクリックします。ドロップダウン リストに新しいカテゴリ [Contoso Actions] が表示され、リストに新しいアクション [リストの作成] が表示されます。

    10. [リストの作成] を選択します。Action 要素で定義した "sentence" が表示されます。

    11. [リストの種類] リンクをクリックし、表示されたテキスト ボックスに「Contacts」と入力して、Enter キーを押します。

    12. [リスト名] リンクをクリックし、省略記号ボタン (...) をクリックして、[文字列ビルダー] ダイアログ ボックスを開きます。

    13. テキスト ボックスに「Contacts met at」(末尾にスペースが必要) と入力します。

    14. [参照の追加または変更] をクリックします。[文字列の参照] ダイアログ ボックスが表示されます。

    15. [データ ソース] ボックスの一覧で [現在のアイテム] を選択します。

    16. [ソースのフィールド] ボックスの一覧で [タイトル] を選択します。

    17. [OK] をクリックしてダイアログ ボックスを閉じ、もう一度 [OK] をクリックして [文字列ビルダー] ダイアログ ボックスを閉じます。

    18. [説明] リンクをクリックし、省略記号ボタン (...) をクリックして、[文字列ビルダー] ダイアログ ボックスを開きます。

    19. テキスト ボックスに「These are contacts we made at the」(末尾にスペースが必要) と入力します。

    20. [参照の追加または変更] をクリックします。[文字列の参照] ダイアログ ボックスが表示されます。

    21. [データ ソース] ボックスの一覧で [現在のアイテム] を選択します。

    22. [ソースのフィールド] ボックスの一覧で [タイトル] を選択します。

    23. [OK] をクリックしてダイアログ ボックスを閉じ、もう一度 [OK] をクリックして [文字列ビルダー] ダイアログ ボックスを閉じます。

      "Contacts met at [%Current Item:Title%] という名前の Contacts リストを作成し、These are contacts we met at [%Current Item:Title%] という説明を指定する" というアクションが示されます。

    24. リボンで [エラーのチェック] をクリックし、レポートされているエラーを修正します。

    25. リボンで [ワークフローの設定] をクリックします。

    26. [開始オプション] 領域で [アイテムが作成されたときにワークフローを自動的に開始する] を有効にします。

    27. リボンで [保存] をクリックします。

    28. リボンで [発行] をクリックします。

    29. SharePoint Designer を閉じます。

    30. ブラウザーで、ワークフローを発行した Web サイトを開き、お知らせリストに移動します。

    31. [新しいお知らせの追加] をクリックします。

    32. [タイトル] で「Berlin trade show」と入力し、[保存] をクリックします。

    33. お知らせリスト ページを更新します。リストに [Return from Trade Show] が表示されます。新しいアイテムの値は [進行中] または [完了] です。

    34. [Return from Trade Show] ワークフローが [完了] になるまでページを更新し続けます。

    35. ナビゲーション ウィンドウで [リスト] または [すべてのサイト コンテンツ] をクリックします。名前が "Contacts met at Berlin trade show"、説明が "These are contacts we made at the Berlin trade show" の新しいリストが示されます。

関連項目

概念

サンドボックス ソリューションで実装できるコンポーネント

サンドボックス ソリューションに対する制限

サンドボックス ソリューションのアーキテクチャ