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

Зачем

Вещь очень нужная, вариантов использования уйма. Применение найти несложно. Вот и всё вступление.

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

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

  1. namespace ZhukPoint.Portal2007.Helpers
  2. {
  3.   public static class SPListHelper
  4.   {
  5.   …
  6.   }
  7. }

Реализация

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

  1. /// <summary>
  2. /// Проверка на существование элемента в списке
  3. /// </summary>
  4. /// <param name="siteId">Id сайта</param>
  5. /// <param name="webId">Id узла</param>
  6. /// <param name="listId">Id списка</param>
  7. /// <param name="uniqueId">Guid элемента</param>
  8. /// <returns>Флаг наличия элемента</returns>
  9. public static bool ItemExists(Guid siteId, Guid webId, Guid listId, Guid uniqueId)
  10. {
  11.   // Флаг, по-умолчанию опущен
  12.   var res = false;
  13.   // Безопасность нас здесь не интересует
  14.   SPSecurity.RunWithElevatedPrivileges(delegate
  15.   {
  16.     // Берем сайт
  17.     using (var site = new SPSite(siteId))
  18.     {
  19.       // Открываем узел
  20.       using (var web = site.OpenWeb(webId))
  21.       {
  22.         // Создаем запрос
  23.         var query =
  24.           string.Format(
  25.             @"<Where>
  26.               <Eq>
  27.                 <FieldRef Name='UniqueId' />
  28.                 <Value Type='Lookup'>{0}</Value>
  29.               </Eq>
  30.             </Where>",
  31.             uniqueId);
  32.         // Получаем список
  33.         var list = web.Lists[listId];
  34.         // Выполняем запрос и считываем кол-во элементов в результате
  35.         res = list.GetItems(new SPQuery { Query = query }).Count > 0;
  36.       }
  37.     }
  38.   });
  39.   return res;
  40. }

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

  1. /// <summary>
  2. /// Проверка на наличие элемента в списке
  3. /// </summary>
  4. /// <param name="listId">Id списка</param>
  5. /// <param name="uniqueId">Guid эелемента</param>
  6. /// <returns>Флаг наличия элемента</returns>
  7. public static bool ItemExists(Guid listId, Guid uniqueId)
  8. {
  9.   var cntx = SPContext.Current;
  10.   var siteId = cntx.Site.ID;
  11.   var webId = cntx.Web.ID;
  12.   var flag = ItemExists(siteId, webId, listId, uniqueId);
  13.   return flag;
  14. }

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

  1. if(SPListHelper.ItemExists(_listId, _itemUniqueId))
  2. {
  3.   ...
  4. }

Поделиться

Коментарии