Piwik dans une fonction asychrone executeQueryAsync

Bonjour,

J’essaie de récupérer des données SharePoint en mode asychrone avant de faire l’appel à Piwik.
Mais ça ne fonctionne pas :

// Load client libraries on demand.
ExecuteOrDelayUntilScriptLoaded(function(){
	ExecuteOrDelayUntilScriptLoaded(function(){
		var clientContext = new SP.ClientContext();
		var site = clientContext.get_site();
		var rootWeb = site.get_rootWeb();
		var web = clientContext.get_web();
		var user = web.get_currentUser();
		clientContext.load(site);
		clientContext.load(rootWeb);
		clientContext.load(web);
		clientContext.load(user);

		var listId = _spPageContextInfo.pageListId;
		var itemId = _spPageContextInfo.pageItemId;				
		var list = null;
		var item = null;
		if (listId != null){
			list = web.get_lists().getById(listId);
			clientContext.load(list, 'Title', 'DefaultViewUrl');

			if (itemId != null){
				item = list.getItemById(itemId);
				clientContext.load(item, 'Id', 'DisplayName');
			}
		}

		function SPPiwikSend(){
				var SiteCollectionTitle = rootWeb.get_title();
				var SiteCollectionUrl = site.get_url();
				var SiteTitle = web.get_title();
				var SiteUrl =  web.get_url();
				var ListID = listId;
				var ListTitle = (list ? list.get_title() : '');
				var ListUrl = (list ? list.get_defaultViewUrl() : '');
				var ItemID  =  itemId;
				var ItemName  = (item ? item.get_displayName() : '');
				var UserName = user.get_title();
    var _paq = _paq || [];
                _paq.push(['setUserId', loginName]);
                  _paq.push(['trackPageView']);
                  _paq.push(['enableLinkTracking']);
                  (function() {
                    var u='//analytics.pierre-fabre.net/';
                    _paq.push(['setTrackerUrl', u+'piwik.php']);
                    _paq.push(['setSiteId', '2']);
                    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
                    g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
                  })(); 
              
          
               				
		}

		function SPPiwikError(errObj, errMsg){
			// Optional error handling.
		}

		clientContext.executeQueryAsync(Function.createDelegate(this, SPPiwikSend), Function.createDelegate(this, SPPiwikError));
	}, 'SP.js');
}, 'SP.Runtime.js');

Avez vous une idée ?
Merci