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.




Popup-Message für Event Receiver

Unbeantwortet Dieser Beitrag hat 14 Antworten

Ohne Rang
53 Beiträge
Jan D erstellt 10 Dez. 2010 09:59
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Sharepointuser,

gerne würde ich während eines Synchronen Event-Receivers eine Popup-Message mit einer Auswahlmöglichkeit verwenden. Ein Beispiel:

- Nutzer löscht Listenelement
- Popup geht auf: "Möchten Sie dieses Element wirklich ganz sicher löschen"? -- Nutzer kann z.B. die Buttons "JA" und "NEIN" drücken
- If "JA"-Button, dann löschen - Else properties.Cancel = true;

Leider finde ich keinen wirklichen Ansatzpunkt um das zu realisieren. Über einen Hinweise würde ich mich sehr freuen.

 

LG

 

Jan

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 10 Dez. 2010 10:23
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das geht (auch bei synchronen Ereignissen) nicht. Die EventReceiver sind von der Oberfläche komplett entkoppelt. Du kannst aus ItemDeleting heraus nur (unter bestimmten Bedingungen) properties.Cancel auf true setzen und eine Meldung ausgeben. Für alles andere mußt Du eine eigene EditForm entwickeln und die Logik dort unterbringen - oder die vorhandene EditForm z.B. mit JavaScript erweitern.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
1714 Beiträge
C.Kaiser Als Antwort am 10 Dez. 2010 10:35
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Siehe Andis Post, aber ich würde die eigene Application Page erstellen:

- Wenn ItemDeleting -> Cancel = true -> Öffne die eigene Application Page und frage nach ob das Element wirklich gelöscht werden soll

Problem mit dem JavaScript: Du müsstest es überall dort hinterlegen, wo ein Element gelöscht werden kann (Über das Item Context menu, über die edit Form, über die DispForm...).

Beste Grüße,
Christian

http://www.sharepoint-rhein-ruhr.de

Ohne Rang
53 Beiträge
Jan D Als Antwort am 10 Dez. 2010 10:54
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Vielen Dank für die schnellen Antworten.

 

Dann an der Stelle aber mal die ganz konkrete Frage:

Das bedeutet, es gibt so direkt keine Möglichkeit, z.B. einen Abbruch mit einer Fehlermeldung durchzuführen?!

 

Edit:

Was hat es dann mit diesem Codebaustein von MS auf sich?

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

Ohne Rang
1714 Beiträge
C.Kaiser Als Antwort am 10 Dez. 2010 11:02
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das ist die von Andi oben angesprochene Mitteilung die man dem Benutzer geben kann. Quasi eine "Fehlerpage".

Wie gesagt, kannst du aus meiner Sicht nur eine eigene aspx-Seite bauen mit der du das abfragst. Ein Pop-Up funktioniert erstmal nur mit JavaScript und das müsstet du auf allen Seiten einbauen, wo es möglich ist das Item zu löschen.

Beste Grüße,
Christian

http://www.sharepoint-rhein-ruhr.de

Ohne Rang
53 Beiträge
Jan D Als Antwort am 10 Dez. 2010 12:02
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich bin gerade ein wenig verwirrt:

Im diesem Post (http://sharepointcommunity.de/forums/p/8349/23932.aspx#23932) hat Andi mir folgenden guten Hinweis gegeben:

"Man kann die asynchronen EventReceiver (-ed) nicht abbrechen. Eben, weil sie asynchron sind. Das geht nur mit den synchronen EventReceivern (-ing), in Deinem Fall also ItemAdding statt ItemAdded."

 

Sollte dann der folgende Code nicht funktionieren?:

       public override void ItemAdding(SPItemEventProperties properties)
       {
               properties.Status = SPEventReceiverStatus.CancelWithError;
               properties.ErrorMessage = "Hallo Welt";
               properties.Cancel = true;
               base.ItemAdding(properties);
       }

 

Aber auch hier passiert schlicht und einfach nichts.

Ich hoffe, dass diese Frage jetzt nicht total abwegig ist.

 

LG

 

Jan

Ohne Rang
1714 Beiträge
C.Kaiser Als Antwort am 10 Dez. 2010 12:17
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hängt der EventReceiver korrekt an der Liste (Wenn du debuggst, springt er dann in den Code)?

Hast du mal versucht, wie oben bei MSDN, zuerst properties.Cancel und dann die Error-Message setzen?

Beste Grüße,
Christian

http://www.sharepoint-rhein-ruhr.de

Ohne Rang
53 Beiträge
Jan D Als Antwort am 10 Dez. 2010 12:23
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="C.Kaiser"]

Hängt der EventReceiver korrekt an der Liste (Wenn du debuggst, springt er dann in den Code)?

Hast du mal versucht, wie oben bei MSDN, zuerst properties.Cancel und dann die Error-Message setzen?

[/quote]

 

Ja, beim Debuggen werden diese Befehle aufgerufen.

Nein, auch beim Aufruf von Cancel und dann Error funktioniert der Code nicht.

 

LG und Danke für Eure Hilfe

Jan

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 10 Dez. 2010 12:53
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Sehr seltsam. Lasse doch mal das base.ItemAdding(properties) einfach weg.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
53 Beiträge
Jan D Als Antwort am 10 Dez. 2010 13:48
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Dann erhalte ich nach dem Deploy folgende Fehlermeldung beim Adden eines Listenelementes:

 

<nativehr>0x81020089</nativehr><nativestack></nativestack>Hallo Welt

Beschreibung: Unbehandelte Ausnahme beim Ausführen der aktuellen Webanforderung. Überprüfen Sie die Stapelüberwachung, um weitere Informationen über diesen Fehler anzuzeigen und festzustellen, wo der Fehler im Code verursacht wurde.

Ausnahmedetails: System.Runtime.InteropServices.COMException: <nativehr>0x81020089</nativehr><nativestack></nativestack>Hallo Welt

Quellfehler:

Beim Ausführen der aktuellen Webanforderung wurde einen unbehandelte Ausnahme generiert. Informationen über den Ursprung und die Position der Ausnahme können mit der Ausnahmestapelüberwachung angezeigt werden.

Stapelüberwachung:

[COMException (0x81020089): <nativehr>0x81020089</nativehr><nativestack></nativestack>Hallo Welt]
Microsoft.SharePoint.Library.SPRequestInternalClass.AddOrUpdateItem(String bstrUrl, String bstrListName, Boolean bAdd, Boolean bSystemUpdate, Boolean bPreserveItemVersion, Boolean bUpdateNoVersion, Int32& plID, String& pbstrGuid, Guid pbstrNewDocId, Boolean bHasNewDocId, String bstrVersion, Object& pvarAttachmentNames, Object& pvarAttachmentContents, Object& pvarProperties, Boolean bCheckOut, Boolean bCheckin, Boolean bMigration, Boolean bPublish, String bstrFileName, ISP2DSafeArrayWriter pListDataValidationCallback, ISP2DSafeArrayWriter pRestrictInsertCallback, ISP2DSafeArrayWriter pUniqueFieldCallback) +0
Microsoft.SharePoint.Library.SPRequest.AddOrUpdateItem(String bstrUrl, String bstrListName, Boolean bAdd, Boolean bSystemUpdate, Boolean bPreserveItemVersion, Boolean bUpdateNoVersion, Int32& plID, String& pbstrGuid, Guid pbstrNewDocId, Boolean bHasNewDocId, String bstrVersion, Object& pvarAttachmentNames, Object& pvarAttachmentContents, Object& pvarProperties, Boolean bCheckOut, Boolean bCheckin, Boolean bMigration, Boolean bPublish, String bstrFileName, ISP2DSafeArrayWriter pListDataValidationCallback, ISP2DSafeArrayWriter pRestrictInsertCallback, ISP2DSafeArrayWriter pUniqueFieldCallback) +406

[SPException: Hallo Welt]
Microsoft.SharePoint.SPGlobal.HandleComException(COMException comEx) +27257906
Microsoft.SharePoint.Library.SPRequest.AddOrUpdateItem(String bstrUrl, String bstrListName, Boolean bAdd, Boolean bSystemUpdate, Boolean bPreserveItemVersion, Boolean bUpdateNoVersion, Int32& plID, String& pbstrGuid, Guid pbstrNewDocId, Boolean bHasNewDocId, String bstrVersion, Object& pvarAttachmentNames, Object& pvarAttachmentContents, Object& pvarProperties, Boolean bCheckOut, Boolean bCheckin, Boolean bMigration, Boolean bPublish, String bstrFileName, ISP2DSafeArrayWriter pListDataValidationCallback, ISP2DSafeArrayWriter pRestrictInsertCallback, ISP2DSafeArrayWriter pUniqueFieldCallback) +27642831
Microsoft.SharePoint.SPListItem.AddOrUpdateItem(Boolean bAdd, Boolean bSystem, Boolean bPreserveItemVersion, Boolean bNoVersion, Boolean bMigration, Boolean bPublish, Boolean bCheckOut, Boolean bCheckin, Guid newGuidOnAdd, Int32& ulID, Object& objAttachmentNames, Object& objAttachmentContents, Boolean suppressAfterEvents, String filename) +26391133
Microsoft.SharePoint.SPListItem.UpdateInternal(Boolean bSystem, Boolean bPreserveItemVersion, Guid newGuidOnAdd, Boolean bMigration, Boolean bPublish, Boolean bNoVersion, Boolean bCheckOut, Boolean bCheckin, Boolean suppressAfterEvents, String filename) +26390766
Microsoft.SharePoint.SPListItem.Update() +161
Microsoft.SharePoint.WebControls.SaveButton.SaveItem(SPContext itemContext, Boolean uploadMode, String checkInComment) +848
Microsoft.SharePoint.WebControls.SaveButton.OnBubbleEvent(Object source, EventArgs e) +1167
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +70
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +29
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2981

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 10 Dez. 2010 14:28
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Da bezweifle ich aber, daß es damit zu tun hat. Oder verwendest Du eine eigene Basisklasse, also nicht direkt SPItemEventReceiver?

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
53 Beiträge
Jan D Als Antwort am 10 Dez. 2010 15:01
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich warte ja schon lange Zeit darauf, Dir ein einziges Mal wiedersprechen zu können :)

Die Nachricht erscheint beim Debuggen nach dem Durchlauf  der Schleife...hier mal der gesamte Code des Event Receivers:

 

using System;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.Workflow;

namespace isms_v2.er_source_liste_lesen
{
    /// <summary>
    /// Listenelementereignisse
    /// </summary>
    public class er_source_liste_lesen : SPItemEventReceiver
    {
       /// <summary>
       /// Ein Element wird hinzugefügt..
       /// </summary>
       public override void ItemAdding(SPItemEventProperties properties)
       {
           if (properties.ListTitle == "sources"){
               properties.Status = SPEventReceiverStatus.CancelWithError;
               properties.Cancel = true;
               properties.ErrorMessage = "Hallo Welt";
              
           }
           //base.ItemAdding(properties);
       }


    }
}

 

 

Ich kann mir das Verhalten vom SP leider ebenfalls nicht erklären.

 

LG

Jan

Ohne Rang
1714 Beiträge
C.Kaiser Als Antwort am 10 Dez. 2010 15:04
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

welche Schleife?

was pasiert denn wenn du das properties.Status auskommentierst?

Beste Grüße,
Christian

http://www.sharepoint-rhein-ruhr.de

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 10 Dez. 2010 15:45
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Jan D"]Ich warte ja schon lange Zeit darauf, Dir ein einziges Mal wiedersprechen zu können :)[/quote]

Heh, ich hab Dir doch gar nichts getan ;-)

Leider habe ich aber trotzdem keine Idee, woher das kommt. Ich habe bisher in keinem EventReceiver base.<Event> aufgerufen und noch nie ein Problem gehabt. Ich könnte mir aber vorstellen, daß damit Cancel wieder auf false gesetzt wird.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 13 Dez. 2010 08:08
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Jan D"]System.Runtime.InteropServices.COMException: <nativehr>0x81020089</nativehr><nativestack></nativestack>Hallo Welt

[/quote]

Das ist das korrekte verhalten bei "CancelWithError". SharePoint erstellt einfach eine Exception und wenn man in der Web.config (so wie du) CustomErrors="off" hat, werden die Exception Details angezeigt.

http://stevepietrek.com/2007/07/28/turn-off-sharepoint-custom-error-messages/