EventReceiver未在SharePoint列表上启动



我正试图为一个博客网站创建一个EventReceiver(用于帖子列表),但在使其工作时遇到了一些问题。我想将"创建者"列更改为"匿名者"。基本上,我在控制台应用程序中处理了这整件事,但是,当控制台应用程序执行时,这只会更改Created By列名。

每当有新项目添加到列表中时,我需要它来更改创建者。我的代码如下。。。。如何修改它以在EventReceiver项目中使用???由于我已经告诉EventReceiver项目我希望EventReceiver附加到的URL,我不确定我可以从这段代码中删除什么,现在它什么都不做,在我调试时没有错误,也没有更改Created By列。

using (SPSite site = new SPSite("http://test-sharepoint/subsite/")) 
{ 
using (SPWeb web = site.OpenWeb()) 
{ 
SPList list = web.Lists["Posts"]; 
SPListItemCollection listItemCollection = list.Items; 
foreach (SPListItem listItem in listItemCollection) 
{ 
SPFieldUserValue userName = new SPFieldUserValue(web, 22, "Anonymous");
listItem["Author"] = userName; 
listItem["Editor"] = userName; 
listItem.Update(); 
} 
web.Update(); 
} 
} 

EDIT:代码在ItemAdded方法中

EDIT#2:这是在尝试相同的代码,除了没有循环和使用属性。ListItem,这是我在Event Recevier项目中的尝试,但没有成功。它只是不会更改创建者字段或任何相关字段(我也尝试过标题)

SPSite site = new SPSite("http://test-sharepoint/subsite/");
SPWeb web = site.OpenWeb();
SPFieldUserValue userName = new SPFieldUserValue(web, 22, "Anonymous");
properties.ListItem["Author"] = userName;
properties.ListItem["Editor"] = userName;
properties.ListItem.Update();

*同样根据我的理解,SPFieldUserValue将获取用户或SharePoint用户组(权限),因此在我的代码中,22获取我想要的SharePoint用户组;匿名者";是该组中的用户。。。


EDIT#3:更进一步,此代码对列表没有问题,但对帖子或评论列表则没有问题,因为它不会更改创建者字段。可能是因为所有项目都被批准/拒绝了吗???无论是批准还是终止,它仍然不会显示为匿名,但正如我提到的,它在另一个列表中运行良好。

public override void ItemAdded(SPItemEventProperties properties)
{
base.ItemAdded(properties);
SPSite site = new SPSite("http://test-sharepoint/hr/blog/"); //SPContext.Current.Site;
SPWeb web = site.OpenWeb();
SPFieldUserValue userName = new SPFieldUserValue(web,22,"Anonymous");
SPListItem currentItem = properties.ListItem;
//currentItem["Title"] = userName;  //DateTime.Now.ToString();
currentItem["Author"] = userName;
currentItem["Editor"] = userName;
currentItem.SystemUpdate();
}

**EDIT#4:好吧,我发现了我的问题,在创建项目时,我选择了自定义列表作为我的列表,但我需要选择帖子或评论,现在上面的代码可以工作了!!!

但现在我有另一个问题,博客上的所有帖子都是先提交审批的。。。因此,事件接收器似乎不适用于管理员以外的用户。它适用于管理员帐户,我可以直接发布帖子或评论,但对于具有"贡献"权限的用户,其帖子已提交审批,仍然会在"管理帖子"页面上显示其姓名。。。我该怎么办?有什么想法吗?**

有效的代码:

public override void ItemAdded(SPItemEventProperties properties)
{
base.ItemAdded(properties);
SPSite site = new SPSite("http://test-sharepoint/hr/blog/"); //SPContext.Current.Site;
SPWeb web = site.OpenWeb();
SPFieldUserValue userName = new SPFieldUserValue(web, 23, "Anonymous");
SPListItem currentItem = properties.ListItem;
currentItem["Author"] = userName;
currentItem["Editor"] = userName;
currentItem.SystemUpdate();
}

为了响应edit#4,在使用SharePoint时,如果代码在由管理员帐户执行时工作,但在由"正常"帐户执行时不工作,则可能是权限造成的。

查看问题SharePoint/WSS的答案:是否修改"创建者"字段?例如修改Author字段的SPItemEventReceiver。

注意:许多SharePoint开发人员建议不要使用RunWithElevatedPrivileges,而是建议使用模拟。请参阅我对以下问题的回答:在哪种情况下使用SPSecurity.RunWithElevatedPrivileges和superusertoken?了解更多详细信息。

相关内容

  • 没有找到相关文章

最新更新