Python SOAP到MS WebService(SharePoint)(GetListItems)

时间:2010-08-09 19:43:09

标签: python soap

我正在尝试从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)

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

我想出了这个。问题是CAML查询。

<强> 1 即可。您需要将CAML'Query'包装在'query'元素中。

<强> 2 即可。您需要设置正确的“值类型”元素和属性。

有关更多信息和代码,请参阅我的其他帖子标题为“列表项的共享点过滤器(GetListItems)”。

谢谢! 尼克