Manuellement générer les alertes de recherche 

Office Server 2007, Sharepoint

Dans un billet précédent, je vous avais montré comment on pouvait personnaliser l'apparence des emails générés par les alertes de recherche. Cependant, lors de la phase de développement de cette apparence, il serait bien que l'on puisse générer l'email à envoyer, pour pouvoir vérifier que le résultat correspond bien au besoin.

 

Je sais que cela devient lourd à la longue :-) mais en "introspectant" l'assembly Microsoft.Office.Server.Search grâce à .NET Reflector, on trouve la classe SearchAlertHandler, celle qui est appelée avant chaque envoi d'email (dans la configuration par défaut du template OSS.Search).

 

Dans cette classe, on se rend compte que SharePoint vérifie, en fonction de la périodicité de l'alerte, si il est temps d'envoyer l'email ou non. Grosso modo, il récupère la date et l'heure de création de l'alerte, ajoute le TimeSpan en fonction de la périodicité (e.g. TimeSpan.FromDays(1.0) pour les journalières et TimeSpan.FromDays(7.0) pour les hebdomadaires) et si cette date calculée n'est pas encore passée, alors l'envoi est annulé ….

 

En conclusion, pour envoyer l'email, il faut tricher, et modifier la date de création de l'alerte (ôter un jour pour une journalière ou 7 pour une hebdomadaire) et ainsi l'email partira.

Ci-dessous, un petit bout du code. L'idée serait bien entendu de l'encapsuler dans une commande stsadm (idéalement) ou une application console.

 

   1:  using (SPSite site = new SPSite("http://SHAREPOINT/Site_de_Recherche"))
   2:  {
   3:     using (SPWeb web = site.OpenWeb())
   4:     {
   5:        // Pour chacune des alertes du web courant
   6:        foreach (SPAlert alert in web.CurrentUser.Alerts)
   7:        {
   8:           // On vérifie si c'est bien une alerte de recherche
   9:           if (alert.AlertTemplate.DisplayName == "OSS.Search")
  10:           {
  11:              // Si c'est la cas, on calcule l'intervalle à retirer, en fonction de la périodicité
  12:              TimeSpan offset = (alert.AlertFrequency == SPAlertFrequency.Weekly ? TimeSpan.FromDays(7.0) : TimeSpan.FromDays(1.0));
  13:              alert.AlertTime = alert.AlertTime - offset;
  14:              // Important!
  15:              alert.Update();
  16:           }
  17:        }
  18:     }
  19:  }
  20:   

 

Vous pouvez maintenant créer une alerte de recherche, et exécuter le code précédent. Ainsi, lors du prochain passage dans la classe SearchAlertHandler, nos alertes de recherches seront envoyées. …

 
Posté le 29 May 08
Commentaire (1)  |  Url de Trackback  | Lien vers ce message (0) | Marquez ce billet avec:        
 

Liens vers ce message

Commentaires


Sébastien (30-May-2008)
Une bonne chose ! Ca fait un bout de temps que je me demandais comment piloter cce genre d'alertes. Well done ;-)


Nom *:
URL:
Email:
Commentaires:

© 2011 Julien Chomarat - Design based on Blue World