não pode cancelar a eliminação na lista de eventos item método receptor ItemDeleting em CMSPUBLISHINGSITE # 2

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

  •  18-09-2019
  •  | 
  •  

Pergunta

Usando o SharePoint 2010 RC Estou tendo problemas a cancelar a exclusão de um item da lista usando receptores de eventos. Meu código está disparando, definindo a propriedade dos SPItemEventProperties cancelar, definindo uma mensagem de erro, e lançar uma volta de erro para o segmento chamado. Esta abordagem funciona bem na adição / actualização dos métodos, no entanto, quando utilizada no método de exclusão posso assistir o fogo código em um depurador, mas o item ainda é movido para lixeira do site.

Além disso, eu estou vendo esse comportamento em um site criado a partir do "CMSPUBLISHINGSITE # 2" modelo a partir de stsadm, mas não a partir de um site criado a partir do "Team Site" template via Administração Central.

O código de mau comportamento a seguir:

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 referência, código idêntico está contida no método ItemAdding e funciona como esperado.

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

Solução

Eu recomendo que você não estar usando exceções como parte de sua lógica de negócio. Exceções são caros e só deve ser usado em casos excepcionais que não são tratados pela lógica normal.
Em vez disso, use algo como isto:

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

E, por falar nisso, você está lançando uma exceção adicional dentro do manipulador de eventos que provavelmente é a razão que você vê este comportamento que você está enfrentando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top