特定のリストに対する操作メニューのカスタマイズ

 

こんにちは。

バンクーバーオリンピックも終わりましたね。

さて今回はユーザーコントロールを利用したネタを紹介します。

そこで、今回はリストなどの操作メニューに表示されるアクションをカスタマイズしてみたいと思います。

clip_image001 

既にご存じの方が多いと思いますが、リストの操作メニューに表示される項目は、以下のユーザーコントロールで定義されています。

(以降、C:\Program Files\Common Files\Microsoft Shared\web server extensions\12 を 12 ハイブとします)

C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\CONTROLTEMPLATES\DefaultTemplates.ascx

そのため、操作メニューをカスタマイズしたいときは DefaultTemplates.ascx 内に定義されている操作メニューの内容を変更する必要があります。

その場合、以下の注意が必要なんですよね。

・ファーム全体で有効になるため、すべてのリストに対して有効になってしまう。

・修正プログラムの適用により、変更内容が元に戻ってしまうことがある。

このカスタマイズのご要望はよくいただきますが、やはりこの影響範囲を懸念されて断念される方もいらっしゃいます。

そこで、上記問題を回避するために、今回は発想を変えてカスタマイズした操作メニューを適用したリストを作って対応してみたいと思います。

ただし、この方法をご覧いただく前に、以下の注意事項だけはご了承くださいますようお願いいたします。

<<注意事項>>

今回の記載内容に関しては、ユーザーコントロール、リスト定義の作成等についてある程度の開発経験があることを前提として記載させていただいています。

今回ご紹介する内容は、操作メニューのカスタマイズをするというより、ゼロから作成しています。なので、通常インシデントサポートでお問い合わせいただいてもご案内していない方法であり、この方法に関する内容については通常のインシデント サポートでは対応できません。

今回はそこをあえて踏み込んでブログとして書いてみましたので、何卒この内容をご了承いただいた上で、今後の何かの参考にしていただければと思います!!

それでは本題に戻りましょう。

大まかな手順としては以下のような流れとなります。

1. DefaultTemplates.ascx をコピーしてユーザーコントロールを作成します。

2. リスト定義を作成します。

3. 作成したリスト定義の schema.xml を変更します。

 

では早速やってみましょう~

1. DefaultTemplates.ascx をコピーしてユーザーコントロールを作成

 

<12 ハイブ>\TEMPLATE\CONTROLTEMPLATES\DefaultTemplates.ascx をコピーして、<12 ハイブ>\TEMPLATE\CONTROLTEMPLATES 配下に貼り付け、ファイル名を CustomDefaultTemplates.ascx 等といったファイル名に変更します。

コピーした CustomDefaultTemplates.ascx をメモ帳などで開き、ツールバーの定義に必要な箇所 (必要な箇所は RenderingTemplate コントロールの ID="ViewToolBar" と ID="ToolbarActionsMenu" となります。) だけを残し、それ以外はバッサリと削除しましょう。

さらに以下の赤字で記載したように RenderingTemplate コントロールの ID は必ずユニークな値に設定し、ActionsMenu コントロールの TemplateName 値と ID を一致させます。

CustomDefaultTemplates .ascx の内容

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

以下は [スプレッドシートにエクスポート] と [RSS フィードの表示] のみを操作メニューに表示するように設定しています。

さらに [スプレッドシートにエクスポート] は PermissionString を利用して投稿権限など一般ユーザーでは表示できないように設定しています。

<%@ Control Language="C#" AutoEventWireup="false" %>

<%@Assembly Name="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<%@Register TagPrefix="SharePoint" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" namespace="Microsoft.SharePoint.WebControls"%>

<%@Register TagPrefix="SPHttpUtility" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" namespace="Microsoft.SharePoint.Utilities"%>

<%@ Register TagPrefix="wssuc" TagName="ToolBar" src="~/_controltemplates/ToolBar.ascx" %>

<%@ Register TagPrefix="wssuc" TagName="ToolBarButton" src="~/_controltemplates/ToolBarButton.ascx" %>

<SharePoint:RenderingTemplate ID="CustomViewToolBar" runat="server">

        <Template>

                <wssuc:ToolBar CssClass="ms-menutoolbar" EnableViewState="false" id="toolBarTbl" ButtonSeparator="<img src='/_layouts/images/blank.gif' alt=''>" RightButtonSeparator="&nbsp;&nbsp;" runat="server">

                        <Template_Buttons>

                                <SharePoint:NewMenu AccessKey="<%$Resources:wss,tb_NewMenu_AK%>" runat="server" />

                                <SharePoint:ActionsMenu AccessKey="<%$Resources:wss,tb_ActionsMenu_AK%>" TemplateName="CustomToolbarActionsMenu" runat="server" />

                                <SharePoint:SettingsMenu AccessKey="<%$Resources:wss,tb_SettingsMenu_AK%>" runat="server" />

                        </Template_Buttons>

                        <Template_RightButtons>

                                  <SharePoint:PagingButton runat="server"/>

                                  <SharePoint:ListViewSelector runat="server"/>

                        </Template_RightButtons>

                </wssuc:ToolBar>

        </Template>

</SharePoint:RenderingTemplate>

<SharePoint:RenderingTemplate ID="CustomToolbarActionsMenu" runat="server">

        <Template>

                <SharePoint:FeatureMenuTemplate runat="server"

                        FeatureScope="Site"

                        Location="Microsoft.SharePoint.StandardMenu"

                        GroupId="ActionsMenu"

                        UseShortId="true"

                        >

                        <SharePoint:MenuItemTemplate

                                ID="ExportToSpreadsheet"

                                Text="<%$Resources:wss,ToolBarMenuItemExportToSpreadsheet%>"

                                Description="<%$Resources:wss,ToolBarMenuItemExportToSpreadsheetDescription%>"

                                PermissionsString="FullMask"

                                PermissionContext="CurrentList"

                                MenuGroupId="400"

                                Sequence="200"

                                ImageUrl="/_layouts/images/MenuSpreadsheet.gif"

                                UseShortId="true"

                                runat="server"/>

                        <SharePoint:MenuItemTemplate

                                ID="ViewRSS"

                                Text="<%$Resources:wss,ToolBarMenuItemViewRSSFeed%>"

                                Description="<%$Resources:wss,ToolBarMenuItemViewRSSFeedDescription%>"

                                PermissionsString="ViewListItems"

                                PermissionContext="CurrentList"

                                MenuGroupId="500"

                                Sequence="400"

                                ImageUrl="/_layouts/images/MenuRSS.gif"

                                UseShortId="true"

                                runat="server"/>

                </SharePoint:FeatureMenuTemplate>

        </Template>

</SharePoint:RenderingTemplate>

-参考情報

タイトル : SPBasePermissions 列挙

アドレス : https://msdn.microsoft.com/ja-jp/library/microsoft.sharepoint.spbasepermissions.aspx

これでカスタムのツールバーを定義したユーザーコントロールの作成は終了となりますので、次にリスト定義を作成します。

2. リスト定義の作成

さてリスト定義の作成です。

リスト定義の作成に関しては、以下のサイトなどを参考に作成していただければ幸いです。この内容だけでもいろいろありますので、今回は割愛します。

(VseWss を利用すればサクッと作れますが、サポート外なのが残念です。。。)

-参考情報

タイトル : [方法] カスタム リスト定義を作成する

アドレス : https://msdn.microsoft.com/ja-jp/library/ms466023.aspx

タイトル : SharePoint でおこなう製品開発シリーズ (5 章)

アドレス : https://www.microsoft.com/japan/powerpro/TF/column/tm_06_1.mspx

 

3. schema.xml の変更

さて、リスト定義が作成できたら、schema.xml を変更します。

schema.xml に定義されている対象となるビューの View 要素の ToolbarTemplate 属性に、先ほど作成したテンプレート名を指定します。

<View BaseViewID="1" ToolbarTemplate="CustomViewToolBar" SetupPath="pages\viewpage.aspx" ~略~ ImageUrl="/_layouts/images/generic.png" Url="AllItems.aspx">

-参考情報

タイトル : Schema.xml

アドレス : https://msdn.microsoft.com/ja-jp/library/ms459356.aspx

タイトル : リストスキーマ

アドレス : https://msdn.microsoft.com/ja-jp/library/aa543477.aspx

タイトル : ビュースキーマ

アドレス : https://msdn.microsoft.com/ja-jp/library/ms439798.aspx

タイトル : View 要素 (ビュー)

アドレス : https://msdn.microsoft.com/ja-jp/library/ms438338.aspx

 

4 .動作確認

Schema.xml も変更したら、あとは作成したリスト定義をインストールし、IISRESET を実行して、いよいよ動作の確認です。

作成したリスト定義からリストを作成し確認すると…

clip_image002 

おぉぉ、操作メニューに表示される項目が変わってます。しかも、ユーザーの権限によっても表示されるメニューが違いますね。

これで特定のリストに対してのみ操作メニューの表示方法を変更できました。

< システム アカウントで表示した場合>  

 

 

clip_image003

 

< 投稿権限のユーザーで表示した場合>

 

clip_image004

 

最後に・・・

今回はなるべく Visual Studio を利用しないでカスタマイズする方法について紹介させていただきました。

ちなみに操作メニューのカスタマイズを ActionsMenu クラスを継承してカスタマイズすることでもっといろいろ制御できると思います。

注意事項に書かせていただいたように、この内容についてのご質問はサポートでもご案内できない内容になってしまいますが、今回はブログという形でちょっと紹介させていただきましたので、何かの足しになれば幸いです。