Каков правильный запрос SharePoint CAML для извлечения всех элементов из списка?

По какой-то причине я пытаюсь запросить SharePoint 2007 с помощью CAML и веб-сервисов с библиотекой пены Python. Звонок выглядит так:

listItems = client.service.GetListItems(
    listName, '', Raw('<Query />'), viewFields, 0, 
    Raw("""<QueryOptions>
       <IncludeMandatoryColumns>TRUE</IncludeMandatoryColumns>
       </QueryOptions>"""), 
    None)

По какой-то причине я получаю 0 результатов или ошибку с <Query/> или <Query><Where/></Query>, но получаю все элементы с простой тавтологией WHERE x = 1 OR x != 1.

Как правильно получить все элементы списка?


person joeforker    schedule 18.01.2011    source источник


Ответы (3)


Чтобы получить все элементы, просто поместите туда предложение orderby и укажите произвольный столбец. Должен вернуть все ...

person CamronBute    schedule 18.01.2011

в этом есть одна глупость: вы должны заключить свой Query в элемент query. В результате конверт SOAP выглядит так:

<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>
 <soapenv:Body>
  <GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'>
     <listName>TestQuery</listName>
     <query><Query><Where><Eq><FieldRef Name='Title'/>
      <Value Type='Text'>One</Value></Eq></Where></Query>
     </query>
     <viewFields><ViewFields><FieldRefName='Title'/>
  </ViewFields></viewFields><RowLimit>1</RowLimit>
 </GetListItems></soapenv:Body></soapenv:Envelope>

В результате веб-служба GetListItems решает, что ваш запрос неверен, и не возвращает никаких элементов.

См. Также этот пост: GetListItems Webservice игнорирует мой фильтр запросов

person naivists    schedule 18.01.2011
comment
Хороший совет, но библиотека suds создает для меня оболочку <query> (в нижнем регистре). Нормальные, непустые <Query> (заглавные) запросы отлично работают. Мне нужно будет войти в отладчик, чтобы убедиться, что пена имеет такое же поведение для Raw ('') пустой строки ... - person joeforker; 19.01.2011

Вы используете 0 для параметра rowlimit. Попробуйте что-нибудь вроде 100.

person Hans    schedule 05.03.2011
comment
Я думал, что 0 означает «без ограничений». - person joeforker; 05.03.2011