为什么这个事件接收器代码不起作用?

时间:2011-09-30 18:44:39

标签: c# sharepoint event-receiver

我们正在尝试创建一个ItemAdded事件接收器,它将更新自定义SharePoint列表中的Created By(Author)字段。在此自定义列表中,我们启用了Item-Lever权限,以便userA只能看到创建的内容。问题是当另一个用户(UserB)为其他人(UserA)创建项目时,用户A将无法看到该项目。

因此,我们希望将Request By字段中的任何内容复制到Created By字段。为了实现这一目标,在网上很少人的帮助下,我们创建了以下事件接收器,但它不起作用。你能告诉我们它有什么问题吗?

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:服务器遇到内部错误。有关更多信息,请关闭服务器.config文件中的customErrors。服务器堆栈跟踪:异常重新抛出 在[0]:
      在System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg)
      在System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&amp; msgData,Int32 type)
      在Microsoft.SharePoint.Administration.ISPUserCodeExecutionHostProxy.Execute(键入userCodeWrapperType,Guid siteCollectionId,SPUserToken userToken,String affinityBucketName,SPUserCodeExecutionContext executionContext)
      在Microsoft.SharePoint.UserCode.SPUserCodeExecutionManager.Execute(输入userCodeWrapperType,SPSite site,SPUserCodeExecutionContext executionContext)

    在createdByElevate,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 97fddd01b051f985中加载并运行事件接收器createdByElevate.EventReceiver1.EventReceiver1时出错。其他信息如下。服务器遇到内部错误。有关更多信息,请关闭服务器.config文件中的customErrors。

2 个答案:

答案 0 :(得分:1)

您的错误似乎表明您已将此部署为沙盒解决方案。遗憾的是,您无法在此类部署中使用提升权限(SPSecurity.RunWithElevatedPrivileges)。您要么想到另一种解决此限制的方法,要么重新部署为场解决方案

答案 1 :(得分:0)

您是否可以首先验证“提交用户”和“请求者”列是否具有相同的数据类型。 我的意思是如果他们是相同的类型然后它将工作正常。

谢谢, -Santosh