2012-03-26 16 views
0

功能升級我必須在列表視圖中添加一個字段,該字段將指向內容類型的新列。將字段添加到FeatureUpgrading中的列表視圖 - 如何標識列表視圖

目前我的代碼是基於假設,視圖的標題是所有鏈接(我通過調試器得到它)。所以,它的片斷:

   SPView view; 
       try 
       { 
        view = list.Views["All Links"]; 
       } 
       catch 
       { 
        view = list.Views[0]; // just in case 
       } 
       view.ViewFields.Add("NewField"); 
       view.Update(); 

現在它的工作原理,但前提是該視圖的標題是所有鏈接(或者只有一個視圖[0])。我沒有在schema.xml或其他地方找到標題。在代碼中更新視圖的最佳安全方式是什麼? (或者可能有更好的方法來更新它,例如使用XML,但是據我所知,當功能升級的schema.xml文件沒有被考慮在內)。

謝謝你,帕維爾

回答

1

裏面找schema.xml中視圖的默認標題,看看合適的View element displayName屬性。如果屬性值是「所有鏈接」,那麼你可以很好。

如果像開箱即用的鏈接列表定義那樣,該值是類似於$Resources:core,All_Links;的東西,那麼還有更多需要考慮的事項。如果你的網站只有英文,那麼你仍然可以很好地搜索「所有鏈接」。但是,如果你有其他語言的網站,你需要做這樣的事情:

string title = SPUtility.GetLocalizedString(
    "$Resources:All_Links;", 
    "core", 
    web.Language); 
SPView view = list.Views[title]; 

現在,即使屬性值爲「所有鏈接」,或者如果所有的網站都是英文的,還有的可能性(尤其是在升級事件中)標題已從默認更改。在這些情況下,我更願意通過BaseViewID進行搜索。不幸的是,不是BaseViewID一個索引,所以我用下面的代碼:

private SPView GetView(SPList list, string id) 
{ 
    SPView view = null; 
    foreach (SPView v in list.Views) 
    { 
     if (id == v.BaseViewID) 
     { 
      view = v; 
      break; 
     } 
    } 
    return view; 
} 
0

另一種方法來檢索您的看法是通過使用SPWeb.GetViewFromUrl("Lists/{List_Name}/{View_Name}.aspx"),比照msdn article

然後您的代碼會是這個樣子(如果你的特點是網絡 - 作用域):

SPWeb web = (SPWeb)properties.Feature.Parent;  
SPView view = web.GetViewFromUrl("Lists/<List_Name>/All Links.aspx"); 
view.ViewFields.Add("NewField"); 
view.Update(); 
相關問題