通过CAML进行ListInstance配置

时间:2011-09-01 14:51:59

标签: sharepoint sharepoint-2010

在SharePoint 2010中,使用CAML配置列表时是否可以不覆盖现有的ListInstance(假设它已经存在)?或者是必要的自定义代码?

编辑: 这个问题我不清楚。我应该注意到我正在使用默认的vs2010构建/部署过程通过解决方案部署列表实例。使用此过程时,将在部署时删除并重新创建列表实例。我试图阻止它每次重新创建。

2 个答案:

答案 0 :(得分:1)

不,无法使用ListInstance元素覆盖现有List。您可以更改EnableVersioningHidden。您还可以通过数据/行/行添加项目。但原始清单仍然存在。

来自“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”可以更改为“无”。 “部署冲突解决”可以在列表实例元素的属性窗口中找到。