SXAサイトの9.3から10.2へのアップグレードが「Redirects」アイテムがないため失敗する


解説

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以降にアップグレードしてください。

または、以下の手順を実施してください。

  1. /sitecore/system/Modules/PowerShell/Script Library/SXA/SXA - Upgrade/Functions/Upgrade Scripts/Change Redirect Maps root item templateアイテムに移動します。
  2. Evaluate session(セッション評価)ラベルをクリックします。
  3. 以下のスクリプトをScript body - Source code written in PowerShell [shared](スクリプト本体 - PowerShellで記述されたソースコード [共有])フィールドに配置します。
      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
                }
            }
        }
  4. SXAアップグレード ガイドに記載されている通りに既存のコンテンツを更新します。