我正在嘗試爲博客網站(針對帖子列表)創建一個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組,但不添加用戶本身,則可能無法正常工作)。 –