最近、お客様との会話でも話題になったり、TechNet/MSDN フォーラムでも質問が上がっていたりしたのですが、リスト アイテムの表示フォーム(アイテム個別の情報が表示される画面)で既定で表示されるリボン メニューを隠したいという要望は少なからずあるようです。この画面を開くと「表示」タブが選択された状態でページが開かれ、「表示」タブに関係するリボン メニューが表示されています。ただし、その隣にある「参照」タブを選択すると、リボン メニューを閉じることができるわけですが、ページを開いた際の既定動作として「参照」タブを選択した状態にしたいというものです。

20140313-1

リボン メニューの動作を追っていくと、どうやら JavaScript で制御しているようなので、ページを開いた際に JavaScript をうまい具合に実行できれば、自動的に「参照」を選択した状態にできそうです。

タブを切替える JavaScript

タブを切替える方法については、以前の SharePoint Maniacs さんの投稿にヒントがありました。

ビューを編集するとリボンのリストツールが表示されない+1
http://sharepointmaniacs.com/archives/3512

この記事で紹介されているスクリプトに含まれるSelectRibbonTabというメソッドがそれっぽいです。実際にアイテムの表示フォームでこのメソッドを実行すると、リボンが引っ込み、「参照」タブが表示された状態となります。

あとは、このメソッドをなるべく適切なタイミングで実行してあげるということになります。

リボンの初期化完了イベントを利用する

最初は、単純にスクリプトの実行をディレイすれば良いのかな?とも思いましたが、そうこうしている内に面白いメソッドを見つけました。それが下記の MSDN で示されているメソッドです。

CUI.Page.PageManager.add_ribbonInited(value) Method
http://msdn.microsoft.com/en-us/library/office/ff409759(v=office.14).aspx

どうやら、このメソッドを利用することで、リボンの初期化完了イベント(RibbonInited event)に任意のハンドラーを追加できるようです。このハンドラーとして、先ほどのメソッドを実行するように登録してあげれば良さそうです。

自動的に「参照」タブを選択する

と、いうわけで、手元で簡単に確認した限りでは、下記の JavaScript をアイテムの表示フォームに仕込むことで期待通りの動作が実現できました。ただ、確実に実行しようとするならば、スクリプトがリボンの初期化完了イベント後に呼ばれてしまうこと等も考慮しておいたほうが良いと思います。が、まずは最小のスクリプトということで。

SP.SOD.executeOrDelayUntilScriptLoaded(function(){
	var pm = SP.Ribbon.PageManager.get_instance();
	pm.add_ribbonInited(function(){
		SelectRibbonTab("Ribbon.Read", true);
	});
}, "sp.ribbon.js");

スクリプトの中では、SP.Ribbon.PageManagerクラスからシングルトン インスタンスを取得していますが、このクラスは先ほどのCUI.Page.PageManagerクラスを継承しているものです。

SP.Ribbon.PageManager Class
http://msdn.microsoft.com/en-us/library/office/ff410969(v=office.14).aspx

アイテムの表示フォームを開くと、リボン メニューが一度は表示されますが、スグにひょいと引っ込みます。その後は、「表示」タブをクリックすることで、再度リボン メニューを表示できます。なんとかうまくいきました。

20140313-2

さいごに

私自身では動作確認は SharePoint 2013 でしか行っていませんが、利用している API としては SharePoint 2010 でも動作するはずです。どなたか、SharePoint 2010 で動作確認をされましたら、教えて頂けると非常に嬉しいです。

(2014/3/14)さっそく SharePoint 2010 でも動作確認をして頂けた方からご連絡がありました。SharePoint 2010 でも動作するそうです!ありがとうございました!

いろいろリボン メニューの動作を調べていくと、JavaScript で色々できそうな気配がありました。探してみると面白そうですね。