2015-11-06 1 views
1

J'essaie d'appliquer un thème dans une autre collection de sites via JSOM et REST. Je reçois un 404, que le fichier est introuvable. Ce n'est pas grave si je choisis un autre fichier spcolor ou spfont. Le résultat est toujours le même.applyTheme via Javascript dans SharePoint

Qu'est-ce que je fais mal?

var applyTheme = { 
url: urlToSiteCollection + "/_api/web/applytheme(
colorpaletteurl='/_catalogs/theme/15/palette007.spcolor', 
fontschemeurl='_catalogs/theme/15/fontscheme007.spfont', 
backgroundimageurl='/piclibrary/th.jpg', 
    sharegenerated=true)", 
           type: "POST", 
           headers: { 
            "Accept": "application/json;odata=verbose", 
            "X-RequestDigest": digest 

          }, 
          contentType: "application/json;odata=vebose", 
          success: function (applyThemeData) { 
           alert("Applyat theme"); 
          }, 
          error: function (ex) { 
           alert(JSON.stringify(ex)); 
          } 
         }; 
$.ajax(applyTheme); 

Et le code JSOM:

var clientContext = new SP.ClientContext(urlToSiteCollection); 
     var web = clientContext.get_web(); 
     var colorPaletteUrl = urlToSiteCollection + "/_catalogs/theme/15/palette011.spcolor"; 
     var fontSchemeUrl = urlToSiteCollection + "/_catalogs/theme/15/fontscheme002.spfont"; 
     var backgroundImageUrl = imageUrl; 
     var shareGenerated = true; 

     web.applyTheme(colorPaletteUrl, fontSchemeUrl, backgroundImageUrl, shareGenerated); 
     web.update(); 

     clientContext.executeQueryAsync(onApplyThemeSuccess, OnFailure); 

Répondre

1

Très probablement, vous obtenez cette erreur depuis le point final:

http://<sitecollection>/<site>/_api/web/applyTheme(colorPaletteUrl,fontSchemeUrl,backgroundImageUrl,shareGenerated) 

attend des valeurs pour colorPaletteUrl, fontSchemeUrl, backgroundImageUrl paramètres à spécifier que serveur URL relative, par exemple: /<site server relative url>/_catalogs/theme/15/palette007.spcolor

Le l'exemple suivant fonctionne pour moi

var siteUrl = _spPageContextInfo.siteServerRelativeUrl; 
var options = { 
    colorpaletteurl: _spPageContextInfo.siteServerRelativeUrl + '/_catalogs/theme/15/palette007.spcolor' 
}; 


applyTheme(siteUrl,options) 
    .done(function (result) { 
      console.log("Theme has been applied"); 
    }) 
    .fail(function (ex) { 
     console.log(JSON.stringify(ex)); 
    });  

function applyTheme(siteUrl,parameters){ 
    var requestUrl = siteUrl + "/_api/web/applytheme("; 
    var paramUrls = []; 
    for(var p in parameters) { 
     paramUrls.push(p + "='" + options.colorpaletteurl + "'"); 
    }  
    requestUrl += paramUrls.join(',') + ")";  
    return $.ajax({url: requestUrl, 
        type: "POST", 
        headers: { 
        "Accept": "application/json;odata=verbose", 
        "X-RequestDigest": $('#__REQUESTDIGEST').val() 
        }, 
        contentType: "application/json;odata=vebose", 
    }); 
} 
+1

Cela fonctionne maintenant , Vadim. Je vous remercie! Je ne comprends pas pourquoi la fonction ajax ne va pas dans la fonction de succès et de journal. Mais, hé, quand ça marche, ça marche! –

0

Lorsque vous créez un nouveau contexte en utilisant SP.ClientContext(url) le paramètre URL doit pointer vers un site dans la collection actuelle du site. Le modèle d'objet client JavaScript JavaScript ne prend pas en charge l'accès à travers différentes collections de sites.

Une alternative serait d'utiliser les autres services Web REST ou SharePoint pour accéder à l'autre site.

+0

Eh bien, j'ai essayé ce principe. Mais je reçois toujours un fichier 404 non trouvé: J'utilise cette URL: https: //sogetiumea-my.sharepoint.com/personal/simonagren_sogetiumea_onmicrosoft_com/_api ............ ' $ .ajax ({ url: "http: // /_api/web /applytheme(colorpaletteurl='/_catalogs/theme/15/palette011.spcolor ', fontschemeurl ='/_ catalogues/theme/15/fontscheme007. spfont ', backgroundimageurl ='/piclibrary/th.jpg ', sharegenerated = true) ", tapez:" POST ", en-têtes: {" X-RequestDigest ": }, succès: successHandler, erreur: errorHandler }); ' –