发布网友 发布时间:2022-04-23 11:03
共1个回答
热心网友 时间:2022-05-01 21:59
本主题演示两种修改页面编辑工具栏的方法。您可以:修改XML 数据源文件。创建一个自定义服务器控件,然后在控件中引用一个自定义 XML 文件。页面编辑工具栏分为三个主要区域或 UI 控件。 UI 控件 说明页面状态栏提供有关页面当前版本的信息。示例包括版本信息和页面的状态。“页面编辑”菜单可让用户执行发布版本、批准挂起的版本和签入页面以共享草稿等操作,以便与页面进行交互。快速访问按钮在给定页面状态和上下文的情况下提供最常用的操作。“页面编辑”菜单和快速访问按钮均将数据源与 UI 控件相分离,而且您可以修改数据源和 UI 控件。修改XML 数据源文件EditingMenu.xml 和 QuickAccess.xml 文件分别是“页面编辑”菜单和快速访问按钮的 XML 数据源。在 XML 文件中指定的数据源驱动着“页面编辑”菜单上的菜单项的配置和行为,以及驱动着与快速访问按钮相关联的操作。在此示例中,我们创建一个替代 ConsoleAction 类的对象,并修改 CustomQuickAccess.xml 文件,以将一个新按钮添加到页面编辑工具栏上。执行此过程之后,一个新按钮会出现在页面编辑工具栏上,单击此按钮可为用户提供适当的权限,以取消另一个用户在指定页面上的“已签出”状态。 注意�0�2�0�2�0�2出于兼容性原因,请勿更改 EditingMenu.xml 和 QuickAccess.xml 文件的内容。若要自定义这些文件控制的操作和项目,请改为编辑 CustomEditingMenu.xml 和 CustomQuickAccess.xml 文件,它们位于母版页样式库中的“编辑菜单”文件夹下。 注意: 也可以将此处所述的自定义做法应用于快速访问按钮和网站操作菜单。创建可更改快速访问按钮的配置的自定义服务器控件打开Microsoft Visual Studio。在“文件”菜单上,单击“新建”,再单击“ASP.NET 网站”。创建新项目。复制下面的代码并粘贴到项目中的 .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"; } } 保存更改。将项目作为新程序集生成,向全局程序集缓存注册该程序集,然后在 web.config 文件中添加一个新的 <SafeControl> 条目,此条目对应于该程序集和自定义控件 (PageEditingToolbarMenuItemControls) 的命名空间。重新启动 Internet Information Services (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 文件中包含的设置。以下过程中包含的标记包含了 CustomEditingMenu.xml 文件的示例代码,此代码将一个新的 Links 菜单(带有两个新项)以及一个 View Pages 库和一个 View Master Page 库添加到“页面编辑”菜单。可以通过创建自定义 Web 服务器控件来修改“页面编辑”菜单和快速访问按钮。下面的代码示例演示如何创建自定义服务器控件,以将已签出的文档还原为签入状态。可以更改页面编辑工具栏或快速访问按钮的 UI 配置,方法是直接修改 XML 数据源或编写和部署自定义服务器控件。但是,如果自定义 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 都具有两个可选的位掩码属性,您可以通过设置它们来控制各种条件,例如 ConsoleNode 在什么时候和位置显示给用户。 类型 属性名 说明上下文RequiredStates 在启用或禁用节点之前必需的页面或编辑模式状态。状态的示例包括 InEditModeTrue、InEditModeFalse 和IsCheckedOutToCurrentUserTrue。用户权限UserRights负责根据 Windows SharePoint Services 权限修整对 ConsoleNode 的访问权。示例布尔表达式 UserRights="BrowseDirectories|ManageLists 为用户提供用于访问 ConsoleNode 的BrowseDirectories 或ManageLists 权限。