Impossible d'annuler la suppression dans le récepteur événement Liste Article méthode ItemDeleting dans CMSPUBLISHINGSITE # 2

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

  •  18-09-2019
  •  | 
  •  

Question

Utilisation du RC SharePoint 2010 J'ai des problèmes annuler la suppression d'un élément de la liste en utilisant les récepteurs d'événements. Mon code est mise à feu, le réglage de la propriété cancel des SPItemEventProperties, la fixation d'un message d'erreur, et en jetant une erreur au thread appelant. Cette approche fonctionne très bien dans les méthodes, cependant, lorsqu'il est utilisé dans la méthode de suppression d'ajouter / mise à jour je peux regarder le feu de code dans un débogueur, mais l'élément est toujours déplacé au bac de recyclage du site.

De plus, je vois ce comportement dans un site créé à partir du modèle « CMSPUBLISHINGSITE # 2 » de stsadm, mais pas d'un site créé à partir du modèle « par équipe » par l'administration centrale.

Le code de mauvaise conduite suit:

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

Pour référence, code identique est contenu dans la méthode ItemAdding et fonctionne comme prévu.

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;
                }
            }
        }
Était-ce utile?

La solution

Je vous recommande de ne pas être en utilisant des exceptions dans le cadre de votre logique métier. Les exceptions sont coûteuses et ne devraient être utilisés dans des cas exceptionnels qui ne sont pas traités par la logique normale.
Au lieu de cela, utiliser quelque chose comme ceci:

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

Et, en passant, vous jetez une exception supplémentaire dans le gestionnaire d'événements qui est probablement la raison pour laquelle vous voyez ce comportement que vous rencontrez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top