SharePoint Online + webparts, encabezados y campos de taxonomía.
En este tutorial, aprenderemos a automatizar la creación de una página en SharePoint Online. Este proceso incluirá la adición de campos de taxonomía, webparts y un encabezado personalizado. Para lograr esto, utilizaremos un script de PowerShell y el módulo PnP PowerShell.
Configurar variables
A continuación, definiremos algunas variables que serán necesarias para establecer una conexión con SharePoint y para definir la ruta de nuestra imagen de encabezado.
TenantId: ID del directorio (tenant).AppId: ID de la aplicación (cliente).ClientSecret: Secreto del cliente.
$TenantId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
$AppId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
$ClientSecret = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
Conexión a SharePoint
Utilizamos Connect-PnPOnline para conectarnos a nuestro sitio de SharePoint Online. Para este ejemplo, estamos utilizando una identidad administrada para la autenticación.
Connect-PnPOnline -Url $siteurl -ManagedIdentity
Definir más variables
Especificamos la ubicación de la imagen de encabezado y la URL de origen de donde copiaremos esta imagen.
$pageRelativeImage="SiteAssets/ZerogapBanner.jpg"
$source_url_header="/sites/ZerogapSite/SiteAssets/Zerogap/ZerogapBanner.jpg"
Verificar si la página ya existe
Antes de crear la página, comprobamos si ya existe utilizando Get-PnPPage.
$full_url_path=$siteurl + "/sitepages/" + $page_name + ".aspx"
$FileExists=$null
$FileExists = Get-PnPPage -identity $page_name -ErrorAction SilentlyContinue
Creación de la página y adición de componentes
Si la página no existe, procedemos a:
- Agregar un campo de taxonomía a la lista «SitePages».
- Crear la nueva página.
- Añadir un webpart a la página.
- Copiar la imagen de encabezado al directorio de destino y establecerla como encabezado de la página.
- Deshabilitar los comentarios de la página.
- Establecer al propietario del contenido.
If($FileExists)
{
Write-output "Nothing to do for this site:"
write-output $siteurl
}
Si la página no existe, continuamos con el resto de nuestro proceso:
Else {
Add-PnPTaxonomyField -List "SitePages" -DisplayName "Archive" -InternalName "Tracking" -TaxonomyItemId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
Add-PnPPage -Name $page_name
$page_file=$page_name + ".aspx"
Add-PnPPageWebPart -Page $page_file -Component "Zerogap Tracking"
$PageHeaderImage = $relative_site + "/" + $pageRelativeImage
$target_url=$relative_site + "/SiteAssets"
$target_url=$target_url.replace('//','/')
$DocumentLibrary = $null
$DocumentLibrary = Get-PnPList -Identity "SiteAssets"
if ($DocumentLibrary -eq $null) {
$Web = Get-PnPWeb
$Zerogap = $Web.Lists.EnsureSiteAssetsLibrary()
$Zerogap = Invoke-PnPQuery
}
Copy-PnPFile -SourceUrl $source_url_header -TargetUrl $target_url -Force
Set-PnPPage -Identity $page_file -CommentsEnabled:$false
$page=Get-PnPClientSidePage -Identity $page_file
$page.SetCustomPageHeader($PageHeaderImage)
$page.Save()
$Page.Publish()
Set-PnPPage -Identity $page_file -Publish
$values=@{"Editor"="admin@Zerogap.com"; "Author"="admin@Zerogap.com"}
$id = Get-PnPPage -Identity $page_name | Select -ExpandProperty PageId
$Zerogap = Set-PnPListItem -List "Site Pages" -Identity $id -Values
$values -UpdateType UpdateOverwriteVersion
Set-PnPPage -Identity $page_file -Publish
}
Desconectar la sesión
Finalmente, una vez que hemos terminado de realizar nuestras operaciones, nos desconectamos del sitio de SharePoint.
Disconnect-PnPOnline
Código completo
A continuación, se muestra el código completo del script, el cual se puede usar para automatizar la creación de una página en SharePoint Online con todos los elementos antes mencionados.
Param
(
[Parameter (Mandatory = $true)]
[string] $siteurl,
[Parameter (Mandatory = $true)]
[string] $page_name,
[Parameter (Mandatory = $true)]
[string] $relative_site
)
$TenantId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
$AppId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
$ClientSecret = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
Connect-PnPOnline -Url $siteurl -ManagedIdentity
$pageRelativeImage="SiteAssets/ZerogapBanner.jpg"
$source_url_header="/sites/ZerogapSite/SiteAssets/Zerogap/ZerogapBanner.jpg"
$full_url_path=$siteurl + "/sitepages/" + $page_name + ".aspx"
$FileExists=$null
$FileExists = Get-PnPPage -identity $page_name -ErrorAction SilentlyContinue
If($FileExists)
{
Write-output "Nothing to do for this site:"
write-output $siteurl
}
Else {
Add-PnPTaxonomyField -List "SitePages" -DisplayName "Archive" -InternalName "Tracking" -TaxonomyItemId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
Add-PnPPage -Name $page_name
$page_file=$page_name + ".aspx"
Add-PnPPageWebPart -Page $page_file -Component "Zerogap Tracking"
$PageHeaderImage = $relative_site + "/" + $pageRelativeImage
$target_url=$relative_site + "/SiteAssets"
$target_url=$target_url.replace('//','/')
$DocumentLibrary = $null
$DocumentLibrary = Get-PnPList -Identity "SiteAssets"
if ($DocumentLibrary -eq $null) {
$Web = Get-PnPWeb
$Zerogap = $Web.Lists.EnsureSiteAssetsLibrary()
$Zerogap = Invoke-PnPQuery
}
Copy-PnPFile -SourceUrl $source_url_header -TargetUrl $target_url -Force
Set-PnPPage -Identity $page_file -CommentsEnabled:$false
$page=Get-PnPClientSidePage -Identity $page_file
$page.SetCustomPageHeader($PageHeaderImage)
$page.Save()
$Page.Publish()
Set-PnPPage -Identity $page_file -Publish
$values=@{"Editor"="admin@Zerogap.com"; "Author"="admin@Zerogap.com"}
$id = Get-PnPPage -Identity $page_name | Select -ExpandProperty PageId
$Zerogap = Set-PnPListItem -List "Site Pages" -Identity $id -Values $values -UpdateType UpdateOverwriteVersion
Set-PnPPage -Identity $page_file -Publish
}
Disconnect-PnPOnline
Este script debe ser ejecutado por un usuario con permisos adecuados en SharePoint y con el módulo PnP PowerShell ya instalado. Recuerda reemplazar los valores de las variables TenantId, AppId, ClientSecret, y la identificación del campo de taxonomía con la información correspondiente a tu entorno de SharePoint Online.
