SharePoint 2007: получить все элементы списка в списке независимо от представления из веб-службы? - PullRequest
1 голос
/ 10 ноября 2009

Мне нужно проверить наличие дубликатов. В настоящее время у меня есть элементы, хранящиеся в подпапках в списке.

Как я могу получить все элементы списка из веб-службы, чтобы я мог проверять наличие дубликатов?

Вот код из объектной модели: я хочу сделать именно это, но из веб-службы

private static void PrintItemTitles()

{

    string strUrl = "http://localhost:8099/";

    using (SPSite site = new SPSite(strUrl))

    {

        using (SPWeb web = site.OpenWeb())

        {

            SPList list = web.Lists["MyList"];

            SPListItemCollection items = list.Items;



            foreach (SPListItem item in items)

                if (item != null)

                    Console.WriteLine(item.Title);

        }

    }

}

Ответы [ 2 ]

3 голосов
/ 10 ноября 2009

Использовать SPList.Items не возвращает все элементы? Ну, тогда попробуйте SPList.GetItems (SPQuery) .

Иметь следующий SPQuery:

SPQuery query = new SPQuery();
query.ViewFields = "<FieldRef Name='ID'/><FieldRef Name='Title'/>";
query.Query = String.Format("<Where><Eq><FieldRef Name='Title'/><Value Type='Text'>{0}</Value></Eq></Where>", someItemTitle)
query.MeetingInstanceId = -1; //In case if you query recurring meeting workspace - get items from all meetings
query.RowLimit = 10; //Will you have more than 10 duplicates? Increase this value
query.ViewAttributes = "Scope='RecursiveAll'"; //Also return items from folders subfolders

Примечание: в коде могут быть некоторые ошибки, потому что я пишу из головы

Выполнив этот запрос и если он вернет более одного элемента, у вас будет дубликат!

Редактировать: Ах, извините, вы говорите о веб-сервисах.

Тогда этот код не поможет. Тогда есть 2 варианта:

Вариант 1: Вы МОЖЕТЕ создать представление, которое включает в себя элементы даже из папок (плоский вид). Смотрите здесь для инструкции .

Вариант 2. Согласно методу GetListItems веб-службы списков, вы можете передать параметр QueryOptions. Пропустить в

<QueryOptions>
   <MeetingInstanceID>-1</MeetingInstanceID> <!-- Again, if you query recurring meeting, you want ALL items -->
   <ViewAttributes Scope='RecursiveAll' /> <!-- or Recursive if that does not work -->
</QueryOptions>

Удачи!

1 голос
/ 10 ноября 2009

Вы можете использовать веб-сервис Lists.asmx, но это довольно сложно сделать, так как он возвращает довольно много информации. Я бы развернул пользовательскую веб-службу в своей среде SharePoint, которая содержит этот код и возвращает элементы списка.

...