如何从sharepoint列表中删除?

时间:2016-05-18 08:09:44

标签: javascript sharepoint sharepoint-2013

您好我有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> 

2 个答案:

答案 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");