No se puede cancelar la eliminación en la lista de elementos receptor método ItemDeleting evento en CMSPUBLISHINGSITE # 2

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

  •  18-09-2019
  •  | 
  •  

Pregunta

Uso de la RC SharePoint 2010 Tengo problemas cancelar la eliminación de un elemento de la lista usando los receptores de eventos. Mi código está disparando, el establecimiento de la propiedad de los SPItemEventProperties cancelar, el establecimiento de un mensaje de error, y lanzando un error de nuevo al subproceso de llamada. Este enfoque funciona bien en los métodos de adición / actualización, sin embargo, cuando se utiliza en el método de borrado puedo ver el fuego código en un depurador, pero el tema todavía se mueve al contenedor de reciclaje del sitio.

Además, estoy viendo este comportamiento en un sitio creado a partir de la plantilla "CMSPUBLISHINGSITE # 2" de stsadm, pero no de un sitio creado a partir de la plantilla "Sitio de grupo" a través de la Administración central.

El código de mal comportamiento sigue:

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

Para referencia, código idéntico está contenido en el método ItemAdding y funciona como se espera.

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;
                }
            }
        }
¿Fue útil?

Solución

Yo te recomendaría que no sea el uso de excepciones como parte de la lógica de negocio. Las excepciones son caros y sólo debe utilizarse en casos excepcionales, que no son manejados por lógica normal.
En su lugar, usar algo como esto:

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

Y, por cierto, usted está lanzando una excepción adicional en el controlador de eventos que probablemente es la razón por la que ve este comportamiento que está experimentando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top