文章出處
文章列表
本文分別介紹了兩種常用的添加ECB菜單項的方式。
聲明式創建
這也是微軟最佳實踐推薦的方式。在VS中創建一個SharePoint空解決方案,并添加一個“空元素”類型的SPI。
在Elements.xml中,定義一個CustomAction,重點關注一下其中高亮部分的屬性(本例在文檔內容類型的項上添加了一個菜單項,點擊導航到一個自定義應用程序頁面,并傳遞項所在的列表的Id作為參數):
添加到Feature,并部署。效果如下:
服務器對象模型創建
這里會用到Feature的事件處理程序。本例同時還演示了如何指定Url,并且用對話框的方式打開。同時,還會傳遞網站Url,所選列表項的ID給目標應用程序頁面。
public override void FeatureActivated(SPFeatureReceiverProperties properties) { SPSite site = (SPSite)properties.Feature.Parent; SPWeb web=site.RootWeb; try{ SPList list = web.Lists["Announcements"]; web.AllowUnsafeUpdates = true; if (list.UserCustomActions.Count > 0) { foreach (SPUserCustomAction action in list.UserCustomActions) { if (action.Name == "ECBItemCustomization") { action.Delete(); list.Update(); break; } } } SPUserCustomAction customaction = list.UserCustomActions.Add(); customaction.Name = "ECBItemCustomization"; customaction.Location = "EditControlBlock"; //customaction.ImageUrl = "/_layouts/15/images/demo/workflows.gif"; string cAction = @"javascript: var options = { url: '{SiteUrl}' + '/_layouts/15/demo/page.aspx/?WorkItemID={ItemId}', allowMaximize: false, width: 500, height: 440 }; SP.UI.ModalDialog.showModalDialog(options);"; customaction.Url = cAction; customaction.Sequence = 106; customaction.Title = "Demo ECB Title"; customaction.Update(); list.Update(); web.AllowUnsafeUpdates = false; } catch{ } }
相應的,要在Feature關閉時移除我們的ECB項:
public override void FeatureDeactivating(SPFeatureReceiverProperties properties) { SPSite site = (SPSite)properties.Feature.Parent; SPWeb web=site.RootWeb; try{ SPList list = web.Lists["Announcements"]; web.AllowUnsafeUpdates = true; if (list.UserCustomActions.Count > 0) { foreach (SPUserCustomAction action in list.UserCustomActions) { if (action.Name == "ECBItemCustomization") { action.Delete(); list.Update(); break; } } } web.AllowUnsafeUpdates = false; } catch{ } }
為了看最終效果,添加了一個demo\page.aspx應用程序頁面。接收url參數,然后顯示相應的通知標題。代碼比較簡單,就不貼了。部署看效果:
注意:與SharePoint 2010的ECB不同的是,SharePoint 2013的ECB會忽略ImageUrl這一屬性。因為從前面的圖中也可以看出,2013的ECB項左側都是不帶圖標的。
參考資料
文章列表
全站熱搜