您好我有7972项的共享点列表,我想删除列表中的所有项目。首先,我尝试了其余的api并没有成功。所以我尝试使用来自https://msdn.microsoft.com/en-us/library/office/jj163201.aspx的javascript内容。
到目前为止,这是我的代码:
<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>
根据Internet Explorer的调试器,一切都运行没有任何错误。即使最后一个clientContext.executeQueryAsync();
被调用,但在sharepoint列表上没有任何变化。
所以任何建议或帮助都会很棒,感谢您的时间。
修改:这是我得到的例外: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>
答案 0 :(得分:1)
您的请求(删除8000项)可能太大。尝试移动executeQueryAsync();在for循环中。这会导致某些性能下降但如果可行,您可以修改脚本以批量删除500件物品。
另外,要获得明确的错误,请在executeQueryAsync调用中添加成功和失败处理程序,如:
clientContext.executeQueryAsync(function(){ console.log('success');},
function(args){console.log(args.get_message();});
答案 1 :(得分:1)
还有一件事:您可能希望使用SharePoint函数来等待脚本而不是脚本库的内容:
ExecuteOrDelayUntilScriptLoaded(doNext, "SP.Runtime.js");
//or
_spBodyOnLoadFunctionNames.push("doNext");