[方法] ページ編集ツール バー コンポーネントをカスタマイズする
ページ編集ツール バーは、ページ情報とページを操作する手段を提供するユーザー インターフェイス (UI) 要素のパネルです。ここでは、ページ編集ツール バーを変更する 2 つの方法を具体的に示します。以下のことを行えます。
XML データ ソース ファイルを変更する。
ユーザー設定のサーバー コントロールを作成してから、そのコントロール内でカスタム XML ファイルを参照する。
ページ編集ツール バーは 3 つの主要領域、つまり UI コントロールに分かれています。
UI コントロール |
説明 |
---|---|
ページのステータス バー |
ページの現在のバージョンに関する情報を提供します。たとえば、バージョン情報やページの状態が含まれます。 |
ページ編集メニュー |
バージョンの発行、保留中のバージョンの承認、下書きを共有するためのページのチェックインなどを実行し、ユーザーがページを操作できるようにします。 |
クイック アクセス ボタン |
ページの状態とコンテキストに基づいて、最も一般的な操作を実行できるようにします。 |
ページ編集メニューとクイック アクセス ボタンのどちらも、データ ソースと UI コントロールを分離しているため、データ ソースと UI コントロールを別個に変更できます。
XML データ ソース ファイルを変更する
EditingMenu.xml ファイルと QuickAccess.xml ファイルは、それぞれページ編集メニューとクイック アクセス ボタン用の XML データ ソースです。XML ファイルで指定されたデータ ソースによってページ編集メニューのメニュー項目の構成と動作、およびクイック アクセス ボタンに関連付けられる操作が決定されます。この例では、ConsoleAction クラスをオーバーライドするオブジェクトを作成し、CustomQuickAccess.xml ファイルを変更してページ編集ツール バーに新しいボタンを追加します。この手順に従った後、ページ編集ツール バーには新しいボタンが表示され、このボタンをクリックすると、適切な権限を持つユーザーは指定したページで、他のユーザーの [チェックアウト済み] 状態を取り消すことができます。
注意 互換性のため、EditingMenu.xml ファイルと QuickAccess.xml ファイルの内容は変更しないでください。これらのファイルによって制御される操作や項目をカスタマイズするには、それらのファイルではなく、マスタ ページ ギャラリーの [編集メニュー] フォルダにある CustomEditingMenu.xml ファイルと CustomQuickAccess.xml ファイルを編集してください。
注意
ここで説明するカスタマイズ方法は、クイック アクセス ボタンと [サイトの操作] メニューにも適用できます。
クイック アクセス ボタンの構成を変更できるユーザー設定のサーバー コントロールを作成するには
Microsoft Visual Studio を起動します。
[ファイル] メニューの [新規作成] をクリックし、[ASP.NET Web サイト] をクリックします。
新しいプロジェクトを作成します。
以下のコードをコピーし、プロジェクトの .cs ファイルに貼り付けます。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Microsoft.SharePoint.Publishing; using Microsoft.SharePoint.Publishing.WebControls.EditingMenuActions; using Microsoft.SharePoint.Publishing.WebControls; using Microsoft.SharePoint; using Microsoft.SharePoint.Utilities; namespace PageEditingToolbarMenuItemControls { /// <remarks> /// Adds to the Quick Access toolbar a button that checks in /// a document that is checked out by another user. /// </remarks> public sealed class DiscardOtherUserCheckoutAction : ConsoleAction { /// <summary> /// This is the constructor of the specific ConsoleAction /// </summary> public DiscardOtherUserCheckoutAction() : base() { this.DisplayText = "Discard Other User's Checkout"; } /// <summary> /// SPBasePermissions are required to use this Action. /// </summary> /// <value></value> public override SPBasePermissions UserRights { get { return SPBasePermissions.CancelCheckout; } } /// <summary> /// Checks for the AuthoringStates required for the button to be enabled. /// </summary> /// <value></value> public override AuthoringStates RequiredStates { get { return AuthoringStates.CheckedOutVersionExistsTrue | AuthoringStates.IsCheckedOutToCurrentUserFalse | AuthoringStates.IsDocLibListItemTrue; } } /// <summary> /// Defines the PostBack behavior when the URL for this control is clicked. /// </summary> /// <param name="eventArgument"></param> public override void RaisePostBackEvent(string eventArgument) { if (eventArgument == DiscardOtherUserCheckoutAction.DiscardCheckOutPostBackEventArgument) { try { SPFile myFile = SPContext.Current.File; myFile.UndoCheckOut(); } catch (SPException e) { ConsoleNode actionsNode = new ConsoleNode(); ConsoleNode exitNoSaveNode = new ConsoleNode(actionsNode); exitNoSaveNode.Action = new ExitWithoutSavingAction(); exitNoSaveNode.Action.ID = "checkOutDiscardErrorActionExitNoSave"; actionsNode.ChildConsoleNodes.Add(exitNoSaveNode); this.ShowError(e, new ConsoleError(e.Message, actionsNode)); } finally { SPUtility.Redirect(SPContext.Current.ListItemServerRelativeUrl, SPRedirectFlags.Default, Context); } } } /// <summary> /// Specifies the URL for this Action. /// </summary> /// <value></value> public override string NavigateUrl { get { return "javascript:" + Page.ClientScript.GetPostBackEventReference(this, DiscardOtherUserCheckoutAction.DiscardCheckOutPostBackEventArgument); } } private const string DiscardCheckOutPostBackEventArgument = "discardUserCheckout"; } }
変更を保存します。
プロジェクトを新しいアセンブリとしてビルドし、アセンブリを一般的なアセンブリ キャッシュに登録します。次に、そのアセンブリおよびユーザー設定のコントロール (PageEditingToolbarMenuItemControls) の名前空間に対応する web.config ファイルに、新しい <SafeControl> エントリを追加します。
インターネット インフォメーション サービス (IIS) を再開します。
\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\LAYOUTS\EditingMenu フォルダに移動します。
QuickAccess.xml ファイルをコピーして貼り付け、複製の名前を CustomQuickAccess.xml に変更します。
CustomQuickAccess.xml を編集し、ファイルの内容を次のマークアップで置き換えます。
<Console> <references> ///The following tag must refer to the assembly you created ///and compiled in step 3. <reference TagPrefix="demo" assembly="WebControlLibrary1, Version=1.0.11.876, Culture=neutral, PublicKeyToken=b3795d44e71a79a4" namespace="PageEditingToolbarMenuItemControls" /> </references> <structure> <ConsoleNode Action="demo:DiscardOtherUserCheckoutAction" DisplayText="Discard Checkout" ConfigMenu="Add" UseResourceFile="false" Sequence="1700" RequiredRightsMode="Any" ImageUrl="/_layouts/images/ActionsSettings.gif" ID="DiscardCheckedout" /> </structure> </Console>
CustomQuickAccess.xml を保存して閉じます。
ユーザー設定のサーバー コントロールを作成して XML ファイルを参照する
CustomEditingMenu.xml ファイルの内容をプログラムによって拡張し、このファイルの親ファイルである EditingMenu.xml に含まれる設定を上書きすることができます。次の手順に含まれるマークアップには、ページ編集メニューに、[View Pages Library] と [View Master Page Gallery] という 2 つのメニュー項目がある新しい [Links] メニューを追加する、CustomEditingMenu.xml ファイルのサンプル コードが含まれています。
ユーザー設定の Web サーバー コントロールを作成すると、ページ編集メニューとクイック アクセス ボタンに変更を加えることができます。下のサンプル コードは、チェックアウト済みのドキュメントをチェックインの状態に戻すユーザー設定のサーバー コントロールを作成する方法を示しています。
XML データ ソースを直接変更するか、ユーザー設定のサーバー コントロールを記述して展開することで、ページ編集ツール バーやクイック アクセス ボタンの UI 構成を変更できます。ただし、XML データ ソースがカスタマイズされ、ユーザー設定のサーバー コントロールが実行されている場合、ユーザー設定のサーバー コントロールが常に優先され、XML データ ソースは無視されます。
XML データ ソースを変更してページ編集ツール バーの UI 構成を変更するには
XML エディタを起動します。
\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\LAYOUTS\EditingMenu folder. フォルダに移動します。
EditingMenu.xml ファイルと QuickAccess.xml ファイルをコピーして貼り付け、複製を作成します。複製の名前を CustomEditingMenu.xml と CustomQuickAccess.xml に変更します。
以下のコードをコピーして、CustomEditingMenu.xml ファイルと CustomQuickAccess.xml ファイルの中に貼り付けます。
<?xml version="1.0" encoding="utf-8" ?> <Console> <references> <reference TagPrefix="cms" assembly="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=93de0004b6e3fcc5" namespace="Microsoft.SharePoint.Publishing.WebControls.EditingMenuActions" /> </references> <structure> <ConsoleNode ConfigMenu="Add" Sequence="600" NavigateUrl="javascript:" AccessKey="L" DisplayText="Links" UserRights="EmptyMask" UseResourceFile="false" RequiredStates="InSharedView" ID="LinksMenu" > <ConsoleNode DisplayText="View Pages Library" UseResourceFile="false" ImageUrl="/_layouts/images/ActionsSettings.gif" UserRights="BrowseDirectories|ManageLists" RequiredRightsMode="Any" PermissionContext="CurrentSite" IsSiteRelative="true" NavigateUrl="Pages/forms/allitems.aspx" ChangedNodeID="ViewPagesList"> </ConsoleNode> <ConsoleNode IsSeparatorImage="True" UserRights="EmptyMask" /> <ConsoleNode DisplayText="View Master Page Gallery" UseResourceFile="false" ImageUrl="/_layouts/images/ActionsSettings.gif" UserRights="BrowseDirectories|ManageLists" RequiredRightsMode="Any" PermissionContext="CurrentSite" IsSiteRelative="false" NavigateUrl="/_catalogs/masterpage/Forms/AllItems.aspx" ChangedNodeID="ViewPagesLibSettings"> </ConsoleNode> </ConsoleNode> </structure> </Console>
サンプル コード内の主な要素に変更を加えます。次の表に、サンプル XML ファイル内にある主な要素と属性の例を示します。
タグ |
説明 |
---|---|
References |
ConsoleNode セクションでのアセンブリの参照を格納します。カスタマイズした操作のアセンブリをメニューに追加できます。 注意 コード例では、<references> タグは省略可能になっています。ローカライズをサポートする場合は、このパラメータを True に設定します。また、<references> タグには、現在使用しているアプリケーションのビルドに一致する PublicKeyToken 属性が指定されている必要があります。 |
ConsoleNode |
ページ編集メニューのメニュー項目を格納します。各メニューには、メニューが表示されるときの DisplayText プロパティ、UserRights() プロパティ、RequiredRightsMode プロパティ、および PermissionContext (英語) 列挙を含めることができます。アセンブリ内のサーバー コントロールにマップされた操作、または URL をメニューにできます。 既存のノード ID を指定すれば、既存のエントリの置換や削除を行うこともできます。 |
Structure |
メニューの構造を示します。 |
ブール式を使用して、省略可能なビット マスク属性を構成します。各 ConsoleNode には省略可能なビット マスク属性が 2 つあり、これを設定すると、その ConsoleNode をいつどこでユーザーに表示するかなどの条件を制御できます。
種類
属性名
説明
コンテキスト
RequiredStates
ノードを有効または無効にする前に、ページまたは編集モードに必要とされる状態。状態の例には、InEditModeTrue、InEditModeFalse、IsCheckedOutToCurrentUserTrue などがあります。
ユーザー権限
UserRights
Windows SharePoint Services の権限に基づいて ConsoleNode へのアクセスを適切に調整します。
この例のブール式 UserRights="BrowseDirectories|ManageLists では、BrowseDirectories 権限または ManageLists 権限を持つユーザーに、ConsoleNode へのアクセスを許可しています。
CustomEditingMenu.xml ファイルを保存します。