尽管使用 RecursiveAll 选项,但为什么我没有得到列表子文件夹
why I don't get list subfolders despite using RecursiveAll option
这就是我的功能,尽管我使用的是递归 ALL 选项,但我没有得到子文件夹。
我什至没有获得 1 级子文件夹我只获得了主要文件和文件夹,我确定我在 soap 请求中有问题但我无法弄清楚。
我使用了与此相同的请求 question
Function getResults(url, xmlDoc, spreturnattribute)
request = "<?xml version='1.0' encoding='utf-8'?>" & _
"<soap:Envelope xmlns:soap='http://www.w3.org/2003/05/soap-envelope' xmlns:soap1='http://schemas.microsoft.com/sharepoint/soap/'>" & _
" <soap:Header/>" & _
" <soap:Body>" & _
" <soap1:GetListItems>" & _
" <soap1:listName>Documents</soap1:listName>" & _
"<QueryOptions>" & _
"<IncludeMandatoryColumns>TRUE</IncludeMandatoryColumns>" & _
"<ViewAttributes Scope='RecursiveAll'/>" & _
"<DateInUtc>TRUE</DateInUtc>" & _
"</QueryOptions>" & _
"</soap1:GetListItems>" & _
"</soap:Body>" & _
"</soap:Envelope>"
With CreateObject("Microsoft.XMLHTTP")
.Open "Get", url, False, Null, Null
.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
.setRequestHeader "SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/GetListItems"
.send request
xmlDoc.setProperty "SelectionLanguage", "XPath"
xmlDoc.async = False
xmlDoc.validateOnParse = False
xmlDoc.resolveExternals = False
xmlDoc.setProperty "SelectionNamespaces", "xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' xmlns:namespace='http://schemas.microsoft.com/sharepoint/soap/' xmlns:rs='urn:schemas-microsoft-com:rowset' xmlns:z='#RowsetSchema'"
xmlDoc.LoadXML (.responseText)
Dim strQuery: strQuery = ".//z:row"
Set colItem = xmlDoc.SelectNodes(strQuery)
For Each objItem In colItem
Debug.Print objItem.Attributes.getNamedItem("ows_LinkFilename").Text
For Each queryNode In objItem.ChildNodes
Debug.Print queryNode.Attributes.getNamedItem("ows_LinkFilename").Text
Next
Next
End With
End Function
编辑1
添加参考文章
编辑2
可能是由于网站上的安全问题?还是设置 xmldoc 属性会导致这种情况?
我不太擅长 VBA 但这是一个简单的脚本,我想知道为什么它不起作用
仅供参考,我的分享点是 2013
您可能需要为查询指定 "rowLimit" 参数。
您可以设置一个特定的数字
<rowLimit>5000</rowLimit>
或获取所有带
的项目
<rowLimit>0</rowLimit>
rowLimit 区分大小写。
尝试
Recursive
对于 ViewAttributes 的范围
<ViewAttributes Scope='Recursive'/>
经过大量试验后,我删除了所有多余的未使用标签,并在 msdn 上检查了 link
并通过如下添加另一个标签查询选项来更新我的 caml,这解决了我的问题:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<listName>listname</listName>
<FieldRef Name="FSObjType" /><Value Type="int">1</Value>
<rowLimit>0</rowLimit>
<queryOptions><QueryOptions> <IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns>
<ViewAttributes Scope="RecursiveAll"></ViewAttributes></QueryOptions></queryOptions>
</GetListItems>
</soap:Body>
</soap:Envelope>
这就是我的功能,尽管我使用的是递归 ALL 选项,但我没有得到子文件夹。
我什至没有获得 1 级子文件夹我只获得了主要文件和文件夹,我确定我在 soap 请求中有问题但我无法弄清楚。
我使用了与此相同的请求 question
Function getResults(url, xmlDoc, spreturnattribute)
request = "<?xml version='1.0' encoding='utf-8'?>" & _
"<soap:Envelope xmlns:soap='http://www.w3.org/2003/05/soap-envelope' xmlns:soap1='http://schemas.microsoft.com/sharepoint/soap/'>" & _
" <soap:Header/>" & _
" <soap:Body>" & _
" <soap1:GetListItems>" & _
" <soap1:listName>Documents</soap1:listName>" & _
"<QueryOptions>" & _
"<IncludeMandatoryColumns>TRUE</IncludeMandatoryColumns>" & _
"<ViewAttributes Scope='RecursiveAll'/>" & _
"<DateInUtc>TRUE</DateInUtc>" & _
"</QueryOptions>" & _
"</soap1:GetListItems>" & _
"</soap:Body>" & _
"</soap:Envelope>"
With CreateObject("Microsoft.XMLHTTP")
.Open "Get", url, False, Null, Null
.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
.setRequestHeader "SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/GetListItems"
.send request
xmlDoc.setProperty "SelectionLanguage", "XPath"
xmlDoc.async = False
xmlDoc.validateOnParse = False
xmlDoc.resolveExternals = False
xmlDoc.setProperty "SelectionNamespaces", "xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' xmlns:namespace='http://schemas.microsoft.com/sharepoint/soap/' xmlns:rs='urn:schemas-microsoft-com:rowset' xmlns:z='#RowsetSchema'"
xmlDoc.LoadXML (.responseText)
Dim strQuery: strQuery = ".//z:row"
Set colItem = xmlDoc.SelectNodes(strQuery)
For Each objItem In colItem
Debug.Print objItem.Attributes.getNamedItem("ows_LinkFilename").Text
For Each queryNode In objItem.ChildNodes
Debug.Print queryNode.Attributes.getNamedItem("ows_LinkFilename").Text
Next
Next
End With
End Function
编辑1
添加参考文章
编辑2
可能是由于网站上的安全问题?还是设置 xmldoc 属性会导致这种情况? 我不太擅长 VBA 但这是一个简单的脚本,我想知道为什么它不起作用 仅供参考,我的分享点是 2013
您可能需要为查询指定 "rowLimit" 参数。
您可以设置一个特定的数字
<rowLimit>5000</rowLimit>
或获取所有带
的项目<rowLimit>0</rowLimit>
rowLimit 区分大小写。
尝试
Recursive
对于 ViewAttributes 的范围
<ViewAttributes Scope='Recursive'/>
经过大量试验后,我删除了所有多余的未使用标签,并在 msdn 上检查了 link 并通过如下添加另一个标签查询选项来更新我的 caml,这解决了我的问题:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<listName>listname</listName>
<FieldRef Name="FSObjType" /><Value Type="int">1</Value>
<rowLimit>0</rowLimit>
<queryOptions><QueryOptions> <IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns>
<ViewAttributes Scope="RecursiveAll"></ViewAttributes></QueryOptions></queryOptions>
</GetListItems>
</soap:Body>
</soap:Envelope>