Проверьте, существует ли список, прежде чем создавать его - PullRequest
2 голосов
/ 20 сентября 2011

Я создаю определение списка и экземпляр списка с кодом xml в своем решении SharePoint 2010.Теперь каждый раз, когда я внедряю свое решение, он удаляет список и создает новый.Я хочу создать список только в том случае, если он не существует.

Как проверить, существует ли список и куда я должен поместить код?

Появятся мое определение списка и экземпляр спискасреди "Элементы в функции" в одной из моих функций.

Ответы [ 4 ]

7 голосов
/ 21 сентября 2011

Спасибо за ваши ответы.Я нашел решение в файле 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 голос
/ 06 февраля 2014

Как проверить, существует ли 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));
}
1 голос
/ 07 января 2014

Создайте экземпляр из кода (web.Lists.Add) и используйте его, чтобы проверить, существует ли уже: web.Lists.TryGetList ( "listTitle")

1 голос
/ 21 сентября 2011

В настоящее время в объектную модель SP не включен метод для определения этого.Как упоминал Бейтан, метод расширения может помочь решить эту проблему.Я думаю, что пример в этой ссылке - лучший способ реализовать метод расширения этого типа.Он перебирает всю коллекцию списков, возвращая 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;
      }
  }

Поскольку определения и экземпляры вашего списка уже находятся в функции, вы можете вызвать метод расширения из метода FeatureActivation приемника событий для вашей функции.

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