MSDN Visual系列:在WSSv3中通过创建Feature扩展站点的动作菜单
原文:http://msdn2.microsoft.com/en-us/library/bb418728.aspx
我们可以在SharePoint中通过创建一个带CustomAction元素的功能(Feature)添加一个自定义菜单项到默认的站点动作(Site Actions)菜单中。通过这种方式,我们可以添家自定义的命令到默认的SharePoint用户界面中。这些命令在用户访问SharePoint站点的不同页面时都中是可用的。当我们创建了一个站点动作菜单项,我们也可以将其配置为一个URL,进而把用户导航到该URL地址。比如,我们可以将用户导航到另一个站点,或者导航到我们的自定义应用程序页面,从而可以显示一些自定义的数据或进行一些自定义的操作,而不必离开当前网站上下文。
首先,我们需要创建一个自定义的Feature。我们可以在网站集范围或者网站范围内定义该Feature。如果Feature定义在网站集范围上(也就是Scope="Site"),那么结果菜单项会出现在当前网站集中的每个网站的动作菜单中;如果Feature定义在网站范围上(即Scope="Web"),结果菜单仅会出现在特定的已经激活该功能的网站中。下面的Feature定义在网站集范围上,并且包括了一个名为elements.xml的CAML文件的引用。
使用CustomAction元素在默认的SharePoint用户界面中定义各种类型的菜单项和链接。下面的CustomAction元素包含在一个名为elements.xml的CAML文件中。完成的功能是添加一个自定义菜单项,导航用户到一个定制的后台应用程序页面。
当创建一个CustomAction元素时,我们必须在其内部添加一个UrlAction元素,并且包含Url属性。当我们要把用户导航到一个应用程序页面,比如ApplicationPage1.aspx,我们还需要考虑是否希望应用程序运行于当前站点或站点集上下文中。下面的例子中,使用动态的令牌~site添加在URL的头部。这样编写后,当SharePoint解析该CustomAction元素并据此创建菜单项时,会用当前站点的实际URL替换~site。
当我们在站点动作菜单中创建一个自定义菜单项时,我们可以设置其只能对有管理权限的用户可见。请看下面的例子,其中增加了一个名为RequireSiteAdministrator的属性。
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<CustomAction
Id="ApplicationPage1"
GroupId="SiteActions"
Location="Microsoft.SharePoint.StandardMenu"
Sequence="2000"
Title="Hello World Application Page"
Description="Getting up and going with inline code"
RequireSiteAdministrator="True" >
<UrlAction Url="~site/_layouts/Litware/ApplicationPage1.aspx"/>
</CustomAction>
</Elements>
我们可以在SharePoint中通过创建一个带CustomAction元素的功能(Feature)添加一个自定义菜单项到默认的站点动作(Site Actions)菜单中。通过这种方式,我们可以添家自定义的命令到默认的SharePoint用户界面中。这些命令在用户访问SharePoint站点的不同页面时都中是可用的。当我们创建了一个站点动作菜单项,我们也可以将其配置为一个URL,进而把用户导航到该URL地址。比如,我们可以将用户导航到另一个站点,或者导航到我们的自定义应用程序页面,从而可以显示一些自定义的数据或进行一些自定义的操作,而不必离开当前网站上下文。
首先,我们需要创建一个自定义的Feature。我们可以在网站集范围或者网站范围内定义该Feature。如果Feature定义在网站集范围上(也就是Scope="Site"),那么结果菜单项会出现在当前网站集中的每个网站的动作菜单中;如果Feature定义在网站范围上(即Scope="Web"),结果菜单仅会出现在特定的已经激活该功能的网站中。下面的Feature定义在网站集范围上,并且包括了一个名为elements.xml的CAML文件的引用。
<Feature
Id="AA929AFF-4602-4d7f-A501-B80AC9A4BB52"
Title="A Sample Feature: Item Auditing"
Description="A sample feature with an ECB menu item"
Scope="Site"
xmlns="http://schemas.microsoft.com/sharepoint/">
<ElementManifests>
<ElementManifest Location="elements.xml" />
</ElementManifests>
</Feature>
Id="AA929AFF-4602-4d7f-A501-B80AC9A4BB52"
Title="A Sample Feature: Item Auditing"
Description="A sample feature with an ECB menu item"
Scope="Site"
xmlns="http://schemas.microsoft.com/sharepoint/">
<ElementManifests>
<ElementManifest Location="elements.xml" />
</ElementManifests>
</Feature>
在站点动作菜单中添加自定义动作
使用CustomAction元素在默认的SharePoint用户界面中定义各种类型的菜单项和链接。下面的CustomAction元素包含在一个名为elements.xml的CAML文件中。完成的功能是添加一个自定义菜单项,导航用户到一个定制的后台应用程序页面。
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<CustomAction
Id="ApplicationPage1"
GroupId="SiteActions"
Location="Microsoft.SharePoint.StandardMenu"
Sequence="2000"
Title="Hello World Application Page"
Description="Getting up and going with inline code" >
<UrlAction Url="~site/_layouts/Litware/ApplicationPage1.aspx"/>
</CustomAction>
</Elements>
<CustomAction
Id="ApplicationPage1"
GroupId="SiteActions"
Location="Microsoft.SharePoint.StandardMenu"
Sequence="2000"
Title="Hello World Application Page"
Description="Getting up and going with inline code" >
<UrlAction Url="~site/_layouts/Litware/ApplicationPage1.aspx"/>
</CustomAction>
</Elements>
当创建一个CustomAction元素时,我们必须在其内部添加一个UrlAction元素,并且包含Url属性。当我们要把用户导航到一个应用程序页面,比如ApplicationPage1.aspx,我们还需要考虑是否希望应用程序运行于当前站点或站点集上下文中。下面的例子中,使用动态的令牌~site添加在URL的头部。这样编写后,当SharePoint解析该CustomAction元素并据此创建菜单项时,会用当前站点的实际URL替换~site。
~site/_layouts/Litware/ApplicationPage1.aspx
当我们在站点动作菜单中创建一个自定义菜单项时,我们可以设置其只能对有管理权限的用户可见。请看下面的例子,其中增加了一个名为RequireSiteAdministrator的属性。












当添加了RequireSiteAdministrator属性后,如果用户不具有管理权限时SharePoint就不会显示该菜单项了。对于一个在网站集范围内的CustomAction元素,该菜单项就会仅在当前用户是网站集所有者或管理员时才会出现。对于一个在网站范围内的Feature指向的CustomAction元素,这个菜单项只能在具有当前网站管理权限的用户页面中出现。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!