Archiv für März 2010

Konfiguration von SharePoint Erweiterungen: PowerShell und spConfigStore

31 März 2010

Bei der Entwicklung von Applikationen auf SharePoint-Basis kommt man sehr schnell auf die Idee, die Konfigurationsparameter nicht unbedingt in der web.config abzuspeichern, sondern dafür eine SharePoint-Liste zu nutzen. Es kommen dann aber schon ein paar Probleme auf, wie z.B: könnte man diese Liste im Speicher cachen, um nicht jedes Mal recht teurere SharePoint-Listen Operation durchzuführen etc.

Alle diese Herausforderungen wurde sehr gut im CodePlex-Projekt spConfigStore umgesetzt http://spconfigstore.codeplex.com/ . Wir setzen es auch produktiv bei Projekten ein.

Wir gehen wir vor? Über List Instances werden in einem Feature die Werte für ConfigStore gesetzt. Dafür sorgt der Entwickler im Team, der die neue Variable benötigt. Ist diese Variable abhängig von der Umgebung: Development, Stage, Produktiv etc., so muss man diese Variablen jeweils anpassen. Kommen in Laufe der Zeit neuer Variablen hinzu, so muss die ConfigStore Liste erneut erstellt werden. Dadurch gehen die alten Werte verloren. Nicht gut!

Als Abhilfe habe ich ein kleines PowerShell-Skript geschrieben, mit dem man sehr einfach die ConfigStore-Werte in eine XML-Datei sichern kann. Diese Daten lassen sich dann auch sehr einfach zurücksichern. Man könnte diese Idee auch gleich in ein Feature verpacken und beim aktivieren und deaktivieren entsprechend ausführen (dann direkt über Object Model)

Auslesen der Daten:

[System.Reflection.Assembly]::LoadWithPartialName(”Microsoft.SharePoint”)

$site = new-object -typename Microsoft.SharePoint.SPSite(”http://moss2007/sites/skb/”)

$web = $site.OpenWeb(”admin”)

$list = $web.lists["Config Store"]

#store all values

$dictConfig = @{”configStore” = “export”}

$list.items | foreach { $dictConfig.Add( $_["Title"] , $_["ConfigValue"] ) }

$dictConfig.GetEnumerator() | foreach { write-host $_.Name -> $_.Value -ForegroundColor blue }

$dictConfig | Export-Clixml configStoreBackup.xml

Jetzt kann die ConfigStore Liste gelöscht und erneut erzeugt werden. Danach spielen wir das Backup ein:


$dictImport = Import-Clixml configStoreBackup.xml

$web = $site.OpenWeb(”admin”)

$list = $web.lists["Config Store"]

$list.items | foreach {

if( $dictImport.ContainsKey( $_.Title ))

    {

        $_["ConfigValue"] = $dictImport[ $_.Title]

        $_.Update()

     }

Fertig!

Und die Daten lassen sich in der XML-Datei sogar besser anpassen : )

 

Bookmark and Share