SharePoint Online ci da la possibilità di modificare quello che è l'aspetto grafico del nostro Team Site scegliendo da una galleria di temi che è stata denominata "Composed looks".
Questi non sono nient'altro che i temi grafici (file .spcolor) che sono stati introdotti con SharePoint 2013.
Volendo possiamo scrivere e caricare temi grafici personalizzati, ma non è lo scopo del post oggi.
Oggi vediamo come possiamo applicare uno di questi temi di default tramite il Client Object Model.

private static void ApplyTheme(ClientContext context)
{
    var serverRelativeUrl = context.Web.ServerRelativeUrl;  
    var paletteUrl = "/_catalogs/theme/15/palette032.spcolor";
    var fontSchemeUrl = "/_catalogs/theme/15/SharePointPersonality.spfont";
   
    web.ApplyTheme(paletteUrl, fontSchemeUrl, null, true);            
    context.Load(web);
    context.ExecuteQuery();

    web.SiteLogoUrl = string.Format("{0}/SiteAssets/logo.png", rootTeamSite);
    web.Update();
    context.ExecuteQuery();

    Console.WriteLine("Theme applied successfully");
}


Nell'esempio possiamo vedere come utilizzare il metodo ApplyTheme per applicare uno dei temi disponibili di default all'interno di SharePoint Online. Io ho scelto il tema numero 32, ma potete scegliere quello che più vi piace all'interno della master page gallery. Per capire a quale numero corrisponde quale tema, basta che controllate la URL del vostro browser quando selezionate il tema da applicare attraverso la funzionalità "Site settings > Change the look".


Nell'esempio è anche possibile vedere, sempre tramite le classi del Client Object Model, come modificare il logo di default del sito. Come potete vedere è possibile infatti specificare l'URL di un'immagine, attraverso la proprietà SiteLogoUrl della classe Web.
Questa funzionalità è stata richiesta dalla community tramite UserVoice, perchè inizialmente il Client Object Model non la esponeva. Quindi, se non la trovate tramite l'intellisense di Visual Studio dovete semplicemente aggiornare le librerie del Client Object Model all'ultima versione disponibile su Nuget.
Qui il post del team di Microsoft che annuncia il supporto per questa novità.