SharePoint 2007. Проверка на наличие элемента в списке

Пример метода для проверки существования элемента списка в SharePoint

Что понадобиться

Ничего, кроме статического класса Helper'а, который наряду с нашим сегодняшним будет содержать другие полезные методы, т.е.:

namespace ZhukPoint.Portal2007.Helpers
{
  public static class SPListHelper
  {
  …
  }
}

Реализация

Сам метод будет принимать следующие параметры:

  • siteId - Id сайта
  • webId - Id узла, на котором располагается список;
  • listId - Id списка, в котором мы будем искать элемент;
  • uniqueId - UniqueId элемента (Guid). Можно использовать и int'овый Id. Суть от этого не меняется.

И собственно метод:

/// <summary>
/// Проверка на существование элемента в списке
/// </summary>
/// <param name="siteId">Id сайта</param>
/// <param name="webId">Id узла</param>
/// <param name="listId">Id списка</param>
/// <param name="uniqueId">Guid элемента</param>
/// <returns>Флаг наличия элемента</returns>
public static bool ItemExists(Guid siteId, Guid webId, Guid listId, Guid uniqueId)
{
  // Флаг, по-умолчанию опущен
  var res = false;
  // Безопасность нас здесь не интересует
  SPSecurity.RunWithElevatedPrivileges(delegate
  {
    // Берем сайт
    using (var site = new SPSite(siteId))
    {
      // Открываем узел
      using (var web = site.OpenWeb(webId))
      {
        // Создаем запрос
        var query =
          string.Format(
            @"<Where>
              <Eq>
                <FieldRef Name='UniqueId' />
                <Value Type='Lookup'>{0}</Value>
              </Eq>
            </Where>",
            uniqueId);
        // Получаем список
        var list = web.Lists[listId];
        // Выполняем запрос и считываем кол-во элементов в результате
        res = list.GetItems(new SPQuery { Query = query }).Count > 0;
      }
    }
  });
  return res;
}

Здесь все предельно просто, мы просто выполняем CAML-запрос и смотрим кол-во элементов в результате. Для удобства метод можно упростить убрав из него параметры siteId и webId. Их можно брать из SPContext, т.е.:

/// <summary>
/// Проверка на наличие элемента в списке
/// </summary>
/// <param name="listId">Id списка</param>
/// <param name="uniqueId">Guid эелемента</param>
/// <returns>Флаг наличия элемента</returns>
public static bool ItemExists(Guid listId, Guid uniqueId)
{
  var cntx = SPContext.Current;
  var siteId = cntx.Site.ID;
  var webId = cntx.Web.ID;
  var flag = ItemExists(siteId, webId, listId, uniqueId);
  return flag;
}

А использовать одно удовольствие, например:

if(SPListHelper.ItemExists(_listId, _itemUniqueId))
{
  ...
}
Виталий Жуков

Виталий Жуков

SharePoint архитектор, разработчик, тренер, Microsoft MVP (Office Development). Более 15 лет опыта работы с SharePoint, Dynamics CRM, Office 365, и другими продуктами и сервисами Microsoft.

Смотрите также

SharePoint 2007. База данных содержимого

SharePoint 2007. База данных содержимого

SharePoint 2007. Свой контрол на панели свойств веб-парта

SharePoint 2007. Свой контрол на панели свойств веб-парта

SharePoint 2007. Максимальное/минимальное значение поля в списке

SharePoint 2007. Максимальное/минимальное значение поля в списке

SharePoint 2007. Получение данных из нескольких списков и узлов

SharePoint 2007. Получение данных из нескольких списков и узлов

SharePoint 2010. Локализация SiteDefinition

SharePoint 2010. Локализация SiteDefinition