SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Event Receiver - Save conflict

Unbeantwortet Dieser Beitrag hat 4 Antworten

Ohne Rang
32 Beiträge
Exes Forum erstellt 30 Mai 2011 13:14
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

Ich versuche gerade einen EventReceiver zu implementieren, der (erstmal zum Test) einen Wert aus einem Field list und in ein anderes Field der Liste einfügt.

Ich bekomme jedoch beim Edit eines Listitems in Sharepoint folgende Fehlermeldung:

"Your changes conflict with those made concurrently by another user. If you want your changes to be applied, click Back in your Web browser, refresh the page, and resubmit your changes."

Der Code ist folgender:

1)

{
    public class Copy : SPItemEventReceiver
    {
        public override void ItemUpdated(SPItemEventProperties properties)
       
        {  
            //base.ItemUpdating(properties);

            SPListItem item = properties.ListItem;
            //SPField field = item.Fields.GetField("Teilnehmer");

          try
            {

            String name = Convert.ToString(item["Update"]);
            item["TeilnehmerTest"] = name;
            //item.Update();
       
   
           }
           catch (SPException spEx)
            {
                if (!spEx.Message.ToLower().Contains("save conflict"))
                {
                    throw spEx;
                }
            }

        }
    }
   
}

 

2)

namespace InstallEvent
{
    public class Program
    {
        static void Main(string[] args)
        {
            using (SPSite spSite = new SPSite("http://moss2007-bib:5555"))
            {
                SPWeb spWeb = spSite.OpenWeb();
                SPList spListSeminarInstanzen = spWeb.Lists["Seminarinstanzen"];
                spListSeminarInstanzen.EventReceivers.Add(SPEventReceiverType.ItemUpdated, "TeilnehmerEvent, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=dfe6b9609e97c2e2", "TeilnehmerEvent.Copy");

             
                    spListSeminarInstanzen.Update();
               
                                
               
           
            }

        }
    }
}

Ich habe schon Google befragt aber bisher keine Lösung gefunden. Kenntnisse im Bereich Sharepoint und C# sind auch leider weniger vorhanden : /.

Hat jemand eine Lösung?

 

Gruß

Alle Antworten

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 30 Mai 2011 14:04
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Mach die Aktualisierung innerhalb von ItemUpdating. Dort kannst du zu properties.AfterProperties["Interner FeldName"] = "Wert" das aktuelle Element verändern.

An die aktuellen Daten kommst du auch über properties.AfterProperties["Intern FeldName"] dort liegen die Werte meistens als String vor oder null wenn nicht vorhanden.

Schau mal hier von Andi: http://blogs.evocom.de/af/archive/2010/10/12/beforeproperties-und-afterproperties-bei-verschiedenen-ereignissen.aspx

Ohne Rang
32 Beiträge
Exes Forum Als Antwort am 30 Mai 2011 14:49
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

 

auch bei der Herangehensweise bekomme ich noch den Fehler. Ich habe schon etliche Varianten ausprobiert. Das sonderbare ist, dass wenn ich ein neues Item anlege und dann verändere, ich die Fehlermeldung bekomme und dann, nachdem ich zurück auf der Listenansicht bin und F5 drücke der String "Teilnehmer" in das Feld geschrieben wird. Ich habe in meinem Code eine solche Zuweisung jedoch gar nicht mehr drin?!

Oder habe ich hier die ganze Zeit versucht etwas zu korrigieren und etwas mit der Speicherung falsch gemacht? Ich führe immer "Build" aus und ziehe die DLL in das entsprechende Verzeichnis "Assembly".

 

Gruß

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 30 Mai 2011 15:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

IIS Reset bzw Wiederverwenden des Anwengungspool ist erfoderlich beim kopieren der DLL. Der IIS lädt die DLL's in seine AppDomain und bekommt so eine Änderung der DLL nicht mit. Zusätzlich kann es erfoderlich sein den Timerdienst neu zu starten je nachdem wo die Änderungen am ListItem durchgeführt werden. z.B.: Machst du Änderungen in eine Konsolen Anwendung dann wird diese der Host des EventReceiver's.

Es kann auch sein das der Receiver jetzt mehr als einmal an die Liste gebunden ist. Kannst du mit dem SharePoint Manager von Codeplex nachschauen.

Ohne Rang
32 Beiträge
Exes Forum Als Antwort am 31 Mai 2011 14:17
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Vielen Dank! Hat geklappt :)