文章出處

本文分別介紹了兩種常用的添加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項左側都是不帶圖標的。

參考資料

how to apply custom action in ECB only for document item

Add Custom Action To SharePoint Edit Control Block


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()