SystemUpdate()で承認時のコメントが消える…
タイトルの通りです。
アイテムのバージョンや更新日、承認状態等を変えずにアイテムを更新出来るSystemUpdateメソッドですが、これを行うと承認時のコメントが消えてしまうことが判明…(TдT)
Update()の場合は、承認済み(or却下)から承認待ちに変わるので承認時のコメントが消えるのは分かりますが。
仕方がないので、承認時のコメントはセットし直します。。。
SPListItem item = ***;
string comme = item.ModerationInformation.Comment;
item["列名"] = "更新する値";
item.SystemUpdate();
item.ModerationInformation.Comment = comme;
item.SystemUpdate();
アイテムのバージョンや更新日、承認状態等を変えずにアイテムを更新出来るSystemUpdateメソッドですが、これを行うと承認時のコメントが消えてしまうことが判明…(TдT)
Update()の場合は、承認済み(or却下)から承認待ちに変わるので承認時のコメントが消えるのは分かりますが。
仕方がないので、承認時のコメントはセットし直します。。。
SPListItem item = ***;
string comme = item.ModerationInformation.Comment;
item["列名"] = "更新する値";
item.SystemUpdate();
item.ModerationInformation.Comment = comme;
item.SystemUpdate();
スポンサーサイト
BreakRoleInheritanceメソッドの不思議
SPWeb myWeb = ***;
SPListItem item = ***;
myWeb.AllowUnsafeUpdates = true;
item.BreakRoleInheritance(false);
としたら「このページのセキュリティの検証は正しくありません」というエラーが発生しました。
BreakRoleInheritanceはアイテムの権限の継承を外すというメソッド。
http://msdn.microsoft.com/ja-jp/library/ms441135(v=office.12).aspx
引数falseで、全ユーザー&グループも全て削除します。
(trueなら継承を外すだけ)
このエラーが発生したあとの権限は、継承が外れただけの状態でした。
継承を外して、ユーザー(グループ)を削除しようかなって時にエラーになったと思われます。
たぶんコレですね。
http://sharepointyuzuki.blog54.fc2.com/blog-entry-9.html
ちなみにシステムアカウントで実行した場合は同じコードを実行してもエラーにはなりません。
システムアカウントに偽装した場合にだけ発生しました。
仕方がないので、継承をはずしてから1個ずつ外す。
SPWeb myWeb = ***;
SPListItem item = ***;
myWeb.AllowUnsafeUpdates = true;
item.BreakRoleInheritance(true);
myWeb.AllowUnsafeUpdates = true;
SPRoleAssignmentCollection roleColl = item.RoleAssignments;
for (int i = roleColl.Count - 1; i >= 0; i--)
{
roleColl.Remove(roleColl[i].Member);
}
…ついでにいつもやってしまうエラー(笑)
foreach (SPRoleAssignment role in item.RoleAssignments)
{
item.RoleAssignments.Remove(role.Member);
}
エラー:Collection was modified; enumeration operation may not execute
追記
色々見てたら見つけた。
なるほど。こうでも良いのか。
while(item.RoleAssignments.Count > 0)
{
item.RoleAssignments.Remove(0);
}
SPListItem item = ***;
myWeb.AllowUnsafeUpdates = true;
item.BreakRoleInheritance(false);
としたら「このページのセキュリティの検証は正しくありません」というエラーが発生しました。
BreakRoleInheritanceはアイテムの権限の継承を外すというメソッド。
http://msdn.microsoft.com/ja-jp/library/ms441135(v=office.12).aspx
引数falseで、全ユーザー&グループも全て削除します。
(trueなら継承を外すだけ)
このエラーが発生したあとの権限は、継承が外れただけの状態でした。
継承を外して、ユーザー(グループ)を削除しようかなって時にエラーになったと思われます。
たぶんコレですね。
http://sharepointyuzuki.blog54.fc2.com/blog-entry-9.html
ちなみにシステムアカウントで実行した場合は同じコードを実行してもエラーにはなりません。
システムアカウントに偽装した場合にだけ発生しました。
仕方がないので、継承をはずしてから1個ずつ外す。
SPWeb myWeb = ***;
SPListItem item = ***;
myWeb.AllowUnsafeUpdates = true;
item.BreakRoleInheritance(true);
myWeb.AllowUnsafeUpdates = true;
SPRoleAssignmentCollection roleColl = item.RoleAssignments;
for (int i = roleColl.Count - 1; i >= 0; i--)
{
roleColl.Remove(roleColl[i].Member);
}
…ついでにいつもやってしまうエラー(笑)
foreach (SPRoleAssignment role in item.RoleAssignments)
{
item.RoleAssignments.Remove(role.Member);
}
エラー:Collection was modified; enumeration operation may not execute
追記
色々見てたら見つけた。
なるほど。こうでも良いのか。
while(item.RoleAssignments.Count > 0)
{
item.RoleAssignments.Remove(0);
}
ユーザー列からユーザーを取得する方法
ユーザー列からユーザーを取得する方法です。
SPWeb myWeb;
SPListItem item;
SPField field;
//複数選択不可の場合
SPFieldUserValue userValue = new SPFieldUserValue(myWeb, item[field.Id].ToString());
SPUser user = userValue.User;
//複数選択可の場合
SPFieldUserValueCollection usersValue = new SPFieldUserValueCollection(myWeb, item[field.Id].ToString());
foreach (SPFieldUserValue value in usersValue)
{
SPUser user = value.User;
}
//グループの場合
SPGroup group = myWeb.Groups[userValue.LookupValue];
SPWeb myWeb;
SPListItem item;
SPField field;
//複数選択不可の場合
SPFieldUserValue userValue = new SPFieldUserValue(myWeb, item[field.Id].ToString());
SPUser user = userValue.User;
//複数選択可の場合
SPFieldUserValueCollection usersValue = new SPFieldUserValueCollection(myWeb, item[field.Id].ToString());
foreach (SPFieldUserValue value in usersValue)
{
SPUser user = value.User;
}
//グループの場合
SPGroup group = myWeb.Groups[userValue.LookupValue];
アイテムの作成
時々思い出せなくなるので、メモメモ..._〆(゚▽゚*)
SPList MyList = SPContext.Current.List;
◆リストアイテムの作成◆
SPListItem MyItem = list.Items.Add();
MyItem[list.Fields.GetFieldByInternalName("Title").Id] = "テストアイテム";
MyItem.Update();
◆ライブラリへファイルの作成◆
System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("Shift-JIS");
string FileName = "ファイル作るよ.txt";
byte[] ByteArray = encoding.GetBytes("ただのファイル");
SPFileCollection Files = MyList.RootFolder.Files;
Files.Add(FileName, ByteArray, true);
◆フォルダの作成◆
SPWeb MyWeb = SPContext.Current.Web;
string FolderName = "フォルダ作るよ";
SPListItem MyItem = MyList.Items.Add(MyWeb.Url + "/" +
MyList.RootFolder.Url, SPFileSystemObjectType.Folder, FolderName);
MyItem.Update();
SPList MyList = SPContext.Current.List;
◆リストアイテムの作成◆
SPListItem MyItem = list.Items.Add();
MyItem[list.Fields.GetFieldByInternalName("Title").Id] = "テストアイテム";
MyItem.Update();
◆ライブラリへファイルの作成◆
System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("Shift-JIS");
string FileName = "ファイル作るよ.txt";
byte[] ByteArray = encoding.GetBytes("ただのファイル");
SPFileCollection Files = MyList.RootFolder.Files;
Files.Add(FileName, ByteArray, true);
◆フォルダの作成◆
SPWeb MyWeb = SPContext.Current.Web;
string FolderName = "フォルダ作るよ";
SPListItem MyItem = MyList.Items.Add(MyWeb.Url + "/" +
MyList.RootFolder.Url, SPFileSystemObjectType.Folder, FolderName);
MyItem.Update();