溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何擴展VS2010的服務(wù)器資源管理器

發(fā)布時間:2022-01-11 10:01:47 來源:億速云 閱讀:265 作者:iii 欄目:編程語言

這篇文章主要講解了“如何擴展VS2010的服務(wù)器資源管理器”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“如何擴展VS2010的服務(wù)器資源管理器”吧!

SharePoint服務(wù)器資源管理器是Visual Studio 2010的一項新特性,該功能是由Visual Studio Tools for SharePoint提供的。

如何擴展VS2010的服務(wù)器資源管理器

如果你只需要從Visual Studio中瀏覽SharePoint站點里的內(nèi)容(網(wǎng)站欄,內(nèi)容類型,功能等),那么默認(rèn)功能對你來說就已經(jīng)非常好用了。 然而,在默認(rèn)情況下,SharePoint服務(wù)器資源管理器除了可以顯示網(wǎng)站里有哪些可用的內(nèi)容以外,其它什么也做不了。

如何擴展VS2010的服務(wù)器資源管理器

正如你所看到的,上下文菜單中僅有很少的幾項。下圖是通知列表的屬性面板。 該屬性存儲在Annotations中。為了方便理解什么是Annotation,你可以把它們想象成一個帶屬性的類。這些屬性就是我們在下面的屬性面板中看到的:

如何擴展VS2010的服務(wù)器資源管理器

這里還是只讀的。

我可以擴展嗎?

接下來你一定會問這樣一個問題(如果你是一名SharePoint開發(fā)人員的話)——我能不能對其進行擴展,向SharePoint服務(wù)器資源管理器中添加自定義的命令或結(jié)點呢?

答案是肯定的。你可以擴展SharePoint服務(wù)器資源管理器,包括:

1)創(chuàng)建新結(jié)點

2)擴展已有結(jié)點

給我個例子好嗎?

讓我們以功能結(jié)點為例。

如何擴展VS2010的服務(wù)器資源管理器

功能結(jié)點下顯示了該網(wǎng)站下所有已激活的功能。如果右擊某個功能,你會看到少得可憐的幾項。

如何擴展VS2010的服務(wù)器資源管理器

如果能在上下文菜單中添加一項“停用”,點擊可以停用選中的功能,那就太帥了:)

如何擴展VS2010的服務(wù)器資源管理器

[順帶說一句,這張截圖是實實在在的做好的擴展,而非Photoshop出來的:)]

理解SharePoint服務(wù)器資源管理器

在正式開始編寫一個擴展之前,你必須了解一下SharePoint服務(wù)器資源滾利器中不同類型的結(jié)點:

如何擴展VS2010的服務(wù)器資源管理器

本例中我們感興趣的是FeatureNode。

開始

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

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

如何擴展VS2010的服務(wù)器資源管理器

1、新建一個類,并實現(xiàn)IExplorerNodeTypeExtension接口

2、處理事件

3、通過Annotations 訪問該結(jié)點的屬性

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

***步

創(chuàng)建一個Windows類庫項目并添加下列引用

第二步

創(chuàng)建一個類并實現(xiàn)接口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);  }

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

第四步

我們?nèi)粢S靡粋€功能,首先需要知道該功能的Definition Id。在功能的屬性面板中已經(jīng)有這個值了:

如何擴展VS2010的服務(wù)器資源管理器

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

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

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

IExplorerNodeContext siteContext = e.Node.Context;

下面是事件處理程序代碼現(xiàn)在的樣子:

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);  }

第五步

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

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(停用)該功能。

你也可以通過客戶端對象模型的異步模式來實現(xiàn)異步調(diào)用。

部署該擴展

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

你可以套用VSIX模板來創(chuàng)建.vsix包。

如何擴展VS2010的服務(wù)器資源管理器

在manifest文件中包含該擴展。

如何擴展VS2010的服務(wù)器資源管理器

選擇內(nèi)容為MEF Component,并選擇擴展項目作為源。

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

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

現(xiàn)在看看上下文菜單,已經(jīng)出現(xiàn)我們的菜單項了:

如何擴展VS2010的服務(wù)器資源管理器

當(dāng)你點擊它時,會彈出確認(rèn)消息:

如何擴展VS2010的服務(wù)器資源管理器

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

感謝各位的閱讀,以上就是“如何擴展VS2010的服務(wù)器資源管理器”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對如何擴展VS2010的服務(wù)器資源管理器這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

vs
AI