2012-10-11 22 views
5

Estoy intentando obtener una lista de características de granja de un sitio de administración central de SharePoint 2010. El problema que estoy teniendo es que solo he tenido éxito en retirar Site Características. El código siguiente es lo que estoy trabajando actualmente con:Obtener características de granja de 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); 
    } 

} 

También he intentado usar SPFarm.Local.FeatureDefinitions de la siguiente manera:

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

pero fue en vano. La próxima avenida a la que me estoy acercando es usando SPFeatureCollection. ¿Hay un mejor enfoque que pueda tomar para este problema? Básicamente estoy buscando algunas pistas ya que aún no he obtenido nada de SPFeatureCollection.

EDITAR He estado jugando con

SPFeatureCollection featureCollect = SPContext.Current.Site.Features 

pero hasta ahora estoy teniendo un problema con SPContext devolver nulo.

+1

He editado su título. Por favor, consulte: "[¿Las preguntas deberían incluir" etiquetas "en sus títulos?] (Http://meta.stackexchange.com/questions/19190/)", donde el consenso es "no, no deberían". –

+0

Disculpe, lo formulé como generalmente comienzo las consultas de Google. Violación no intencional – wjhguitarman

+0

No hay problema. [así que] pone la primera etiqueta en el título para ti. –

Respuesta

2

Creo que está en el camino correcto con el segundo ejemplo. La parte que te falta es verificar el alcance de la característica. SPFarm.Local.FeatureDefinitions vuelve a traer una colección de todas las características definidas en la granja de servidores (una colección de objetos SPFeatureDefinition). Desde allí, puede verificar la propiedad Scope del objeto SPFeatureDefinition para limitarlo solo a las características del ámbito de Farm.

Ejemplo:

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); 
     } 
    } 

adicional Referencia MSDN here para las propiedades disponibles del objeto SPFeatureDefinition.

+0

Ah sí, olvidé completamente mirar en la configuración del Alcance. Gracias por la sugerencia/ejemplos. ¡Empezaré a jugar con esto! – wjhguitarman

+1

¡Los ámbitos fueron de hecho la respuesta! No le gustaba 'features.Scope =" Farm "' pero declaraba un alcance antes de comparar if y then: 'features.Scope.Equals (scopeSelect)' hizo el truco. Gracias por tu ayuda. – wjhguitarman

+1

Disculpa el error de sintaxis de mi parte. Yo había usado un script de PowerShell cuando lo comprobaba dos veces. Ese script se veía así: $ farm = get-spfarm; foreach ($ característica en $ farm.FeatureDefinitions) { if ($ feature.Scope -eq "Granja") {Write-Host $ feature.name $ feature.FeatureDefinitionScope }} Alegre que trabajaron para usted, aunque ! – Rob

Cuestiones relacionadas