次の方法で共有


カスタム データの SharePoint ツールの拡張機能への関連付け

SharePoint ツールの拡張機能に含まれる特定のオブジェクトにカスタム データを追加できます。これは、拡張機能の他のコードから後でアクセスするデータが拡張機能の一部にある場合に役立ちます。データを格納したりデータにアクセスしたりする方法をカスタマイズして実装する代わりに、データを拡張機能のオブジェクトに関連付けることで、後で同じオブジェクトからデータを取得できます。

オブジェクトにカスタム データを追加すると、Visual Studio の特定の項目に関連するデータを保持する場合にも役立ちます。Visual Studio に SharePoint ツールの拡張機能が読み込まれるのは 1 回だけであるため、拡張機能は、いつでも、複数の異なる項目 (プロジェクト、プロジェクト項目、Server Explorer のノードなど) を処理している可能性があります。特定の項目だけに関連するカスタム データを使用する場合は、その項目を表すオブジェクトにカスタム データを追加できます。

SharePoint ツールの拡張機能に含まれるオブジェクトにカスタム データを追加した場合、データは保持されません。データは、オブジェクトの有効期間中にのみ使用できます。ガベージ コレクションでオブジェクトがクリアされると、データは失われます。

SharePoint プロジェクト システムの拡張機能では、拡張機能のアンロード後も保持される文字列データを保存することもできます。詳細については、「SharePoint プロジェクト システムの拡張機能におけるデータの保存」を参照してください。

カスタム データを格納できるオブジェクト

IAnnotatedObject インターフェイスを実装する SharePoint ツールのオブジェクト モデルのすべてのオブジェクトにカスタム データを追加できます。このインターフェイスは、カスタム データ オブジェクトのコレクションである 1 つのプロパティ Annotations だけを定義します。以下の型は IAnnotatedObject を実装します。

カスタム データの追加および取得

カスタム データを SharePoint ツールの拡張機能のオブジェクトに追加するには、カスタム データを追加するオブジェクトの Annotations プロパティを取得してから、IAnnotationDictionary.Add() メソッドを使用してカスタム データをオブジェクトに追加します。

SharePoint ツール拡張機能でオブジェクトからカスタム データを取得するには、オブジェクトの Annotations を取得し、次のいずれかのメソッドを使用します。

  • IAnnotationDictionary.TryGetValue().このメソッドは、データ オブジェクトが存在する場合は true を返し、データ オブジェクトが存在しない場合は false を返します。このメソッドを使用すると、値の型または参照型のインスタンスを取得できます。

  • IAnnotationDictionary.GetValue().このメソッドは、データ オブジェクトが存在する場合にはデータ オブジェクトを返し、データ オブジェクトが存在しない場合には null を返します。このメソッドは、参照型のインスタンスを取得する場合のみ使用できます。

特定のデータ オブジェクトが既にプロジェクト項目に関連付けられているかどうかを確認する方法を次のコード例に示します。データ オブジェクトがプロジェクト項目にまだ関連付けられていない場合は、プロジェクト項目の Annotations プロパティにデータ オブジェクトを追加します。この例のコンテキストを確認するには、「方法: プロパティをカスタムの SharePoint プロジェクト項目の種類に追加する」を参照してください。

Private Sub ProjectItemPropertiesRequested(ByVal Sender As Object,
    ByVal e As SharePointProjectItemPropertiesRequestedEventArgs)
    Dim propertyObject As CustomProperties = Nothing

    ' If the properties object already exists, get it from the project item's annotations.
    If False = e.ProjectItem.Annotations.TryGetValue(propertyObject) Then
        ' Otherwise, create a new properties object and add it to the annotations.
        propertyObject = New CustomProperties(e.ProjectItem)
        e.ProjectItem.Annotations.Add(propertyObject)
    End If
    e.PropertySources.Add(propertyObject)
End Sub
void projectItemTypeDefinition_ProjectItemPropertiesRequested(object sender, 
    SharePointProjectItemPropertiesRequestedEventArgs e)
{
    CustomProperties property;

    // If the properties object already exists, get it from the project item's annotations.
    if (!e.ProjectItem.Annotations.TryGetValue(out property))
    {
        // Otherwise, create a new properties object and add it to the annotations.
        property = new CustomProperties(e.ProjectItem);
        e.ProjectItem.Annotations.Add(property);
    }

    e.PropertySources.Add(property);
}

参照

処理手順

チュートリアル: 項目テンプレートに基づくカスタム動作プロジェクト項目の作成 (パート 1)

チュートリアル: サーバー エクスプローラーを拡張して Web パーツを表示する

概念

SharePoint ツール拡張機能におけるプログラミングに関する概念および特徴

方法: SharePoint プロジェクトにプロパティを追加する

方法: プロパティをカスタムの SharePoint プロジェクト項目の種類に追加する