为什么不接受此事件接收器代码工作?
我们正在尝试创建一个ItemAdded事件接收器,它将更新自定义SharePoint列表中的创建者(作者)字段。在这个自定义列表中,我们启用了Item-Lever权限,以便userA只能看到他们创建的。问题是当另一个用户(UserB)为其他人(UserA)创建项目时,用户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:服务器遇到内部错误。有关更多信息,请关闭服务器的.config文件中的customErrors。服务器堆栈跟踪:异常重新抛出 在[0]:
在System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(即时聊天reqMsg,即时聊天retMsg)
在System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData & MSGDATA,的Int32类型)
在Microsoft.SharePoint.Administration.ISPUserCodeExecutionHostProxy.Execute(类型userCodeWrapperType,的Guid siteCollectionId,SPUserToken userToken,字符串affinityBucketName,SPUserCodeExecutionContext的ExecutionContext)
在Microsoft.SharePoint.UserCode.SPUserCodeExecutionManager.Execute(类型userCodeWrapperType,的SPSite SPUserCodeExecutionContext executionContext)
在createdByElevate,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 97fddd01b051f985中加载和运行事件接收器createdByElevate.EventReceiver1.EventReceiver1时出错。其他信息如下。服务器遇到内部错误。有关更多信息,请关闭服务器的.config文件中的customErrors。
- 沙盒代码执行请求失败。 - 内部异常:System.Runtime.Remoting.RemotingException:服务器遇到内部错误。有关更多信息,请关闭服务器的.config文件中的customErrors。服务器堆栈跟踪:异常重新抛出 在[0]:
您能否首先验证“Submit User”和“Requested By”列是否具有相同的数据类型。 我的意思是,如果他们是相同的类型,那么它会正常工作。
感谢, -Santosh
是的,它们是同一类型(Person/Group),提交用户与创建者或作者相同,我只是用不同的方式标记 – user973640
你的错误似乎表明您已经部署此为沙盒解决方案。不幸的是,你不能在这种类型的部署中使用提升的权限(SPSecurity.RunWithElevatedPrivileges
)。您必须想办法绕过此限制,或者重新部署为农场解决方案。
Ok I将尝试重新部署为农场解决方案。但是大家都同意这段代码应该工作吗? – user973640
你确定事件接收器已连接并且实际运行吗?运行时,ULS或Windows事件日志中是否有任何内容?当你调试代码时,它会抛出任何异常吗?你必须帮助我们一些,并给我们一些更多的信息。 – SHug
我想我已经正确地附加了它,在Visual Studio中,我将点击F5并附加并测试。它不会抛出任何我能看到的错误。我将仔细检查ULS日志 – user973640
在ULS中发现两个错误: – user973640