Используйте 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 для удобного отображения полей списка.