我在SharePoint 2010解決方案中使用xml代碼創建列表定義和列表實例。現在,每次部署我的解決方案時,都會刪除列表並創建一個新列表。我只想創建列表,如果它不存在。在創建列表之前檢查列表是否已經存在
如何檢查列表是否已經存在,以及在哪裏放置代碼?
我的列表定義和列表實例顯示在我的一個功能中的「功能中的項目」中。
我在SharePoint 2010解決方案中使用xml代碼創建列表定義和列表實例。現在,每次部署我的解決方案時,都會刪除列表並創建一個新列表。我只想創建列表,如果它不存在。在創建列表之前檢查列表是否已經存在
如何檢查列表是否已經存在,以及在哪裏放置代碼?
我的列表定義和列表實例顯示在我的一個功能中的「功能中的項目」中。
謝謝您的回答。我在位於列表實例文件夾中的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>
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.
}
}
從代碼(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));
}
名稱「listUrl」讓我問:是否足以傳遞列表的名稱,如「XMLToPDFTestList」或更需要? –
ListUrl參數對應於服務器相對url,因爲沒有像List Name這樣的屬性。例如,對於文檔庫,它將是「XMLToPDFTestList」,列表「Lists/XMLToPDFTestList」 –
你是如何部署該解決方案?這是在Visual Studio 2010執行部署的開發服務器上嗎? –
是的,這是我的開發環境,我使用Visual Studio 2010進行部署。 – Dudute