Kann nicht Löschen in List Item Ereignisempfänger ItemDeleting Methode in CMSPUBLISHINGSITE # 2 Abbrechen

StackOverflow https://stackoverflow.com/questions/2403829

  •  18-09-2019
  •  | 
  •  

Frage

, um die Sharepoint 2010-RC Verwendet ich Probleme habe, das Löschen eines Listenelement Cancelling Ereignisempfänger verwendet wird. Mein Code feuert, Eigentum der SPItemEventProperties abbrechen Einstellung, Einstellung eine Fehlermeldung, und wirft einen Fehler zurück an den aufrufenden Thread. Dieser Ansatz funktioniert gut in den Hinzufügen / Aktualisieren von Methoden jedoch, wenn in der Löschmethode verwendet wird, kann ich den Code Feuer in einem Debugger sehen, aber das Element bewegt wird, nach wie vor zu der Papierkorb der Website.

Ferner sehe mir dieses Verhalten in einer Website von der „CMSPUBLISHINGSITE # 2“ von stsadm Vorlage erstellt, aber nicht von einer Website aus der „Team Site“ Vorlage über die Zentraladministration erstellt.

Der Code folgt abgestürzten:

public override void ItemDeleting(SPItemEventProperties properties)
{
    if (!(properties.UserLoginName == "SHAREPOINT\\system"))
    {
        try
        {
            throw new CreatorIdAliasingException("Please contact support if you feel a release web site has been inappropriately assigned to your organization.");
        }
        catch (CreatorIdAliasingException ex)
        {
            properties.Cancel = true;
            properties.ErrorMessage = ex.ToString();
            properties.InvalidateListItem();
            throw;
        }
    }
}

Als Referenz identischer Code ist in der ItemAdding Methode enthalten und funktioniert wie erwartet.

public override void ItemAdding(SPItemEventProperties properties)
        {
            base.ItemAdding(properties);
            if (!(properties.UserLoginName == "SHAREPOINT\\system"))
            {
                try
                {
                    throw new InvalidCreatorIdException("Please contact support to add a known URL to your list of release web sites.");
                }
                catch (InvalidCreatorIdException ex)
                {
                    properties.Cancel = true;
                    properties.ErrorMessage = ex.ToString();
                    properties.InvalidateListItem();
                    throw;
                }
            }
        }
War es hilfreich?

Lösung

Ich würde Sie empfehlen Ausnahmen als Teil Ihrer Business-Logik nicht zu verwenden. Ausnahmen sind teuer und sollte nur in Ausnahmefällen verwendet werden, die durch normale Logik nicht behandelt werden.
Stattdessen, so etwas wie folgt verwenden:

public override void ItemDeleting(SPItemEventProperties properties)
{
  if (properties.UserLoginName.ToLower().CompareTo("sharepoint\\system") != 0)
  {
    properties.Cancel = true;
    properties.ErrorMessage = "Some error has occured....";
  }
}

Und, nebenbei bemerkt, erhalten Sie eine zusätzliche Ausnahme innerhalb der Event-Handler werfen das ist wahrscheinlich der Grund, dass Sie dieses Verhalten sehen Sie erleben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top