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.




-ing Event Receiver redirected nicht mehr auf App Page

Unbeantwortet Dieser Beitrag hat 8 Antworten

Ohne Rang
54 Beiträge
DDG erstellt 13 Dez. 2012 17:55
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo zusammen,

ich hab für mich ein unerklärliches Problem und zwar habe ich SharePoint 2010 und Visual Studio 2010. Dazu habe ich ein paar Event Receiver erstellt. Dabei reagieren die Event Receiver auf Fehler, während des Ausführen des E R Codes, mit einem

properties.Status = SPEventReceiverStatus.CancelWithRedirectUrl;

properties.RedirectUrl = "/_layouts/Unterordner/Name.aspx.

Ein Fehler kann zum Beispiel sein, dass ein Element mit einer vorhanden ID angelegt wird. Hier sollte dann auf die App Page, welche im E R Projekt unter dem Layouts Ordner liegt, redirected werden.

Das ganze hat auch schon einmal funktioniert. Für den auftretenden Fehler wurde die passende App Page angezeigt. Dann habe ich noch an dem E R weiterentwickelt und jetzt werden die App Pages nicht mehr ausgerufen. Der E R wird auch nicht mehr weiter ausgeführt aber der Vorgang (Anlegen des Elements) wird trotzdem ausgeführt. Was ja eigentlich nicht passieren dürfte.

Ich wäre sehr froh wenn mir jemand sagen kann woran das liegen könnte, dass die App Pages nicht angezeigt werden und der E R nicht komplett abgebrochen wird. Ich wäre echt sehr dankbar, denn ich finde dazu auch nichts im Internet.

Grüße

Dennis

 

Alle Antworten

Ohne Rang
634 Beiträge
Olaf Didszun Als Antwort am 13 Dez. 2012 18:05
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Was steht denn im ULS-Log von SharePoint, wenn Dein Event Receiver aufgerufen wird? Wenn es ein Problem gibt, sollte da eigentlich etwas hinein geschrieben werden.

Grüße

Olaf

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 13 Dez. 2012 18:57
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Füge mal bitte properties.Cancel = true hinzu

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spitemeventproperties.aspx

 

Ohne Rang
54 Beiträge
DDG Als Antwort am 14 Dez. 2012 11:39
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

Danke für die schnellen antworten. Also das mit properties.Cancel = true hatte ich schon probiert und es hat leider nichts gebracht. Ich hab mir mal die Loggings angeschaut (ich hoff mal das waren die richtigen C:\Programme\Gemeinsame Dateien\Microsoft Shared\Web Server Extensions\14\LOGS), dabei ist mir auch nichts besonderes aufgefallen. Aber vielleicht habe ich da etwas wichtiges übersehen, ich kenne mich da leider zu wenig aus. Des Weiteren habe ich beim debuggen festgestellt, dass die App Page gar nicht mehr aufgerufen wird. Der E R durchläuft den Cancel Vorgang -> base.ItemAdding(properties); und es scheint mir, dass er den E R ganz normal beendet. Würde ich den Fehler nicht über Try-Catch -Block fangen, dann würde der E R einfach die Cancel Befehle ausführen und den Programmcode einfach weiter ausführen.

Grüße

Dennis

Ohne Rang
54 Beiträge
DDG Als Antwort am 14 Dez. 2012 11:46
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Achso ich habe noch vergessen, dass ich vor kurzem die Zeilen

this.EventFiringEnabled = false;

listItem.Update();

this.EventFiringEnabled = true;

eingefügt jedoch werden diese Zeilen erst nach den Cancel Befehlen ausgeführt. Ich bin mir auch nicht sicher, das Problem mit dem App Pages schon vor dem Hinzufügen der oben genannten Zeilen bestand.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 14 Dez. 2012 11:51
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Bekommst Du jetzt einen Fehler oder nicht? Und wird der durcch Try/Catch aufgefangen oder verschluckt?

Wenn man properties.Status = SPEventReceiverStatus.CancelWithRedirectUrl setzt, wird folgender Code trotzdem weiter aufgerufen. Wenn man das nicht möchte, muß man die Methode durch ein einfaches return; verlassen.

Und auf welchem List Item rufst Du Update() auf? Wenn es das Item ist, für das der ER aufgerufen wird, dann darfst Du das in einem -ing-Event nicht machen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
54 Beiträge
DDG Als Antwort am 14 Dez. 2012 13:36
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Also ich habe einen E R (ItemAdding) entwickelt, der auf benutzerdefinierte Listen reagiert. Am Anfang des ER in der ItemAdding Methode habe ich einen Try-Catch-Block erstellt, der den restlichen Code umfasst bis zu der Zeile base.ItemAdding(properties). Innerhalb, bis hole ich mir alle Elemente der Liste und durchlaufe sie und schaue, ob die angegebene ID schon einmal vorhanden ist. Ist dies der Fall wird eine neue Exception geworfen. Codeausschnitt:

 public override void ItemAdding(SPItemEventProperties properties)
       {
           string itemId = null;
           try
           {
               if (properties.ListTitle == Constants.ListName)
               {
                   //Daten für die Erzeugung des Projektbereiches holen
                   SPListItem currentItem = properties.ListItem;
                   ItemId = properties.AfterProperties[Constants.id].ToString();
                   SPListItemCollection proColl = properties.List.Items;
                   foreach (SPListItem item in proColl)
                   {
                       string id = item[Constants.id].ToString();
                       if (itemId == id)
                       {
                           throw new Exception();
                       }

                   }
     //do something
               }
           }
           catch (Exception e)
           {
               properties.Status = SPEventReceiverStatus.CancelWithRedirectUrl;
               properties.RedirectUrl = Constants.customErrorPageStandard;
               properties.Cancel = true;
           }
           base.ItemAdding(properties);
       }

Der Fehler triit auch auf sobald die ID gleich ist und durchläuft den Catch-Block und führt noch base.ItemAdding(properties); aus und erstellt danach das Element. Zudem muss ich sagen, dass ich auch schon den Catch-Block entfernt habe und den Redirect direkt in der If-Anweisung behandelt habe. Jedoch führt der ER dann die Zeilen aus und macht weiter im Programmcode, also kein Redirect und Abbruch.

Jetzt zu dem EventFiringEnable, welches erst in einem ItemAdded ER ausgeführt wird (hab mich leider vertan und dachte das war im Adding). D. h. das anzulegende Element löst einen Adding und Added ER aus. Der EventFiringEnable Befehl bezieht sich auf ein Element das während des Added ER erstellt wird. Also dürfte es nichts ausmachen oder? Ich hoffe mal ich habe jetzt alles gut genug beschrieben. Danke noch einmal für eure Hilfe, ich wäre echt super froh wenn ich noch einen guten Ratschlag bekommen würde.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 14 Dez. 2012 15:04
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="DDG"]Jedoch führt der ER dann die Zeilen aus und macht weiter im Programmcode, also kein Redirect und Abbruch[/quote]

Genau das habe ich doch oben geschrieben: wenn Du willst, daß danach nichts mehr passiert, mußt Du selbst aus dem Code springen, z.B. durch ein simples return;

In Deinem Fall dürfte es ausreichen, wenn Du base.ItemAdding(properties) entfernst (das ist bei ER ohnehin nie notwendig). Du kannst übrigens auch einfach properties.ErrorMessage setzen.

Zu dem anderen Problem: in einem -ed-Event kannst Du auch das auslösende Element bearbeiten. Das item.Update() führt also nicht zu Problemen.

Und noch eine Frage von mir: warum machst Du die Prüfung auf eindeutige Werte per ER? Man kann bei einer Spalte einfach einstellen, daß sie nur eindeutige Werte enthalten darf und schon kümmert sich SharePoint selbst darum.

 

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
54 Beiträge
DDG Als Antwort am 17 Dez. 2012 10:53
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ja das mit dem return hatte ich schon registriert, ich wollte nur noch einmal den ganzen Vorgang schildern. Inzwischen läuft es auch, also nochmals an alle die mir hier geholfen haben vielen vielen Dank. Ich denke es lag wirklich an dem fehlenden return, da ich anscheinend mal mit dem try-catch-Block auch den base.... Befehl eingeschlossen habe.

Also vielen Dank und frohe Weihnachten