1

SharePoint に関する別の質問に戻ってきました。ローカル SharePoint ファームの機能のリストを返すアプリケーションがあります。しかし、問題は、アクティブ化されているかどうかに関係なく、それらを「オンライン」として返すように見えることです。たとえば、この機能は、アクティブ化されていなくても、アプリに「オンライン」として表示されます。この機能は引き続き「オンライン」として表示されます

現在使用しているコードは次のとおりです。

    foreach (SPFeatureDefinition featureDefinition in featureCollection)
            {
                if (featureDefinition.Scope.Equals(scopeSelect))
                {
                    string featureName = featureDefinition.DisplayName;

                        XElement newItem = new XElement("Item", featureName);
                        XElement itemStatus = new XElement("Item", featureDefinition.Status);
                        infoTree.Add(newItem);
                        infoTree.Add(itemStatus);
                    }
                }
            }

問題は、機能の実際のステータスに関係なく、featureDefinition.Status が常に「オンライン」を返すことです。これは、私が何か間違ったことをしている、または.Statusプロパティが実際に私が探しているものではないと信じるように導きます.

正しい軌道に乗せるために使用できる別のプロパティはありますか?

ガイダンス/提案をいただければ幸いです。

編集: 余談ですが、IIS のリセットは、別のステータスを返すことに影響しません。

4

1 に答える 1

2

はい、.Statusプロパティは のステータスを示しますがDefinition、特定のスコープでの機能のアクティベーション ステータスは示しません。このための機能について少し理解する必要があります。機能定義は単なるテンプレートです。特定のレベル (ファーム、Web アプリケーション、サイト、Web) で機能のインスタンスをアクティブ化します。したがって、定義されていますが、機能のインスタンスが特定のスコープに存在するかどうかを確認する必要があります。

Get-SPFeature PowerShell 経由で機能のステータスを確認するには、ここで説明されているように使用できます。ご覧のとおり、コードは Get-SPFeature を呼び出しているだけで、特定のスコープに対して何かが返されると、機能がアクティブになります。C# でも同じことができます。

したがって、機能がアクティブ化されているかどうかを確認したい場合、たとえばサイトスコープで SPSite.Features、アクティブ化されていることがわかっている機能が見つかったら、 を反復処理できます。Powershell コマンドレットは他に何もしていません。

ファーム機能を確認したいので、でコレクションSPWebService.ContentService.Featuresを確認して、アクティブ化されたファーム機能を確認します。PowerShell スクリプトの別の例 (ほぼ C# に似ています) を参照してください。

于 2012-10-15T14:23:11.070 に答える