首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未在SharePoint列表上触发EventReceiver

未在SharePoint列表上触发EventReceiver
EN

Stack Overflow用户
提问于 2012-09-21 01:33:37
回答 1查看 6.6K关注 0票数 1

我正在尝试为博客网站创建一个EventReceiver (用于帖子列表),但在运行时遇到了一些问题。我想将“创建者”列更改为“匿名”。基本上,我在一个控制台应用程序中工作,但是,这只会在执行控制台应用程序时更改创建者列名。

每当有新项目添加到列表中时,我需要它来更改创建者。我的代码是below....how,我要修改它以在EventReceiver项目中使用吗?因为我已经告诉了EventReceiver项目我想要EventReceiver附加到的网址,我不确定我可以从这段代码中删除什么,现在它没有做任何事情,没有错误,也没有在我调试时更改Created By列。

代码语言:javascript
复制
   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,这是我在事件接收器项目中的尝试,但没有运气。它只是不会改变创建者字段,或者任何字段(我也尝试了标题)

代码语言:javascript
复制
       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:更多进展,这段代码对列表没有问题,但不适用于帖子或评论列表,对于那些它不会更改创建者字段的列表。会不会是因为所有项目的批准/拒绝??无论是批准还是等待,它仍然不会显示匿名,但就像我提到的,它在不同的列表中运行良好。

代码语言:javascript
复制
   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:好吧,我发现了我的问题,当创建项目时,我选择了自定义列表作为我的附加列表,但我需要选择帖子或评论,现在上面的代码可以工作了!

但现在我有了另一个问题,博客上的所有帖子都是首先提交给approval...and的,由于这一点,事件接收器似乎不适用于除管理员之外的用户。它适用于管理员帐户,我可以直接发布帖子或评论,但对于拥有Contribute权限的用户,其帖子已提交供审批,但仍在管理帖子page...what上显示其姓名,我可以这样做吗?有什么想法吗?**

可以工作的代码:

代码语言:javascript
复制
   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();
   }
EN

回答 1

Stack Overflow用户

发布于 2013-03-23 23:01:06

作为对编辑#4的响应,当使用SharePoint时,如果代码在由管理员帐户执行时可以工作,但在由“普通”帐户执行时不能工作,则可能是权限造成的。

有关修改Author字段的SPItemEventReceiver示例,请参阅问题SharePoint/WSS: Modify “created by” field?answer

注意:许多SharePoint开发人员建议不要使用RunWithElevatedPrivileges,而建议使用模拟。有关更多详细信息,请参阅问题In which situation use SPSecurity.RunWithElevatedPrivileges with superusertoken?的my answer

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12517812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档