Office 365 の Eプランで外部ユーザーがユーザー情報を編集できるように設定する

| 2013年1月25日

前回書いたように、Office 365 の Eプランにおいては、SharePoint の製品仕様と Office 365 の独自機能(外部ユーザーの招待)の齟齬により、外部ユーザーは自身の名前や顔写真、自己紹介を編集できない、という問題がある。
しかし、実はこの編集ブロックはそれほど厳密なものではなく、SharePoint の GUI 制御にすぎない。そのため適切な権限を持つユーザーなら、SharePoint が標準で備える Client Object Model 経由で解除することもできる。

ここでは、JavaScript を利用して Client OM 経由で Eプランのユーザー情報を編集可能にする方法をご紹介する。ただし、あくまでサンプルであり、また Office 365 がサポートする方法でない点は強調しておきたい。自己責任の範疇で試して欲しい。

※2013/3/9 追記:この内容は 2013年2月以前の Office 365 でのものだが、3月のアップデート後でも有効であることを確認した。

// 複数のフィールドを処理するので関数化(※関数は呼ばれる前に宣言するため最初に記述)
function offReadOnly(fieldName){
// 列の表示名を指定してフィールドの取得
var field = ctx.get_web().get_siteUserInfoList().get_fields().getByInternalNameOrTitle(fieldName);
// ReadOnly属性を false に変更
field.set_readOnlyField(false);
// フィールドの変更を保存(予約)
field.update();
// フィールドの変更をサーバーに反映(予約)
ctx.load(field);
}
// ClientOMのコンテキストオブジェクトを取得
var ctx = SP.ClientContext.get_current();
// 編集可能にしたいフィールドの列表示名の指定(※配列化して格納)
var fieldNames = [“名前”, “勤務先の電子メール”, “携帯電話”, “説明”, “画像”, “部署”, “役職”, “SIP アドレス”, “名”, “姓”, “勤務先の電話番号”, “ユーザー名”, “Web サイト”, “得意分野”, “オフィス”];
// 配列化した列表示名のすべてに対して上記の関数を呼び出す
for(var i = 0; i < fieldNames.length; i++){ offReadOnly( fieldNames[i] );} // サーバに反映 ctx.executeQueryAsync( function(sender, args){ // 成功時 alert("OK"); }, function(sender, args){ // 失敗時 alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace()); } )

Internet Exploler 9 以上を用意する。サイトコレクションの管理者(所有者)であるアカウントでサイトにアクセスし、IEの開発者ツールからこのスクリプトを実行するだけだ。

F12 を押下する。これが開発者ツールだ(画面は Windows 8 と IE10)

「コンソール」を開き、画面下の「>>」にこのスクリプトを貼付けて実行する(ブラウザでこのエントリからコピー&ペーストすると、スクリプトが崩れることがあるため、ここにテキストファイルで置いておく

[スクリプトの実行]をクリックし、「OK」とダイアログが表示されれば完了だ。

これで、外部ユーザーが(厳密にはすべてのユーザーが)自身のユーザー情報を編集/保存できるようになる。もし編集不可に戻したい場合は、上記スクリプト内で field.set_readOnlyField(false); を true に変更して再実行する。

ポイントは、サイトコレクションの管理者(所有者)が実行することだ。サイト内の隠しリストである「ユーザー情報リスト」の内部設定を変更するため、このリストに対する強い権限が必要になる。もし権限が無い場合「この操作の実行権限またはこのソースのアクセス権減がありません」とエラーが表示される。

なお、蛇足になるが、 Eプランにおけるテナント内(契約)ユーザーの個人情報は「ユーザー情報」ではなく「ユーザープロファイル」で管理されているため(前回参照)、画面の右上からこのユーザー情報画面にアクセスすることはできない。

そのユーザーの内部IDを確認し、

ユーザー情報画面の URL に ID 値と「force=true」オプションをつけてアクセスすると表示される。

例:https://xxxxx.sharepoint.com/sites/dev/_layouts/userdisp.aspx?ID=7&Force=True

なお、このスクリプトの作成は個人的に @SharePoint_X さんにご協力頂いた。感謝したい。

Filed in: Office365
×

Comments are closed.