Почему этот код получателя событий не работает? - PullRequest
1 голос
/ 30 сентября 2011

Мы пытаемся создать получатель события ItemAdded, который обновит поле «Создано (Автор)» в пользовательском списке SharePoint. В этом пользовательском списке мы включили Разрешения рычага элементов, чтобы пользователь А мог видеть только то, что он создает . Проблема заключается в том, что когда другой пользователь (пользователь B) создает элемент для кого-то другого (пользователь A), пользователь A не сможет увидеть этот элемент.

Итак, мы хотим, чтобы все, что находится в поле «Запрос по», было скопировано в поле «Создано по». Чтобы туда попасть, с помощью нескольких человек, находящихся в Интернете, мы создали следующий приемник событий, но он не работает. Можете ли вы сказать нам, что с ним не так?

using System;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.Workflow;

namespace createdByElevate.EventReceiver1
{
    /// <summary>
    /// List Item Events
    /// </summary>
    public class EventReceiver1 : SPItemEventReceiver
    {
       /// <summary>
       /// An item was added.
       /// </summary>
       public override void ItemAdded(SPItemEventProperties properties)
       {
           //update base first
           base.ItemAdded(properties);
           string SiteUrl = properties.Web.Url;
           SPSecurity.RunWithElevatedPrivileges(delegate()
           {
               using (SPSite site = new SPSite(SiteUrl))
               {
                   SPWeb web = site.OpenWeb();
                   SPList List = web.Lists["listName"];
                   SPListItem item = List.GetItemById(properties.ListItem.ID);
                   item["Submit User"] = item["Requested By"];
                   item.Update();

               }

           });



       }


    }
}

В журналах ULS обнаружена следующая ошибка:

    • Ошибка выполнения изолированного кода. - Внутреннее исключение: System.Runtime.Remoting.RemotingException: сервер обнаружил внутреннюю ошибку. Для получения дополнительной информации отключите customErrors в файле .config сервера. Трассировка стека сервера: исключение переброшено в [0]:
      в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg)
      в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData & msgData, тип Int32)
      в Microsoft.SharePoint.Administration.ISPUserCodeExecutionHostProxy.Execute (Тип userCodeWrapperType, Guid siteCollectionId, SPUserToken userToken, Строка affinityBucketName, SPUserCodeExecutionContext executeContext)
      в Microsoft.SharePoint.UserCode.SPUserCodeExecutionManager.Execute (тип userCodeWrapperType, сайт SPSite, SPUserCodeExecutionContext executeContext)

    Ошибка при загрузке и запуске получателя событий созданногоByElevate.EventReceiver1.EventReceiver1 в созданномByElevate, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = 97fddd01b051f985. Дополнительная информация ниже. Сервер обнаружил внутреннюю ошибку. Для получения дополнительной информации отключите customErrors в файле .config сервера.

Ответы [ 2 ]

1 голос
/ 03 октября 2011

Похоже, ваша ошибка указывает на то, что вы развернули ее как решение для песочницы. К сожалению, вы не можете использовать повышенные привилегии (SPSecurity.RunWithElevatedPrivileges) в этом типе развертывания. Вам придется либо придумать другой способ обойти это ограничение, либо повторно развернуть его как решение для фермы .

0 голосов
/ 03 октября 2011

Можете ли вы сначала проверить, имеют ли столбцы «Отправить пользователя» и «Запрошено» один и тот же тип данных. Я имею в виду, если бы они были одного и того же типа, то это будет нормально работать.

Спасибо, -Santosh

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