开发者

Sharepoint Filter for List Items(GetListItems)

I'm attempting to get a set of list items from sharepoint via the WebService. I want to query a small subset of items to be returned. My SOAP packet appears to be ordered properly, however, it still appears that the service is ignoring my set filter(query). Any ideas why this would still be happening?

<SOAP-ENV:Envelope xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<ns0:Body>
  <ns1:GetListItems>
     <ns1:listName>MyCalendar</ns1:listName>
     <query>
        <Query>
           <Where>
              <Eq>
                 <FieldRef Name="EventDate"/>
                 <Value Type="DateTime">[Now+2Minute(s)]</Value>
              </Eq>
           </Where>
        </Query>
     </query>
  </ns1:GetListItems>
</ns0:Body>
</SOAP-ENV:Envelope>

and here is the python suds code that i used to generate this soap:

Query = Element('Query')
where = Element('Where')
eq = Element('Eq')
eq.append(Element('FieldRef').append(Attribute('Name', 'EventDate')))
vt = Element('Value').append(Attribute('Type', 'DateTime')).setText('[Now+2Minute(s)]')
eq.append(vt)
where.append(eq)
Query.append(where)

query = Element('query')
query.append(Query)

EDIT:

Here is the proper soap packet and suds code for what eventually worked for me. I have some strange requirements around the filter, but i'll go ahead and post as is so that others may learn from this.

<SOAP-ENV:Envelope xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<ns0:Body>
  <ns1:GetListItems>
     <ns1:listName>Economic Event Calendar</ns1:listName>
     <ns1:query>
        <Query>
           <Where>
              <And>
                 <Geq>
                    <FieldRef Name="EventDate"/>
                    <Value IncludeTimeValue="TRUE" Type="DateTime">2010-08-12T07:38:00</Value>
                 </Geq>
                 <Lt>
                    <FieldRef Name="EventDate"/>
                    <Value IncludeTimeValue="TRUE" Type="DateTime">2010-08-12T07:39:00</Value>
                 </Lt>
              </And>
 开发者_JAVA技巧          </Where>
        </Query>
     </ns1:query>
     <ns1:rowLimit>5</ns1:rowLimit>
     <viewFields>
        <FieldRef Name="Description"/>
        <FieldRef Name="EventDate"/>
     </viewFields>
  </ns1:GetListItems>
</ns0:Body>
</SOAP-ENV:Envelope>

and the python/suds code that got me here:

#craft our XML
Query = Element('Query')
where = Element('Where')
And = Element('And')

geq = Element('Geq')
geq.append(Element('FieldRef').append(Attribute('Name', 'EventDate')))
vt = Element('Value').append(Attribute('IncludeTimeValue', 'TRUE'))
vt.append(Attribute('Type', 'DateTime')).setText(convert_dt('now +' + str(alertBefore) + ' minutes', '%Y-%m-%dT%H:%M:00' ))

lt = Element('Lt')
lt.append(Element('FieldRef').append(Attribute('Name', 'EventDate')))
vt2 = Element('Value').append(Attribute('IncludeTimeValue', 'TRUE'))
vt2.append(Attribute('Type', 'DateTime')).setText(convert_dt('now +' + str((alertBefore + 1))  + ' minutes', '%Y-%m-%dT%H:%M:00' ))

#viewFields fragment, only show the Description and EventDate for returned rows
viewFields = Element('viewFields')
viewFields.append(Element('FieldRef').append(Attribute('Name','Description')))
viewFields.append(Element('FieldRef').append(Attribute('Name','EventDate')))

#pack all the XML fragments
geq.append(vt)
lt.append(vt2)
where.append(And)
And.append(geq)
And.append(lt)
Query.append(where)
query = Element('ns1:query')
query.append(Query)

#issue the query
results = c_lists.service.GetListItems(SPCal, None, query, None, 5, viewFields, None)


Try using the IncludeTimeValue attribute on your Value element:

<Value Type="DateTime" IncludeTimeValue="TRUE">[Now+2Minute(s)]</Value>

According to MSDN:

IncludeTimeValue: Optional Boolean. Specifies to build DateTime queries based on time as well as date. If you do not set this attribute, the time portion of queries that involve date and time are ignored.

I haven't used a lot of DateTime filters in my CAML queries, but everything else about your SOAP packet looks correct.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜