3 votes

ItemUpdating appelé deux fois après ItemAdded dans le récepteur d'événement

J'ai créé un récepteur d'événements pour gérer les événements ItemAdded et ItemUpdating sur une bibliothèque de documents dans SharePoint 2010.

J'ai rencontré un problème où lorsque j'ajoute un document à la bibliothèque (par exemple en l'enregistrant à partir de Word), la méthode ItemAdded est correctement appelée, mais elle est ensuite suivie de deux appels à ItemUpdating. J'ai supprimé tout le code de mes gestionnaires pour m'assurer que ce n'est pas quelque chose que je fais à l'intérieur qui cause le problème. Ils ressemblent littéralement à :

public override void ItemUpdating(SPItemEventProperties properties)
{
}

public override void ItemAdded(SPItemEventProperties properties)
{
}

Quelqu'un a-t-il une solution à ce problème ?

Voici mon fichier elements.xml pour le récepteur d'événements :

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Receivers ListTemplateId="101">
      <Receiver>
        <Name>DocumentsEventReceiverItemUpdating</Name>
        <Type>ItemUpdating</Type>
        <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
        <Class>My.Namespace.DocumentsEventReceiver</Class>
        <SequenceNumber>10000</SequenceNumber>
        <Synchronization>Synchronous</Synchronization>
      </Receiver>
      <Receiver>
        <Name>DocumentsEventReceiverItemAdded</Name>
        <Type>ItemAdded</Type>
        <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
        <Class>My.Namespace.DocumentsEventReceiver</Class>
        <SequenceNumber>10000</SequenceNumber>
        <Synchronization>Synchronous</Synchronization>
      </Receiver>
  </Receivers>
</Elements>

7voto

Jigs Points 2606

Le problème est qu'en Document library les gestionnaires d'événements pendant Item Updating vérifiant également que Document C'est dans Arrivée ou Départ . C'est pourquoi il est appelé deux fois.

Vous devez placer votre code dans

 public override void ItemUpdating(SPItemEventProperties properties)
  {  
    base.ItemUpdating(properties);
    if (properties.AfterProperties["vti_sourcecontrolcheckedoutby"] == null && properties.BeforeProperties["vti_sourcecontrolcheckedoutby"] != null)
     {
       //do stuff
     }
  }

Pour plus d'informations Ici est un bon article pour décrire l'ensemble de la situation de la Document's Événements.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X