2010-06-09 5 views
6

Una cosa che mi ha fatto impazzire di SharePoint2007 è l'apparente impossibilità di disporre di impostazioni definibili che si applicano specificamente a un sito o a una raccolta siti stessa e non al contenuto. Voglio dire, hai alcune impostazioni predefinite come il logo del sito, il nome del sito e varie altre cose, ma non sembra esserci un posto dove aggiungere nuovi tipi di impostazioni.Qual è un modo corretto per memorizzare le variabili globali a livello di sito in un sito di SharePoint?

L'applicazione su cui sto lavorando deve essere in grado di creare più tipi di "raccolte siti del progetto" che seguono tutti un modello di base, ma hanno alcune impostazioni aggiuntive che si applicano specificamente alla raccolta di quel sito e quella sola. Oltre al nome del sito standard, dobbiamo anche definire il numero del progetto, il nome del progetto e il nome del cliente. E date le richieste di alcuni dei nostri clienti, raggiungiamo anche un punto in cui dobbiamo avere impostazioni configurabili che alterano il funzionamento di alcuni dei flussi di lavoro, come se i file siano contrassegnati con lettere o numeri.

La nostra soluzione attuale, di cui sono titubante, è stata quella di memorizzare un file XML sul server SharePoint. Questo file contiene un nodo per ogni raccolta siti, identificato dall'URL del sito radice. All'interno del nodo ci sono tutti gli elementi che devono essere definiti per quella raccolta siti. Quando ne abbiamo bisogno, dobbiamo accedere al file XML (che richiederà sempre SPSecurity.RunWithElevatedPrivileges per accedere ai file direttamente sul server) ogni volta per caricarlo e recuperare i dati. Ci sono molti processi automatizzati che dovranno fare questo, ed io sono titubante riguardo alla stabilità di questo metodo quando raggiungiamo centinaia di siti con migliaia di file che eseguono decine di migliaia di flussi di lavoro, tutti che vogliono accedere a questo file. Forse sono preoccupazioni infondate, ma preferirei preoccuparmi piuttosto che rischiare che tutto si rompa in un paio d'anni.

Stavo cercando nell'oggetto SPWeb e ho trovato l'hashtable AllProperties. Sembra proprio il tipo di cosa che potrebbe funzionare, ma non so quanto sia sicuro modificarlo. Ho letto sia MSDN che l'SDK WSS ma non ho trovato nulla che chiarisca l'aggiunta di proprietà completamente nuove in AllProperties. È sicuro usare AllProperties per questo genere di cose? O c'è ancora un'altra caratteristica che mi manca, che potrebbe gestire il concetto di variabili globali nella raccolta del sito o nella portata del sito?

risposta

5

Il modo consigliato per farlo è usare PropertyBag (coppie chiave/valore) attraverso i .Properties di SPFarm, SPWeb.RootWeb (per le raccolte siti), SPWeb, SPList ecc (a seconda della lo scopo di cui hai bisogno).

MSDN - Managing Custom Configuration Options for a SharePoint Application

c'è un codice pronto produzione disponibile come parte del

MSDN - The SharePoint Guidance Library

Vedi Hierarchical configuration manager

Questo vi dà l'accesso programmatico a leggere/scrivere questi valori. Se si desidera eseguire questa operazione senza utilizzare la libreria di guida, si utilizzerà qualcosa come il seguente codice.

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

Se si desidera un interfaccia utente per consentire agli amministratori di impostare facilmente i valori quindi utilizzare entrambi i SharePoint Designer (urghhhh!) O qualcosa di simile SharePoint Property Bag Settings

+0

Ho scritto una pagina di un'applicazione personalizzata per l'impostazione di questi valori, ma per fortuna nessun SharePoint Progettista. Grazie per gli articoli, non solo ha evidenziato le opzioni, ma ha anche contribuito a chiarire l'applicabilità di AllProperties rispetto a Proprietà. Questo sembra il percorso da percorrere! –

+0

Più confusione per te - http://trentacular.com/2009/06/sharepoint-the-wicked-spwebproperties-propertybag/ Non sono sicuro di essere d'accordo con l'autore - penso che le proprietà siano la strada da percorrere - vale la pena notare la sensibilità del case però. – Ryan

1

Il propertybag può essere utilizzato per memorizzare le proprietà del tipo chiave/valore. Penso che sia pensato per quali siano i tuoi scopi.

Personalmente ho più bisogno di proprietà di raccolta tra siti (come le stringhe di connessione db) e io uso this per archiviarle.