2010-06-09 4 views
6

Eine Sache, die mich an SharePoint2007 verrückt gemacht hat, ist die offensichtliche Unfähigkeit, über definierbare Einstellungen zu verfügen, die speziell für eine Website oder Websitesammlung selbst gelten und nicht für den Inhalt. Ich meine, Sie haben einige vordefinierte Einstellungen wie das Site-Logo, den Site-Namen und verschiedene andere Dinge, aber nirgends scheint es, neue Arten von Einstellungen hinzuzufügen. Die Anwendung, an der ich gerade arbeite, muss in der Lage sein, mehrere Arten von "Projektwebsitesammlungen" zu erstellen, die alle einer Basisvorlage folgen, aber bestimmte zusätzliche Einstellungen aufweisen, die speziell für diese Websitesammlung und nur für diese gelten. Zusätzlich zum Standard-Site-Namen müssen wir auch die Projektnummer, den Projektnamen und den Clientnamen definieren. Und angesichts der Anfragen einiger unserer Kunden erreichen wir auch einen Punkt, an dem wir über konfigurierbare Einstellungen verfügen müssen, die die Funktionsweise einiger Workflows ändern, z. B. ob Dateien mit Buchstaben oder Zahlen markiert sind.Wie können globale Variablen auf Websiteebene auf einer SharePoint-Website ordnungsgemäß gespeichert werden?

Unsere aktuelle Lösung, die ich zögere, bestand darin, eine XML-Datei auf dem SharePoint-Server zu speichern. Diese Datei enthält einen Knoten für jede Websitesammlung, der durch die URL der Stammwebsite identifiziert wird. Innerhalb des Knotens befinden sich alle Elemente, die für diese Websitesammlung definiert werden müssen. Wenn wir sie benötigen, müssen wir jedes Mal auf die XML-Datei zugreifen (die immer SPSecurity.RunWithElevatedPrivileges für den Zugriff auf Dateien direkt auf dem Server erfordert), um sie zu laden und die Daten abzurufen. Es gibt viele automatisierte Prozesse, die dies tun müssen, und ich bin zögerlich bezüglich der Stabilität dieser Methode, wenn wir Hunderte von Websites mit Tausenden von Dateien mit Zehntausenden von Workflows erreichen, die alle auf diese Datei zugreifen möchten. Vielleicht sind es unbegründete Sorgen, aber ich mache mir eher Sorgen, als zu riskieren, dass in ein paar Jahren alles zusammenbricht.

Ich schaute in das SPWeb Objekt und fand die AllProperties Hashtabelle. Es sieht so aus, als könnte es funktionieren, aber ich weiß nicht, wie sicher es ist, das zu ändern. Ich habe sowohl MSDN als auch das WSS SDK gelesen, aber nichts gefunden, was beim Hinzufügen völlig neuer Eigenschaften in AllProperties geklärt ist. Ist es sicher, AllProperties für diese Art von Sache zu verwenden? Oder gibt es noch ein weiteres Merkmal, das ich vermisse, das mit dem Konzept der globalen Variablen bei der Site-Sammlung oder dem Site-Umfang umgehen könnte?

Antwort

5

Der empfohlene Weg, dies zu tun, ist PropertyBag (Schlüssel/Wert-Paare) durch die .Properties von SPFarm, SPWeb.RootWeb (für Websitesammlungen) zu verwenden, SPWeb, SPList usw. (je nach der Umfang, den Sie brauchen).

MSDN - Managing Custom Configuration Options for a SharePoint Application

Es ist eine Produktion bereit Code als Teil des

MSDN - The SharePoint Guidance Library

Siehe Hierarchical configuration manager

Dies gibt Ihnen programmatischen Zugriff lesen/schreiben diese Werte. Wenn Sie dies tun möchten, ohne die Führungsbibliothek zu verwenden, würden Sie etwas wie den folgenden Code verwenden.

SPWeb web = SPContext.Current.Web; 
if (web.Properties.ContainsKey("MyProperty")) 
    string myProperty = web.Properties["MyProperty"]; 

Wenn Sie ein UI-Administratoren einfach die Werte festgelegt, damit dann entweder SharePoint Designer (urghhhh!) Oder so etwas wie SharePoint Property Bag Settings

+0

ich eine benutzerdefinierte Anwendungsseite zur Einstellung dieser Werte geschrieben, so zum Glück keine Sharepoint Designer. Danke für die Artikel, es hat nicht nur die Optionen hervorgehoben, sondern auch dazu beigetragen, die Anwendbarkeit von AllProperties versus Properties zu verdeutlichen. Das sieht nach dem Weg aus! –

+0

Mehr Verwirrung für Sie - http://trentacular.com/2009/06/sharepoint-the-wicked-spwebproperties-propertybag/ Nicht sicher, stimme ich mit dem Autor obwohl - ich denke, Eigenschaften ist der Weg zu gehen - erwähnenswert die Groß-/Kleinschreibung jedoch. – Ryan

1

Der Eigenschaftenbeutel kann zum Speichern von Schlüssel/Werttyp-Eigenschaften verwendet werden. Ich denke, dass es für das gedacht ist, was deine Absichten zu sein scheinen.

Persönlich habe ich mehr Bedarf für Cross-Site-Sammlung Eigenschaften (wie DB-Verbindungszeichenfolgen) und ich verwende this für die Speicherung dieser.

Verwandte Themen