こんにちは、あんこ先生です。
ユーザー列に書き込もうとして、ひたすら失敗した経験ありませんか?
SharePointリストのユーザー列、デフォルトのフォームからだとかんたんに書き込めます。
反面、それ以外の方法となると一気に難易度が高くなるにくい列です。
ユーザー情報なので、Office365ユーザーやOffice365グループから選択した値を書き込みたいですよね。
残念、そのまま指定してもエラーすら出ず弾かれてしまうんです。
この理由は、ユーザー列の更新に必要な列が存在しないことに起因します。
そんなこと言われても意味わかんないですよね。
そこで、今回は様々なアプローチでユーザー列に書き込む方法を解説します。
これできるようになると、ギャラリーから選択したユーザーを書き込んだりもできますよ。
コンボボックス云々については、別記事で紹介していますのでこちらをご確認ください。
Contents
様々なアプローチでユーザー列に書き込む方法
試してみること
今回はフォームコントロールからユーザー列を更新する方法に限定します。
アプローチ方法は次の3点です。
- 普通にフォームから更新する
- Office365ユーザーの情報を使って更新する
- Office365グループの情報を使って更新する
事前準備
はじめにユーザー列だけのSharePointリストを作成します。
他の列はあっても邪魔にしかならないので消しておきます。
Title列は必須を外して非表示にしておくとスッキリしますよ。
ユーザー列は列の追加でユーザーまたはグループを選択すればできますよ。
細かい設定もできますが、今回のお話とはズレるので省略しますね。
ではさっそく試してみましょう!
普通にフォームからユーザー列を更新する
はじめは一般的な方法です。
システムが自動的に構築してくれるのでちゃんと動きます。
反面、ユーザー選択するためにメールアドレスを入力しないといけません。
下の名前を知らない同僚を選ぶときにちょっと困りますね。
とりあえず実行してみると問題なく書き込めたことがわかります。
コードの確認
ユーザー列のカードあるコンボボックスにChoices関数が使われています。
実際に書き込まれる値であるUpdateには、その選択結果が指定されていますね。
つまり、このカードのコンボボックスで選択したレコード構成なら書き込めるということです。
レコード構成の確認
ちょっと見づらいですが、コレクションに落として中身を確認しました。
全部で6項目ありますね。
他のユーザー情報もこのレコード構成にすれば書き込めることがわかりましたね。
Office365ユーザーの情報を使ってユーザー列を更新する
コードの確認
ユーザー列のコンボボックスにMyProfileV2を直接入力してみました。
結果、テーブルとレコードで型が違うよって怒られました。
そこでTable関数で囲ってみるとエラーは消えましたが、何も表示されません。
ユーザーを特定するための何かが足りないんですね。
同様にUpdateもMyProfileV2にして試してみました。
エラーは表示されませんが、実行すると空レコードができあがりました。
レコード構成の確認
原因を確かめるため、MyProfileV2をコレクションに落として中身を見てみます。
一目瞭然、項目数が雲泥の差ですよね。
非常に見づらいですが、大文字小文字の違いもあります。
じゃあどうしようもないの?
いえ、それをどうにかするのがこの記事の目的です。
MyProfileV2をユーザー列に書き込む
言葉にするととてもかんたん、レコード項目を合わせるだけです。
さらにClaims列さえあれば良く、他の列を削除する必要もありません。
Claims列はメールアドレスが入っていれば機能します。
そのため、図のようにClaims列を追加し、もとからあるmail列の値を放り込みます。
UserProfileV2でも同じやり方でできますよ。
Claims列の i:0#.f|membership| は省略できるよ。
Office365グループの情報を使ってユーザー列を更新する
入力を容易にするにはやはり選択式がいいですよね。
Office365グループのListGroupMembersをギャラリーに展開し、メンバーを選べるようにしました。
これなら入力の手間が省けますよね。
レコード構成の確認
とりあえずコレクションに落として中身を見てみます。
これまた全然違いますね。
入れ子になっているのはギャラリー内のコントロールです。
ただこの中にもメールアドレスを持っている列があるので、先ほどと同じやり方が使えます。
ギャラリーで選択したListGroupMembersをユーザー列に書き込む
ItemsのみClaims列を追加すれば機能します。
ただそれだけではギャラリーで選択した名前が表示されません。
そのため、DefaultSelectedItemsにも同じコードを記述します。
フィールドの設定で主要なテキストをdisplayNameにすれば名前が表示されますよ。
様々なアプローチでユーザー列に書き込む方法のまとめ
今回は、様々なアプローチでユーザー列に書き込む方法を紹介しました。
とりあえずClaims列を追加してメールアドレスを投げ込めばよいことがわかりましたね。
特にグループメンバーをギャラリー展開したやり方はオススメです。
なぜならグループごとに絞り込まれたメンバーを一覧表示できるからです。
伝言メモの送付先一覧に使っていますが、とても便利なので重宝してます。
ただ、チェックリストなど当時のユーザー名が必要な場合は、テキスト列で保存した方が適しています。
状況に応じて使い分けてくださいね。
ローマ字入力になるので、例えば藤~がhujiで出てこなかったり、shimaとjimaの違いだったりとモヤモヤします。