Visual Studio 2010最大的卖点就是可扩展性。这样就可以借助.NET社区的力量基于VS构建出许多有用的工具。本文中我们将展示如何扩展VS2010的服务器资源管理器,在其中的SharePoint结点上添加一个自定义操作。

SharePoint服务器资源管理器是Visual Studio 2010的一项新特性,该功能是由Visual Studio Tools for SharePoint提供的。

如果你只需要从Visual Studio中浏览SharePoint站点里的内容(网站栏,内容类型,功能等),那么默认功能对你来说就已经非常好用了。 然而,在默认情况下,SharePoint服务器资源管理器除了可以显示网站里有哪些可用的内容以外,其它什么也做不了。

正如你所看到的,上下文菜单中仅有很少的几项。下图是通知列表的属性面板。 该属性存储在Annotations中。为了方便理解什么是Annotation,你可以把它们想象成一个带属性的类。这些属性就是我们在下面的属性面板中看到的:

这里还是只读的。

我可以扩展吗?

接下来你一定会问这样一个问题(如果你是一名SharePoint开发人员的话)——我能不能对其进行扩展,向SharePoint服务器资源管理器中添加自定义的命令或结点呢?

答案是肯定的。你可以扩展SharePoint服务器资源管理器,包括:

1)创建新结点

2)扩展已有结点

给我个例子好吗?

让我们以功能结点为例。

功能结点下显示了该网站下所有已激活的功能。如果右击某个功能,你会看到少得可怜的几项。

如果能在上下文菜单中添加一项“停用”,点击可以停用选中的功能,那就太帅了:)

[顺带说一句,这张截图是实实在在的做好的扩展,而非Photoshop出来的:)]

理解SharePoint服务器资源管理器

在正式开始编写一个扩展之前,你必须了解一下SharePoint服务器资源滚利器中不同类型的结点:

本例中我们感兴趣的是FeatureNode

开始

MSDN上有一篇非常棒的文章介绍了如何扩展Visual Studio Tools for SharePoint

下图是我们将要进行的工作的图形化表示:

1、新建一个类,并实现IExplorerNodeTypeExtension接口

2、处理事件

3、通过Annotations 访问该结点的属性

4、通过客户端对象模型执行SharePoint操作

第一步

创建一个Windows类库项目并添加下列引用

  • Microsoft.VisualStudio.SharePoint

  • Microsoft.VisualStudio.SharePoint.Explorer.Extensions

  • System.ComponentModel.Composition

第二步

创建一个类并实现接口IExplorerNodeTypeExtension:

第三步

我们感兴趣的是在上下文菜单中添加一项,处理事件NodeMenuItemsRequested。这些都在Initialize方法中完成:

public void Initialize(IExplorerNodeType nodeType)
{
nodeType.NodeMenuItemsRequested += 
new EventHandler<ExplorerNodeMenuItemsRequestedEventArgs>
(nodeType_NodeMenuItemsRequested);

在下面添加事件处理程序:

void nodeType_NodeMenuItemsRequested(object sender, ExplorerNodeMenuItemsRequestedEventArgs e)

IMenuItem deactivateMenu = e.MenuItems.Add("停用");
deactivateMenu.Click += 
new EventHandler<MenuItemEventArgs>(deactivateMenu_Click);
}   

我们在事件处理程序中添加了一个菜单项并且处理了其自身的点击事件。

第四步

我们若要停用一个功能,首先需要知道该功能的Definition Id。在功能的属性面板中已经有这个值了:

为了访问该属性,我们需要借助于Annotations对象。下面是访问功能属性的代码:

IFeatureNodeInfo fn = e.Node.Annotations[typeof(IFeatureNodeInfo)] as IFeatureNodeInfo;
definitionId = fn.Id;
featureName = fn.Name;  

接下来我们要获取该功能所处的网站。因为服务器资源管理器已经实例化了到该站点的连接,因此我们可以直接从当前上下文中获取。

IExplorerNodeContext siteContext = e.Node.Context;

下面是事件处理程序代码现在的样子:

void nodeType_NodeMenuItemsRequested(object sender, ExplorerNodeMenuItemsRequestedEventArgs e)

siteContext = e.Node.Context;
IFeatureNodeInfo fn = e.Node.Annotations[typeof(IFeatureNodeInfo)] as IFeatureNodeInfo;
definitionId = fn.Id;
featureName = fn.Name;

IMenuItem deactivateMenu = e.MenuItems.Add("停用");
deactivateMenu.Click += new EventHandler<MenuItemEventArgs>(deactivateMenu_Click);
}

第五步

现在我们可以通过客户端对象模型在新菜单项的事件处理程序中编写停用功能的代码了:

void deactivateMenu_Click(object sender, MenuItemEventArgs e)
{
if (MessageBox.Show(confirmationMessage,String.Format("停用{0} 功能",featureName), 
MessageBoxButtons.YesNo, 
MessageBoxIcon.Exclamation) == DialogResult.Yes)
{

IExplorerNode parentFeatureNode = e.Owner as IExplorerNode;
IExplorerNode featureNode = parentFeatureNode.ParentNode;
ClientContext clientContext = new ClientContext(siteContext.SiteUrl.AbsoluteUri);
Web site = clientContext.Web;
FeatureCollection siteFeatures = site.Features;

clientContext.Load(site, s => s.Title, s => s.Features);
siteFeatures.Remove(definitionId, false);
clientContext.ExecuteQuery();
clientContext.Dispose();
featureNode.Refresh();
}
}

确实很简单。查询并仅返回Web和Features对象,然后从该站点中Remove(停用)该功能。

你也可以通过客户端对象模型的异步模式来实现异步调用。

部署该扩展

为了能够部署这个扩展,我们需要将其包含到一个.vsix包中。

你可以套用VSIX模板来创建.vsix包。

在manifest文件中包含该扩展。

选择内容为MEF Component,并选择扩展项目作为源。

编译该项目并生成相应的.vsix包,然后安装这个包。

为FeatureNode所开发的“停用扩展”就完成了

现在看看上下文菜单,已经出现我们的菜单项了:

当你点击它时,会弹出确认消息:

点"是"的话将停用该功能并刷新功能结点树视图。

你可以下载 源代码 或者VSIX包 。

参考资料

SharePoint 2010: Extending a SharePoint Node in Server Explorer

转载于:https://www.cnblogs.com/Sunmoonfire/archive/2010/07/14/1774715.html

扩展Visual Studio 2010服务器资源管理器中的SharePoint结点相关推荐

  1. 在 Visual Studio 的解决方案资源管理器中隐藏一些文件

    项目文件中有一些属性几乎是专门为 IDE 而准备的,不过考虑到 .NET 生态的开发者多数都使用 Visual Studio,所以基本上也只有 Visual Studio 对这些特性支持的最全面.(才 ...

  2. Visual C# 2010 实现资源管理器

    演练:使用设计器创建带有 ListView 和 TreeView 控件的资源管理器样式的界面 Visual Studio 2010 其他版本 此主题尚未评级 - 评价此主题 Visual Studio ...

  3. Visual Studio 2015 解决方案资源管理器

    位置 解决方案资源管理器 窗口默认位于右上角. 它与另一个窗口 类视图 位于相同的位置. 打开 类视图 可以在菜单栏中选择 视图 | 类视图 即可打开该窗口.如下图: 解决方案管理器 窗口显示了组成 ...

  4. 【转】【UML】使用Visual Studio 2010 Team System中的架构师工具(设计与建模)

    Lab 1: 应用程序建模 实验目标 这个实验的目的是展示如何在Visual Studio 2010旗舰版中进行应用程序建模.团队中的架构师会通过建模确定应用程序是否满足客户的需求. 你可以创建不同级 ...

  5. t4b代码生成_T4+VSIX 打造Visual Studio 2010 中的Entity代码生成自定义工具

    首先简单介绍下T4(Code Generation and Text Templates),也就是有一些文本模板和控制逻辑组成的混合体,可以使用这些模板生成程序中的部分源代码. 在Visual Stu ...

  6. 在 Visual Studio 2010 中创建 ASP.Net Web Service

    第一步:创建一个"ASP.Net Empty Web Application"项目 第二步:在项目中添加"Web Service"新项目 第一步之后,Visua ...

  7. VS2010中文旗舰版下载 Visual Studio 2010 Ultimate

    Visual Studio 是微软公司推出的开发环境.是目前最流行的 Windows 平台应用程序开发环境.目前已正式发布的是 9.0 版本,也就是 Visual Studio 2008,而在2008 ...

  8. 微软MSDN中文网络广播(Webcast)——Visual Studio 2010 ALM应用实践系列课程预告(2011)...

    Visual Studio 2010 & ALM应用实践系列课程:(将在2011年3月前录制完成) 本系列课程较完整的覆盖了基于Visual Studio 2010 & ALM来进行软 ...

  9. Visual Studio 2010 Ultimate敏捷利剑:详解Scrum

    随着微软Visual Studio 2010 Ultimate Beta2版本的发布,除了它提供协同一致的ALM(应用程序生命周期)管理工具外,MSF for Agile Software Devel ...

最新文章

  1. rpm 安装 忽略依赖_解决RPM包依赖关系
  2. ACM-ICPC如何起步
  3. 学渣该不该学java_为什么很多学霸不愿给学渣讲题?不是因为高冷,而是学渣太难带...
  4. Error:java: Compilation failed: internal java compiler
  5. 卷积神经网络 卷积的概念
  6. C#阻塞队列BlockingCollection
  7. 此beta版本目前不接受任何新测试员_ASO行业资讯|苹果官方App测试工具TestFlight
  8. linux从别的主机下载,从局域网内的其他Linux主机下载文件
  9. springBoot+mybatisPlus小demo
  10. 3-7:类与对象下篇——static成员
  11. python爬虫基础教程1_Python爬虫系列(一)入门教学
  12. (转)高德百度坐标系转换方法
  13. 打造自己的博客(一)利用VuePress完成博客整体搭建,并支持评论和自动发布
  14. Fiona简介及Shapefile数据读取
  15. 使用百度AI将语音转换成文字(JAVA)
  16. 实现正六边形、圆形及带倒角正六边形的头像显示
  17. 【观察】从社恐症到社牛症,有一台微软Surface就够了
  18. 我的求职历程-----求职总结
  19. windows10软件图标去除小盾牌
  20. 用Annchain,加分

热门文章

  1. linux服务器在线人数,servlet监听器实现在线人数统计源码实例
  2. 超长整数相加 c语言类,二个超长正整数的相加
  3. android下拉刷新动画效果代码_vue项目实录:下拉刷新组件的开发及slot的使用
  4. 062_html多媒体
  5. decose oracle_oracle 内存与进程
  6. 创建emp表 oracle,Oracle中创建和管理表详解
  7. python分布式日志收集系统_Go实现海量日志收集系统(一)
  8. 实用金属材料手册_实用电工材料手册
  9. Android多媒体编程
  10. 高效进行 Oracle 日常巡检——数据库基本情况检查