2012-10-15 4 views
1

Je suis de retour avec une autre question SharePoint! J'ai une application qui renvoie une liste de fonctionnalités sur la batterie de serveurs SharePoint locale. Mais le problème est qu'il semble les renvoyer comme «en ligne», qu'ils soient activés ou non. Par exemple, cette fonctionnalité accuserait encore dans mon application comme « en ligne », même si elle n'est pas activé: This feature would still be displayed as 'Online'État de la fonctionnalité de la batterie dans SharePoint 2010

Le code que je utilise actuellement comme suit:

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

Le problème est que featureDefinition.Status renvoie toujours «En ligne», quel que soit le statut réel de la fonction. Cela m'amène à croire que je fais quelque chose de mal, ou la propriété .Status n'est pas vraiment ce que je cherche.

Y at-il une autre propriété que je peux utiliser qui me met sur la bonne voie?

Toutes les indications/suggestions seront les bienvenues! De même, une réinitialisation IIS n'a aucun effet sur le retour d'un statut différent.

Répondre

2

Oui, la propriété .Status vous indiquera l'état du Definition, mais pas l'état d'activation de l'entité sur une étendue spécifique. Vous devez comprendre un peu les fonctionnalités pour cela: Une définition de fonctionnalité est juste le modèle - vous activez une instance de la fonctionnalité à un niveau spécifique (ferme, webapp, site, web) - donc vous ne pouvez pas vérifier l'état de la définition, mais doit vérifier si l'instance de l'entité existe sur la portée spécifique.

Pour vérifier l'état de la fonction via PowerShell, vous pouvez simplement utiliser Get-SPFeatureas described here. Comme vous pouvez le voir, tout ce que le code fait est d'appeler Get-SPFeature et s'il retourne quelque chose pour une portée spécifique, la fonctionnalité est activée. Vous pouvez faire la même chose en C#.

Ainsi, lorsque vous souhaitez vérifier si une fonction est activée, par ex. Sur le périmètre du site, vous pouvez simplement parcourir sur SPSite.Features, lorsque vous trouvez la fonctionnalité, vous savez qu'il est activé. Le commandlet Powershell ne fait rien d'autre.

Vous souhaitez vérifier une fonctionnalité de batterie, vous pouvez donc vérifier la collection au SPWebService.ContentService.Features pour vérifier les fonctionnalités de batterie activées. Voir another example of a PowerShell script (almost looks like C#) here.

+0

Effectivement, le 'SPWebService.ContentService.Features' était exactement ce que je cherchais et que je devais faire. Merci! – wjhguitarman

Questions connexes