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 NullReferenceException

Geprüfte Antwort Dieser Beitrag hat 9 Antworten

Ohne Rang
30 Beiträge
Ruediger erstellt 8 Aug. 2012 12:20
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Zusammen,

ich brauche einen Event Handler der beim erstellen eines Listeneintrags eine Spalte automatisch füllt. Gibt ja auch genug Beispiele hierzu im Netz. Doch leider bricht das ganze bei mir immer mit einer NullReferenceException ab...

 

base.ItemAdding(properties);

 

 

 

string str = "";

str = properties.ListTitle;

funktioniert wunderbar. Wenn ich aber

base.ItemAdding(properties);

porperties.ListItem["Titel"] = "test";

mache bricht das ganze mit ner nullReferenceException ab. Im Debugger sieht man dann auch das dass die Methode properties bei ListItem zu diesem Punkt ein "null" hat.

Die Frage ist nur, wieso? Alle Werte stimmen soweit nur die Werte ListItem und ListItemID sind nicht "gefüllt" wenn ich mir die beim Debuggen angucke...

Jemand ne Idee woran das liegen könnte? Vielen Dank, Ruediger

 

 

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 8 Aug. 2012 12:49
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

ItemAdding wird aufgerufen bevor das eigentliche Element erstellt wurde. Wenn Du den vom Benutzer eingegebenen Titel haben möchtest, mußt Du ihn aus den AfterProperties holen (properties.AfterProperties["Title"]). Beachte, daß du dort immer den InternalName des Feldes benutzen mußt. Der DisplayName funktioniert dort nicht. Wenn Du den Titel selbst auf einen anderen Wert festlegen möchtest, schreibe den neuen Wert ebenfalls in die AfterProperties.

Eine Übersicht wann was belegt ist, findest Du hier: http://blogs.evocom.de/af/archive/2010/10/12/beforeproperties-und-afterproperties-bei-verschiedenen-ereignissen.aspx

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
163 Beiträge
Markus Sallmutter Als Antwort am 8 Aug. 2012 13:19
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich würde einfach das ItemAdded Event ansteuern. Der Vorteil davon ist, dass das Item bereits existiert und du nicht wie bei Afterproperties nur strings zurückbekommst sondern die richtigen Feldtypen. Einen wert hineinschreiben kannst du ja auch wenn das Item schon existiert. Du darfst nur nach dem befüllen das item.SystemUpdate() nicht vergessen

 

Mfg

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 8 Aug. 2012 13:54
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Dabei hat man allerdings das Problem, daß ein evtl. EventHandler für ItemUpdating/ItemUpdated aufgerufen wird. Natürlich kann man das unterbinden, aber wenn man nur schnell etwas ändern oder zusötzlich einfügen möchte, ist ItemAdding einfach die bessere Wahl.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
163 Beiträge
Markus Sallmutter Als Antwort am 8 Aug. 2012 15:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Sorry hab vergessen zu erwähnen das man eventfiringenabled auf false setzen muss vor dem Update und nacher wieder auf True...

Ja so gesehen hat Andi schon recht, ich weiß nur nicht wie das ist, wenn der user das Feld auch befüllen kann welcher wert dann genommen wird. wäre sicher interessant

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 8 Aug. 2012 15:35
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Es wird der Wert verwendet, der am Ende von Adding oder Updating in den AfterProperties steht. D.h. also eventuelle Änderungen, die man per Code in einem EventReceiver macht, werden immer angewendet.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
30 Beiträge
Ruediger Als Antwort am 8 Aug. 2012 17:09
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

vielen vielen dank fuer die hilfe! habe mich fuer item added entschieden und es funktioniert wunderbar! da ich in zukunft wahrscheinlich mehr mit eventreceivern arbeiten werde wollte ich fragen ob man im sp irgendwo nachsehen kann auf welchen seiten eventreceiver laufen,damit man nicht den ueberblick verliert... danke!, ruediger

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 8 Aug. 2012 18:03
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Ruediger"]ob man im sp irgendwo nachsehen kann auf welchen seiten eventreceiver laufen[/quote]

Nicht im Browser. Mit Tools wie SharePoint Manager kann man aber sehen, welche EventReceiver an einer bestimmten Liste hängen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
163 Beiträge
Markus Sallmutter Als Antwort am 9 Aug. 2012 08:22
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

mann kann es auch über die management shell ausgeben lassen...

$web = Get-SPWeb <WebUrl>
$list = $web.Lists["<ListName>"]
$list.EventReceivers

Ohne Rang
30 Beiträge
Ruediger Als Antwort am 9 Aug. 2012 08:34
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Alles klar. Dann nochmal vielen Dank!!! LG Ruediger