2012-10-11 5 views
5

Sto tentando di ottenere un elenco di funzionalità di farm da un sito di amministrazione centrale di SharePoint 2010. Il problema che sto avendo è che sono riuscito a riprendere solo le caratteristiche del sito . Il seguente codice è quello che sto attualmente lavorando con:Ottieni funzionalità farm da SharePoint 2010

foreach (SPFeature feature in SPAdministrationWebApplication.Local.Features) 
{ 
    string featureName = feature.Definition.DisplayName; 
    if (featureName != null) 
    { 
     XElement newItem = new XElement("Item", featureName); 
     infoTree.Add(newItem); 
    } 

} 

Ho provato anche utilizzando SPFarm.Local.FeatureDefinitions come segue:

foreach (SPFeatureDefinition feature in SPFarm.Local.FeatureDefinitions) 
{ 
    string featureName = feature.DisplayName; 
if (featureName != null) 
    { 
     XElement newItem = new XElement("Item", featureName); 
     infoTree.Add(newItem); 
    } 

ma senza alcun risultato. La prossima strada che sto percorrendo è usando SPFeatureCollection. C'è un approccio migliore che posso prendere a questo problema? Fondamentalmente sto solo cercando alcuni indizi perché non ho ancora ottenuto nulla di SPFeatureCollection.

EDIT Sono stato nei guai con

SPFeatureCollection featureCollect = SPContext.Current.Site.Features 

ma finora sto avendo un problema con SPContext ritorno nullo.

+1

Ho modificato il titolo. Per favore vedi, "[Le domande dovrebbero includere" tag "nei loro titoli?] (Http://meta.stackexchange.com/questions/19190/)", dove il consenso è "no, non dovrebbero". –

+0

Mi spiace, l'ho detto come generalmente avvio le query di Google. Violazione non intenzionale – wjhguitarman

+0

Non è un problema. [so] inserisce il primo tag nel titolo per te. –

risposta

2

Penso che tu sia sulla strada giusta con il secondo esempio. La parte che ti manca sta controllando l'ambito della funzionalità. SPFarm.Local.FeatureDefinitions sta riportando una raccolta di tutte le funzionalità definite nella farm (una raccolta di oggetti SPFeatureDefinition). Da lì, è possibile controllare la proprietà Scope dell'oggetto SPFeatureDefinition per ridurlo solo alle funzionalità con ambito Farm.

Esempio:

foreach (SPFeatureDefinition feature in SPFarm.Local.FeatureDefinitions) 
{ 
    if (feature.Scope = "Farm") 
    { 
     string featureName = feature.DisplayName; 
     if (featureName != null) 
     { 
      XElement newItem = new XElement("Item", featureName); 
      infoTree.Add(newItem); 
     } 
    } 

ulteriore riferimento MSDN here per le strutture disponibili dell'oggetto SPFeatureDefinition.

+0

Ah sì, ho completamente dimenticato di guardare le impostazioni di Scope. Grazie per il suggerimento/esempi. Inizierò a giocare con questo! – wjhguitarman

+1

Gli ambiti erano davvero la risposta! Non gli piaceva 'features.Scope =" Farm "' ma dichiarare un ambito prima del se e quindi confrontare: 'features.Scope.Equals (scopeSelect)' ha fatto il trucco. Grazie per l'aiuto. – wjhguitarman

+1

Mi dispiace per l'errore di sintassi da parte mia. Avevo usato uno script PowerShell durante il doppio controllo. Quello script sembrava così: $ farm = get-spfarm; foreach ($ funzione in $ farm.FeatureDefinitions) { if ($ feature.Scope eq "Farm") { Write-Host $ feature.name $ feature.FeatureDefinitionScope }} Sono contento che ha funzionato per voi se ! – Rob