fc2ブログ

2023-09

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);
}

ユーザー列からユーザーを取得する方法

ユーザー列からユーザーを取得する方法です。

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();

リッチテキスト列のメニューをカスタマイズ

リッチテキスト列のメニューをカスタマイズしてみました。

この記事で紹介したカスタマイズは、自己責任で行ってください。


内容は取り消し線を追加!
こんな感じになります。
20100621.jpg


太字やら斜体があるのに取り消し線がないのはおかしいですよね!
……ですよね?w

必要ない文字なら消せ?

まぁそうですよね……。
でも履歴が必要な事ってあると思うんですよ!

その為のバージョン管理?
間違いないです。

でもあったほうが断然便利だと思うんですよ……w

というわけで、勉強も兼ねてやってみました。

Read More »

NEW ENTRY «  | BLOG TOP |  » OLD ENTRY

プロフィール

柚木

Author:柚木
コメント・トラックバックなどお気軽にどうぞ(^^)

連絡先:yuzuki-sharepoint★mail.goo.ne.jp(★を@に変換)

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

リスト・ライブラリ (9)
検索関連 (3)
管理設定 (0)
開発 (14)
その他 (1)
未分類 (0)

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

ブロとも申請フォーム

この人とブロともになる