【问题标题】:How do you get a count of listitems of a certain content type without fetching all items如何在不获取所有项目的情况下获得特定内容类型的列表项的计数
【发布时间】:2013-08-27 14:19:59
【问题描述】:

所以我们有一段代码设置了一些元素来显示各种列表中所有项目的计数。

现在添加了一项要求,即只能计算某种内容类型的项目。但是,包括如下所示的 caml 查询(旧代码已被注释掉)使得实际使用速度大大降低。 (显然,它获取数以千计的项目只是为了计数)。

有没有办法使用不请求每个列表的所有项目的 javascript 来计算共享点列表中内容类型的所有项目?

function setCounter() {
    context = new SP.ClientContext.get_current();
    web = this.context.get_web();
    this.lists = web.get_lists();
    context.load(this.lists);
    context.executeQueryAsync(
        Function.createDelegate(this, function () {
            var listsEnumerator = this.lists.getEnumerator();
            while (listsEnumerator.moveNext()) {
                var currentItem = listsEnumerator.get_current();
                for (var i = 0; i < leng; i++) {
                    if (leng == 1) ele = listItemCount;
                    else ele = listItemCount[i];


                    if (decoded == currentItem.get_title()) {
                        ele.parentNode.setAttribute("class", "overview_discussions");

                        // var counter = currentItem.getItems();
                        // ele.innerText = currentItem.get_itemCount();

                        var camlQuery = new SP.CamlQuery();
                        camlQuery.set_viewXml("<Where><BeginsWith><FieldRef Name='ContentTypeName'/><Value Type='Text'>Discussion</Value></BeginsWith></Where>");
                        var counter = currentItem.getItems(camlQuery);

                        context.load(counter);
                        context.executeQueryAsync(function () { ele.innerText = counter.get_count(); }, executeOnFailure);

                        break;
                    }
                }
            }
        }),
        Function.createDelegate(this, executeOnFailure));
}

【问题讨论】:

    标签: javascript sharepoint sharepoint-2010 sharepoint-clientobject


    【解决方案1】:

    不,但是您可以做的是通过设置视场来最小化数据拉取。现在就像您在只需要选择 id 时执行选择 * 一样

    var caml = "<View><ViewFields><FieldRef Name='Id'/></ViewFields></View><Query>your query here</Query>";
    

    执行查询后,您只需像以前一样调用 get_count()

    如果你熟悉 jQuery,我建议你看看这个库,它非常易于使用并帮助你改进对象客户端模型的工作。 http://spservices.codeplex.com/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 2022-11-04
      • 2015-10-01
      • 2020-03-23
      相关资源
      最近更新 更多