SXA 1.2 upgrade - extra upgrade script

Reading time ~1 minute

Manual steps for SXA (1.2 ➡ 1.3) upgrade converted to a new upgrade script.

Introduction

Recently I’v described how to upgrade SXA from 1.2 to 1.3 with SXA Upgrade Tool

If you read Sitecore Experience Accelerator Upgrade Guide you will notice following section 1.4 Manual steps.

If you haven’t done this yet, I’ve got good news. You don’t have to perform these manual steps, you can simply run an extra upgrade step.

Extra upgrade step

The script is very similar to other upgrade scripts. With one exception. I do not provide any package and integration with Upgrade Tool. Script has to be executed via ISE

Here is an example diff of tenant templates before and after running an extra upgrade step.

You can find the script code here

or copy entire content below

Import-Function New-Tenant
Import-Function Get-SiteItem
function Get-AffectedTenantTemplatesRoots {
[CmdletBinding()]
param()
begin {
Write-Verbose "Cmdlet Get-AffectedTenantTemplatesRoots - Begin"
}
process {
Write-Verbose "Cmdlet Get-AffectedTenantTemplatesRoots - Process"
$query = "/sitecore/content//*[contains(@#Templates#, '{')]"
$tenants = Get-Item -Path master: -Language en -Query $query
$tenantTemplateRoots = $tenants | ? { Test-ItemIsTenant $_ } | % { Get-Item master: -Id $_.Templates }
$affectedTenantTemplatesRoots = $tenantTemplateRoots | ? {
$root = $_
$tenantTemplates = gci $root.Paths.Path -r | ? { $_.TemplateName -eq "Template"}
$valid = $tenantTemplates | ? { $_."__Base Template".Contains(([Sitecore.XA.Foundation.Presentation.Templates+PartialDesigns]::ID.ToString())) }
if ($valid) {
write-host "This is valid $($_.Paths.path)"
$false
}
else {
$true
}
}
$affectedTenantTemplatesRoots
}
end {
Write-Verbose "Cmdlet Get-AffectedTenantTemplatesRoots - End"
}
}
function ShouldRun () {
$affectedTTR = Get-AffectedTenantTemplatesRoots
$affectedTTR.Count -gt 0
}
function Get-DialogParameters () {
}
function Test-ItemIsTenant {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true, ValueFromPipeline = $true, Position = 0 )]
[Item]$Item
)
begin {
Write-Verbose "Cmdlet Test-ItemIsPartialDesign - Begin"
}
process {
Write-Verbose "Cmdlet Test-ItemIsPartialDesign - Process"
[Sitecore.Data.ID]$PartialDesignTemplateID = [Sitecore.XA.Foundation.Multisite.Templates+Tenant]::ID
[Sitecore.Data.Managers.TemplateManager]::GetTemplate($Item).InheritsFrom($PartialDesignTemplateID)
}
end {
Write-Verbose "Cmdlet Test-ItemIsPartialDesign - End"
}
}
function Get-PresentationItem {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true, Position = 0 )]
[Item]$CurrentItem
)
begin {
Write-Verbose "Cmdlet Get-PageDesignsItem - Begin"
}
process {
Write-Verbose "Cmdlet Get-PageDesignsItem - Process"
$instance = [Sitecore.XA.Foundation.IoC.ServiceLocator]::Current
$instance.GetType().GetMethod('Resolve').MakeGenericMethod([Sitecore.XA.Foundation.Presentation.IPresentationContext]).Invoke($instance, $null).GetPresentationItem($CurrentItem) | Wrap-Item
}
end {
Write-Verbose "Cmdlet Get-PageDesignsItem - End"
}
}
function Get-TenantTemplateOrCreate {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true, Position = 0 )]
[Item[]]$TenantTemplates,
[Parameter(Mandatory = $true, Position = 1 )]
[Sitecore.Data.ID]$TemplateId
)
begin {
Write-Verbose "Cmdlet Get-TenantTemplateOrCreate - Begin"
}
process {
Write-Verbose "Cmdlet Get-TenantTemplateOrCreate - Process"
$templateItem = Get-ProjectTemplateBasedOnBaseTemplate $TenantTemplates $TemplateId
if (-not $templateItem) {
Write-Verbose "Creating MetadataPartialDesign"
$templateItem = New-TenantTemplate $root $TemplateId
}
$templateItem
}
end {
Write-Verbose "Cmdlet Get-TenantTemplateOrCreate - End"
}
}
function Invoke-UpgradeStep {
[CmdletBinding(SupportsShouldProcess = $true)]
param(
[Parameter(Mandatory = $true, Position = 0 )]
$arguments
)
process {
Write-Verbose "Getting affected tennat templates roots . . ."
$affectedTTR = Get-AffectedTenantTemplatesRoots
$result = New-Object Sitecore.XA.Foundation.Upgrade.Model.UpgradeStepResult
try {
$result.Result = "Success"
if ($affectedTTR.Count -gt 0) {
$affectedTTR | ForEach-Object {
$root = $_
if ($pscmdlet.ShouldProcess($root.Paths.Path, "Adding Sticky Notes base template to tenant templates")) {
$tenantTemplates = Get-ChildItem $root.Paths.Path -r | ? { $_.TemplateName -eq "Template"}
# Get templates for migration
$template_MetadataPartialDesign = Get-TenantTemplateOrCreate $tenantTemplates ([Sitecore.XA.Foundation.Presentation.Templates+MetadataPartialDesign]::ID.ToString())
$template_PartialDesign = Get-TenantTemplateOrCreate $tenantTemplates ([Sitecore.XA.Foundation.Presentation.Templates+PartialDesign]::ID.ToString())
$template_Design = Get-TenantTemplateOrCreate $tenantTemplates ([Sitecore.XA.Foundation.Presentation.Templates+Design]::ID.ToString())
$template_DesignFolder = Get-TenantTemplateOrCreate $tenantTemplates ([Sitecore.XA.Foundation.Presentation.Templates+DesignFolder]::ID.ToString())
$template_PartialDesigns = Get-TenantTemplateOrCreate $tenantTemplates ([Sitecore.XA.Foundation.Presentation.Templates+PartialDesigns]::ID.ToString())
$affectedTenantTemplates = ($template_PartialDesigns, $template_PartialDesign, $template_DesignFolder, $template_Design, $template_MetadataPartialDesign)
#Set templates insert options
$a1 = Get-Item master: -Id "{659FC30A-5979-401E-914D-52A9A2AC3E06}" # Partial Designs - Insert Options
$a2 = Get-Item master: -Id "{CF2A53E9-DF1D-4714-BDE1-A880CE4F7D86}" # Sticky Notes - Meta Partial Design
# $a3 = Get-Item master: -Id "{71B2AF6E-8D3B-4950-9303-5397E8775612}" # Sticky Notes - Page
$a4 = Get-Item master: -Id "{E014E623-0D90-4A6B-AC98-23604E032C42}" # Sticky Notes - Page Design
$a5 = Get-Item master: -Id "{D14C72EA-827D-4832-982F-93016983985B}" # Sticky Notes - Partial Design
Invoke-AddInsertOptionAdvanced $a1 $tenantTemplates
Invoke-AddBaseTemplate $a2 $tenantTemplates
Invoke-AddBaseTemplate $a4 $tenantTemplates
Invoke-AddBaseTemplate $a5 $tenantTemplates
Set-InsertOptionsForTenantTemplate $affectedTenantTemplates
# GetSiteSettingsItems
$template_Settings = $tenantTemplates | ? { $_."__Base Template".Contains("8517DBE7-68BC-4700-AD41-379C4EBB76A0") }
$query = "/sitecore/content//*[@@templateid='$($template_Settings.ID)']"
$settingItems = Get-Item -Path master: -Language en -Query $query
# Use PresentationContext to get presentationItems
# Use presentationItems as a roots for Set-TenantTemplate cmdlet
$presentationItems = $settingItems | % { Get-PresentationItem $_ }
$presentationItems | % {
if ($pscmdlet.ShouldProcess($_.Parent.Paths.Path, "Switching tenant templates of existing site's items")) {
Set-TenantTemplate $_ $affectedTenantTemplates
}
}
}
}
}
}
catch {
$result.Result = "Error"
$result.Message = ""
$result.ErrorObject = $Error[0]
}
finally {
$result
}
}
}
Invoke-UpgradeStep ""

Summary

I won’t describe what exactly this script does because all details can be found in Sitecore Experience Accelerator Upgrade Guide.

Enjoy!

Asset Optimizer configuration

Explanation of different configuration options of SXA Asset Optimizer Continue reading

Items as resources and Unicorn

Published on November 21, 2021

Sitecore Extensions version 3.4 released

Published on November 07, 2020