我正在尝试从sharepoint服务器(通过python / suds)提取列表项,并且在向GetListItems进行查询时遇到一些困难。如果我没有为列表名称以外的GetListItem提供其他参数,它将返回该列表的默认视图中的所有项目。我想查询要返回的特定项目集(ID = 15)以及要为这些项目返回的特定字段集(日期和描述)。这是我的SOAP数据包:
<?xml version="1.0" encoding="UTF-8"?>
<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>
<Where>
<Eq>
<FieldRef Name="_ows_ID">15</FieldRef>
</Eq>
</Where>
</query>
<viewFields>
<FieldRef Name="Description"/>
<FieldRef Name="EventDate"/>
</viewFields>
</ns1:GetListItems>
</ns0:Body>
</SOAP-ENV:Envelope>
这似乎符合WSDL,但是,在进行查询时,我会获得包含所有字段的项目的完整列表(就好像我根本没有传递任何查询XML)。
有关SOAP noob的任何建议吗?
此外,这是我生成此XML的python代码:
query = Element('query')
where = Element('Where')
eq = Element('Eq')
eq.append(Element('FieldRef').append(Attribute('Name', '_ows_ID')).setText('15'))
where.append(eq)
query.append(where)
viewFields = Element('viewFields')
viewFields.append(Element('FieldRef').append(Attribute('Name','Description')))
viewFields.append(Element('FieldRef').append(Attribute('Name','EventDate')))
results = c_lists.service.GetListItems('MyCalendar', None, query, viewFields, None, None)
非常感谢任何帮助!
答案 0 :(得分:2)
我想出了这个。问题是CAML查询。
<强> 1 即可。您需要将CAML'Query'包装在'query'元素中。
<强> 2 即可。您需要设置正确的“值类型”元素和属性。
有关更多信息和代码,请参阅我的其他帖子标题为“列表项的共享点过滤器(GetListItems)”。
谢谢! 尼克