SharePoint 2007: получить все элементы списка в списке независимо от вида из веб-службы?

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

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

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

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);

        }

    }

}
10.11.2009 12:31:47
А что возвращает GetListItems? Насколько я знаю, он возвращает все, что не ограничено фильтром.
Mike Chaliy 10.11.2009 12:37:06
Требуется поле представления - если вы не передаете поле просмотра, оно использует значение по умолчанию - однако представление по умолчанию, поскольку оно включает в себя папки, никогда не будет видеть подпункты ......
JL. 10.11.2009 12:38:17
Согласно документации msdn - viewName Строка, которая содержит GUID для представления, окруженного фигурными скобками ({}), который определяет представление, которое будет использоваться для атрибутов представления по умолчанию, представленных параметрами query, viewFields и rowLimit. Если этот параметр содержит пустую строку, используется представление по умолчанию.
JL. 10.11.2009 12:45:00
Извините, ничего не могу поделать, у меня не установлен SharePoint около года. Но вы все еще можете попробовать GetListItems? Что это показывает? Потому что по памяти должно работать.
Mike Chaliy 10.11.2009 12:53:01
Не работает - проверьте приведенный выше комментарий. В моем списке есть элементы, хранящиеся в папках, в соответствии с sharepoint - по умолчанию используется только папка верхнего уровня.
JL. 10.11.2009 13:11:49
2 ОТВЕТА
РЕШЕНИЕ

Использовать 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>

Удачи!

3
10.11.2009 14:20:00
Я использовал ваш код и создал собственный веб-сервис - что за королевская боль в клавиатуре
JL. 11.11.2009 09:52:04

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

1
10.11.2009 17:54:27