[MOSS汇编SDK]Web Content Management:自定义页面的工具栏

  大家都知道,在MOSS中,如果开启了网站的发布功能,那么在进行页面的编辑的时候会有工具栏,提示你进行工作流、审批等等...SDK中的一篇文章,就是教你如果自定义这个页面的工具栏,感觉这个对做基于页面的解决方案是非常有帮助的,这个实验的目的,就是在工具栏上添加一个按钮,作用是,如果你单击它,允许有批准权限的用户去取消另一个用户对该页面的签出状态。翻译文章如下:

 

1.1自定义页面编辑工具栏组件

页面编辑工具栏是一个用户界面的面板元素,它提供了页面信息和页面支持的各种操作方法。本节描述了两个方法去修改这个页面编辑工具栏。你可以:

Ÿ   修改XML数据源文件

Ÿ   创建用户服务器控件然后再引用一个自定义XML文件

页面编辑工具栏被划分成三个主要的区域或是UI控件。

UI 控件

描述

页面状态栏

提供关于页面当前版本的信息,包括版本信息和页面状态

页面编辑菜单

让用户对页面进行相关的操作,比如发布版本,批准,签入以共享草稿等等。.

快速访问按钮

最常用的操作,给定页面状态和上下文内容。

页面编辑菜单和快速访问按钮都把UI控件和数据源进行了分离,你可以分别修改数据源和UI控件。

修改XML数据源文件

EditingMenu.xml文件和QuickAcces.xml文件是页面编辑菜单和快速访问按钮的数据源文件。XML文件中的数据源驱动了页面编辑栏的配置和行为。在这个示例中,我们要创建一个继承ConsoleAction类的对象,修改CustomQuickAccess.xml文件来新增一个按钮给页面编辑工具栏。实验完这个过程,一个新的按钮就会出瑞在页面编辑工具栏中。如果你单击它,允许有批准权限的用户去取消另一个用户对该页面的签出状态。

注意:由于一致性的原因,不要改变EditingMenu.xmlquickAcces.xml文件的内容。如果要自定义操作,可以编辑CustomEditngMenu.xmlCustomQuickAccess.xml文件,它们位于母版页与页面布局文档库中的编辑菜单文件夹。

Note:

你也可以应用自定义的描述,来加入快速访问按钮和网站操作菜单。

创建用户服务器控件来改变快速访问按钮的配置

1.     打开Microsoft Visual Studio

2.     “文件”菜单,单击“新建“然后单击ASP.NET WEB网站

3.     创建一个新的项目。

4.     复制、粘贴如下的代码到项目的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";

    }


}



5.     保存。

6.     生成这个项目,使用GAC注册这个DLL,在Web.config文件里加上<SafeControl>引用。

7.     重启IIS

8.     "Program Files"Common Files"Microsoft Shared"Web Server Extensions"12"TEMPLATE"LAYOUTS"EditingMenu文件夹下

9.     复制粘贴QuickAcces.xml文件然后重新命名为customQuickAccess.xml.

10. 编辑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>

11、保存关闭CustomQuickAccess.xml文件



 

创建用户服务器控件并引用XML文件

可以使用程序扩展CustomEditingMenu.xml文件内容然后继承EditingMenu.xml文件的配置。如下过程包括的标记包括了CustomEditingMenu.xml文件的示例代码。这个文件给页面编辑菜单新增了一个新的包括两个新的项目(一个查看页面库和一个查看母版页库)的链接菜单。

开发者可以通过创建一个用户服务器控件来修改讨页面编辑菜单和快速访问按钮。如下代码示例描述了如何去创建一个用户服务器控件来重新恢复一个已经被签出的文档到签入的状态。

可以直接编辑XML数据源或是写一个用户自定义服务器控件来修改UI页面编辑工具栏或是快速访问按钮的配置。尽管如此,如果XML数据源被自定义且用户服务器控件正在运行,用户服务器控件比XML数据源的优先级更高。

修改XML数据源改变“页面编辑工具栏”界面配置

1.     打开一个XML编辑器

2.     定位到如下文件夹"Program Files"Common Files"Microsoft Shared"Web Server Extensions"12"TEMPLATE"LAYOUTS"EditingMenu

3.     复制、粘贴EditingMenu.xmlQuickAccess.xml文件,分别重新命名为:CustomEditingMenu.xml and CustomQuickAccess.xml

4.     复制如下的代码到两个文件中。

 

Copy Code

<?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>

5.     修改示例中的代码,如下的表格给出一个示范:

标记

描述

References

包括在ConsoleNode节中部署的引用,你可以增加你的DLL给你的菜单自定义操作。

Note:

在代码示例中,<references>标记是一个可选项,如果你想要支持本地化,设置这个参数为Ture。同样,这个标记必须有一个公钥(PublicKeyToken)属性来匹配你正在使用的应用。

ConsoleNode

包括页面编辑菜单的菜单项,每一个菜单可以包括DispayText属性,UserRights属性,RequiredRightsMode属性和PermissionContext枚举(其中菜单是可见的),这个菜单可能是一个映射到一个部署到服务器控件操作或是一个URL

开发者可以通过修改已存在节点的ID来同样替代或是删除已经存在的项。

Structure

描述菜单结构

6.     使用一个布尔型表达式去配置可选的位蒙板属性,每一个菜单项节点有两个可选的属性,你可以设置控件的上下文,比如何时或是何地该菜单项(consoleNode )对用户可见。

类型

属性名称

描述

上文下

RequiredStates

确定菜单项在什么页面状态或是编辑模式下有效。包括:在编辑模式(InEditModeTrue)、非编辑模式(InEditModeFalse)和签出(IsCheckOutToCurrentUserTrue)

用户权限

UserRights

基于WSS权限管理来控制对该项的访问。

上述布尔表达式的示例:UserRights="BrowseDirectories|ManageLists”,允许有“浏览目录”或是“管理列表”的用户去访问该菜单项。

7.     保存“CustomEditingMenu.xml”文件。

posted @ 2008-01-18 00:55  dosboy  阅读(1367)  评论(0编辑  收藏  举报