Skip to main content
 首页 » 编程设计

python之列表项的 Sharepoint 过滤器 (GetListItems)

2025年05月04日45over140

我正在尝试通过 Web 服务从共享点获取一组列表项。我想查询一小部分要返回的项目。我的 SOAP 数据包似乎排序正确,但是,该服务似乎仍然忽略了我设置的过滤器(查询)。知道为什么这仍然会发生吗?

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

这里是我用来生成这个 soap 的 python suds 代码:

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 包和 SOAP 水代码。我对过滤器有一些奇怪的要求,但我会继续并按原样发布,以便其他人可以从中学习。

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

以及让我来到这里的 python/suds 代码:

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

请您参考如下方法:

尝试在 Value 元素上使用 IncludeTimeValue 属性:

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

根据 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.

我没有在我的 CAML 查询中使用很多 DateTime 过滤器,但关于您的 SOAP 数据包的其他一切看起来都是正确的。