我正在尝试为博客网站(针对帖子列表)创建一个EventReceiver,并且在使其工作时遇到了一些麻烦。我想将创建者列更改为匿名。基本上,我在控制台应用程序中使用了整个工作,但是,只有在执行控制台应用程序时才会更改“创建者”列名称。EventReceiver不会在SharePoint列表中触发
无论何时将新项目添加到列表中,我都需要它来更改创建者。我的代码如下....我如何修改这个在EventReceiver项目中使用?由于我已经告诉EventReceiver项目我想要连接到EventReceiver的URL,我不确定我可以从这段代码中删除什么,现在它只是不做任何事情,没有错误,也没有修改“创建者”列时我调试。
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();
}
}
编辑:代码在ItemAdded方法
编辑#2:这是尝试相同的代码,只是没有循环使用properties.ListItem,这是我在一个活动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用户组...
编辑#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();
}
**编辑#4:好吧,我发现我的问题,创建项目时,我选择了自定义列表作为我的列表附加到,但我需要选择帖子或评论,现在上面的代码工作!
但现在我有另一个问题,博客上的所有帖子都首先提交审批......并且由于此事件接收器似乎不适用于管理员以外的其他用户。它适用于管理员帐户,我可以直接发布帖子或评论,但对于具有Contribute权限的用户,帖子已提交给审批人的用户仍然可以在“管理帖子”页面上显示他们的姓名......我该怎么做?任何想法**
,工程代码:
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();
}
请尝试按照本指南来查看您是否执行了此处提及的所有步骤:http://www.dotnetcurry.com/ShowArticle.aspx?ID=649。另一件事是,你可以修改你的代码,以使用'ItemAdded'事件接收器中可用的'properties'参数中的'ListItem'(或'ListItemId')。这样你可以避免每次更新所有项目。 –
感谢您的回复,我实际上尝试使用properties.ListItem而不是遍历所有项目,但它仍然不起作用。我将在原始帖子中粘贴我的代码... –
代码是否实际运行,但不会更改字段的值,您可以调试它?如果是这样,请用调试器验证是否没有抛出异常并且所有行均已运行。我还假设具有3个参数的'SPFieldUserValue'构造函数应该将同一个查找用户的id和值作为目标。尝试将其更改为“SPFieldUserValue userName = new SPFieldUserValue(web,”Anonymous“);'。应该直接将匿名用户添加到SharePoint用户(如果您仅添加他所在的AD组,但不添加用户本身,则可能无法正常工作)。 –