Sharepoint 在功能升级中向列表视图添加字段-如何标识列表视图

Sharepoint 在功能升级中向列表视图添加字段-如何标识列表视图,sharepoint,sharepoint-2010,sharepoint-api,Sharepoint,Sharepoint 2010,Sharepoint Api,在功能升级中,我必须向列表视图添加一个字段,该字段将指向内容类型中的新列 目前,我的代码基于这样的假设:视图的标题是所有链接(我是通过调试器获得的)。这是一个片段: SPView view; try { view = list.Views["All Links"]; } catch

在功能升级中,我必须向列表视图添加一个字段,该字段将指向内容类型中的新列

目前,我的代码基于这样的假设:视图的标题是所有链接(我是通过调试器获得的)。这是一个片段:

                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文件并没有被考虑在内)


谢谢,Pawel

要在schema.xml中找到视图的默认标题,请查看相应视图的DisplayName属性。如果属性值为“所有链接”,那么就可以了

如果像开箱即用链接列表定义一样,该值类似于
$Resources:core,All\u Links,还有很多要考虑的。如果你的网站只有英文,那么你仍然可以很好地搜索“所有链接”。但如果您有其他语言网站,则需要执行以下操作:

string title = SPUtility.GetLocalizedString(
    "$Resources:All_Links;", 
    "core", 
    web.Language);
SPView view = list.Views[title];
现在,即使属性值是“所有链接”或所有站点都是英文的,仍然有可能(特别是在升级事件中)标题已从默认更改。在这种情况下,我更喜欢搜索。不幸的是,
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;
}

另一种检索视图的方法是使用
SPWeb.GetViewFromUrl(“Lists/{List\u Name}/{View\u Name}.aspx”)
,cf

然后,您的代码将如下所示(如果您的功能是Web范围的):

SPWeb=(SPWeb)properties.Feature.Parent;
SPView view=web.GetViewFromUrl(“列表//所有链接.aspx”);
view.ViewFields.Add(“NewField”);
view.Update();
SPWeb web = (SPWeb)properties.Feature.Parent;    
SPView view = web.GetViewFromUrl("Lists/<List_Name>/All Links.aspx");
view.ViewFields.Add("NewField"); 
view.Update();