在创建列表之前检查列表是否已经存在



我在SharePoint 2010解决方案中创建了一个列表定义和一个带有xml代码的列表实例。现在,每次部署我的解决方案时,它都会删除列表并创建一个新列表。我只想在列表不存在的情况下创建它。

我如何检查列表是否已经存在,我把代码放在哪里?

我的列表定义和列表实例出现在我的一个特性的"Items in the Feature"中

谢谢你的回答。我在sharepointproject中找到了解决方案。位于列表实例文件夹中的Spdata文件。将"DeploymentConflictResolutionBehavior"设置为"None"可以阻止Visual Studio在每次部署时删除我的列表。

我SharePointProjectItem

。Spdata文件现在看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<ProjectItem Type="Microsoft.VisualStudio.SharePoint.ListInstance" DefaultFile="Elements.xml" SupportedTrustLevels="All" SupportedDeploymentScopes="Web, Site" xmlns="http://schemas.microsoft.com/VisualStudio/2010/SharePointTools/SharePointProjectItemModel">
  <Files>
    <ProjectItemFile Source="Elements.xml" Target="MyListInstance" Type="ElementManifest" />
  </Files>
  <ExtensionData>
    <ExtensionDataItem Key="DeploymentConflictResolutionBehavior" Value="None" />
  </ExtensionData>
</ProjectItem>

SP对象模型中目前没有方法来确定这一点。正如Beytan所提到的,扩展方法可以帮助解决这个问题。我认为这个链接中的示例是实现这种扩展方法的更好方法。它遍历整个列表集合,如果找到匹配项就返回true,如果没有找到匹配项就返回false。以下是文章中的代码。

public static class SPWebExtensions
{
    public static bool ListExists(this SPWeb web, string listName)
   {
          var lists = web.Lists;
          foreach (SPList list in lists)
          {
              if(list.Title.Equals(listName))
                  return true;
          }
          return false;
      }
  }

因为你的列表定义和实例已经在一个特性中,你可以从你的特性的事件接收者的FeatureActivated方法中调用扩展方法。

using(SPWeb web = (SPWeb)properties.Feature.Parent)
{
   if(!web.ListExists(listTitle))
   {
      //create the list.
   }
}

从code (web.Lists.Add)创建实例,并使用这个来检查是否已经存在:web.Lists.TryGetList (listTitle)

如何通过服务器端对象模型检查SPList是否存在:

//Verify if list exist by its Url 
public static bool ListExists(SPWeb web, string listUrl)
{
   return web.Lists.Cast<SPList>().Any(list =>  string.Equals(list.RootFolder.ServerRelativeUrl, listUrl));
}

相关内容

  • 没有找到相关文章

最新更新