Corporate Design, Corporate identity, english keywords © Trueffelpix - Fotolia.com

 MySite Branding in Office 365

​Häufig soll nicht nur das Intranet eines Kunden, sondern auch die MySites der Mitarbeiter in den Farben des Unternehmens erstrahlen.

Da jede MySite eine individuelle SiteCollection (z.B. /personal/Hans_Mueller/) darstellt, wird für das Deployment der Branding-Solution das sogenannte Feature Stapling verwendet.

Mit Hilfe des Feature Staplings ist es möglich, andere Features mit bestehenden Site Definitions zu verknüpfen: Feature Stapling In SharePoint 2010

Somit ist es z.B. möglich, jede Seite die auf Basis der MySite Site Definition erstellt wird, mit unserem Branding Feature zu verknüpfen, welches z.B. eine eigene MasterPage bereitstellt.

Feature Stapling Solutions benötigen allerdings den Farm Level Scope und können daher nicht als Sandbox Solution deployed werden (nur Site/Web). Somit fällt diese Möglichkeit für Office 365 raus und ein Branding von MySites scheint vorerst unmöglich (außer jemand deployed die Solution per Hand auf allen MySite SiteCollections ).

Da das App Model von SharePoint 2013 im Kontext des aktuellen Benutzers läuft und jeder Benutzer auf seiner MySite Administrator ist, können wir dies nutzen um eine Branding App zu entwickeln.

Diese lädt bei jedem Aufruf der App die MySite des aktuellen Benutzers:

      
ProfileLoader loader = ProfileLoader.GetProfileLoader(clientContext); 
UserProfile profile = loader.GetUserProfile(); 
Site mySite = profile.PersonalSite;		
Es wird geprüft, ob der Benutzer bereits eine MySite hat und legt andernfalls eine an:
      
if (mySite.ServerObjectIsNull.Value) 
{ 
profile.CreatePersonalSiteEnque(true); 
}
Existiert bereits eine MySite, wird per PropertyBag geprüft, ob die MySite bereits angepasst wurde:

if (GetMySitePropertyBagValue(clientContext, rootWeb) < 2)
Sollte dies nicht der Fall sein, werden die Design Dateien (z.B. Theme) in die entsprechende Bibliothek auf der MySite hochgeladen:
      
FileCreationInformation newFile = newFileCreationInformation(); 
newFile.Content = System.IO.File.ReadAllBytes(file); 
newFile.Url = folder15.ServerRelativeUrl + "/" + Path.GetFileName(sourceAddress); 
newFile.Overwrite = true; 
Microsoft.SharePoint.Client.File uploadFile = folder15.Files.Add(newFile);
Anschließend kann die MasterPage oder das Theme auf der MySite aktiviert werden:

rootWeb.ApplyTheme(rootWeb.ServerRelativeUrl + "/_catalogs/theme/15/novaCapta.spcolor", null, null, false);
Um die Seite als "Angepasst" zu markieren, erhält ein definiertes PropertyBag den Wert 2.

props[MySiteBrandingBadId] = value;

Diese App kann anschließend z.B. als App Part mit 1x1px auf der Startseite platziert werden – der Anwender kriegt somit gar nicht mit, was im Hintergrund bei einem Seitenaufruf der Startseite passiert.

Ich finde diese App verdeutlicht schön, wie viele Dinge mit einem Umdenken der traditionellen Herangehensweise und dem App Model möglich sind ...

Der Code basiert in weiten Teilen auf den Office 365 Developer Patterns and Practices, über die Serjoscha hier berichtete.

Comments