Communardo Software GmbH, Kleiststraße 10 a, D-01129 Dresden
0800 1 255 255

SharePoint 2013 - mehrsprachigen Inhalts-Editor Webpart mit Powershell konfigurieren (Teil 2)

Im letz­ten Beitrag zum Thema Inhalts-Editor Webpart (IEWP) und PowerShell habe ich gezeigt, wie man die Inhalte des IEWP per PowerShell kon­fi­gu­rie­ren kann. Die dabei ver­wen­de­ten Skripte waren beschränkt auf die Konfiguration eines ein­zel­nen IEWP und beinhal­te­ten keine Behandlung von Ausnahmen.

Im heu­ti­gen Beitrag beschäf­ti­gen wir uns mit der Behandlung von Ausnahmen sowie der Generalisierung der Konfiguration und schlie­ßen die Beitragsreihe ab.

Im Ausnahmefall Sprache zurücksetzen

Um den Inhalt des Inhalts-Editor Webparts (IEWP) sprach­ab­hän­gig zu set­zen haben wir die Regionseinstellungen des aktu­el­len Threads ange­passt. Diese Änderung wirkt sich aber nicht nur auf den Code aus, der den IEWP betrifft, son­dern auf alle Befehle, die im Skript dar­auf fol­gen.

Wir müs­sen daher die aktu­elle Einstellung sichern und auch wie­der­her­stel­len, nach­dem die Konfiguration des IEWP abge­schlos­sen ist:

# Sicherung der aktuellen Regionseinstellungen
$currentUICulture = [System.Threading.Thread]::CurrentThread.CurrentUICulture
$currentCulture = [System.Threading.Thread]::CurrentThread.CurrentCulture
try
{ # Code zum Anpassen des IEWP-Inhalts hier
} finally
{ # Regionseinstellungen wiederherstellen
    [System.Threading.Thread]::CurrentThread.CurrentUICulture = $currentUICulture
    [System.Threading.Thread]::CurrentThread.CurrentCulture = $currentCulture
}

Dieser Code ver­wen­det das aus C# bekannte try-finally-Konstrukt um sicher­zu­stel­len, dass die Regionseinstellungen in jedem Fall wie­der­her­ge­stellt wer­den, auch wenn bei der Konfiguration des IEWP etwas schief geht.

Das Beispiel soll gleich­zei­tig daran erin­nern, dass auch bei der Konfiguration per PowerShell die in der Softwareentwicklung bewähr­ten Konstrukte wie try-finally, try-catch etc. zum Einsatz kom­men kön­nen und sollen.

Flexible Konfiguration mit JSON

PowerShell bie­tet die Möglichkeit, Objekte aus JSON-Beschreibungen zu gene­rie­ren. Wir machen uns das zunutze, um auf ein­fa­che Art ein Konfigurationsobjekt zu erzeu­gen, mit dem wir belie­big viele IEWP pfle­gen können.

Das fol­gende Script defi­niert Informationen über Web, Seite, Webpart und zu set­zende Inhalte in JSON-Notation. Die Inhalte selbst sind in exter­nen Dateien abgelegt.

$jsonConfigString = @"
[
    {
        "webUrlAbsolute" : "https://www.contoso.de",
        "listName" : "Wiki",
        "pageFileName" : "Homepage.aspx",
        "webPartTypeName" : "ContentEditorWebPart",
        "content" :
        [
            { "language" : "de-DE",
              "filepath" : "C:\\Content-de-DE.txt"
            },
            { "language" : "en-US",
              "filepath" : "C:\\Content-en-US.txt"
            }
        ]
    }
]
"@

 Die Umwandlung in ein PowerShell-Objekt ist erfreu­lich einfach:

$jsonConfig = ConvertFrom-Json $jsonConfigString

Das resul­tie­rende PowerShell-Objekt ist ein Array mit genau einem Element und sieht in der Konsole aus­ge­ge­ben wie folgt aus:

webUrlAbsolute  : https://www.contoso.de
listName        : Wiki
pageFileName    : Homepage.aspx
webPartTypeName : ContentEditorWebPart
content         : {@{language=de-DE; filepath=C:\Content-de-DE.txt}, @{language=en-US; filepath=C:\Content-en-US.txt}}

Dieses Objekt nut­zen wir nun, um gene­risch den Inhalt von IEWPs zu set­zen. Das fol­gende Script zeigt stark ver­ein­facht, wie das funk­tio­nie­ren kann. Die äußere Schleife ite­riert die zu bear­bei­ten­den Webparts, die innere Schleife die zu set­zen­den Sprachen:

$jsonConfig | % {
    Write-Host "Verarbeite web $($_.webUrlAbsolute)"
    $_.content | % {
        Write-Host "Setzte aktuelle Thread-Sprache auf $($_.language)"
$htmlContent = Get-Content "$($_.filepath)"
        Write-Host "Setze IEWP-Inhalt aus Datei $($_.filepath) auf $htmlContent"
    }
}

Werden nun anstelle der Platzhalter die Codebausteine aus dem letz­ten Beitrag ein­ge­setzt, dann haben wir eine fle­xi­ble Methode geschaf­fen, um belie­bige IEWP-Inhalte zu pfle­gen und die Inhalte dabei außer­halb des PowerShell-Skripts in sepa­ra­ten Dateien zu ver­wal­ten und damit die Wartbarkeit zu erhö­hen.

Fazit

PowerShell über­rascht immer wie­der mit inter­es­san­ten Funktionen, mit denen die Lösung von Problemen rasch von der Hand geht. JSON (oder auch XML)-Objekte sind bspw. schnell erstellt und ver­ar­bei­tet wie wir heute gese­hen haben.

Die Robustheit des Codes sollte man dabei immer im Auge behal­ten. Die Frage "Was wäre wenn" sollte gestellt und an den rich­ti­gen Stellen Ausnahmebehandlung oder Finalisierungs-Skript ergänzt werden.

Related Posts

Pin It on Pinterest