SPListItemから作成者などのSPUserオブジェクトを得るには?
あるアイテムのユーザーのフィールド(複数選択不可の場合)の値をSPListItemオブジェクトからたとえばSPListItem["作成者"]取得すると「ID;#ユーザ名」という文字列になってしまいます。このままではログイン名がわかりません。できれば、SPUserオブジェクトがほしいです。
それをするための、とりあえず知っている方法を以下に書きます。(itemが該当のSPListItemで、webは親SPWebオブジェクトとします。)
SPFieldUserValue usrFldVal = new SPFieldUserValue(web, item["作成者"].ToString()); SPUser user = usrFldVal.User; //たとえばログイン名を取得 string loginName = user.LoginName;
もっといい方法ないのでしょうか。。。
また、複数指定可能なユーザーのフィールドの場合は、
//事前に"複数ユーザ"という名前の複数指定可能なユーザー列を追加してあります。 if (item["複数ユーザ"] != null) { SPFieldUserValueCollection usrfldvalColl = new SPFieldUserValueCollection(web, item["複数ユーザ"].ToString()); List<SPUser> users = usrfldvalColl.ConvertAll<SPUser>(delegate(SPFieldUserValue val) { return val.User; }); //処理 }
でいけました。
これも、もっといい方法ないのでしょうか。。。
ちなみに、複数指定不可のユーザーフィールドは上記のような文字列であるのに対して、複数指定可能ユーザーフィールドの場合はitem["複数ユーザ"]はnullでなければSPFieldUserValueCollection オブジェクトが直接入っていました。上記のusrfldvalCollは以下のように書けます。
SPFieldUserValueCollection usrfldvalColl = item["複数ユーザ"] as SPFieldUserValueCollection;
なぜ複数指定不可のユーザーフィールドは文字列なのか謎です。