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.




ListItemEventReceiver

Unbeantwortet Dieser Beitrag hat 6 Antworten

Ohne Rang
143 Beiträge
Hans Abelshausen erstellt 12 Apr. 2011 21:15
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo!

Ich habe ein kleines Problem. Ich habe einige Document Libraries. Dort soll man bei jedem Dokument einen Freigeber eingeben, der eine Mail erhält um das Dokument freizugeben. Ich habe jetzt einen Event Receiver gebastelt, der bei jedem Uploaded Event eingreift und dem Freigeber eine Mail sendet. Klappt auch alles, nur bekommt der Freigeber anstatt einer mindestens 6 Mails, weil das Item Uploaded Event so oft aufgerufen wird. Warum ist das so? Kann ich eine bool Variable definieren und in ein Session Objekt etc packen, um die Mail nur einmal zu senden? Wenn ja, wie komme ich an die Session ran?

Über Hilfe würd ich mich freuen.

MfG

Hans

Alle Antworten

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 12 Apr. 2011 21:42
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hast du mal geschaut z.b. mit dem SharePoint Manager 2010 von CodePlex ob dein Receiver auch nur einmal an die Liste gebunden wurde und nicht zufällig 6 mal.

Ohne Rang
143 Beiträge
Hans Abelshausen Als Antwort am 14 Apr. 2011 11:27
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hatte die Mail in dem ItemUpdated Event und habe am Schluss noch ListItem.Update() gemacht, daher wurde es wahrscheinlich mehrmals aufgerufen. Aber meine Frage ist nach wie vor, wie kann ich folgendes lösen:

Ich habe mir einen Eventreceiver gebaut, der im ItemUpdating Event eine Mail an denjenigen verschickt, der beim Hochladen des Dokuments als Freigeber eingetragen wird und das Dokument freigeben soll (properties.ListItem.ModerationInformation.Status = SPModerationStatusType.Approved). Dieses funktioniert auch ohne Probleme!!

Wenn jetzt eine nicht berechtigte Person (also eine Person die zwar Approve Rechte hat, aber nicht als Freigeber eingetragen ist) auf dem Element mit der Maustaste auf Approve / Reject klickt und Approved auswählt, springt er ja wieder in das ItemUpdating Event. Dort steht allerdings der ModerationInformation.Status noch auf Pending und erst im ItemUpdated Event steht er auf Approved. Kann ich irgendwie im Item Updating Event schon erkennen, was die Person geändert hat, so dass ich dort ein Cancel ausführen kann, oder wie kann ich das lösen? Bis jetzt hatte ich im ItemUpdated Event überprüft, ob derjenige berechtigt ist, oder nicht. Wenn nicht, hab ich den Status wieder auf Pending gesetzt und ein ListItem.Update ausgeführt, was aber wieder das ItemUpdating Event aufruft und mir mehrmals eine Mail schickt.

Über Hilfe würde ich mich freuen.

MfG

Hans

Ohne Rang
91 Beiträge
Thomas Spitzer Als Antwort am 14 Apr. 2011 11:39
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Hans,

du könntest im ItemUpdating Event die properties.ListItem mit den properties.AfterProperties der Spalten vergleichen. Wenn die ungleich sind, dann weißt du, was sich geändert hat und mit einem properties.cancel abfangen.

LG Thomas 

Ohne Rang
143 Beiträge
Hans Abelshausen Als Antwort am 14 Apr. 2011 12:00
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Aber wo finde ich denn das Feld

properties.ListItem.ModerationInformation

 

 

  in den .AfterProperties ?

Ich stehe da gerade auf dem Schlauch! Bei den anderen feldern ist das ja kein Problem, aber bei der ModerationInformation?

Ohne Rang
91 Beiträge
Thomas Spitzer Als Antwort am 14 Apr. 2011 12:18
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Du hast recht, da gibt es keine AfterProperties; mein Fehler!

Ich habe aber auf der social.msdn  folgenden Beitrag gefunden:

http://social.msdn.microsoft.com/forums/en-US/sharepointdevelopment/thread/2f50ccc8-05a4-4780-b6f5-336c6716f11e/

vielleicht ist das die Lösung.

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 14 Apr. 2011 14:26
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut
Kannst auch innerhalb von ItemUpdated die EventReceiver ausschalten so das es bei Änderungen nicht zu einer Zirkelaktualisierung kommt. this.EventFiringEnabled = false; properties.ListItem.ModerationInformation = ,... properties.ListItem.Update(); // oder SystemUpdate oder UpdateOverwriteVersion this.EventFiringEnabled = true;