02 grudnia 2018

Przykłady dostosowywania TeamSites

Tydzień temu miałem przyjemność prowadzić prezentację na konferencji Sharecon 2018, dotyczącą automatyzacji zadań związanych z tworzeniem TeamSite'ów. Ostatnio trochę głębiej badałem ten temat w związku z projektami wdrażania Microsoft Teams (a przecież TeamSite na Sharepoincie Online jest tworzony dla każdego zespołu Teams). Prezentację uzupełniłem o przykłady wykorzystania powershella i stwierdziłem, że warto o tym parę słów napisać.
Pierwszy przykład, wykorzystujący Powershella związany był z zagadnieniem Sharepoint Site Theming. Możemy w prosty sposób utworzyć i zastosować własny temat kolorystyczny (skrypt yellowtheme.ps1), który  następnie możemy użyć do utworzenia sitescriptu, wykorzystanego następnie do zmiany domyślnego szablonu strony TeamSite.
#
# yellowtheme.ps1
#

Connect-PnPOnline -Url https://pepugnet-admin.sharepoint.com
$themepalette = @{
    "themePrimary" = "#ffdd00";
    "themeLighterAlt" = "#fffded";
    "themeLighter" = "#fff9d1";
    "themeLight" = "#fff090";
    "themeTertiary" = "#ffe53f";
    "themeSecondary" = "#ffde0b";
    "themeDarkAlt" = "#e6c700";
    "themeDark" = "#a38d00";
    "themeDarker" = "#8c7a00";
    "neutralLighterAlt" = "#f8f8f8";
    "neutralLighter" = "#f4f4f4";
    "neutralLight" = "#eaeaea";
    "neutralQuaternaryAlt" = "#dadada";
    "neutralQuaternary" = "#d0d0d0";
    "neutralTertiaryAlt" = "#c8c8c8";
    "neutralTertiary" = "#595959";
    "neutralSecondary" = "#373737";
    "neutralPrimaryAlt" = "#2f2f2f";
    "neutralPrimary" = "#000000";
    "neutralDark" = "#151515";
    "black" = "#0b0b0b";
    "white" = "#ffffff";
    "primaryBackground" = "#ffffff";
    "primaryText" = "#000000";
    "bodyBackground" = "#ffffff";
    "bodyText" = "#000000";
    "disabledBackground" = "#f4f4f4";
    "disabledText" = "#c8c8c8";
}

Add-PnPTenantTheme -Identity "yellowTheme" -Palette $themepalette -IsInverted $false

Powyższy skrypt działa bardzo prosto - łączymy się do naszego tenanta O365, a konkretnie do witryny administracyjnej SPO (w przykładzie używam swojego tenanta testowego). Następnie definiujemy paletę kolorystyczną naszego tematu - brzmi groźnie, jednak na stronie Theme Generator Tool jest dostępny online'owy edytor kolorów, który generuje nam od razu odpowiednią tablicę w Powershell, JSON lub kod JavaScript (od razu możemy przejść przez link do edytora online CodePen).
































Ostatni cmdlet w skrypcie definiuje nam nowy temat kolorystyczny na poziomie tenanta Office 365.
Warto przy okazji zauważyć, że oba cmdlety użyte w skrypcie znajdują się nie w domyślnym module administracyjnym Sharepoint Online ale w module SharePointPnPPowerShellOnline, czyli module Powershell udostępnionym w ramach Sharepoint Patterns and Practices (PnP). Moduł możemy sobie zainstalować ze standardowego repozytorium PSGallery (o konfiguracji komputera do administrowania Office 365 pisałem kilka miesięcy temu), uzyskując w ten sposób wiele dodatkowych możliwości zarządzania SPO.
Mając dodany na poziomie tenanta temat kolorystyczny, możemy go ręcznie przypisać do site'u (rysunek poniżej), albo użyć w konfiguracji domyślnego szablonu dla kolejnych witryn.
W tym celu musimy utworzyć plik JSON z definicją sitescriptu (poniżej), a następnie po połączeniu się do serwisu SPO, wykonać następujące polecenia:

$siteScript = (Get-Content 'c:\Scripts\TeamSite\spsitescript.json' -Raw | Add-SPOSiteScript -Title "ThemeDemo" -Description "Applies theme and nav link")  | Select -First 1 Id
Add-SPOSiteDesign -Title "Theme" -WebTemplate "64" -SiteScripts $siteScript.Id -Description "Applies standard company theme to site" -IsDefault


Pierwsza sekwencja tworzy site script na podstawie zawartości pliku JSON i zwraca identyfikator skryptu, a druga komenda tworzy zmodyfikowany szablon TeamSite (szablonu WebTemplate o numerze 64) i ustawia go jako domyślny dla naszego tenanta ($siteScript.Id to właśnie identyfikator naszego skryptu).
Jeżeli chcielibyśmy dostosować Site typu Communication, powinniśmy użyć WebTemplate o wartości 68. Jeżeli zostało wprowadzone ograniczenie na tworzenie zespołów Office 365, to żeby stworzyć Site typu zespołowego ale bez grupy Office 365, to WebTemplate powinien mieć wartość 1.
Zawartość JSON spssitescript.json wygląda następująco:
{
    "$schema": "schema.json",
        "actions": [
            {
                "verb": "addNavLink",
                "url": "https://techcommunity.microsoft.com",
                "displayName": "Aswers from Community",
                "isWebRelative": false
            },
            {
                "verb": "applyTheme",
                "themeName": "yellowTheme"
            }
        ],
        "binddata": {},
        "version": 1
}
Jak można się domyślić, patrząc na składnię pliku, definiowane są dwie akcje, które będą dodatkowo wykonywane podczas tworzenia nowej witryny typu TeamSite - dodawana jest pozycja do menu nawigacyjnego (link do portalu Techcommunity) oraz ustawiany jest temat kolorystyczny (zdefiniowany wcześniej na poziomie tenanta) widać to wyraźnie, gdy uruchomimy kreator tworzenia nowej witryny zespołu z poziomu portalu Sharepoint Online (rysunek poniżej).



















Więcej informacji na temat możliwych akcji przekazywanych przez JSON i poprawnej składni można znaleźć w dokumentacji Sharepoint. Inne przykłady zastosowania sitescriptów i dostosowywania wyglądu site'ów sharepoint Online można znaleźć na blogu Laury Kokkarinen. Jeżeli ktoś woli prezentację wideo, to warto obejrzeć również ten filmik.