2010-06-09 6 views
6

Una cosa que me ha vuelto loco sobre SharePoint2007 es la aparente incapacidad de tener configuraciones definibles que se apliquen específicamente a un sitio o colección de sitios en sí, y no al contenido. Quiero decir, tienes algunas configuraciones predefinidas como el Logotipo del sitio, el Nombre del sitio y otras cosas, pero no parece haber ningún lugar donde agregar nuevos tipos de configuraciones.¿Cuál es una forma adecuada de almacenar variables globales a nivel de sitio en un sitio de SharePoint?

La aplicación en la que estoy trabajando necesita poder crear múltiples tipos de "colecciones de sitios de proyectos" que siguen una plantilla básica, pero tienen ciertas configuraciones adicionales que se aplican específicamente a esa colección de sitios y solo a esa. Además del nombre del sitio estándar, también debemos definir el Número del proyecto, el Nombre del proyecto y el Nombre del cliente. Y debido a las solicitudes de algunos de nuestros clientes, también llegamos a un punto en el que tenemos que tener configuraciones configurables que modifiquen el funcionamiento de algunos de los flujos de trabajo, como si los archivos están marcados con letras o números.

Nuestra solución actual, que no me gusta, ha sido almacenar un archivo XML en el servidor de SharePoint. Este archivo contiene un nodo para cada colección de sitios, identificado por la URL del sitio raíz. Dentro del nodo están todos los elementos que necesitan definirse para esa colección de sitios. Cuando los necesitamos, tenemos que acceder al archivo XML (que siempre requerirá SPSecurity.RunWithElevatedPrivileges para acceder a los archivos directamente en el servidor) cada vez que se cargue y recupere los datos. Hay muchos procesos automatizados que tendrán que hacer esto, y tengo dudas sobre la estabilidad de este método cuando llegamos a cientos de sitios con miles de archivos ejecutando decenas de miles de flujos de trabajo, todos queriendo acceder a este archivo. Tal vez son preocupaciones infundadas, pero prefiero preocuparme que arriesgarme a romper todo en un par de años.

Estaba buscando en el objeto SPWeb y encontré la tabla hash AllProperties. Parece el tipo de cosa que podría funcionar, pero no sé qué tan seguro es modificar esto. Leí tanto MSDN como el SDK de WSS pero no encontré nada que aclarara al agregar propiedades completamente nuevas en AllProperties. ¿Es seguro usar AllProperties para este tipo de cosas? ¿O hay otra característica que me falta, que podría manejar el concepto de variables globales en la colección de sitios o el alcance del sitio?

Respuesta

5

La forma recomendada de hacer esto es utilizar PropertyBag (pares clave/valor) a través de los .Las propiedades de SPFarm, SPWeb.RootWeb (para colecciones de sitios), SPWeb, SPList etc (dependiendo el alcance que necesitas).

MSDN - Managing Custom Configuration Options for a SharePoint Application

hay un código listo producción disponible como parte de la

MSDN - The SharePoint Guidance Library

Ver Hierarchical configuration manager

Esto le da acceso a la programación para leer/escribir estos valores. Si desea hacer esto sin usar la biblioteca de orientación, entonces usaría algo como el siguiente código.

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

Si quieres una interfaz de usuario que permite a los administradores configurar fácilmente los valores use SharePoint Designer (urghhhh!) O algo así SharePoint Property Bag Settings

+0

escribí una página de aplicación personalizada para el establecimiento de estos valores, así que afortunadamente sin SharePoint Diseñador. Gracias por los artículos, no solo destacó las opciones, sino que también ayudó a aclarar la aplicabilidad de AllProperties versus Properties. ¡Este parece el camino a seguir! –

+0

Más confusión para usted - http://trentacular.com/2009/06/sharepoint-the-wicked-spwebproperties-propertybag/ No estoy seguro Aunque estoy de acuerdo con el autor - Creo que Properties es el camino a seguir - vale la pena mencionar la sensibilidad de la caja sin embargo. – Ryan

1

La bolsa de propiedades se puede utilizar para almacenar propiedades de tipo clave/valor. Creo que es para lo que parecen ser tus propósitos.

Personalmente tengo más necesidad de propiedades de colección entre sitios (como las cadenas de conexión db) y uso this para almacenarlas.

Cuestiones relacionadas