Guardamos un artefacto (un sitio, por ejemplo) como sandboxed solution y obtenemos un bonito fichero WSP que luego queremos volver a desplegar declarativamente en otro entorno. Eso es posible si creamos un elemento Module en nuestro proyecto SharePoint 2010 de nuestra solución de Visual Studio. Pero junto con el fichero hay que provisionar una serie de metadatos indispensables para disponer de la solución lista para activar en el entorno de destino. Esto quedaría como:
<Module Name="MySolutions" Url="_catalogs/solutions" Path="MySolutions" RootWebOnly="TRUE"> <File Url="MyExportedSolution.wsp" Type="GhostableInLibrary"> <Property Name="SolutionId" Value="{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx}" /> <Property Name="SolutionHash" Value="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" /> <Property Name="SolutionTitle" Value="Mi solución" /> </File>
El SolutionTitle en el fondo no es relevante, pero sí lo son, y mucho, los otros dos. ¿Cómo obtenerlos? PowerShell al rescate de nuevo. En el entorno origen, en la colección de sitios donde acabamos de exportar la solution sandbox, iremos a buscar estos metadatos de la siguiente manera:
$site = get-spsite http://misitio $web = $site.OpenWeb() $list = $web.lists["Solution Gallery"] $item = $list.GetItemById(1) # El id que corresponda, of course $item["SolutionHash"] $item["SolutionId"]
Y simplemente utilizarlos para el Module. Finalmente, una vez provisionada la solución en el entorno destino, podemos activarla manualmente o mediante el comando PowerShell install-spusersolution:
install-spusersolution -identity MySolution.wsp -site http://misitiodestino