Cómo provisionar un WebPart Sandboxed

A la hora de definir las soluciones (.WSP) de SharePoint podemos automatizar la creación de elementos como: Tipos de contenido, columnas, listas, páginas…

En los casos en los que estemos creando nuestros propios WebParts en modo SandBox nos interesará que al activarse las características de nuestra solución aparezca el WebPart en la página sin necesidad de añadirlo manualmente, para ello podremos automatizar la provisión de páginas y de WebParts sobre esas páginas.

 

Para provisionar ficheros en SharePoint podremos utilizar los módulos en los que podemos indicar para un conjunto de ficheros de la solución sobre que “dirección” de SharePoint queremos que se realice una copia. El siguiente ejemplo muestra un módulo para provisionar páginas en la biblioteca de páginas:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Module Name="Pages" Url="$Resources:osrvcore,List_Pages_UrlName;" Path="">
    <File Path="PagesSamplePage.aspx" Url="SamplePage.aspx" Type="GhostableInLibrary" ReplaceContent="True" >
      <Property Name="Title" Value="Págna de ejemplo" />
      <Property Name="PublishingPageLayout" Value="~SiteCollection/_catalogs/masterpage/BlankWebPartPage.aspx, Página de elementos web en blanco" />
      <Property Name="ContentType" Value="$Resources:cmscore,contenttype_pagelayout_name;" />
     </File>
  </Module>
</Elements>

En el tag “Module” indicaremos en la URL la dirección de la biblioteca de páginas donde queremos que se copie la página y que servirá de base para la url indicada en el tag “File”. En este caso en lugar de indicar el nombre he utilizado un recurso ($Resources:osrvcore,List_Pages_UrlName;) con lo que me permite desplegar el módulo para cualquier idioma que se haya creado nuestro site.

Para poder indicar que tipo de página quiero que se genere he añadido una property con el nombre “ContentType” y en Value he indicado el tipo de contenido de “Plantilla de página” pero mediante su recurso ($Resources:cmscore,contenttype_pagelayout_name;).

Para poder indicar el layout que debe utilizar se debe indicar la property “PublishingPageLayout” y la url del layout con un formato del estilo “~SiteCollection/_catalogs/masterpage/”.

 

Al desplegar la solución se crearía la página automáticamente, pero ahora quedaría instanciar el WebPart en la página. En el caso de tener un WebPart en modo SandBox el despliegue es algo distinto al que se realiza para cualquier WebPart estándar.

Para realizarlo, añadiremos un elemento del tipo “AllUsersWebPart” donde indicaremos el WebPartZoneID donde queremos que se instancie el WebPart. A continuación indicaremos el WebPart a crear, para ello indicaremos el Fullname de la clase del WebPart y el id de la solución.

Un ejemplo sería:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Module Name="Pages" Url="$Resources:osrvcore,List_Pages_UrlName;" Path="">
    <File Path="PagesSamplePage.aspx" Url="SamplePage.aspx" Type="GhostableInLibrary" ReplaceContent="True" >
      <Property Name="Title" Value="Págna de ejemplo" />
      <Property Name="PublishingPageLayout" Value="~SiteCollection/_catalogs/masterpage/BlankWebPartPage.aspx, Página de elementos web en blanco" />
      <Property Name="ContentType" Value="$Resources:cmscore,contenttype_pagelayout_name;" />
      <AllUsersWebPart WebPartZoneID="CenterColumn" WebPartOrder="1">
        <![CDATA[
          <webParts>
            <webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
              <metaData>
                <type name="EjemploProvision.WPEjemeplo.WPEjemeplo, EjemploProvision, Version=1.0.0.0, Culture=neutral, PublicKeyToken=4c85771a8ca8227c" />
                <importErrorMessage>$Resources:core,ImportErrorMessage;</importErrorMessage>
                <Solution SolutionId="e76fca22-2f79-4d1a-8c3b-82021a03578a" xmlns="
http://schemas.microsoft.com/sharepoint/" />
              </metaData>
              <data>
                <properties>
                  <property name="Title" type="string">Ejemplo de provisión de WP</property>
                  <property name="Description" type="string">Ejemplo de cómo provisionar un Sandboxed WP</property>
                </properties>
              </data>
            </webPart>
          </webParts>
        ]]>
      </AllUsersWebPart>
    </File>
  </Module>

 

Él id de la solución lo encontraremos el la definición del paquete en la pestaña “Manifest”.

Para obtener el podemos utilizar el post Get the Public Key of an Assembly.

Para instanciar varios WebParts en la misma página añadiríamos tantos elementos AllUsersWebPart como WebParts vayamos a añadir.

 

Podéis descargaros un ejemplo de proyecto en Visual Studio 2012.

Publicado por

Mario Cortés

Mario Cortés Flores es MVP en Office 365, trabaja en Plain Concepts como Team Lead y escribe habitualmente en geeks.ms/blogs/mcortes y en Twitter @mariocortesf. Podréis encontrarlo colaborando activamente con la comunidad de MadPoint y SUGES

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *