在SharePoint中,将表单添加到功能中的现有列表中

时间:2010-03-11 11:12:40

标签: sharepoint list forms

我需要替换sharepoint站点上现有列表中的视图表单。这必须在一个功能中完成,我没有架构到列表,所以我不能简单地更新xml。

我的功能将文件添加到elements.xml中的列表中:

  <Module Name="Replacement Form" Path="" Url="Lists/ListName">
    <File Url="ReplacementDispForm.aspx" />
  </Module>

并且该功能更新了功能激活功能接收器中特定内容类型的显示形式:

  SPList list = web.Lists[listName];
  SPContentType type = list.ContentTypes[typeName];
  type.DisplayFormUrl = formUrl;
  type.Update();

一切正常。问题是更新功能时 - 由于页面包含Web部件,升级等会导致页面有一个额外的Web部件 - sharepoint只需添加webpart定义,这意味着每个部署都会添加+1 Web部件。

所以我试图删除功能停用代码中的文件,但是文件无法删除的简单错误:

string name = "Lists/ListName/ReplacementDispForm.aspx";
SPFile file = web.GetFile(name);
file.Delete();

file.Delete是SPException错误的行'无法删除此文件夹'。我不确定这是因为文件没有正确添加到列表中,还是我的删除代码不正确?

2 个答案:

答案 0 :(得分:0)

您的代码看起来不错。我最近做了类似的事情,但是我没有在停用时删除文件,而是创建了一个删除文件的新功能,然后重新激活了第一个功能:

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
    SPWeb web = properties.Feature.Parent as SPWeb;
    web.Files.Delete("Lists/ListName/ReplacementDispForm.aspx");
    web.Features.Add(new Guid("{E6E82DC3-8802-4332-BD98-0025E0A435F3}"), true);
}

不确定这是否有所不同,但至少它表明你正朝着正确的方向前进。

唯一突出我的是provision本身。默认值可能正在发挥作用,但您可能希望明确地将Type =“Ghostable”添加到File元素。

答案 1 :(得分:0)

即使您不拥有schema.xml,也可以从列表中提取schema.xml。 SPSource工具从您网站上的任何列表中提取schema.xml。

可能不值得,因为您似乎已经完成了创建该功能的大部分工作,等等。但下次您需要做类似的事情。