在SharePoint中动态显示“编辑控件块”菜单项

时间:2008-08-27 15:11:39

标签: javascript sharepoint moss document-library

我正在尝试在SharePoint 2007中设置动态的每项菜单(编辑控件块)。我的目标是根据当前用户的组成员身份提供某些可用的功能。

我知道控制此菜单项创建的CustomAction标记具有Rights属性。我遇到的问题是我使用的组在站点中具有相同的权限(ViewListItems,ManageAlerts等)。我们设置的组更多地处理功能,例如Manager,Employee等。我们希望能够为组分配自定义功能,并且只有该组的成员才能看到与该功能相关的菜单项。每个人都拥有相同的基本站点权限,但根据其登录凭据将提供额外的选项。

我已经看过几篇关于修改Core.js文件以隐藏上下文菜单中的项目的文章,但它们是一种全有或全无的方法。 http://blog.thekid.me.uk/archive/2008/04/29/sharepoint-custom-actions-in-a-list-view-webpart.aspx上有一篇有趣的帖子,展示了如何动态修改“动作”菜单。修改此示例以检查用户组并根据成员身份显示或隐藏菜单是微不足道的。不幸的是,这个示例似乎不适用于上下文菜单项,如http://forums.msdn.microsoft.com/en-US/sharepointdevelopment/thread/c2259839-24c4-4a7e-83e5-3925cdd17c44/所示。

有没有人知道如何在不使用javascript的情况下执行此操作?如果没有,从javascript检查用户组的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

您可以实现两种不同的Javascript函数,用于动态地将菜单项添加到列表项下拉列表中。 Core.js(C:\ Program Files \ Common Files \ Microsoft Shared \ web server extensions \ 12 \ TEMPLATE \ LAYOUTS \ 1033 \ CORE.JS)在为选定列表项生成菜单项时检查是否存在这些方法。 “Custom_AddDocLibMenuItems”和“Custom_AddListMenuItems”是Javascript方法的名称。

我认为您可以使用一篇文章来解决您的具体问题,基于用户角色成员资格的动态菜单项自定义,可在此处找到:

MSDN: Customizing the Context Menu of Document Library Items(注意任何列表类型的过程完全相同)

本文概述了如何执行服务器端代码来定义将要显示的菜单项:

  

[...]在更复杂的情况下,您必须从服务器检索可用命令列表,因为只有在那里您可以运行业务逻辑并可能从自定义数据库获取命令。通常,如果要实现工作流解决方案,您希望这样做,其中每个文档都有自己的进程状态,并且命令与之关联。

     

此情况的解决方案是让Custom_AddDocLibMenuItems动态调用自定义ASP.NET页面。此页面获取文档库的ID和查询字符串上的特定项,并返回一个XML字符串,其中包含该特定文档可用命令的所有信息。根据文档的进程状态(或其他一些自定义业务逻辑),可以使用这些命令。 [...]

答案 1 :(得分:2)

不幸的是,如果不使用javascript,这是不可能实现的。 ECB不会将服务器控件定义为自定义操作(与SiteActions等不同)。

要了解如何使用Javascript完成此操作,请查看以下文章: http://www.helloitsliam.com/archive/2007/08/10/moss2007-%E2%80%93-item-level-menus-investigation.aspx