2007年7月18日,星期三

Using CustomAction to modify 系统 pages

在上一篇文章中,我介绍了两个如何安全地修改SharePoint的“系统”区域中的功能的示例,例如“中央管理”和“网站设置”区域。第一个示例是经过调整的回收站(其中仅列出了当前用户删除的项目),第二个示例是自定义的“创建网站集”管理页面。在这两种情况下,技术都是 复制 SharePoint附带的原始页面,对副本进行自定义,然后在SharePoint中重定向链接以使用我们的新页面。这样,自定义对用户是相当透明的-根据您的实现,他们可以简单地单击SharePoint中同一位置的相同链接,而转到提供了已修改功能的其他地方。

最后一部分(在SharePoint中重定向链接)是通过使用CustomAction元素的功能来完成的。但是,更改SharePoint中某个位置的现有链接的想法不一定是您可能会定期进行的自定义类型。因此了解CustomAction元素也可用于 SharePoint中某处的链接。这为定制提供了许多机会,并且本文旨在详细介绍一些选项。

CustomAction元素的用法如下:

<CustomAction ID="MyDeletedItems"

              群组编号="SiteCollectionAdmin"

              位置="Microsoft.SharePoint.SiteSettings"

              顺序="10"

              标题="我的回收站物品"

              权利="ManageWeb,BrowseUserInfo">

  <网址Action 网址="_layouts / 习俗 / MyRecycleBinItems.aspx" />

</CustomAction>



我在上一篇文章中详细介绍了大多数值,但我想在此重点介绍的是Location属性-这实际上是指定要在SharePoint中将链接添加到的位置。一些常见的潜在价值是:

  • Microsoft.SharePoint.SiteSettings(如上述示例XML)
  • Microsoft.SharePoint.Administration.Operations
  • Microsoft.SharePoint.Administration.ApplicationManagement

如果您使用SharePoint已有一段时间,则可能可以找出这些值的引用位置-第一个是“网站设置”区域,而最后两个分别是“中央管理”区域中的“操作”和“应用程序管理”页面。使用CustomAction在这些区域中添加链接时,您还可以指定 群组 您的链接应显示在其中。此值是指位置中链接的现有“类别”,例如上面列出的位置。请注意,可以使用 CustomActionGroup 元素,但 组号 CustomAction的值必须始终指定一个已经存在的组。默认情况下,SiteSettings区域中存在以下组:

  • 用户和权限
  • 客制化
  • 快速启动
  • 画廊
  • 网站管理
  • SiteCollectionAdmin

这些对应于“站点设置”区域中的列,如下所示:




在管理中心页面中,“操作”页面的示例为:

  • 拓扑结构
  • 全局配置
  • 安全
  • 备份还原
  • 记录和报告
  • 数据配置
  • 升级

对于“应用程序管理”页面:

  • Web应用程序配置
  • 现场管理
  • 应用安全
  • 外部服务
  • 工作流程管理

通过检查这些页面,可以很容易地确定出值的引用位置。

前面我提到过,可以使用CustomActionGroup元素创建新的链接组。例如:

<CustomActionGroup

    ID="CustomSiteSettingsGroup"

    位置="Microsoft.SharePoint.SiteSettings"

    标题="新的自定义组"

    顺序="100"

    描述="我的描述" />



然后,这将在页面上创建具有自定义标题的新链接组-SharePoint将负责呈现,以便新组将包装到另一组组上。当然,如果这不是您想要的,则可能会有一段有趣的时间对其进行自定义。

在其他地方使用CustomAction

因此,在介绍了如何向管理区域中添加链接之后,我将通过列出“ 位置”属性的其他一些有效值来结束本文。希望这可以说明您以这种方式自定义SharePoint的一些选项:
  • Microsoft.SharePoint.ContentTypeTemplateSettings
  • Microsoft.SharePoint.ContentTypeSettings
  • Microsoft.SharePoint.Administration.ApplicationCreated
  • Office.Server.ServiceProvider.Administration(共享服务/ SSP链接)
  • Microsoft.SharePoint.ListEdit.DocumentLibrary
  • Microsoft.SharePoint.Workflows
  • NewForm工具栏
  • DisplayForm工具栏
  • EditForm工具栏
  • Microsoft.SharePoint.StandardMenu(SiteActions菜单)
  • Mcrosoft.SharePoint.Create(_layouts / create.aspx-用于指定要在网站上创建的屏幕)
  • Microsoft.SharePoint.ListEdit(用于编辑列表项的属性的屏幕)
  • EditControlBlock(下图)
我把最后几个加粗了,并添加了描述,因为我认为它们特别有趣。当然,如果您要考虑其他自定义设置,那么其他一个或两个可能已引起您的注意!特别是能够将自定义操作添加到EditControlBlock很有趣:




在这里,可以将一个名为'RegistrationType'的特殊属性添加到CustomAction元素,从而使您可以精确控制应显示操作的情况。有效选项包括“列表”,“ ContentType”,“ FileType”和“ ProgId”。 文斯(又名TheKid) 有一些很好的例子 在他的博客上.

希望这为您提供了一些有关如何以这种方式添加或修改SharePoint UI的想法。定制愉快!

14条评论:

罗宾·墨瑞(RobinMeuré)说过...

Check out the following page on MSDN to check out all the possible locations : http://msdn2.microsoft.com/en-us/library/ms473643.aspx

在搜寻所有可能的位置时发现了您的精彩帖子:)

罗宾·墨瑞(RobinMeuré)说过...

我最近的帖子您总共定义了更多。也许您可以帮我,我正在搜索globallinks(mysite / mylinks)的位置

克里斯·奥'Brien说过...

你好罗宾,

实际上,您提到的链接不是使用CustomAction设置的。这些实际上是具有以下ID的委托控件:

MySite链接:GlobalSiteLink1
我的链接链接:GlobalSiteLink2

您可能会在我的文章中找到一些有用的信息 使用委托控件.

HTH,

克里斯。

罗宾·墨瑞(RobinMeuré)说过...

克里斯,你好

好吧,我找到了一个groupid来在个人链接中添加我的链接(“欢迎用户”链接部分)
Check out the solution on my blog 在 http://glorix.blogspot.com/2007/08/custom-action-locations-and-groupid.html

顺便说一句,如果您愿意,我将删除我从您的帖子中复制的信息,并引用您的帖子。

匿名 said...

克里斯你好:

感谢您的帖子。我需要做一些不同的事情。 ECB通常在列表中显示与“标题”列相关联。但是,我没有使用标题。如何将ECB与视图中的另一列关联?

克里斯·奥'Brien说过...

@Jeff,

很抱歉延迟回复,我一直在 在度假.

我不认为有一种方法可以将ECB与其他列关联。不过我可能错了-您找到方法了吗?

克里斯。

基督教说过...

嗨,您好,

有谁知道如何在“发送到”对话框中添加自定义操作?

基督教

克里斯·奥'Brien说过...

基督教,

我想这只能使用JavaScript来完成,因为此菜单内置于core.js中,并且不会作为CustomAction位置公开。

HTH,

克里斯。

匿名 said...

You have a very nice translation of the SiteSettings page but, how do I find the match for _layouts/create.aspx and eks. the Web Pages section, i want to replace Web Pages> Sites and Workspaces Action with a 习俗

克里斯·奥'Brien说过...

嗨,卡斯滕,

我最好的建议是搜索SharePoint附带的功能文件。许多链接都是以这种方式添加的,因此您可能会找到要修改的特定链接的ID。

HTH,

克里斯。

匿名 said...

克里斯,你好!
我为管理器创建了一个带有新菜单按钮的新列表模板,并带有新项目,显示和编辑项目的新视图。我创建了一个新列表,并且按钮仅在此列表中可见。直到现在很棒,但是现在我的老板希望我在ECB,DisplayFormToolbar和EditFormToolbar中隐藏原始按钮“ new”,“ edit”和“ display item”,但前提是他是当前用户。我的问题:1.我无法使用HideCustomAction做到这一点,因为ECB的更改必须在Core.js中完成。但是我还能为DisplayFormToolbar或EditFormToolbar做什么呢? Core.js中的更改仅影响ECB。2.当我将来发现它如何工作时,我必须在代码中进行哪些更改以区分Manager和普通工作人员?它与'if(HasRights())'一起使用吗?
请道歉我的英语!
先感谢您!
克劳迪娅

克里斯·奥'Brien说过...

嗨克劳迪娅,

是的,进行这样的自定义通常需要在几个方面进行更改。但是请记住,Microsoft不支持修改原始SharePoint系统文件,因此在可能的情况下,您应该考虑是否存在一种无需更改提供的文件即可实施更改的方法。我建议以下我认为需要进行的每项更改的技术:

-修改core.js为ECB项目提供的JavaScript(覆写 通过指定替代JS文件来实现JavaScript)
-修改列表中使用的工具栏(提供一个 习俗 使用工具栏的修改版本的列表形式)-本文提供了一些有关实际修改工具栏的良好信息- http://www.sharepointblogs.com/tanujashares/archive/2008/01/11/customize-the-oob-list-menus-in-sharepoint-2007-lists.aspx

HTH,

克里斯。

匿名 said...

克里斯,你好

当遇到困难时,我会调查您的博客以寻求解决之道。
我面临的问题是,我们需要在Sharepoint 2007上将应用程序作为解决方案进行部署,其中所有Web部件都部署为一个功能。

现在,我需要在一个新的自定义部分组下指定所有这些Web部件,当您拥有此窗口将新的Web部件添加到页面时,该自定义组会出现。

我试图将条目放入Elements.xml中,但这不起作用。也许您会想到一个原因。

期待得到答复。

拉吉尼

克里斯·奥'Brien说过...

拉吉尼

这有两个要素:

-确保Web部件属于特定组
-在HTML标记中为WebPartZone上的QuickAdd属性指定一个值

HTH,

克里斯。