SharePoint 2013 – Crear campos de Lookup a una lista de cualquier web con PowerShell

Muchas veces un cliente nos indica que necesita tener un campo de Lookup en un determinado sitio, que su origen sea otra  sitio dentro de esta colección de  SharePoint. Este funcionamiento “out of the box” no es permitido por SharePoint.

Ejemplo: Tengo un sitio http://mySharePoint.test en el que tengo una lista de Departamentos, tambien tengo un subsitio http://mysharePoint.test/Administración que tiene una lista “Presupuestos” donde en cada elemento de esa lista necesita saber el nombre de los departamentos que hay dentro de esta organización. 

Como lo podemos solucionar

 

  1. Haciendo uso de alguna solución de CodePlex como por ejemplo: http://cl.codeplex.com/ El principal inconveniente de emplear una solución de CodePlex, es que no tenemos ninguna garantía de la calidad del código y que no están diseñadas para entornos de producción. Podemos revisar el código y aplicar los cambios que creamos necesarios antes de ponerlo en un entorno de producción.
  2. Haciendo uso de PowerShell. Tal y como vamos a mostrar en este artículo.

PowerShell es una herramienta muy poderosa y que hoy en día es de obligado conocimiento tanto por desarrolladores como por gente de Sistemas.

Motivos: podemos consultar cualquier aspecto de SharePoint desde una consola sin necesidad de realizar ninguna aplicación en .Net compilarla y subirla al entorno, algo que por ejemplo en entornos de producción nos da mucho rapideza. Pero como bien dice el tio de Spiderman un gran poder lleva una gran responsabilidad.

Pues para que podáis comprobar la potencia que tiene PowerShell es que podemos realizar este requerimiento con un script un relativamente simple como el siguiente, puedo conseguir el requerimiento de crear un campo de Lookup a una lista de cualquier web:

if ( (Get-PSSnapin -Name "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue) -eq $null ) {
        Add-PSSnapin "Microsoft.SharePoint.PowerShell"
}

$parentWeb = Get-SPWeb "http://mysharepoint/"
$parentList = $parentWeb.Lists["Departamentos"]
 
$parentSiteColumnInternalName = $parentWeb.Fields.AddLookup("Departamentos", $parentList.ID, $false);
$parentSiteColumn = $parentWeb.Fields["Departamentos"]

#Add a list field that references the site column.
$childWeb = Get-SPWeb "http://mysharepoint/Administracion"
$childList = $childWeb.Lists["Presupuestos"]
$isRequired = $false;
$newField = $childList.Fields.Add($parentSiteColumn)
Write-Host New list field added.


De esta forma relativamente simple podemos cubrir los requisitos de una forma rápida, elegante y sencilla. PowerShell es una herramienta que cada vez debe estar más presente por muchos motivos el principal es que nos facilita el trabajo y nos permite hacer aspectos en cualquier maquina sin tener que tener instalado Visual Studio ni ningún IDE de desarrollo. En ningún caso PowerShell es un substituto de Visual Studio sino un complemento para conseguir automatizar diversas tareas 🙂

Deja un comentario

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