成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

暢談Visual Studio 2010中的SharePoint插件

開發 后端
今天我們將為大家介紹的是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

 開始

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

下圖是我們將要進行的工作的圖形化表示:

圖形化表示

1、新建一個類,并實現IExplorerNodeTypeExtension接口

2、處理事件

3、通過Annotations 訪問該結點的屬性

4、通過客戶端對象模型執行SharePoint操作

***步

創建一個Windows類庫項目并添加下列引用

第二步

創建一個類并實現接口IExplorerNodeTypeExtension:

第三步

我們感興趣的是在上下文菜單中添加一項,處理事件NodeMenuItemsRequested。這些都在Initialize方法中完成:

  1. public void Initialize(IExplorerNodeType nodeType)  
  2. {  
  3. nodeType.NodeMenuItemsRequested +=   
  4. new EventHandler<ExplorerNodeMenuItemsRequestedEventArgs>  
  5. (nodeType_NodeMenuItemsRequested);  
  6. }  

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

  1. void nodeType_NodeMenuItemsRequested(object sender, ExplorerNodeMenuItemsRequestedEventArgs e)  
  2. {   
  3. IMenuItem deactivateMenu = e.MenuItems.Add("停用");  
  4. deactivateMenu.Click +=   
  5. new EventHandler<MenuItemEventArgs>(deactivateMenu_Click);  
  6. }    

我們在事件處理程序中添加了一個菜單項并且處理了其自身的點擊事件。

第四步

我們若要停用一個功能,首先需要知道該功能的Definition Id。在功能的屬性面板中已經有這個值了:

 

為了訪問該屬性,我們需要借助于Annotations對象。下面是訪問功能屬性的代碼:

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

接下來我們要獲取該功能所處的網站。因為服務器資源管理器已經實例化了到該站點的連接,因此我們可以直接從當前上下文中獲取。

 

  1. IExplorerNodeContext siteContext = e.Node.Context; 

下面是事件處理程序代碼現在的樣子:

  1. void nodeType_NodeMenuItemsRequested(object sender, ExplorerNodeMenuItemsRequestedEventArgs e)  
  2. {   
  3. siteContext = e.Node.Context;  
  4. IFeatureNodeInfo fn = e.Node.Annotations[typeof(IFeatureNodeInfo)] as IFeatureNodeInfo;  
  5. definitionId = fn.Id;  
  6. featureName = fn.Name;   
  7.  
  8. IMenuItem deactivateMenu = e.MenuItems.Add("停用");  
  9. deactivateMenu.Click += new EventHandler<MenuItemEventArgs>(deactivateMenu_Click);  
  10. }    

第五步

現在我們可以通過客戶端對象模型在新菜單項的事件處理程序中編寫停用功能的代碼了:

  1. void deactivateMenu_Click(object sender, MenuItemEventArgs e)  
  2. {  
  3. if (MessageBox.Show(confirmationMessage,String.Format("停用{0} 功能",featureName),   
  4. MessageBoxButtons.YesNo,   
  5. MessageBoxIcon.Exclamation) == DialogResult.Yes)  
  6. {  
  7.  
  8. IExplorerNode parentFeatureNode = e.Owner as IExplorerNode;  
  9. IExplorerNode featureNode = parentFeatureNode.ParentNode;  
  10. ClientContext clientContext = new ClientContext(siteContext.SiteUrl.AbsoluteUri);  
  11. Web site = clientContext.Web;  
  12. FeatureCollection siteFeatures = site.Features;   
  13.  
  14. clientContext.Load(site, s => s.Title, s => s.Features);  
  15. siteFeatures.Remove(definitionId, false);  
  16. clientContext.ExecuteQuery();  
  17. clientContext.Dispose();  
  18. featureNode.Refresh();  
  19. }  
  20. }  

確實很簡單。查詢并僅返回Web和Features對象,然后從該站點中Remove(停用)該功能。

你也可以通過客戶端對象模型的異步模式來實現異步調用。 

部署該擴展

為了能夠部署這個擴展,我們需要將其包含到一個.vsix包中。

你可以套用VSIX模板來創建.vsix包。

在manifest文件中包含該擴展。 

選擇內容為MEF Component,并選擇擴展項目作為源。

編譯該項目并生成相應的.vsix包,然后安裝這個包。

為FeatureNode所開發的“停用擴展”就完成了

現在看看上下文菜單,已經出現我們的菜單項了: 

當你點擊它時,會彈出確認消息: 

點"是"的話將停用該功能并刷新功能結點樹視圖。 

你可以下載 源代碼 或者VSIX包 。

責任編輯:彭凡 來源: 博客園
相關推薦

2009-11-10 13:43:37

Visual Stud

2009-11-13 14:59:12

Visual Stud

2009-11-11 14:26:13

Visual Stud

2009-11-18 09:14:49

Visual Stud

2009-12-02 09:43:38

Visual Stud

2009-09-07 09:22:17

Visual Stud代碼片段

2010-03-19 13:17:26

Parallel

2009-11-24 09:00:02

Visual Stud

2010-07-20 08:43:00

Visual Stud

2011-01-10 08:48:53

2009-09-02 16:21:17

Visual BasiC#語言

2010-04-15 08:40:00

UML建模Visual Stud

2010-01-14 14:12:14

Visual Stud

2009-03-17 08:56:57

Visual StudVS2010C++

2010-02-23 09:02:00

Visual Stud

2009-03-10 10:21:05

災難恢復Restart Manvs

2010-12-16 10:00:20

QtVisual Stud

2010-02-22 16:43:33

Visual Stud

2009-11-11 09:48:06

Visual Stud

2010-05-14 15:05:38

Visual Stud
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久综合成人精品亚洲另类欧美 | 男人天堂久久 | 超碰国产在线 | 欧亚av在线| 欧美久久不卡 | 中文字幕日韩av | 免费三级网站 | 国内av在线 | 欧美日韩在线观看视频网站 | 欧美精品在线一区 | www.久 | 国产精品v | hsck成人网 | 日韩精品一区中文字幕 | 风间由美一区二区三区在线观看 | 日韩精品在线一区 | 欧美一级久久 | 欧洲视频一区二区 | 精品久久影院 | 在线观看视频你懂得 | 日本久久久影视 | 免费观看av | 久草网站 | 中日字幕大片在线播放 | 日本91av视频 | 中文字幕一区二区三区在线观看 | 综合久久99 | 亚洲国产精品人人爽夜夜爽 | 成人在线一区二区 | 亚洲www. | 国产99热在线 | 久久一区精品 | 午夜男人视频 | 蜜月va乱码一区二区三区 | 欧美中文字幕一区二区 | 黄色一级大片在线免费看产 | 国产高清精品一区二区三区 | 久草网在线视频 | 97人人澡人人爽91综合色 | 综合色在线 | 天天拍天天插 |