ItemUpdated qui ne se déclenche pas lorsque le document est ajouté à la non-valeur par défaut de la bibliothèque de documents

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/98830

Question

J'ai un élément récepteur qui implémente ItemUpdated() pour traiter un élément, après qu'il a été transféré vers une bibliothèque de documents.Tout fonctionne bien si j'ai ajouter des documents par défaut de la bibliothèque "Documents Partagés" - lorsqu'un nouveau document est ajouté, ItemUpdated() est déclenchée normalement.Cependant, si je créer un nouvelle bibliothèque de documents dans la même collection de sites, ItemUpdated() n'est pas déclenché lorsque j'ai télécharger un nouveau document.Mais quand je télécharge une autre version, ou renommer le document etc., ItemUpdated() est déclenchée normalement - c'est juste pas déclenché sur le point de télécharger.Exemple typique:

  • J'ai télécharger "doc1" à la bibliothèque de documents - ItemUpdated() ne pas execute (mais il ne s'exécutera que si la bibliothèque de documents est "Documents Partagés");
  • - Je télécharger une autre version de "doc1' - ItemUpdated() s'exécute en tant que prévu;
  • J'ai rename "doc1' - ItemUpdated() s'exécute comme prévu.

J'ai été amener à croire que l'ordre des événements lors de l'ajout d'un document est normalement:

l'ajout ajoutée - mise à jour - mise à jour

Alors, pourquoi est mon ItemUpdated() n'obtenant pas déclenché pour les bibliothèques autres que les "Documents Partagés"?Est-il un paramètre qui peut être la cause?

Notez que, pour diverses raisons, je ne peux pas faire le traitement à l'intérieur de ItemAdded().

Elements.xml:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Receivers ListTemplateId="101">
    <Receiver>
      <Name>MyEventReceiverItemUpdated</Name>
      <Type>ItemUpdated</Type>
      <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
      <Class>MyProject.MyEventReceiver.MyEventReceiver</Class>
      <SequenceNumber>1000</SequenceNumber>
    </Receiver>
  </Receivers>
</Elements>

Code:

public class MyEventReceiver : SPItemEventReceiver
{
    // On document upload, this method is only entered if I upload to "Shared Documents"
    public override void ItemUpdated(SPItemEventProperties properties)
    {               
        base.ItemUpdated(properties); // doesn't get called either
        MyMethod(properties);
    }
}
Était-ce utile?

La solution 2

Il me semble avoir trouvé une solution.J'ai mis en place ItemAdded() en plus de l'original ItemUpdated() dans le cas d'un récepteur.À l'intérieur, je force un appel ultérieur à ItemUpdated() comme ceci:

public override void ItemAdded(SPItemEventProperties properties)
{            
    base.ItemAdded(properties);
    properties.ListItem.UpdateOverwriteVersion();            
}

Notez que UpdateOverwriteVersion "les mises à jour de l'élément sans créer une autre version de l'élément" (MSDN).Il en résulte un appel à ItemUpdated() lorsqu'un nouvel élément est ajouté;en outre, il ne crée pas une nouvelle version de l'article (c'est à direvous ne finissent pas avec les 2 versions lorsque vous ajoutez un nouvel élément).Jusqu'à présent, cela fonctionne comme prévu pour toutes les bibliothèques de documents, avec et sans contrôle de version.

Autres conseils

Vous avez d'autres colonnes dans une bibliothèque ou d'une autre?Il semble que cela fait une différence en termes de savoir si ItemUpdating() déclenche le téléchargement.Jetez un oeil à ce post.La phrase clé, il y est,

"les événements qui sont déclenchés au cours de laquelle un document est Ajouté à un Bibliothèque de documents PEUVENT inclure ItemUpdating et ItemUpdated.Mais seulement si il y a d'autres champs inclus dans le processus."

De sorte que vous pouvez jouer avec différentes configurations de la bibliothèque dans votre environnement afin que vous puissiez mieux comprendre comment cette "fonctionnalité" de SharePoint impact sur votre système.

Aussi, je comprends qu'il peut y avoir des raisons à éviter ItemAdded.Si ItemUpdated continue d'être un problème pour vous, et vous seriez prêt à la partager quelques détails sur pourquoi ItemAdded est indésirable dans votre environnement, pensez à poser une question distincte ici sur la façon de faire ItemAdded travailler dans votre système.

Bonne chance!

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top