none
[Event ADdItem][Liste] Probleme Evenement sur ajout RRS feed

  • Question

  • Bonjour,
    Je vous expose mon probleme:
    J'ai 2 dll appliquées sur une meme liste mais souvent, l'une des deux ne se manifeste pas lors de l'ajout d'une donnée.
    Une dll agit sur l'attachement des pièces jointes et la renomme avec la date du jour tandis que l'autre permet de numéroter le nouveau enregistrement automatiquement..
    Avez vous déjà rencontrer ce probleme? à quoi cela pourrais etre dut?
    merci, c'est tres embetant.
    Développeur en herbe..
    mercredi 9 décembre 2009 13:22

Toutes les réponses

  • Bonjour,
    J'ai tenté de mettre les 2 projets dans un seul .
    Je ne comprends vraiment pas, sur 5, 6 enregistrements ça fonctionne, et une fois de temps en temps , ça ne fonctionne pas..
    Développeur en herbe..
    jeudi 10 décembre 2009 08:25
  • Bonjour,

    il faudrait essayer de debugger vos eventreceivers dans un environnement de développement, et/ou ajouter des traces en cas d'erreur.

    Debugging
    Avec Visual Studio, compilez votre assembly en mode Debug
    Déployez la dans le GAC, à la main ou en ligne de commande : C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe -if monassembly.dll
    iisreset.exe
    Avec votre navigateur, naviguez jusqu'à votre liste. Cela reveillera le serveur.
    Attachez vous avec visual studio au processus w3wp.exe
    Mettez un point d'arret dans votre code
    Via le navigateur, effectuez l'action qui déclenche l'eventreceiver

    Trace
    Dans votre eventreceiver, mettez un bloc try catch et dans le catch, logguez dans le journal d'evenements.
    Voici un exemple provenant d'un projet perso :
     public override void ItemAdded(SPItemEventProperties properties)
            {
                try
                {
                    
                    using (SPWeb web = properties.OpenWeb())
                    {
                        MailIdentifier.TrimSubject(web, properties.ListItem);
                        MailIdentifier.IdentifyExpeditor(web, properties.ListItem, false);
                    }
    
                }
                catch (Exception ex)
                {
                    Logger.LogException(ex);
                }
            }

    Ma classe Logger :

    public class Logger
        {
    
            private const String SOURCE = "Windows SharePoint Services 3";
    private const String PROJECT = "ProjetPerso"; public static void LogInformation(String message) { String log = String.Format("{0}\r\n\r\n{1}", PROJECT, message); SPSecurity.RunWithElevatedPrivileges(delegate() { EventLog.WriteEntry(SOURCE, log, EventLogEntryType.Information); }); } public static void LogException(Exception ex) { String error = String.Format("{0}\r\n\r\n{1}", PROJECT, ex); SPSecurity.RunWithElevatedPrivileges(delegate() { EventLog.WriteEntry(SOURCE, error, EventLogEntryType.Error); }); } }
    En cas d'erreur, vous aurez alors une trace dans le journal d'événements de Windows.


    Avec ces éléments, vous devriez en principe trouver facilement l'origine de l'erreur.
    http://blogs.developpeur.org/anouvel
    Merci de valider les réponses qui correspondent à votre problème afin qu'il apparaisse comme résolu.
    • Proposé comme réponse Arnault Nouvel samedi 12 décembre 2009 10:08
    samedi 12 décembre 2009 10:07
  • Bonjour,

    Merci de votre réponse, j'ais éssayer le debug sous visual mais lorsque je veux attacher le processus, j'ai un message me disant que cela provoquerais des domages pour mon pc .. Normal?

    Sinon j'ai tenté aussi d'utiliser votre code concernant la trace des exceptions, néanmoins rien ne s'affiche alors que l'un des évenements ne s'est pas produit. la trace doit-elle s'afficher sur la page?

    J'ai regardé le journal d'évenement que j'ais finit par trouver. Est-ce que mon erreur pourrais etre du au fait qu'il ne trouve pas une assembly mais que la ligne safecontrol était resté dans le web.config?
    depuis, ça à l'air de bien fonctionner..


    EDIT: en fait au bout du 6e enregistrement, toujours une erreur et 2 des 3 évenements ne se sont pas fait. Dans le journal d'évenement, j'ai trouvé cela :

    Microsoft.SharePoint.SPException: Conflit d'enregistrement

    Vos modifications entrent en conflit avec des modifications actuellement effectuées par un autre utilisateur. Si vous souhaitez que vos modifications soient appliquées, cliquez sur Précédente dans votre navigateur Web, actualisez la page et soumettez-les de nouveau. ---> System.Runtime.InteropServices.COMException (0x81020037): Conflit d'enregistrement

    or il n'y a que moi qui travaille sur ce serveur, serais les évenement qui rentrent en conflit ?


    Développeur en herbe..
    mardi 22 décembre 2009 08:51
  • Bonjour,

    en effet il est possible qu'il s'agisse d'un conflit.

    L'évent receiver est peut-être enregistré plusieurs fois, vous pouvez par code itérer sur la collection list.EventReceivers pour le vérifier.
    Si vous trouvez plusieurs fois le même event receiver, vous pouvez les supprimer via la méthode Delete().

    Est-ce que le problème venait de là ?

    http://blogs.developpeur.org/anouvel
    Merci de valider les réponses qui correspondent à votre problème afin qu'il apparaisse comme résolu.
    • Marqué comme réponse Arnault Nouvel mardi 22 décembre 2009 21:05
    • Non marqué comme réponse Arnault Nouvel mardi 22 décembre 2009 21:05
    • Proposé comme réponse Arnault Nouvel mardi 22 décembre 2009 21:05
    mardi 22 décembre 2009 21:05
  • Bonjour,
    J'ais éssayer d'afficher les évenements dans une colonne de la liste avec le code suivant :
    string desc_event = "";
                    SPList list = properties.ListItem.ParentList;
                    SPEventReceiverDefinitionCollection list_event = list.EventReceivers;
                    for (int i = 0; i < list_event.Count; i++)
                    {
                        desc_event += list_event[i].Name;
                        desc_event += " + ";
                    }
    Seulement quand ça bug, il n'affiche rien et quand ça marche j'obtiens just edes "++++" donc 4 évenements..
    Etant donné que j'ais 4 évenements sur cette liste.. cela me parait normal.

    Je sais pas si ça peut aider mais je vais détailler les choses.

    J'ai une dll avec 2 évenements sur la liste,

    - ItemAdded ( qui appel 2 fonctions permettant chacune de modifer un champs de l'enregistrement, l'une effectue une numérotation automatique tandis que l'autre consiste à prendre une partie de la description et de l'afficher dans la colonne "description courte" )

    -ItemAttachmentAdded ( qui de rennomer les pieces jointes avec la date et l'heure de l'ajout).

    2 cas se produise lors d'un nouvel enregistrement, soit les 3 fonctionnent bien, soit l'attachement de la date aux pieces jointes fonctionne seule..

    De plus j'ai 2 workflow qui agisse aussi sur ma liste.
    Développeur en herbe..
    mercredi 23 décembre 2009 08:59
  • bonjour,
    avant j'avais le meme prob, un workflow sharepoint designer et un eventhandler, et comme tu as dis, ca marche un bout de temps et apres ca bug.
    ce qu il faut faire et selon ton contexe biensur, développer un workflow visualstudio qui va executer le code des eventhandlers ou bien qui fera appel a eu c possible sans qu il y aura de conflit
    Merci
    mercredi 23 décembre 2009 10:11
  • Bonjour,

    J'aimerais bien tester ta méthode, peux tu m'en dire un peux plus? notamment sur l'appel de l'eventreceiver dans un workflow ?
    Développeur en herbe..
    mercredi 23 décembre 2009 11:22
  • re
    l'execution de code (l activité execution de code) ne résoud pas le probléme?
    pour l appel d'un eventhandler a partir d'un workflow je sais que c possible mais j ai jamais utilisé , je suis désolé, si tu en trouve tu me fais signe sinon je ferais des recherches et je vais vous transmettre les resultats.

    mercredi 23 décembre 2009 11:51
  • HA désolé, tu parlais de traiter les event dans le workflow apres création.. je vais essayer
    Développeur en herbe..
    mercredi 23 décembre 2009 12:32
  • je ne sias pas si c'est une bonne solution par contre, je préfererais trouver le problème avec mes évenements... mais ce n'est pas une piste que j'exclu..
    Développeur en herbe..
    mercredi 23 décembre 2009 13:44