2016-05-17 13 views
1

Ich brauche eine Liste von SPFeatureDefinitions wie in ManageFeatures.aspx Seite. Wahrscheinlich sollte es smth so aussehen:Wie erhalten Sie alle deaktivierten Features in der Farm, die für das spezifische Web mit dem SharePoint Server-Objektmodell aktiviert werden können?

... 
using (SPWeb web = spSite.OpenWeb()) 
foreach (var spfeature in SPFarm.Local.FeatureDefinitions) 
{ 
    result.Add(spfeature);       
} 

Aber wie kann ich sicher sein, dass spfeature auf web aktiviert werden könnte?

Antwort

0

Versuchen Sie es mit if (spfeature.Scope = SPFeatureScope.Web)

+0

Ja, ich dachte, es auch aus, danke. –

0

Ich habe es herausgefunden. Ich muss alle Featuredefinitionen abrufen und sie dann nach Webbereich filtern. Hier ist der Code:

using (SPSite spSite = new SPSite(siteId)) 
{ 
    using (SPWeb web = spSite.OpenWeb(selectedWeb.Id)) 
    { 
     foreach (var spfeature in SPFarm.Local.FeatureDefinitions) 
     { 
      if (spfeature.Scope.Equals(SPFeatureScope.Web) && !spfeature.Hidden) 
      { 
       var feature = new Feature(); 
       feature.Name = spfeature.DisplayName; 
       feature.Id = spfeature.Id; 
       feature.IsActive = web.Features[spfeature.Id] != null; 

       result.Add(feature); 
      }        
     } 
    } 
}