Привет, я получил список sharepoint с 7972 элементами, и я хочу удалить все элементы в списке. Сначала я попробовал это с остальными api и не имел успеха. Так что я пробую его с javascript с https://msdn.microsoft.com/en-us/library/office/jj163201.aspx.Как удалить из списка sharepoint?
Это мой код до сих пор:
<script type="text/javascript">
var siteUrl = "/test/testfiles";
var listName = "Error Documentation";
$(document).ready(function() {
var scriptbase = "www.example.at";
$.getScript(scriptbase + "SP.Runtime.js", function() {
$.getScript(scriptbase + "SP.js", doNext);
});
});
function doNext()
{
var clientContext = new SP.ClientContext(siteUrl);
spList = clientContext.get_web().get_lists().getByTitle(listName);
//The Caml-Query
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml('<View><ViewFields><FieldRef Name="Controller" /><FieldRef Name="ErrorCode" /><FieldRef Name="ErrorText" /><FieldRef Name="ErrorDescription" /></ViewFields><RowLimit>10000</RowLimit></View>');
//get all Items from the list
var collListItem = spList.getItems(camlQuery);
clientContext.load(collListItem);
//Execute the query
clientContext.executeQueryAsync(function() {
var itemCount = collListItem.get_count();
for (var i = itemCount - 1; i >= 0; i--) {
var oListItem = collListItem.itemAt(i);
oListItem.deleteObject();
};
//Final Delete order
clientContext.executeQueryAsync();
});
}
</script>
Acording в отладчик из браузера Internet Explorer все работает без каких-либо ошибок. Даже последние clientContext.executeQueryAsync();
вызывается, но в списке sharepoint ничего не меняется.
Таким образом, любые рекомендации или помощь будут отличными и благодарны за ваше время.
Edit: здесь исключение я получаю: Sys.ArgumentException: Value does not fall within the expected range. Parameter name: serverRelativeUrlOrFullUrl
Edit2: Вот теперь работает код:
<script type="text/javascript">
var siteUrl = "/knowledge/lzpowerbase";
var listName = "Error Documentation";
$(document).ready(function() {
ExecuteOrDelayUntilScriptLoaded(doNext, "SP.Runtime.js");
});
function doNext() {
var clientContext = new SP.ClientContext(siteUrl);
spList = clientContext.get_web().get_lists().getByTitle(listName);
//The Caml-Query
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml('<View><ViewFields><FieldRef Name="Controller" /><FieldRef Name="ErrorCode" /><FieldRef Name="ErrorText" /><FieldRef Name="ErrorDescription" /></ViewFields><RowLimit>10000</RowLimit></View>');
//get all Items from the list
var collListItem = spList.getItems(camlQuery);
clientContext.load(collListItem);
//Execute the query
clientContext.executeQueryAsync(function() {
var itemCount = collListItem.get_count();
for (var i = itemCount - 1; i >= 0; i--) {
this.oListItem = collListItem.itemAt(i);
this.oListItem.deleteObject();
//Final Delete order
clientContext.executeQueryAsync(function() { console.log('success'); },
function (args) { console.log(args.get_message()); });
};
});
}
</script>
спасибо за tipp с клиентом. Контекст в цикле работает даже с 8000 элементами. Просто очень медленно. – opelhatza
Ну, чтобы ускорить его, вы можете держать счетчик с переменной и просто выполнить executeQueryAsync, например, каждые 200 элементов были удалены. В любом случае это ускорилось бы. – Verthosa