ブログ サイト (投稿リスト用) の EventReceiver を作成しようとしていますが、うまく動作しません。[作成者] 列を [匿名] に変更したいと考えています。基本的に、私はこのすべてをコンソールアプリケーションで動作させていますが、コンソールアプリケーションが実行されたときに作成者の列名のみが変更されます。
新しいアイテムがリストに追加されるたびに作成者を変更する必要があります。私のコードは以下のとおりです....これを変更して 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 を使用する以外は同じコードを試しています。これは、イベント レシーバー プロジェクトでの私の試みでしたが、うまくいきませんでした。作成者フィールド、またはその問題のフィールドは変更されません(タイトルも試しました)
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:問題が見つかりました。プロジェクトを作成するときに、添付するリストとしてカスタムリストを選択しましたが、投稿またはコメントを選択する必要があり、上記のコードが機能するようになりました!!!
しかし今、私は別の問題を抱えています.ブログのすべての投稿は最初に承認のために送信されます...そして、このため、イベントレシーバーは管理者以外のユーザーに対しては機能しないようです. 投稿またはコメントを直接公開できる管理者アカウントでは問題なく機能しますが、投稿が承認のために送信される投稿権限を持つユーザーの場合、投稿の管理ページに名前が表示されます...これについてどうすればよいですか? 何か案は?**
動作するコード:
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();
}