Seguramente, si habéis desarrollado alguna solución para SharePoint, más allá de los típicos webparts, habréis necesitado almacenar “parámetros” de configuración, por ejemplo, la URL de un servicio web en Azure, tu AppId para usar Bing Maps, etc.
Existen varias opciones para hacer esto, yo hoy os voy a hablar de usar las PropertyBags. En SharePoint, la mayoría de los objetos, tienen una propiedad “Properties” que suele ser un HashTable o un SPPropertyBag para poder almacenar propiedades en modo key-value.
Algunas clases que contienen esa propiedad son:
- SPWeb
- SPPersistedObject : bastantes clases de SP heredan de este objeto, así que también dispondremos de esa propiedad.
- SPFile
- SPListItem
Si queremos provisionar valores a ese campo de forma declarativa, lo podemos hacer usando un elemento Module, de Visual Studio.
En su Elements,xml, usaremos el nodo PropertyBag. En el MSDN está perfectamente explicado el significado de cada propiedad. Yo os dejo un ejemplo de uso de todas las combinaciones posibles:
1 |
<span id="lnum1" style="color: #606060"> 1:</span> <span style="color: #0000ff"><?</span><span style="color: #800000">xml</span> <span style="color: #ff0000">version</span><span style="color: #0000ff">="1.0"</span> <span style="color: #ff0000">encoding</span><span style="color: #0000ff">="utf-8"</span>?<span style="color: #0000ff">></span> |
1 |
<span id="lnum2" style="color: #606060"> 2:</span> <span style="color: #0000ff"><</span><span style="color: #800000">Elements</span> <span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://schemas.microsoft.com/sharepoint/"</span><span style="color: #0000ff">></span> |
1 |
<span id="lnum3" style="color: #606060"> 3:</span> <span style="color: #008000"><!--Propiedad creada a nivel de 'site collection'--></span> |
1 |
<span id="lnum4" style="color: #606060"> 4:</span> <span style="color: #0000ff"><</span><span style="color: #800000">PropertyBag</span> <span style="color: #ff0000">HyperlinkBaseUrl</span><span style="color: #0000ff">="http://team.heroes.lab"</span> <span style="color: #ff0000">Url</span><span style="color: #0000ff">=""</span> <span style="color: #ff0000">ParentType</span><span style="color: #0000ff">="Web"</span> <span style="color: #ff0000">RootWebOnly</span><span style="color: #0000ff">="TRUE"</span><span style="color: #0000ff">></span> |
1 |
<span id="lnum5" style="color: #606060"> 5:</span> <span style="color: #0000ff"><</span><span style="color: #800000">Property</span> <span style="color: #ff0000">Name</span><span style="color: #0000ff">="ProductsListGuid"</span> <span style="color: #ff0000">Value</span><span style="color: #0000ff">="2b2b944d-8cc8-4448-bcb2-9478d0787175"</span> <span style="color: #ff0000">Type</span><span style="color: #0000ff">="string"</span> <span style="color: #0000ff">/></span> |
1 |
<span id="lnum6" style="color: #606060"> 6:</span> <span style="color: #0000ff"></</span><span style="color: #800000">PropertyBag</span><span style="color: #0000ff">></span> |
1 |
<span id="lnum7" style="color: #606060"> 7:</span> <span style="color: #008000"><!--Propiedad creada a nivel de sub-site--></span> |
1 |
<span id="lnum8" style="color: #606060"> 8:</span> <span style="color: #0000ff"><</span><span style="color: #800000">PropertyBag</span> <span style="color: #ff0000">HyperlinkBaseUrl</span><span style="color: #0000ff">="http://team.heroes.lab/sites/site1"</span> <span style="color: #ff0000">Url</span><span style="color: #0000ff">=""</span> <span style="color: #ff0000">ParentType</span><span style="color: #0000ff">="Web"</span> <span style="color: #ff0000">RootWebOnly</span><span style="color: #0000ff">="FALSE"</span><span style="color: #0000ff">></span> |
1 |
<span id="lnum9" style="color: #606060"> 9:</span> <span style="color: #0000ff"><</span><span style="color: #800000">Property</span> <span style="color: #ff0000">Name</span><span style="color: #0000ff">="ProductsListGuid"</span> <span style="color: #ff0000">Value</span><span style="color: #0000ff">="2b2b944d-8cc8-4448-bcb2-9478d0787175"</span> <span style="color: #ff0000">Type</span><span style="color: #0000ff">="string"</span> <span style="color: #0000ff">/></span> |
1 |
<span id="lnum10" style="color: #606060"> 10:</span> <span style="color: #0000ff"></</span><span style="color: #800000">PropertyBag</span><span style="color: #0000ff">></span> |
1 |
<span id="lnum11" style="color: #606060"> 11:</span> <span style="color: #008000"><!-- Propiedad creada a nivel de File, en este caso para una Master Page--></span> |
1 |
<span id="lnum12" style="color: #606060"> 12:</span> <span style="color: #0000ff"><</span><span style="color: #800000">PropertyBag</span> <span style="color: #ff0000">HyperlinkBaseUrl</span><span style="color: #0000ff">="http://team.heroes.lab/"</span> <span style="color: #ff0000">Url</span><span style="color: #0000ff">="_catalogs/masterpage/default.master"</span> <span style="color: #ff0000">ParentType</span><span style="color: #0000ff">="File"</span> <span style="color: #ff0000">RootWebOnly</span><span style="color: #0000ff">="FALSE"</span> <span style="color: #0000ff">/></span> |
1 |
<span id="lnum13" style="color: #606060"> 13:</span> <span style="color: #008000"><!-- Propiedad creada a nivel de SPListItem, item ID 23 de la lista Products --></span> |
1 |
<span id="lnum14" style="color: #606060"> 14:</span> <span style="color: #0000ff"><</span><span style="color: #800000">PropertyBag</span> <span style="color: #ff0000">HyperlinkBaseUrl</span><span style="color: #0000ff">="http://team.heroes.lab/sites/site1"</span> <span style="color: #ff0000">Url</span><span style="color: #0000ff">="Lists/Products"</span> <span style="color: #ff0000">ParentType</span><span style="color: #0000ff">="ListItem"</span> <span style="color: #ff0000">ItemIndex</span><span style="color: #0000ff">="23"</span><span style="color: #0000ff">></span> |
1 |
<span id="lnum15" style="color: #606060"> 15:</span> <span style="color: #0000ff"><</span><span style="color: #800000">Property</span> <span style="color: #ff0000">Name</span><span style="color: #0000ff">="DiscountPercentage"</span> <span style="color: #ff0000">Value</span><span style="color: #0000ff">="10"</span> <span style="color: #ff0000">Type</span><span style="color: #0000ff">="int"</span> <span style="color: #0000ff">/></span> |
1 |
<span id="lnum16" style="color: #606060"> 16:</span> <span style="color: #0000ff"></</span><span style="color: #800000">PropertyBag</span><span style="color: #0000ff">></span> |
1 |
<span id="lnum17" style="color: #606060"> 17:</span> <span style="color: #0000ff"></</span><span style="color: #800000">Elements</span><span style="color: #0000ff">></span> |
Con esto, al desplegar nuestra solución, provisionaremos esas Properties a nuestros elementos (webs, ficheros o items de listas).
Para acabar, un simple ejemplo de como iterar por esa bolsa de propiedades. En este caso, recorremos las Properties del SPWeb raíz:
1 |
<span id="lnum1" style="color: #606060"> 1:</span> SPWeb rootWeb = SPContext.Current.Site.RootWeb; |
1 |
<span id="lnum2" style="color: #606060"> 2:</span> |
1 |
<span id="lnum3" style="color: #606060"> 3:</span> <span style="color: #0000ff">foreach</span> (DictionaryEntry entry <span style="color: #0000ff">in</span> rootWeb.AllProperties) |
1 |
<span id="lnum4" style="color: #606060"> 4:</span> { |
1 |
<span id="lnum5" style="color: #606060"> 5:</span> <span style="color: #0000ff">string</span> property = String.Format(<span style="color: #006080">"{0}, {1}{2}"</span>, entry.Key, entry.Value, Environment.NewLine); |
1 |
<span id="lnum6" style="color: #606060"> 6:</span> txtPropertyBag.Text += property; |
1 |
<span id="lnum7" style="color: #606060"> 7:</span> } |
Espero que os sirva.
Un saludo!!
Deja un comentario