Quantcast
Channel: SharePoint 2013 - Development and Programming forum
Viewing all articles
Browse latest Browse all 7589

Wait for the function to load -

$
0
0

Hi,

I am trying to load all the webs including sub sites under the root web with the parent child relation in an array. Here ReadAllWebs function taking some time to load. So LoadSiteDirectory function should wait until treeData array loads completely.

Calling getParentWebDetails function within ReadAllWebs function's foreach loop takes more time. Any idea to fix this or better idea to remove the setTimeOut?  

var context, hostcontext, rootWeb, treeData = [];

$(document).ready(function () {

    ReadAllWebs();

    setTimeout(function () {
        LoadSiteDirectory();
    }, 5000);
});


function ReadAllWebs() {

    enumWebs(['Id', 'Title', 'WebTemplate', 'Description', 'Created', 'LastItemModifiedDate', 'Url', 'ServerRelativeUrl'], function (webs) {
        for (var i = 0; i < webs.length; i++) {

            var temp_RelativeUrl_Trim = webs[i].get_serverRelativeUrl().substring(0, webs[i].get_serverRelativeUrl().lastIndexOf('/'));

            var site_ID = webs[i].get_id().toString();
            var site_Title = webs[i].get_title();
            var site_Description = webs[i].get_description() ? webs[i].get_description() : "Not available.";
            var site_CreatedDate = webs[i].get_created().toString();
            var site_ModifiedDate = webs[i].get_lastItemModifiedDate().toString();
            var site_RelativeUrl = webs[i].get_serverRelativeUrl();
            var site_ParentRelativeUrl = temp_RelativeUrl_Trim.endsWith('/sites') ? 'null' : webs[i].get_serverRelativeUrl().substring(0, webs[i].get_serverRelativeUrl().lastIndexOf('/'));

            getParentWebDetails(webs[i], site_ID, site_Title, site_Description, site_CreatedDate, site_ModifiedDate, site_RelativeUrl, site_ParentRelativeUrl)
        }
    },
       function (sender, args) {
           console.log(args.get_message());
       });
}

function LoadSiteDirectory() {

    var dataMap = treeData.reduce(function (map, node) {
        map[node.name] = node;
        return map;
    }, {});

    // create the tree array
    var treeDataOut = [];
    treeData.forEach(function (node) {
        // add to parent
        var parent = dataMap[node.parent];
        if (parent) {
            // create child array if it doesn't exist
            (parent.children || (parent.children = []))
                // add node to child array
                .push(node);
        } else {
            // parent is null or missing
            treeDataOut.push(node);
        }
    });
}

function getParentWebDetails(web, site_ID, site_Title, site_Description, site_CreatedDate, site_ModifiedDate, site_RelativeUrl, site_ParentRelativeUrl) {
    if (site_ParentRelativeUrl !== 'null') {

        var context = new SP.ClientContext.get_current();
        var onelevelup = web.get_parentWeb();
        context.load(onelevelup);
        context.executeQueryAsync(function () {
            processtree(site_ID, site_Title, site_Description, site_CreatedDate, site_ModifiedDate, site_RelativeUrl, site_ParentRelativeUrl, onelevelup.get_title());
        },
             function (sender, args) {
                 processtree(site_ID, site_Title, site_Description, site_CreatedDate, site_ModifiedDate, site_RelativeUrl, site_ParentRelativeUrl, "null");
             }
         );
    }
    else {
        processtree(site_ID, site_Title, site_Description, site_CreatedDate, site_ModifiedDate, site_RelativeUrl, site_ParentRelativeUrl, "null");
    }
}

function processtree(site_ID, site_Title, site_Description, site_CreatedDate, site_ModifiedDate, site_RelativeUrl, site_ParentRelativeUrl, parentSiteName) {
    treeData.push({ "id": site_ID, "name": site_Title, "description": site_Description, "created": site_CreatedDate, "modified": site_ModifiedDate, "url": site_RelativeUrl, "parentUrl": site_ParentRelativeUrl, "parent": parentSiteName });
}

function enumWebs(propertiesToRetrieve, success, error) {

    context = SP.ClientContext.get_current();
    hostContext = new SP.AppContextSite(context, decodeURIComponent(getQueryStringParameter('SPHostUrl')));
    rootWeb = hostContext.get_site().get_rootWeb();

    var result = [];
    var level = 0;
    context.load(rootWeb, propertiesToRetrieve);
    result.push(rootWeb);
    var colPropertiesToRetrieve = String.format('Include({0})', propertiesToRetrieve.join(','));
    var enumWebsInner = function (web, result, success, error) {
        level++;

        var webs = web.get_webs();
        context.load(webs, colPropertiesToRetrieve);
        context.executeQueryAsync(
          function () {
              for (var i = 0; i < webs.get_count() ; i++) {
                  var web = webs.getItemAtIndex(i);

                  var templateType = web.get_webTemplate();

                  if (templateType !== "APP") {
                      result.push(web);
                  }
                  enumWebsInner(web, result, success, error);
              }
              level--;
              if (level == 0 && success)
                  success(result);
          },
          error);
    };
    enumWebsInner(rootWeb, result, success, error);
}

function getQueryStringParameter(paramToRetrieve) {
    var params =
    document.URL.split("?")[1].split("&");
    var strParams = "";
    for (var i = 0; i < params.length; i = i + 1) {
        var singleParam = params[i].split("=");
        if (singleParam[0] == paramToRetrieve)
            return singleParam[1];
    }
}


Viewing all articles
Browse latest Browse all 7589

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>