SharePoint 2010 : Workflow d'envoi de mails déclenché par un utilisateur anonyme.

Les utilisateurs anonymes ne sont pas autorisés à déclencher certains flux de travail (workflow), notamment ceux qui envoient des mails.
Prenons l’exemple d’une liste qui déclenche un workflow d’envoi de mail sur l’ajout d’un élément :
Workflow_1
Ici l’envoi de mail sera un échec, car la tâche d’envoi de mail nécessite plus de droit que ne peut avoir un utilisateur anonyme.
Pour remédier à cela, une solution serait de faire déclencher le workflow par un événement tiers :
Workflow_2
Il suffit d’insérer un event-handler qui va prendre en charge l’événement « ajout d’un élément » à la place du workflow, et qui va forcer le démarrage du workflow « à la main ».
Le code de l’event-handler pourrait ressembler à cela :

public class List_EventReceiver : SPItemEventReceiver
{
 /// <summary>
 /// Un élément a été ajouté, on lance le workflow avec privilèges.
 /// </summary>
 public override void ItemAdded(SPItemEventProperties properties)
 {
    base.ItemAdded(properties);

        // Exécution en élévation de privilège
    SPSecurity.RunWithElevatedPrivileges(delegate()
   {
      using (SPSite site = new SPSite("http://mon_site"))
      {
        using (SPWeb siteWeb = site.OpenWeb())
        {
          SPList list = siteWeb.Lists["Ma_Liste"];
          SPWorkflowAssociation wf = list.WorkflowAssociations.GetAssociationByName("Nom_du_Workflow", System.Globalization.CultureInfo.CurrentCulture);
          // Lancement du workflow
          site.WorkflowManager.StartWorkflow(list.GetItemById(properties.ListItemId), wf, wf.AssociationData);
        }
      }
   });
 }
}

Arrêt des applications "Rennes…" et "Lyon en Direct"

C’est avant tout par respect pour les utilisateurs que je décide d’arrêter la publication de « Rennes… » et « Lyon en Direct » à partir du 15/08/2013.
Ce genre d’application nécessite beaucoup d’attention. Les sources d’actualités bougent beaucoup, et il est difficile pour moi de maintenir un service fiable et de qualité.
Je m’excuse auprès des 600 utilisateurs quotidiens.
Je vais cependant me consacrer pleinement à « Nantes en Direct ».

SharePoint : Notification mails are not sent

English version

Symptoms : notification mails are not sent (but subscription notifications are).
Diagnosis : There are multiple causes that can be explained here : blogs.technet.com/b/steve_chen. But in my case, it was different.
Solution : Here I’m talking about a very specific case. Consider a farm consisting of 4 servers: 1 SQL Server, 1 admin server, one intranet front-end server and one front-end server in the DMZ for extranet.
What you should know is that shipments of alerts are managed by a single server (as opposed to what we see in « Central Administration> Operations> Timer Job Status »).
To find out which server handles alerts’ shipments, launch this SQL request on any content database :

select * from TimerLock

This query will return a server name : this is the one who sends the alerts.
NB: Unlike subscription mails that – I think – are sent by the administration server.
So for some unknown reason, the Intranet server that manages the sending of these messages has stopped doing it, and suddenly it’s the front DMZ that has taken over. But since he was not at all set up for it (firewall, etc.)., alerts were not sent anymore.
Thus, to assign new shipments alert to the other front, you must disable the service timer on the current one:

NET STOP "Windows SharePoint Services Timer"

And finally, the front intranet will resume over.

Article en français

Symptômes : Les mails d’alerte ne sont plus envoyés (mais les notifications d’abonnement elles, sont bien envoyées).
Diagnostique : Les causes sont multiples. Cet article en parle très bien.
Solution : Ici je vais parler d’un cas bien spécifique. Prenons une ferme composée de 4 serveurs : 1 SQL Server, 1 serveur d’administration, 1 serveur frontal intranet et 1 serveur frontal en DMZ pour l’extranet.
Ce qu’il faut savoir, c’est que les envois d’alertes sont gérés par un seul serveur (contrairement à ce qu’on peut voir dans « Administration centrale > Opérations > Etat du travail du minuteur »). Ceci est bien expliqué ici.
Pour savoir quel serveur gère les envois d’alertes, il faut consulter le verrou actif sur le minuteur :

select * from timerlock

(à lancer sur n’importe quelle BDD de contenu, ou du moins celle dont le site refuse d’envoyer les alertes).
Cette requête va renvoyer un nom de serveur : c’est celui-ci qui s’occupe d’envoyer les alertes.
NB : Contrairement au mail de notification d’abonnement qui – je pense – est envoyé par le serveur d’administration.
Donc pour une raison inconnue, le serveur Intranet qui gérait l’envoi de ces mails a cessé de le faire, et du coup c’est le frontal en DMZ qui a pris le relais. Mais vu qu’il n’était pas du tout configuré pour cela (pare-feu, etc.), les alertes n’étaient plus envoyées.
Ainsi, pour confier de nouveau les envois d’alertes à un l’autre frontal, il faut désactiver le service timer sur celui en cours :

NET STOP "Windows SharePoint Services Timer"

Et finalement, le frontal intranet reprendra le relais.
 

Nouveau blog : Bienvenus sur ColorSeeds.net !

Voici mon nouveau blog qui est en fait l’agrégation de mes 2 anciens.
La manipulation a été assez simple : WordPress a de bon modules d’imports. Ce qui venait de orSeeMS a été importé via le flux RSS, et ce qui venait de WordPress a été importé par un export XML.
J’ai été agréablement surpris de voir que toutes les images ont également été importées.
Le tout hébergé par la PAAS Microsoft Azure !
Export

PERL / Appcmd : Add a mapping element that contains spaces and quotes.

How to encode encoded characters without escaping them ? ^_^
When you try to add a module mapping for perl, it is supposed to be configured like this in IIS :
Request Path : *.pl
Executable : C:Perlinperl.exe « %s » %s
This declaration looks like this in IIS config files (web.config or machine.config) :
<handlers>
<add name="Perl" path="*.pl" verb="GET,HEAD,POST" modules="CgiModule" scriptProcessor="E:Perl64Perl64inperl.exe &quot;%s&quot; %s" />
</handlers>
The double-quotes that surrounds %s are encoded with XML encoding.
But when you use appcmd command to declare this module mapping, it is a bit more tricky, because you cannot use the special character &. Furthermore, the presence of spaces into the « scriptProcessor » attribute force you to surround the whole expression with double-quotes…
So, this is the appcmd command :
appcmd.exe set config /section:handlers /"+[name='Perl',paverb='GET,HEAD,POST',modules='CgiModule',scriptProcessor='E:Perl64Perl64inperl.exe %u0022%s%u0022 %s']"
 
 

Install and Configure iFilter for SharePoint Foundation 2010

SharePoint Foundation 2010 : Installer et configurer iFilter 9 pour fichiers PDF.
In SharePoint Foundation 2010, these are the steps to make PDF files indexed by the search engine :

  • Install Adobe iFilter 9 for PDF files
  • Copy a PDF icon in %CommonProgramFiles%Microsoft SharedWeb Server Extensions14TEMPLATEIMAGES
  • Add an entry in the Docicon.xml file
  • Modify the registry (twice !)
  • Configure the indexer so that it takes into account the PDF extension (VBS script provided by MS)
  • iisreset

Just follow these two tickets :
http://support.microsoft.com/kb/2293357
http://support.microsoft.com/kb/2518465
You don’t need to install Search Server 2010.
TRADUCTION
Pour que les fichiers PDF soient indexés par le moteur de recherche Foundation 2010, il faut faire les actions suivantes :

  • Installer iFilter 9 fourni par Adobe
  • Copier une icone de fichier PDF dans %CommonProgramFiles%Microsoft SharedWeb Server Extensions14TEMPLATEIMAGES
  • Ajouter une entrée dans le fichier DOCICON.XML
  • Modifier la base de registre (2 fois)
  • Configurer l’indexeur pour qu’il prenne en compte l’extension PDF (script VBS fourni par MS)
  • iisreset

 
Il suffit donc de suivre à la lettre les 2 billets suivants :
http://support.microsoft.com/kb/2293357
http://support.microsoft.com/kb/2518465
Pas besoin d’installer Search Server 2010 !