在SharePoint 2010中,使用CAML配置列表时是否可以不覆盖现有的ListInstance(假设它已经存在)?或者是必要的自定义代码?
编辑: 这个问题我不清楚。我应该注意到我正在使用默认的vs2010构建/部署过程通过解决方案部署列表实例。使用此过程时,将在部署时删除并重新创建列表实例。我试图阻止它每次重新创建。
答案 0 :(得分:1)
不,无法使用ListInstance元素覆盖现有List。您可以更改EnableVersioning和Hidden。您还可以通过数据/行/行添加项目。但原始清单仍然存在。
来自“documentation,”这里是来自Microsoft.SharePoint.SPListInstanceElement的代码:
internal override void ElementActivated(SPFeaturePropertyCollection props, SPSqlCommand sqlcmdAppendOnly, SPWebApplication webApp, SPSite site, SPWeb web, bool fForce)
{
bool flag1 = this.FeatureDefinition.Scope == SPFeatureScope.Site;
bool flag2 = true;
if (this.RootWebOnly && !web.IsRootWeb)
flag2 = false;
if (!flag2)
return;
this.EnsureDataProvisioned(this.EnsureListExists(!flag1 ? web : site.RootWeb));
}
internal SPList EnsureListExists(SPWeb web)
{
SPList spList = web.Lists.GetListByName(this.Title, false);
if (spList == null)
{
// SNIP - list would be created here
}
bool flag = false;
if (this.VersioningEnabled.HasValue && spList.EnableVersioning != this.VersioningEnabled.Value)
{
spList.EnableVersioning = this.VersioningEnabled.Value;
flag = true;
}
if (this.Hidden.HasValue && spList.Hidden != this.Hidden.Value)
{
spList.Hidden = this.Hidden.Value;
flag = true;
}
if (flag)
spList.Update();
return spList;
}
答案 1 :(得分:0)
部署解决方案时,VS会提示用户是否要覆盖现有列表实例。为防止列表被覆盖(并且此提示全部一起),“Deployment Conflict Resolution”可以更改为“无”。 “部署冲突解决”可以在列表实例元素的属性窗口中找到。