SXAサイトの10.2へのアップグレードがエラーにより失敗する場合があります。この問題は、サイトのSettingsアイテム配下のRedirects, /sitecore/templates/Feature/Experience Accelerator/Redirects/Redirect Maps templateアイテムが存在しないことが原因で発生します。
アップグレード中に「Change Redirect Maps root item template」スクリプトが各サイトについて「Redirect Map Grouping」から「Redirects」アイテムを取得して「Redirect Maps」テンプレートに変換しようとして失敗します。
この問題を解決するには、貴社インスタンスをSXA 10.3.0以降にアップグレードしてください。
または、以下の手順を実施してください。
Import-Function Get-UniqueItem
Import-Function Select-SingleItemFromEachGroup
Import-Function Get-AllSxaSite
Import-Function Get-SettingsItem
Import-Function Get-ItemByIdSafe
Import-Function Invoke-SiteAction
[Sitecore.Data.ID]$redirectMapsTemplateID = "{C2DC4690-AF44-48C7-BB21-90D1AD246732}"
function ShouldRun () {
[Item[]]$sites = Get-SitesWithoutInsertOption
$sites.Length -gt 0
}
function Get-DialogParameters () {
}
function Get-SitesWithoutInsertOption() {
Get-AllSxaSite | % {
$settingsItem = Get-SettingsItem $_
[Sitecore.Data.ID]$redirectMapGroupID = "{E1CF805E-7F49-4EC9-A25A-182DC798CB5F}"
$redirectsRoot = $settingsItem.Children | ? { [Sitecore.Data.Managers.TemplateManager]::GetTemplate($_).InheritsFrom($redirectMapGroupID) } | Select-Object -First 1
if($redirectsRoot){
$isNewTemplate = [Sitecore.Data.Managers.TemplateManager]::GetTemplate($redirectsRoot).InheritsFrom($redirectMapsTemplateID)
if($redirectsRoot -ne $null -and $isNewTemplate -eq $false){
$redirectsRoot
}
}
}
}
function Invoke-UpgradeStep {
[CmdletBinding(SupportsShouldProcess = $true)]
param(
[Parameter(Mandatory = $true, Position = 0)]
$arguments
)
process {
$result = New-Object Sitecore.XA.Foundation.Upgrade.Model.UpgradeStepResult
try {
Get-SitesWithoutInsertOption | % {
if ($pscmdlet.ShouldProcess("$($_.Name)", "Change template of Redirects item")) {
Write-Host "Changing Redirects item template for '$($_.Paths.Path)'"
$redirectMapsTemplate = Get-Item master: -ID $redirectMapsTemplateID
$_.ChangeTemplate($redirectMapsTemplate)
}
}
$result.Result = "Success"
}
catch {
$result.Result = "Error"
$result.Message = $Error[0]
$result.ErrorObject = $Error[0]
}
finally {
$result
}
}
}