Python SOAP 连接 MS WebService(SharePoint)(获取列表项)

2 投票
1 回答
1421 浏览
提问于 2025-04-16 02:33

我正在尝试通过Python和suds从SharePoint服务器获取列表项,但在使用GetListItems进行查询时遇到了一些困难。如果我只提供列表名称而不加其他参数给GetListItems,它会返回该列表的默认视图中的所有项目。我想查询特定的一组项目(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新手,有什么建议吗?

另外,这是我用来生成这个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 个回答

2

我找到了这个问题的解决办法。问题出在CAML查询上。

1. 你需要把CAML的'查询'部分放在一个'query'元素里面。

2. 你还需要设置正确的'值类型'元素和属性。

想了解更多信息和代码,可以看看我另外一篇帖子,标题是'Sharepoint列表项过滤(GetListItems)'。

谢谢!
Nick

撰写回答