2011-09-20 107 views
2

我在SharePoint 2010解决方案中使用xml代码创建列表定义和列表实例。现在,每次部署我的解决方案时,都会删除列表并创建一个新列表。我只想创建列表,如果它不存在。在创建列表之前检查列表是否已经存在

如何检查列表是否已经存在,以及在哪里放置代码?

我的列表定义和列表实例显示在我的一个功能中的“功能中的项目”中。

+0

你是如何部署该解决方案?这是在Visual Studio 2010执行部署的开发服务器上吗? –

+0

是的,这是我的开发环境,我使用Visual Studio 2010进行部署。 – Dudute

回答

7

谢谢您的回答。我在位于列表实例文件夹中的SharePointProjectItem.spdata文件中找到了解决方案。将“DeploymentConflictResolutionBehavior”设置为“无”可阻止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> 
1

SP对象模型中目前没有方法来确定此方法。正如Beytan所说,扩展方法可以帮助解决这个问题。我认为link中的例子是实现这种扩展方法的更好方法。它遍历整个列表集合,如果发现匹配返回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. 
    } 
} 
1

从代码(web.Lists.Add)创建实例,并用它来检查,如果已经存在: web.Lists.TryGetList(” LISTTITLE“)

1

如何检查是否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)); 
} 
+0

名称“listUrl”让我问:是否足以传递列表的名称,如“XMLToPDFTestList”或更需要? –

+1

ListUrl参数对应于服务器相对url,因为没有像List Name这样的属性。例如,对于文档库,它将是“XMLToPDFTestList”,列表“Lists/XMLToPDFTestList” –

相关问题