astel-labs.net

C#などのプログラミングTipsや雑記をつらつらと書くかもしれないブログです。

  • Home
RSS

SharePoint – 特定のビューやメニューを削除

Posted on 2010年9月7日 by Nymphaea
No CommentsLeave a comment

前回の記事で、SharePoint 上から jQuery を利用する準備が整いましたので、
今回はよく非表示に出来ないかと相談を受けるドキュメントライブラリなどのリスト上部に表示されているメニューや、ビューの特定の項目の非表示(削除)を行ってみたいと思います

赤枠で囲まれた、メニューとビューの特定項目を削除

 

わたしが jQuery を利用するきっかけにもなったこの例なのですが、デザイン会社の方にできないか相談したところ、素気無く出来ませんとキッパリ断られた経験があります・・・
でも、数行書くだけでできちゃう内容です

 

まずは前回同様、目的のメニューやビューがどんな要素なのかを開発者ツールを使って探します

メニューバーは、Table 要素の class 属性が “ms-menutoolbar” の下に、Td 要素の class 属性が “ms-toolbar” の要素と、セパレータで構成されていることがわかります

その下をたどっていくと、「新規」や「アップロード」という文字列を見つけることができますが、トップレベル要素を削除する必要があるため、”ms-toolbar” の要素を jQuery で検索すればよさそうです

 

では、さっそくソースコードを書いてみます
サンプル用に要素を辿らずに単一要素のみを指定して、 手抜き・・・ 簡単に書いています

<script type=text/javascript src="http://moss-dev/jquery-1.4.2.min.js"></script>
<script type=text/javascript>
<!--
_spBodyOnLoadFunctionNames.push("deleteMenu");
function deleteMenu()
{
  // 操作以外のメニューを削除
  //alert($('td.ms-toolbar').length);
  if($('td.ms-toolbar').length == 8){
    // 所有者権限あり
    // 新規メニューの削除
    $('td.ms-toolbar:eq(0)').remove();
    $('td.ms-separator:eq(0)').remove();
    // アップロードメニューの削除
    $('td.ms-toolbar:eq(0)').remove();
    $('td.ms-separator:eq(0)').remove();
    // 設定メニューの削除
    $('td.ms-separator:eq(0)').remove();
    $('td.ms-toolbar:eq(1)').remove();
  }
  else if($('td.ms-toolbar').length == 7){
    // 投稿権限あり
    // 新規メニューの削除
    $('td.ms-toolbar:eq(0)').remove();
    $('td.ms-separator:eq(0)').remove();
    // アップロードメニューの削除
    $('td.ms-toolbar:eq(0)').remove();
    $('td.ms-separator:eq(0)').remove();
  }
  else if($('td.ms-toolbar').length == 5){
    // 投稿権限なし(閲覧権限のみ)
  }

  // ビューの削除
  $("ie\\:menuitem[id$='_View1']").remove();
  $("ie\\:menuitem[id$='_ModifyView']").remove();
  $("ie\\:menuitem[id$='_CreateView']").remove();

  // 操作メニュー内の操作系メニューを削除
  $("ie\\:menuitem[id$='_EditInGridButton']").remove();
  $("ie\\:menuitem[id$='_OpenInExplorer']").remove();
  $("ie\\:menuitem[id$='_OfflineButton']").remove();
  $("ie\\:menuitem[id$='_ExportToSpreadsheet']").remove();
}
//-->
</script>

 

一度に全部書いてしまいましたが、上部の if 文で括られている箇所はメニュー項目の削除、中段はビューの削除、下段は操作メニュー内の、特定の項目だけを削除するコードになります

このコードを埋め込みページを表示させると、以下のようになります

メニュー項目が「操作」のみになり、ビューの項目も「すべてのドキュメント」のみになっていることがわかります

さらに、「操作」メニュー内も、「RSSフィードの表示」や「通知」メニューを残して削除しています

 

多少、ソースの解説をします

メニュー項目を削除する際、「新規」や「アップロード」といったメニューのトップレベル要素を直接、検索で特定することが面倒なので、
eq(index) を利用してインデックス番号から指定しています

また、閲覧時の権限により表示されるメニュー項目に違いがあるため、if 文の直前で alert を利用してどの権限の時にはメニュー項目がいくつあるかをあらかじめ調査し、if 文の条件に利用しています

必ずしもサンプルソースの数になるとは限りませんので、あらかじめ調査する必要があります

 

続いてビュー項目の削除ですが、ビュー項目の要素名には ie:menuitem が使われており、IE で開いた場合にのみ表示される要素になっています

ここで、単純にコロン(:)を含んだ名称を jQuery に使用すると正しく検索できませんので、コロンの直前に¥マークを2つ挿入してエスケープシーケンスとして実行します

また、id 属性には zzNN_ (Nは任意の整数)で始まる値が指定されています

この、zzNN_ 部分は閲覧権限によって変化するため、id 属性をそのまま指定することができないため、[id$=’_CreateView’] のように「$=」の後方一致検索で id 属性の値を指定しています

 

 

ただし、ここまでの例を実際に利用する際には注意が必要です

今回の例では「リスト/ライブラリ」が1つしか貼り付けられていないページの例なので問題はほとんど出ないと思われますが、
2つ以上の「リスト/ライブラリ」が貼り付けられているページの場合は jQuery の要素検索で、
より上位の親要素から指定してあげないと、どちらの「リスト/ライブラリ」かを特定できずに意図しない要素が削除されてしまう恐れがありますので、
利用の際は注意してください

また、再利用可能なテンプレートとして使う際には、web サービスなどを利用して権限の調査を行い if 文の分岐に利用するなどする必要があります
サンプルソースは説明用にそれらの機能を省いています

今後、jQuery からの web サービス呼び出しのサンプルを投稿するかもしれませんが、ネットを検索するといくつかサンプルを見つけることができますので、それらを参考に実装してみてください
(単純に、いまだに jQuery や Ajax をよく理解してないだけです・・・ もう少し見せられるソースになったらきっとw)

Categories: jQuery, SharePoint

 

複数カメラを利用したリアルタイム画像処理 Part1
SharePoint で jQuery を利用する

コメントを残す コメントをキャンセル

コメントを投稿するにはログインしてください。

  • 2010年9月
    日 月 火 水 木 金 土
     1234
    567891011
    12131415161718
    19202122232425
    2627282930  
    « 8月   10月 »
  • 最近の投稿

    • raspberry pi に nginx をセットアップする
    • VSCode を日本語化する
    • raspberry pi に VSCode をインストールする
    • WindowsのプロダクトIDを取得する
    • SQL Server – money型とdecimal型を併用した金額計算
  • アーカイブ

    • 2020年3月
    • 2016年12月
    • 2014年6月
    • 2014年5月
    • 2013年7月
    • 2012年11月
    • 2012年7月
    • 2012年5月
    • 2012年4月
    • 2011年4月
    • 2011年1月
    • 2010年11月
    • 2010年10月
    • 2010年9月
    • 2010年8月
    • 2010年7月
    • 2010年6月
    • 2010年5月
    • 2010年4月
  • カテゴリー

    • C#
    • jQuery
    • OpenCV
    • raspberry pi
    • SharePoint
    • Silverlight
    • SQL Server
    • WCF
    • WPF
    • プログラミング
    • 未分類
    • 雑記
© astel-labs.net. Proudly Powered by WordPress | Nest Theme by YChong

このブログ内で公開されているソースコードおよびサンプルプログラムに関わるライセンスはすべて修正BSDライセンス(New BSD License)として公開しています。
但し、サンプルプログラムに含まれる外部アセンブリが同様のライセンスとは限りませんので、利用する前に必ずすべてのライセンスの確認を行ってください。