2010-08-10 65 views
2

我试图通过WebService从sharepoint获取一组列表项。我想查询一小部分要返回的项目。我的SOAP数据包似乎是正确排序的,但是,它仍然显示服务忽略了我的设置过滤器(查询)。任何想法为什么这仍然会发生?列表项的Sharepoint筛选器(GetListItems)

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

,这里是蟒蛇泡沫代码,我用来生成这种肥皂:

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) 

编辑:

这里是什么最终为我工作的正确肥皂包和泡沫代码。我对过滤器有一些奇怪的要求,但我会继续前进并发布,以便其他人可以从中学习。

<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> 
      </Where> 
     </Query> 
    </ns1:query> 
    <ns1:rowLimit>5</ns1:rowLimit> 
    <viewFields> 
     <FieldRef Name="Description"/> 
     <FieldRef Name="EventDate"/> 
    </viewFields> 
    </ns1:GetListItems> 
</ns0:Body> 
</SOAP-ENV:Envelope> 

和蟒蛇/泡的代码,让我在这里:

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

回答

1

尝试使用Value元素的IncludeTimeValue属性:

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

根据MSDN

IncludeTimeValue:可选布尔值。指定基于时间和日期构建DateTime查询。如果您未设置此属性,则会忽略涉及日期和时间的查询的时间部分。

我的CAML查询中没有使用很多DateTime过滤器,但其他所有有关SOAP包的内容看起来都正确。

+0

CBono,你是先生!在我发布它几个小时后,我发现了这个问题。 U2U的CAML Generator确实帮助我解决了这个问题。感谢您的答复! – nnachefski 2010-08-12 12:45:46

+1

是的,CAML Builder是SP开发人员必备的工具。 – CBono 2010-08-12 13:07:18