機能アップグレード オブジェクト モデル

最終更新日: 2010年7月9日

適用対象: SharePoint Foundation 2010

この記事の内容
FeatureUpgrading イベント
Version プロパティ
QueryFeatures メソッド
Upgrade メソッド

機能アップグレードの機能を提供するために、新しい型とメンバーが Microsoft SharePoint Foundation オブジェクト モデルに追加されました。それらは以下のとおりです。

  • FeatureUpgrading イベント

  • Version プロパティ

  • QueryFeatures メソッド

  • Upgrade メソッド

FeatureUpgrading イベント

機能レシーバー (SPFeatureReceiver) を使用して、FeatureUpgrading(SPFeatureReceiverProperties, String, IDictionary<String, String>) イベントを処理できるようになりました。独自のカスタム機能レシーバーを実装して、機能インスタンスをアップグレードできます。

FeatureUpgrading(SPFeatureReceiverProperties, String, IDictionary<String, String>) パラメーターには、現在の実行コンテキストのプロパティ、実行するカスタム アップグレード操作の名前、カスタム アップグレード操作パラメーターのディクショナリが含まれます。

FeatureUpgrading(SPFeatureReceiverProperties, String, IDictionary<String, String>) メソッドの使用方法を示す例については、「[方法] アップグレード コードを使用して依存関係を持つ機能を有効にする」を参照してください。

Version プロパティ

既存の SPFeatureDefinition クラスには、既に Version プロパティがあります。また、SharePoint Foundation の SPFeature クラスでも、新しい Version が提供されます。ただし、Feature.xml ファイルに指定された現在の機能バージョンは、SPFeatureDefinition クラスに定義されたバージョンです。Version は、指定された範囲で機能インスタンスに関連付けられた一意のバージョン クラスであり、これは機能定義のバージョンと一致しない場合があります。

SPWebApplicationSPSite オブジェクトのような特定の範囲のオブジェクトに関連付けられた 1 つ以上の機能のバージョン番号が、その機能インスタンスに関連付けられた Feature.xml ファイルに指定されたバージョン番号よりも低い場合、そのオブジェクトはアップグレードが必要です。

バージョンの形式は、xxxx. xxxx. xxxx. xxxx です。ここで、x は 1 つの桁です。Feature.xml ファイルで Version 属性が指定されていない場合、既定のバージョンは "0.0.0.0" になります。

注意

SharePoint Foundation は、4 個未満の数字のバージョン (1.0 など) が指定された "短縮" バージョンを許可しません。この場合、例外がスローされます。

QueryFeatures メソッド

新しい QueryFeatures メソッドでは、一連のフィルター基準を使用して、さまざまな範囲で機能のクエリを実行できます。SPWebServiceSPWebApplicationSPContentDatabase、および SPSite の各クラスは QueryFeatures メソッドを提供します。このオーバーロードによって、どの機能インスタンスの結果セットを返すかを決定するさまざまな基準を指定できます。

  • SPWebService -- フィルター基準に準拠する、サーバー ファーム内のアクティブ化された機能インスタンスを検索します。

  • SPWebApplication -- 指定されたフィルター基準に準拠する、Web アプリケーション、サイト コレクション、Web サイトを範囲とする機能を検索します。クエリは、Web アプリケーション オブジェクト内のすべてのコンテンツ データベースにわたって実行され、返されるコレクションはコンテンツ データベースによって順序付けされます。

  • SPContentDatabase -- サイト コレクションと Web サイトを範囲とし、指定されたフィルター基準に準拠する、コンテンツ データベース内の機能を検索します。返されるコレクションは、Web サイトの階層に関連して順序付けされます。たとえば、親 Web サイトの機能は、子 Web サイトの機能の前に示されます。階層は上から下にスキャンされます。

  • SPSite -- 指定されたフィルター基準に準拠する、すべてのサイト コレクションおよび Web サイトを範囲とする機能を検索します。返されるコレクションは、Web サイトの階層に関連して順序付けされます。親 Web サイトの機能は、子 Web サイトの機能の前に示されます。階層は上から下にスキャンされます。このクラスの QueryFeatures メソッドのオーバーロードは、新しいクライアント側のオブジェクト モデルで使用できます。

オーバーロード

前述の各クラスに対して、QueryFeatures メソッドの以下の 4 つのオーバーロードが提供されます。

  • 指定された範囲のすべての機能インスタンスを返します。needsUpgrade パラメーターを使用すると、アップグレードが必要なすべての機能を返すことができます。

    public Microsoft.SharePoint.SPFeatureQueryResultCollection 
    QueryFeatures(Microsoft.SharePoint.SPFeatureScope scope, bool needsUpgrade)
    
  • 指定された機能 ID を持つすべての機能インスタンスを返します。needsUpgrade パラメーターを使用すると、アップグレードが必要なすべての機能を返すことができます。

    public Microsoft.SharePoint.SPFeatureQueryResultCollection 
    QueryFeatures(System.Guid featureId, bool needsUpgrade)
    
  • 指定された機能 ID とバージョン番号を持つすべての機能インスタンスを返します。

    public Microsoft.SharePoint.SPFeatureQueryResultCollection 
    QueryFeatures(System.Guid featureId, System.Version featureVersion)
    
  • 指定された機能 ID を持つすべての機能インスタンスを返します。

    public Microsoft.SharePoint.SPFeatureQueryResultCollection    
    QueryFeatures(System.Guid featureId)
    

QueryFeatures 操作で返された機能を列挙するには、SPFeatureQueryResultCollection クラスを使用します。

アップグレード時に、QueryFeatures は、現在の Feature.xml 定義のバージョン番号よりも低いインスタンスのバージョン番号を見つけると、機能インスタンスが古いかどうかを確認します。Feature.xml ファイルの UpgradeActions ディレクティブに基づいて、アップグレードを必要とする機能インスタンスごとにアップグレードが呼び出されます。機能インスタンスのアップグレードが正常に終了すると、そのバージョン番号は Feature.xml ファイル定義のバージョン番号に一致するように更新されます。

Upgrade メソッド

現在、SPFeature クラスは、すべての範囲 (Farm、WebApplication、Site、および Web) で機能インスタンスのアップグレードを実行するための Upgrade(Boolean) メソッドを提供します。

依存関係にある機能のインスタンスで呼び出された場合、QueryFeatures メソッドは、まず、関連階層内で最高レベルの機能インスタンスをアップグレードしてから、その機能に依存するすべての機能インスタンスをアップグレードします。この階層的アップグレード プロセスによって、依存関係にあるすべての機能インスタンスが依存先の機能インスタンスと確実に同期している状態を維持できます。

重要重要

機能アップグレードのイベント レシーバー内から Upgrade(Boolean) メソッドを呼び出さないでください。たとえば、次のようなコードを使用して取得できる機能に対してこのメソッドを呼び出さないでください。

SPFeatureQueryResultCollection queryResults = myWebService.QueryFeatures(myScope, true);

IEnumerator<SPFeature> featureEnumerator = queryResults.GetEnumerator();