Невозможно отменить удаление в приемнике события List Item ItemDeleting в CMSPUBLISHINGSITE # 2 - PullRequest
1 голос
/ 08 марта 2010

Использование SharePoint 2010 RC У меня возникают проблемы при отмене удаления элемента списка с помощью приемников событий. Мой код запускается, устанавливает свойство cancel объекта SPItemEventProperties, устанавливает сообщение об ошибке и возвращает ошибку обратно в вызывающий поток. Этот подход прекрасно работает в методах добавления / обновления, однако при использовании в методе удаления я могу наблюдать за тем, как код запускается в отладчике, но элемент по-прежнему перемещается в мусорную корзину сайта.

Кроме того, я наблюдаю такое поведение на сайте, созданном из шаблона "CMSPUBLISHINGSITE # 2" из stsadm, но не на сайте, созданном из шаблона "Сайт группы" через центр администрирования.

Код неправильного поведения следует:

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

Для справки, идентичный код содержится в методе ItemAdding и работает как положено.

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

1 Ответ

2 голосов
/ 09 марта 2010

Я бы порекомендовал вам не использовать исключения как часть вашей бизнес-логики. Исключения дороги и должны использоваться только в исключительных случаях, которые не обрабатываются обычной логикой.
Вместо этого используйте что-то вроде этого:

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

И, кстати, вы вызываете дополнительное исключение в обработчике событий, что, вероятно, является причиной того, что вы видите такое поведение, которое вы испытываете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...