1
votes

I found the following post that returns lists items from all lists on all webs within a site. I am trying to figure out how to return the list item count instead of the list items. Any assistance would be appreciated.

JSOM dynamicly get two announcements from all lists in all webs

UPDATE:

I am able to return details of all document libraries on a site using this:

function retrieveAllListProperties() {
    var clientContext = new SP.ClientContext.get_current();
    var oWebsite = clientContext.get_web();
    this.collList = oWebsite.get_lists();
    clientContext.load(collList);
    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded() {
    var tCount = 0;
    var listInfo = 'Lists on the current site:' + '\n\n';
    var listEnumerator = collList.getEnumerator();
    while (listEnumerator.moveNext()) {
        var oList = listEnumerator.get_current();
        if (oList.get_baseTemplate() === 101) {
            listInfo += 'URL: ' + oList.get_parentWebUrl() + '  |  Title: ' + oList.get_title() + '  |  BaseType: ' + oList.get_baseTemplate() + '  |  Count: ' + oList.get_itemCount() + '\n';
            tCount += + oList.get_itemCount();
        }
    }
    listInfo += '\nTotal Documents: ' + tCount;
    console.log(listInfo);
}

function onQueryFailed(sender, args) {
    console.log('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

I am able to return all sites and sub sites of a site collection using this:

function getAllWebs(success,error)
{
    var siteUrl = '/sites/usaraf/g357';

   var ctx = SP.ClientContext.get_current();
   var web = ctx.get_site().get_rootWeb();
   var result = [];
   var level = 0;
   var getAllWebsInner = function(web,result,success,error) 
   {
      level++;
      var ctx = web.get_context();
      var webs = web.get_webs(); 
      ctx.load(webs,'Include(Title,ServerRelativeUrl,Webs)');
      ctx.executeQueryAsync(
         function(){
            for(var i = 0; i < webs.get_count();i++){
                var web = webs.getItemAtIndex(i);
                result.push(web);
                if(web.get_webs().get_count() > 0) {
                   getAllWebsInner(web,result,success,error);
                }   
            }
            level--;
            if (level == 0 && success)
              success(result);  
        },
        error);
   };

   getAllWebsInner(web,result,success,error);    
}

getAllWebs(
 function(allwebs){
    for(var i = 0; i < allwebs.length;i++){
        console.log(allwebs[i].get_title() + "-" + allwebs[i].get_serverRelativeUrl());   
    }
 },
function(sender,args){
     console.log(args.get_message());
});

I am trying to figure out how to tie the two together so I return the following for all specified lists on all sites and sub sites.

Lists on the current site:

URL: /sites/usaraf-ea/visa  |  Title: Applications  |  BaseType: 101  |  Count: 24
URL: /sites/usaraf-ea/visa  |  Title: docDropOff  |  BaseType: 101  |  Count: 28
URL: /sites/usaraf-ea/visa  |  Title: docResources  |  BaseType: 101  |  Count: 5
URL: /sites/usaraf-ea/visa  |  Title: Documents  |  BaseType: 101  |  Count: 2
URL: /sites/usaraf-ea/visa  |  Title: Site Assets  |  BaseType: 101  |  Count: 23

Total Documents: 82
1

1 Answers

0
votes

When you got listitem collection, you could call listItems.get_count() to return items count.

Sample code:

<script type="text/javascript">
        var clientContext = null;
        var web = null;
        ExecuteOrDelayUntilScriptLoaded(getListItemsCount, "sp.js");
        function getListItemsCount() {
            clientContext = new SP.ClientContext.get_current();
            web = clientContext.get_web();
            var list = web.get_lists().getByTitle("Child");
            var camlQuery = new SP.CamlQuery();                        
            this.listItems = list.getItems(camlQuery);
            clientContext.load(listItems, 'Include(Id)');
            clientContext.executeQueryAsync(function () {
                alert(listItems.get_count());
            },
            function () {
                alert('error');
            });
        }
    </script>