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