SharePoint 2010递归获取文件及文件夹的SOAP请求异常问题
我之前也碰到过一模一样的情况——明明配置了RecursiveAll,但返回结果只有顶级的文件和文件夹。下面是几个亲测有效的排查和解决思路:
1. 确认Scope参数与列表类型匹配
RecursiveAll是返回全层级文件和文件夹的正确取值,但它在文档库中的表现最稳定。如果你的test1是普通列表而非文档库,先去列表设置→高级设置里确认是否开启了"允许管理文件夹"的选项,这个开关会影响文件夹层级的递归读取。
2. 明确指定根文件夹路径
很多时候问题出在没有明确告诉SharePoint要从哪个文件夹开始递归。尝试在QueryOptions中添加<Folder>参数,填入列表的完整相对路径(比如/sites/你的站点集/test1,根据你的实际站点URL调整):
<?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>test1</listName> <QueryOptions> <IncludeMandatoryColumns>TRUE</IncludeMandatoryColumns> <ViewAttributes Scope="RecursiveAll"/> <DateInUtc>TRUE</DateInUtc> <Folder>/sites/your-site/test1</Folder> <!-- 替换为你的列表实际路径 --> </QueryOptions> </GetListItems> </soap:Body> </soap:Envelope>
3. 避免视图设置覆盖递归规则
如果你在请求中指定了ViewName参数(哪怕是默认视图),视图本身的筛选或范围设置可能会覆盖QueryOptions里的Scope配置。如果不需要特定视图,可以直接留空ViewName,确保递归设置优先生效。
4. 验证返回内容与权限
- 查看SOAP响应的完整内容,确认是否有隐藏的错误提示(比如子文件夹权限不足、列表路径错误等);
- 可以添加
ViewFields参数,明确返回用于区分文件/文件夹的字段,方便验证结果是否包含子层级:
<ViewFields> <FieldRef Name="ID"/> <FieldRef Name="Title"/> <FieldRef Name="FSObjType"/> <!-- 0=文件,1=文件夹 --> <FieldRef Name="FileRef"/> <!-- 文件/文件夹的完整路径 --> </ViewFields>
5. 备选方案:手动递归遍历
如果上述方法都不生效,可以先调用GetListItems获取顶级文件夹,再逐个针对子文件夹发起请求,手动实现递归逻辑。这种方法虽然繁琐,但在某些特殊列表配置下更可靠。
内容的提问来源于stack exchange,提问作者user8499218
相关产品推荐
相关产品推荐

