SharePoint 2010 솔루션에 XML 코드가있는 목록 정의 및 목록 인스턴스를 만듭니다. 이제 솔루션을 배포 할 때마다 목록이 삭제되고 새 목록이 만들어집니다. 존재하지 않는 경우에만 목록을 만들고 싶습니다.목록을 만들기 전에 이미 존재하는지 확인하십시오.
목록이 이미 존재하는지 확인하고 코드를 어디에 넣어야합니까?
내 목록 정의 및 목록 인스턴스가 내 기능 중 하나 인 "기능의 항목"에 나타납니다.
SharePoint 2010 솔루션에 XML 코드가있는 목록 정의 및 목록 인스턴스를 만듭니다. 이제 솔루션을 배포 할 때마다 목록이 삭제되고 새 목록이 만들어집니다. 존재하지 않는 경우에만 목록을 만들고 싶습니다.목록을 만들기 전에 이미 존재하는지 확인하십시오.
목록이 이미 존재하는지 확인하고 코드를 어디에 넣어야합니까?
내 목록 정의 및 목록 인스턴스가 내 기능 중 하나 인 "기능의 항목"에 나타납니다.
답장을 보내 주셔서 감사합니다. 목록 인스턴스 폴더에있는 SharePointProjectItem.spdata 파일에서 솔루션을 찾았습니다. "DeploymentConflictResolutionBehavior"를 "None"으로 설정하면 Visual Studio가 모든 배포시 내 목록을 삭제하지 않습니다.
내 SharePointProjectItem.spdata 파일은 이제 다음과 같습니다 : "( web.Lists.TryGetList을 :
<?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)에서 인스턴스를 생성하고 이미 존재 여부를 확인하기 위해 이것을 사용 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에 해당합니다. 예를 들어 Document Library의 경우 "XMLToPDFTestList"이고 목록의 경우 "Lists/XMLToPDFTestList" –
어떻게 당신이이 솔루션을 배포? Visual Studio 2010에서 배포를 수행하는 개발 서버에 있습니까? –
예, 이것이 제 개발 환경이고 Visual Studio 2010을 사용하여 배포합니다. – Dudute