将 REST API 与 CAML 查询结合使用,在单个 REST 调用中获取多个文件夹中的文件



>我有一个场景,我想使用 REST API 从多个文件夹中获取所有文件。我想以这种方式过滤数据,以便我可以忽略文件夹并仅获取所有文件中的文件。我有 CAML 查询来执行递归所有活动,但是当我与 REST API 集成时,它会抛出错误请求错误。我检查了IE中的"网络"选项卡,似乎我的代码中的查询没有从REST API返回任何数据,并且在使用" GetItems"时失败。有人可以让我知道如何在 REST API 中集成 CAML 查询。

var getContent = function (listTitle) {
                var deferred = $q.defer();
                if (listTitle == 'CandidateReports') {

  var query = appweburl + "_api/SP.AppContextSite("+ hostweburl +")/web/lists/GetByTitle('" + listTitle + "')/GetItems";

                var executor = new SP.RequestExecutor(appweburl);
                executor.executeAsync({
                    url: query,
                    method: "POST",
                    headers: {
                        "Accept": "application/json; odata=verbose",
                        "X-RequestDigest": $("#__REQUESTDIGEST").val(),
                        "content-Type": "application/json;odata=verbose"
                    },
                    data: JSON.stringify({
                        query: {
                            __metadata: {
                                type: "SP.CamlQuery"
                            },
                            ViewXml: "<ViewFields><FieldRef Name='FileLeafRef' /> <FieldRef Name='Title' /> </ViewFields> <QueryOptions> <ViewAttributes Scope='RecursiveAll' /> </QueryOptions> <Where> <Eq> <FieldRef Name='FSObjType' /> <Value Type='Integer'>0</Value> </Eq>   </Where>"
                        }
                    }),
                    success: function (data, textStatus, xhr) {
                        console.log(data);
                        deferred.resolve(JSON.parse(data.body));
                    },
                    error: function (xhr, textStatus, errorThrown) {
                        deferred.reject(JSON.parse(xhr.body).error);
                    }
                });
                return deferred.promise;
            };
            return {
                getContent: getContent
            };

我认为客户端对象模型中不支持查询选项。 您为什么不尝试以下方法

<View Scope="RecursiveAll"><Query><Where> <Eq> <FieldRef Name='FSObjType' /> <Value Type='Integer'>0</Value> </Eq> </Where></Query></View>

PS:我注意到您的 CAML 语句中缺少<Query>标签。使用 CAML 查询生成器轻松映射列表字段。

相关内容

  • 没有找到相关文章

最新更新