SharePoint: Como añadir nuevos campos a la User Information List (en Foundation) (II)!

Siguiendo con la serie de posts sobre como añadir campos a la User Information List en SharePoint Foundation, en esta ocasión os voy a mostrar como añadir esos campos por medio de PowerShell. Básicamente, añadir nuevos campos por medio de PowerShell a esta lista pasa por:

  • Acceder a la lista en cuestión a través del correspondiente objeto SPWeb. En primer lugar se comprueba si la columna a añadir ya existe mediante el método ContainsField() y si existe se borra.
  • A continuación definimos la columna a añadir que como podéis ver es de tipo Lookup, es decir, la información de la columna se recoge de otra lista del sitio (Países en el ejemplo). Para añadir una columna de tipo Lookup usamos el método AddLookup en el que especificamos el nombre para mostrar, el ID de la lista en el qué se basa el campo de lookup y si el campo es obligatorio (http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfieldcollection.addlookup.aspx).
  • A continuación lo que hacemos es configurar el campo de lookup cambiando el nombre para mostrar por otro más amigable y permitiendo que se puedan escoger varios valores en tiempo de edición. Finalmente, mediante el método Update() actualizamos los cambios en la User Information List.
   1: If ((Get-PSSnapIn -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null ) 

   2: { Add-PSSnapIn -Name Microsoft.SharePoint.PowerShell }

   3:  

   4: $host.Runspace.ThreadOptions = "ReuseThread"

   5:  

   6: $sSiteUrl = “http://sqlsrv2012/sites/RedSocial/”

   7: Start-SPAssignment –Global

   8:  

   9: $spSite = Get-SPSite -Identity $sSiteUrl

  10: $spWeb = $spSite.OpenWeb()

  11: $sUserInfoList="Lista de información del usuario"

  12: $lUserInformationList=$spWeb.Lists[$sUserInfoList] 

  13: $fieldDisplayName = "País"

  14:   

  15: # Comprobamos si la columna existe

  16: if($lUserInformationList.Fields.ContainsField($fieldDisplayName)){

  17:     Write-host "Borrando la columna de la lista..."

  18:     $lUserInformationList.Fields[$fieldDisplayName].Delete();

  19: }

  20:  

  21:  

  22: $fieldInternalName = "Pais"

  23: $sListaLookup="Países"

  24: $lListaLookup=$spWeb.Lists["Países"]

  25: $guidListaLookup=$lListaLookup.ID

  26:  

  27: $lUserInformationList.Fields.AddLookup($fieldInternalName ,$guidListaLookup,$false)

  28:  

  29: $lUserInformationList.Fields[$fieldInternalName].AllowMultipleValues=$True

  30: $lUserInformationList.Fields[$fieldInternalName].Title=$fieldDisplayName

  31: $lUserInformationList.Fields[$fieldInternalName].Update()

  32:  

  33: Stop-SPAssignment –Global

  • Tras ejecutar el script, veremos los resultados en la User Information List.

image