Non è possibile annullare l'eliminazione nella voce di elenco ricevitore evento metodo ItemDeleting in CMSPUBLISHINGSITE # 2

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

  •  18-09-2019
  •  | 
  •  

Domanda

Uso della RC SharePoint 2010 Ho dei problemi annullando l'eliminazione di un elemento della lista utilizzando i ricevitori di eventi. Il mio codice è sparare, impostando la proprietà dei SPItemEventProperties annullare, impostare un messaggio di errore, e gettando un errore indietro al thread chiamante. Questo approccio funziona bene nei metodi di aggiunta / aggiornamento, tuttavia, se usato nel metodo cancellazione posso guardare il codice del fuoco in un debugger, ma la voce è ancora spostato riciclaggio bin del sito.

Inoltre, sto vedendo questo comportamento in un sito creato dal modello "CMSPUBLISHINGSITE # 2" dal stsadm, ma non da un sito creato dal modello "Sito del team" tramite Amministrazione centrale.

Il codice di comportamento anomalo segue:

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;
        }
    }
}

Per riferimento, codice identico è contenuto nel metodo ItemAdding e funziona come previsto.

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;
                }
            }
        }
È stato utile?

Soluzione

Io vi consiglierei di non essere con eccezioni come parte della vostra logica di business. Le eccezioni sono costosi e devono essere utilizzati solo in casi eccezionali, che non venga gestita da logica normale.
Invece, usare qualcosa di simile a questo:

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

E, a proposito, si sta gettando un'eccezione aggiuntiva all'interno del gestore di eventi che probabilmente è la ragione che si vede questo comportamento si è verificato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top