2011-09-20 109 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」 –

相關問題