畅谈Visual Studio 2010中的SharePoint插件

  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。

  开始

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

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

  2、处理事件

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

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

  第一步

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

  第二步

  创建一个类并实现接口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; Feature
Collection 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所开发的“停用扩展”就完成了

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

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

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

时间: 2025-01-21 12:05:21

畅谈Visual Studio 2010中的SharePoint插件的相关文章

详解Visual Studio 2010中的扩展管理器

扩展能够为核心应用程序提供附加的功能或者自定义设置.在很多应用程序中这都是很流行的,包括流行的web浏览器IE和Firefox.微软的Office.媒体播放器.Photoshop.Eclipse.Visual Studio等等.其中有些可能比较新奇,而针对开发工具--像Eclipse和Visual Studio--的扩展让开发者的生产力得到了显著提高. Visual Studio早期的版本是构建在COM技术之上的.而Visual Studio的主要扩展方式插件是通过COM接口实现的.随着时间的变

Visual Studio 2010中的Web开发

Microsoft Visual Studio 2010 为 ASP.NET Web 应用程序的开发提供很多新的功能.这些新功能旨在帮助开发人员快速方便地创建和部署质量高且功能全的 Web 应用程序. 目前,Visual Studio 2010 支持 HTML 代码片段.利用这些代码片段,可以生成高质量的代码.Visual Studio 中附带了很多代码片段,开发人员也可以创建自己的代码片段. Visual Studio 2010 提供的另一个新功能是转换 web.config 文件,以用于部署

Visual Studio 2010中的C++ IDE增强

如果说对C++新标准的支持为Visual C++的发展奠定了坚实的基础,那么,她在IDE方面的增强,则会让她更加光彩照人. 很多Visual C++程序员都爱吃西红柿(Visual Assist).为什么?因为它可以补偿VC(Visual C++).虽然Visual C++在C++库,编译器,MFC等方面非常强大,但是她的IDE一直受到C++程序员的诟病.特别是进入 Visual Studio 2000之后,Visual C++的IDE并没有大的改变,但是效率却越来越低下,使得程序员们不得不多吃

使用IntelliTrace在Visual Studio 2010中调试.NET应用程序

在Visual Stuido 2010中有一个新的功能那就是IntelliTrace.IntelliTrace被引入到Visula Studio中来加速我们对.NET应用程序的调试,它通过对预先设置的事件和方法在运行过程中的跟踪并将其有效地传递给调试执行者,从而快速的传递程序在执行过程中的状态和各种信息来帮助开发者更好的调试程序,快速的发现问题.实际上,在Visual Studio 2010之前,Microsoft Visual Stuido已经帮助我们很好的继承了调试工具,比如对变量的监控,对

利用Visual Studio 2010中的Concurrency Visualizer优化性能

如今制造商们广泛提供了多核心处理器,新处理器中的单线程性能相对而言可能就显得平淡无奇了.那就意味着,对软件开发人员来说,通过更好地利用并行机制来提高应用程序性能的压力就更大了. 并行编程是一项很有挑战性的工作,其原因很多,但我在本文中只想将重点放在并行应用程序的性能方面.多线程应用程序不止容易成为顺序实现低效率进行(如低效的算法.低速的缓存行为.过多的 I/O)的常见原因,而且还可能具有并行性能 Bug.并行性能和可伸缩性可能受到负载不平衡.同步开销过大.无意的序列化或线程迁移限制. 过去,要了

visual studio 2010中创建测试项目时发生错误

问题描述 visual studio 2010中创建测试项目时发生错误 十分感谢! 解决方案 VC++的单元测试?你的VS2010最好打上SP1.我记得VS2010对VC++的Unit Test支持有问题. 解决方案二: 没安装壕吧,修复一下 .

在 Visual Studio 2010 中开发和部署 Windows Azure 应用程序

原文 在 Visual Studio 2010 中开发和部署 Windows Azure 应用程序 在 Visual Studio 2010 中开发和部署 Windows Azure 应用程序 Jim Nakashima.Hani Atassi 和 Danny Thorpe 将应用程序或服务部署到 Microsoft 云服务平台 Windows Azure 的原因有很多.例如,只为使用的内容付费从而可降低操作和硬件成本.构建几乎能无限缩放的应用程序.巨大的存储容量.地理位置等等,不胜枚举. 只有

laoyu-关于 Visual Studio 2010 中的错误的问题!

问题描述 关于 Visual Studio 2010 中的错误的问题! 为何在Visual Studio 2010 C++中出现错误时为什么不能显示错误提示和红色下划线.请问如何解决? 解决方案 安装visual assist X

Visual Studio 2010 中的代码约定设置

软件约定称为代码约定,通过这一约定可以表示代码正常工作所需的正式条件. 如果方法未按预期收到数据或生成的数据不符合预期的后置条件,代码约定将导致代码引发异常. 有关前置条件和后置条件的概述,您可能需要查看我上个月发表的文章 (msdn.microsoft.com/magazine/gg983479). 代码约定是 .NET Framework 4 的一部分,但同样依赖于 Visual Studio 2010 中的一些功能,例如运行时工具.与 MSBuild 集成以及"项目属性"框中的属