2012-06-08 146 views
0

我试图访问SharePoint列表,并返回日历日期自定义网页组件我做了。这是工作的罚款,然后我决定只检索选择,而不是整个日历上的日期,所以我想添加一个where子句。CAML查询肥皂的SharePoint

我试过 'YYYY-MM-DD', 'YYYY-MM-DDTHH:MM:SSZ' 和 'YYYY-MM-DD HH:MM:SSZ' 作为字符串格式 我也试过MM/dd/yyyy作为日期格式。

我使用jQuery,和我有在日历列表中的项目。我假设我的日期不是正确的格式。

 var date = $(this).attr('date');    

     var sharepointDate = Date.parse(date).toString('yyyy-mm-ddT00:00:01Z'); 
     var soapEnv = 
      "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> \ 
      <soapenv:Body> \ 
      <GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \ 
      <listName>CorporateCalendar</listName> \ 
      <viewFields> \ 
      <ViewFields> \ 
      <FieldRef Name='Title' /> \ 
      </ViewFields> \ 
      </viewFields> \ 
      <query><Query><Where><Geq><FieldRef Name='EventDate' /><Value Type='DateTime'>" + sharepointDate + "</Value></Geq></Where></Query></query> \ 
      <rowLimit>500</rowLimit> \ 
      </GetListItems> \ 
      </soapenv:Body> \ 
      </soapenv:Envelope>"; 

如果我把where子句取出,我会收到日历中的所有项目。如果查询在那里,我没有收到任何结果。

在此先感谢

工作代码:

var sharepointDate = Date.parse(date).toString('yyyy-MM-dd'); 
     var soapEnv = 
      "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> \ 
      <soapenv:Body> \ 
      <GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \ 
      <listName>CorporateCalendar</listName> \ 
      <viewFields> \ 
      <ViewFields> \ 
      <FieldRef Name='Title' /> \ 
      </ViewFields> \ 
      </viewFields> \ 
      <query><Query><Where><Eq><FieldRef Name='EventDate' /><Value Type='DateTime' IncludeTimeValue='False'>" + sharepointDate + "</Value></Eq></Where></Query></query>\ 
      <rowLimit>1500</rowLimit> \ 
      </GetListItems> \ 
      </soapenv:Body> \ 
      </soapenv:Envelope>"; 

回答

0

的问题是不是在你的CAML查询,但它在时间的解析。不幸的是在JavaScript中Date.toString方法不支持在相同的方式,C#中格式化。 toString方法不接受任何参数,所以你必须把它解析到自己一个有效的ISO格式。

我从问题How do I output an ISO-8601 formatted string in Javascript?接过ISODateString方法。我们可以用这个方法来获得sharepointDate一个有效的值,则代码应该是这个样子:

function ISODateString(d){ 
function pad(n){return n<10 ? '0'+n : n} 
return d.getUTCFullYear()+'-' 
     + pad(d.getUTCMonth()+1)+'-' 
     + pad(d.getUTCDate())+'T' 
     + pad(d.getUTCHours())+':' 
     + pad(d.getUTCMinutes())+':' 
     + pad(d.getUTCSeconds())+'Z'} 
var sharepointDate = ISODateString(new Date(Date.parse(date))); 

现在sharepointDate将在“YYYY-MM-ddT00:00:01Z”格式。而且,由于这是在你现在可以得到的物品上日期过滤CAML查询所需要的格式。

+0

添加上述工作的代码。谢谢你的帮助 –

0
var sharepointDate = Date.parse(date).toString('yyyy-MM-dd'); 
     var soapEnv = 
      "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> \ 
      <soapenv:Body> \ 
      <GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \ 
      <listName>CorporateCalendar</listName> \ 
      <viewFields> \ 
      <ViewFields> \ 
      <FieldRef Name='Title' /> \ 
      </ViewFields> \ 
      </viewFields> \ 
      <query><Query><Where><Eq><FieldRef Name='EventDate' /><Value Type='DateTime' IncludeTimeValue='False'>" + sharepointDate + "</Value></Eq></Where></Query></query>\ 
      <rowLimit>1500</rowLimit> \ 
      </GetListItems> \ 
      </soapenv:Body> \ 
      </soapenv:Envelope>";