2013-05-13 6 views
1

Привет, сообщество stackoverflowCAML- WebService Sharepoint

Я получил помощь от этого форума. Хотя на этот раз я не мог найти.

I Создано приложение ASP.NET, и я пытаюсь использовать SharePoint WebService для получения некоторых элементов списка.

До сих пор я удастся получить весь список, используя запрос CAML, но я должен выбрать пункты между 2 указанными датами

Я нашел много помощи вокруг этого, и я использую этот метод для форматирования ISO 8601 строка даты:

private string FormatDateForCAML(DateTime theDate) 
{ 
    string result = theDate.ToString("yyyy-MM-ddTHH:mm:ssZ"); 
    return result; 
} 

А вот запрос CAML здания:

System.Xml.XmlElement query = xmlDoc.CreateElement("Query"); 
query.InnerXml = 
     "<Where>"+ 
      "<And>"+ 
       "<Geq>"+ 
        "<FieldRef Name=\"startdate\" />"+ 
        "<Value Type=\"DateTime\" IncludeTimeValue=\"True\">" + theStart + "</Value>" + 
       "</Geq>"+ 
       "<Lt>" + 
        "<FieldRef Name=\"enddate\" />" + 
        "<Value Type=\"DateTime\" IncludeTimeValue=\"True\">" + theEnd+ "</Value>" + 
       "</Lt>" + 
      "</And>"+ 
     "</Where>"; 

у меня нет никакого возврата ошибки по этому запросу:

System.Xml.XmlNode nodeListItems = listService.GetListItems(listName, viewName, query, viewFields, rowLimit, queryOptions, null); 

Но список Возвращается пустой, хотя shoudn't

Спасибо за любую помощь.

EDIT: Я, наконец, удался, проблема возникла из неправильного запроса здесь является правильной версией

System.Xml.XmlElement query = xmlDoc.CreateElement("Query"); 
query.InnerXml = 
     "<Where>"+ 
      "<And>"+ 
       "<Geq>"+ 
        "<FieldRef Name=\"startdate\" />"+ 
        "<Value Type=\"DateTime\" IncludeTimeValue=\"True\">" + theStart + "</Value>" + 
       "</Geq>"+ 
       "<Lt>" + 
        "<FieldRef Name=\"startdate\" />" + 
        "<Value Type=\"DateTime\" IncludeTimeValue=\"True\">" + theEnd+ "</Value>" + 
       "</Lt>" + 
      "</And>"+ 
     "</Where>"; 

Благодаря Roqz я использовал зритель CAML, и я мог бы получить эту проблему: я должен был сравнить начало только дата!

Спасибо вам обоим за помощь :)

+0

Вы пытались построить свой запрос с помощью инструмента, такого как U2U CAML Query Builder, чтобы проверить, работает ли он таким образом? http://www.codeproject.com/Articles/458008/CAML-Query-Builder – roqz

+0

Thx для ответа. Я попытаюсь использовать его сегодня днем ​​и вернуть результат здесь.Хотя я пробовал добавить вокруг элемента , и теперь он переносит весь список, игнорируя мое предложение «где» – Deunz

+0

В зависимости от версии SharePoint вы также можете использовать RSS-каналы для списков, если вообще не запрашиваете с использованием CAML + родной сети Услуги не тренируются. –

ответ

2

В моем инструменте CAML Builder запрос, похожий на ваш, возвращает результат, который он должен. запрос выглядит следующим образом:

<Query> 
    <Where> 
     <And> 
      <Geq> 
      <FieldRef Name="Created" /> 
      <Value IncludeTimeValue="TRUE" Type="DateTime">2013-04-01T19:35:49Z</Value>     
      </Geq> 
      <Lt> 
      <FieldRef Name="Modified" /><Value IncludeTimeValue="TRUE" Type="DateTime">2013-05-24T19:36:46Z</Value> 
      </Lt> 
     </And> 
    </Where> 
</Query> 

Но, как я помню, если вы хотите использовать этот запрос в коде, чем вам не нужны окружающие теги. Вы проверили правильность формата даты? в вашем примере я не вижу «Z» в конце.

+0

Проблема решена благодаря большому количеству !! Я отредактировал оригинальный пост. Я просто добавляю проблему с поданной датой, мне пришлось сравнивать только startdate, а не startdate + enddate. Привет! Извини :) – Deunz

0

Попробуйте запустить свой CAML запрос в консольном приложении с использованием полной объектной модели SharePoint с любым пунктом вы хотите, как вы хотите отфильтровать по датам. Если ваш CAML работает в полной объектной модели SharePoint, он должен идеально работать, когда вы пытаетесь извлечь данные с помощью собственных веб-служб SharePoint.

+0

Привет Himan shu, у меня нет сервера Sharepoint, установленного на моем компьютере. Я могу сделать что-то не так. Я абсолютно не знаком с Sharepoint. У меня также нет доступа к серверу Sharepoint. Могу ли я использовать объектную модель Sharepoint? – Deunz

+0

Если у вас нет доступа к серверу SharePoint, единственным способом использования объекта SharePoint является удаление, которое вы уже делаете, когда используете собственные веб-службы SharePoint, хотя эти службы не предоставляют все возможности объектной модели SP. Другим способом может быть использование RSS-каналов для ваших списков при условии, что они соответствуют вашим требованиям. –

0

Я хотел бы добавить, что этот метод:

private string FormatDateForCAML(DateTime theDate) 
{ 
    string result = theDate.ToString("yyyy-MM-ddTHH:mm:ssZ"); 
    return result; 
} 

эквивалентно:

private string FormatDateForCAML(DateTime theDate) 
{ 
    string result = theDate.ToString("s"); 
    return result; 
} 

Date.toString ("S") вернуть строку формата в ISO.8601 дату.

Смежные вопросы