Javascript JSOM动态地从所有站点的所有列表中获取两条公告

Javascript JSOM动态地从所有站点的所有列表中获取两条公告,javascript,sharepoint,sharepoint-2013,Javascript,Sharepoint,Sharepoint 2013,我需要你的帮助。这些功能起作用。但是异步调用使我很难获取所有内容。帮助我正确思考! 我的想法是: 递归获取所有站点(函数工作) 从Web和iff公告列表获取所有列表添加到数组并传递 从所有AnnouncmentList中获取两个项目并按创建的排序 将所有公告项添加到一个大数组中(以便以后能够对数组进行排序) 这是密码 function getAllWebs(success, error) { var ctx = SP.ClientContext.get_current(); va

我需要你的帮助。这些功能起作用。但是异步调用使我很难获取所有内容。帮助我正确思考! 我的想法是:

  • 递归获取所有站点(函数工作)

  • 从Web和iff公告列表获取所有列表添加到数组并传递

  • 从所有AnnouncmentList中获取两个项目并按创建的排序

  • 将所有公告项添加到一个大数组中(以便以后能够对数组进行排序)

  • 这是密码

    function getAllWebs(success, error) {
        var ctx = SP.ClientContext.get_current();
        var web = ctx.get_site().get_rootWeb();
        var result = [];
        var level = 0;
        result.push(web);
        var getAllWebsInner = function (web, result, success, error) {
            level++;
            var ctx = web.get_context();
            var webs = web.get_webs();
            ctx.load(webs, 'Include(Title,Webs,ServerRelativeUrl)');
            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);
    
    }
    
    function error(sender, args) {
    
        console.log(args.get_message());
    };
    
    
    function getAnnouncementLists(web, success, error) {
        var dfd = $.Deferred();
        var ctx = web.get_context();
        var collList = web.get_lists();
        var result = []
        ctx.load(collList, 'Include(Title, Id, BaseTemplate)');
        ctx.executeQueryAsync(function () {
            for (var i = 0; i < collList.get_count() ; i++) {
                var list = collList.getItemAtIndex(i);
                var bTemp = list.get_baseTemplate();
                if (bTemp == 104) {
                    result.push(list);
                }
            }
            //success(result);
            dfd.resolve(result);
        }, error);
        return dfd.promise();
    }
    
    function getListItems(list, success, error) {
    
        var dfd = $.Deferred();
        var camlQuery = new SP.CamlQuery();
        camlQuery.set_viewXml('<View><Query><OrderBy><FieldRef Name="Created" Ascending="False"></FieldRef>'
            + '</OrderBy></Query><ViewFields><FieldRef Name="Title"/><FieldRef Name="Body"/>' +
            '<FieldRef Name="Created"/></ViewFields><RowLimit>2</RowLimit></View>');
        var listItems = list.getItems(camlQuery);
        var result = []
        var ctx = list.get_parentWeb().get_context();
        ctx.load(listItems);
        ctx.executeQueryAsync(function () {
            for (var i = 0; i < listItems.get_count() ; i++) {
                var item = listItems.getItemAtIndex(i);
                result.push(item);
    
            }
            dfd.resolve(result);
            //success(result);
        }, error);
        return dfd.promise();
    }
    
    function printResults(items) {
    
        var sortedItems = items.sort(dynamicSort("get_created()"));
    
    
        alert(sortedItems);
    }
    
    function dynamicSort(property) {
        var sortOrder = 1;
        if (property[0] === "-") {
            sortOrder = -1;
            property = property.substr(1);
        }
        return function (a, b) {
            var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;
            return result * sortOrder;
        }
    }
    
    函数getAllWebs(成功,错误){ var ctx=SP.ClientContext.get_current(); var web=ctx.get_site().get_rootWeb(); var结果=[]; 风险值水平=0; 结果:推送(web); var getAllWebsInner=函数(web、结果、成功、错误){ 级别++; var ctx=web.get_context(); var-webs=web.get_-webs(); 加载(网站,“包括(标题、网站、服务器)”; ctx.executeQueryAsync( 函数(){ 对于(var i=0;i0){ getAllWebsInner(web、结果、成功、错误); } } 级别--; 如果(级别==0&&success) 成功(结果); }, 误差); }; getAllWebsInner(web、结果、成功、错误); } 函数错误(发送方,参数){ console.log(args.get_message()); }; 函数GetAnnouncementList(web、成功、错误){ var dfd=$.Deferred(); var ctx=web.get_context(); var collList=web.get_list(); var结果=[] 加载(collList,'Include(Title,Id,BaseTemplate)'; executeQueryAsync(函数(){ 对于(var i=0;ib[属性])?1:0; 返回结果*排序器; } } $(文档).ready(函数(){

    var items=getAllWebs(
    功能(所有网站){
    var数组=[];
    对于(var i=0;i
    考虑到从位于整个网站集的
    公告
    列表中检索列表项的要求,下面演示了修改后的示例,其中包含一些改进,例如:

    • 对服务器的请求数量减少
    • 修复了
      getAllWebs
      函数中的问题,该函数防止在站点仅包含根站点时返回任何结果
    示例

    function getAllWebs(propertiesToRetrieve,success, error) {
        var ctx = SP.ClientContext.get_current();
        var web = ctx.get_site().get_rootWeb();
        var result = [];
        var level = 0;
        ctx.load(web, propertiesToRetrieve);
        result.push(web);
        var getAllWebsInner = function (web, result, success, error) {
            level++;
            var ctx = web.get_context();
            var webs = web.get_webs();
            var includeExpr = 'Include(Webs,' + propertiesToRetrieve.join(',') + ')';
            ctx.load(webs, includeExpr);
            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);
    }
    
    
    
    function loadListItems(lists,query,success,error,results){
        var results = results || [];
        var curList = lists[0];
        var ctx = curList.get_context();
        var listItems = curList.getItems(query);
        ctx.load(listItems);
        ctx.executeQueryAsync(function () {
            results.push.apply(results, listItems.get_data());
            lists.shift();
            if(lists.length > 0) {
                loadListItems(lists,query,success,error,results);
            }
            if(lists.length == 0)
               success(results);
        }, error);
    }
    
    
    function dynamicSort(property) {
        var sortOrder = 1;
        if (property[0] === "-") {
            sortOrder = -1;
            property = property.substr(1);
        }
        return function (a, b) {
            var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;
            return result * sortOrder;
        }
    }
    
    
    var propertiesToRetrieve = ['Lists.Include(BaseTemplate)','ServerRelativeUrl'];
    getAllWebs(propertiesToRetrieve,
    function(allwebs){
    
        //1. get filtered lists
        var allAnnouncementLists = [];
        allwebs.forEach(function(w){
            var announcementLists = w.get_lists().get_data().filter(function(l){
                if(l.get_baseTemplate() == SP.ListTemplateType.announcements)
                   return l;
            });
            allAnnouncementLists.push.apply(allAnnouncementLists, announcementLists);
        });
    
    
    
        //2.Load list items from lists
        var query = new SP.CamlQuery();  //<-set your custom query here
        loadListItems(allAnnouncementLists,query,
            function(allListItems){            
                //3.Sort and print results
               var sortedItems = allListItems.sort(dynamicSort("get_created()"));
               sortedItems.forEach(function(item){
                  console.log(item.get_item('Title')); 
               });
            },logError);
    },
    logError);
    
    
    
    function logError(sender,args){
        console.log(args.get_message());
    }
    
    函数getAllWebs(propertiesToRetrieve,成功,错误){ var ctx=SP.ClientContext.get_current(); var web=ctx.get_site().get_rootWeb(); var结果=[]; 风险值水平=0; 加载(web,propertiesToRetrieve); 结果:推送(web); var getAllWebsInner=函数(web、结果、成功、错误){ 级别++; var ctx=web.get_context(); var-webs=web.get_-webs(); var includeExpr='Include(web,+propertiesToRetrieve.join(',')+')'; ctx.荷载(腹板,包括expr); ctx.executeQueryAsync( 函数(){ 对于(var i=0;i0){ getAllWebsInner(web、结果、成功、错误); } } 级别--; 如果(级别==0&&success) 成功(结果); }, 误差); }; getAllWebsInner(web、结果、成功、错误); } 函数loadListItems(列表、查询、成功、错误、结果){ var结果=结果| |[]; var curList=列表[0]; var ctx=旋度
    function getAllWebs(propertiesToRetrieve,success, error) {
        var ctx = SP.ClientContext.get_current();
        var web = ctx.get_site().get_rootWeb();
        var result = [];
        var level = 0;
        ctx.load(web, propertiesToRetrieve);
        result.push(web);
        var getAllWebsInner = function (web, result, success, error) {
            level++;
            var ctx = web.get_context();
            var webs = web.get_webs();
            var includeExpr = 'Include(Webs,' + propertiesToRetrieve.join(',') + ')';
            ctx.load(webs, includeExpr);
            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);
    }
    
    
    
    function loadListItems(lists,query,success,error,results){
        var results = results || [];
        var curList = lists[0];
        var ctx = curList.get_context();
        var listItems = curList.getItems(query);
        ctx.load(listItems);
        ctx.executeQueryAsync(function () {
            results.push.apply(results, listItems.get_data());
            lists.shift();
            if(lists.length > 0) {
                loadListItems(lists,query,success,error,results);
            }
            if(lists.length == 0)
               success(results);
        }, error);
    }
    
    
    function dynamicSort(property) {
        var sortOrder = 1;
        if (property[0] === "-") {
            sortOrder = -1;
            property = property.substr(1);
        }
        return function (a, b) {
            var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;
            return result * sortOrder;
        }
    }
    
    
    var propertiesToRetrieve = ['Lists.Include(BaseTemplate)','ServerRelativeUrl'];
    getAllWebs(propertiesToRetrieve,
    function(allwebs){
    
        //1. get filtered lists
        var allAnnouncementLists = [];
        allwebs.forEach(function(w){
            var announcementLists = w.get_lists().get_data().filter(function(l){
                if(l.get_baseTemplate() == SP.ListTemplateType.announcements)
                   return l;
            });
            allAnnouncementLists.push.apply(allAnnouncementLists, announcementLists);
        });
    
    
    
        //2.Load list items from lists
        var query = new SP.CamlQuery();  //<-set your custom query here
        loadListItems(allAnnouncementLists,query,
            function(allListItems){            
                //3.Sort and print results
               var sortedItems = allListItems.sort(dynamicSort("get_created()"));
               sortedItems.forEach(function(item){
                  console.log(item.get_item('Title')); 
               });
            },logError);
    },
    logError);
    
    
    
    function logError(sender,args){
        console.log(args.get_message());
    }