我需要替换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错误的行'无法删除此文件夹'。我不确定这是因为文件没有正确添加到列表中,还是我的删除代码不正确?
答案 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。
可能不值得,因为您似乎已经完成了创建该功能的大部分工作,等等。但下次您需要做类似的事情。