Link blog.vitalyzhukov.ru

Блог переехал вот сюда: Blog.VitalyZhukov.ru

17 окт. 2010 г.

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

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


Что понадобиться
Ничего, кроме статического класса 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))
{
    ...
}

Комментариев нет:

Отправить комментарий