Используйте REST API с CAML-запросом для извлечения файлов из нескольких папок в одном вызове REST

У меня есть сценарий, где я хотел бы получить все файлы из нескольких папок, используя REST API. Я хотел бы отфильтровать данные таким образом, чтобы я мог игнорировать папки и извлекать только файлы внутри всех файлов. У меня есть запрос CAML, чтобы выполнить рекурсивную всю активность, но когда я интегрируюсь с REST API, выдается ошибка Bad request. Я проверил вкладку "Сеть" в IE, похоже, что запрос в моем коде не возвращает никаких данных из REST API, и он не работает, когда я использую "GetItems". Может кто-нибудь, пожалуйста, дайте мне знать, как интегрировать CAML-запрос в REST API.

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

            };

1 ответ

Я думаю, что QueryOptions не поддерживается в объектной модели клиента. почему бы вам не попробовать следующий подход

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

PS: я заметил <Query> тег отсутствовал в вашем утверждении CAML. Используйте построители запросов CAML для удобного отображения полей списка.

Другие вопросы по тегам