Sitecore powershell script to update rendering parameters and datasource item fields data

 We had one requirement to change the component's display on almost 1400 pages and doing so we had to follow following things:

1. Update the rendering parameters on the item

$parameters = [ordered]@{"DisplayContentInCard" = "1"; "ApplyBackground" = "1"; "AlignImageRight" = "1" }

$rendering | Set-RenderingParameter -Parameter $parameters | Set-Rendering -Item $pageItem -FinalLayout

 2. Update the datasource item's field data.

if ($datasource.StartsWith("local:")) {
                    $datasource = $datasource.Replace("local:", $pageItem.Paths.Path)
                }
                if ($datasource.StartsWith("/sitecore")) {
                    $datasourceItemNewVersion = Add-ItemVersion -Path "master:$($datasource)"
                    $datasourceItem = Get-Item -Path "master:$($datasourceItemNewVersion.FullPath)"
                    $quoteInitiation = "{0xxxxx0-FA49-445A-95FC-E3xxxxx1E3}"
                    if ($null -ne $dataSourceItem) {
                        $dataSourceItem.Editing.BeginEdit()
                        $dataSourceItem["quote"] = $quoteInitiation
                        $dataSourceItem["Link"] = ""
                        $dataSourceItem.Editing.EndEdit()
                        #$item = Get-Item -Path "master:$($dataSourceItem.FullPath)"
                        Publish-Item -Path "master:$($dataSourceItem.FullPath)" -PublishMode Smart -Target Edge
                        # Datasource item fields update - End
                    }
                    else {
                        Write-Host "Unable to process $($dataSourceItem.FullPath)"
                    }
                }
                else {
                    # this will execute when datasource is in GUID format
                    $datasourceItemNewVersion = Add-ItemVersion -Path "master:$($datasource)"
                    $datasourceItem = Get-Item "$($datasource)"
                    $quoteInitiation = "{03sss7FD0-FA49-445A-95FC-E35xxxxE3}"
                    if ($null -ne $dataSourceItem) {
                        $dataSourceItem.Editing.BeginEdit()
                        $dataSourceItem["quote"] = $quoteInitiation
                        $dataSourceItem["Link"] = ""
                        $dataSourceItem.Editing.EndEdit()
                        #$item = Get-Item -Path "master:$($dataSourceItem.FullPath)"
                        Publish-Item -Path "master:$($dataSourceItem.FullPath)" -PublishMode Smart -Target Edge
                        # Datasource item fields update - End
                    }
                    else {
                        Write-Host "Unable to process $($dataSourceItem.FullPath)"
                    }
                }

3. Update the main page with one droplink field to be set with the specific item.

$defaultProductOptionItemId = "{E2xxxxx-5DD0-4188-ABED-5Axxxxx56}";
                if ([string]::IsNullOrEmpty($pageItem["productionOption"])) {
                    $pageItem.Editing.BeginEdit()
                    $pageItem["productionOption"] = $defaultProductOptionItemId
                    $pageItem.Editing.EndEdit()
                    Publish-Item -Path "master:$($pageItem.FullPath)" -PublishMode Smart -Target Edge
                }

4. Export the info in the excel

    $props = @{
        InfoTitle       = "Quote Initiation."
        InfoDescription = "Processing for quote initiation of City pages for Auto owners."
        PageSize        = 25
    }

    $items |
    Show-ListView @props -Property @{Label = "Name"; Expression = { $_.DisplayName } },
    @{Label = "Id"; Expression = { $_.Id } },
    @{Label = "Template Name"; Expression = { $_.TemplateName } },
    @{Label = "Path"; Expression = { $_.ItemPath } }

Now the complete script is as follows:

# Product City Page - Auto

function ProcessProductLocationPage_Auto {
    $allItems = Get-ChildItem -Path "master://sitecore/content/SiteRoot/Home/States" -Recurse
    ForEach ($item in $allItems) {
        if ($item.TemplateName -match "City" -AND $item.Name -match "auto") {
            $newItemVersion = Add-ItemVersion -Path "master:$($item.FullPath)"
            $pageItem= Get-Item -Path "master:$($newItemVersion.FullPath)"
            try {
                # Update rendering parameters - Start
                $fityFiftyRenderingId = "{3FXXXE058-F909-4813-B4AA-92XXXXX5DE}"
                $defaultLayout = Get-LayoutDevice "Default"
                $renderings = Get-Rendering -Item $pageItem-Device $defaultLayout -FinalLayout
                $datasource = ""
                foreach ($rendering in $renderings) {
                    if ($rendering.ItemId -eq $fityFiftyRenderingId) {
                        $parameters = [ordered]@{"DisplayContentInCard" = "1"; "ApplyBackground" = "1"; "AlignImageRight" = "1" }
                        $rendering | Set-RenderingParameter -Parameter $parameters | Set-Rendering -Item $pageItem-FinalLayout
                        $datasource = $rendering.Datasource                
                    }
                }
                # Datasource item fields update - Start    
                # Check if the data source path has a special prefix
                if ($datasource.StartsWith("local:")) {
                    $datasource = $datasource.Replace("local:", $pageItem.Paths.Path)
                }
                if ($datasource.StartsWith("/sitecore")) {
                    $datasourceItemNewVersion = Add-ItemVersion -Path "master:$($datasource)"
                    $datasourceItem = Get-Item -Path "master:$($datasourceItemNewVersion.FullPath)"
                    $quoteInitiation = "{0ddddD0-FA49-445A-95FC-E35dddddE3}"
                    if ($null -ne $dataSourceItem) {
                        $dataSourceItem.Editing.BeginEdit()
                        $dataSourceItem["quote"] = $quoteInitiation
                        $dataSourceItem["Link"] = ""
                        $dataSourceItem.Editing.EndEdit()
                        #$item = Get-Item -Path "master:$($dataSourceItem.FullPath)"
                        Publish-Item -Path "master:$($dataSourceItem.FullPath)" -PublishMode Smart -Target Edge
                        # Datasource item fields update - End
                    }
                    else {
                        Write-Host "Unable to process $($dataSourceItem.FullPath)"
                    }
                }
                else {
                    # this will execute when datasource is in GUID format
                    $datasourceItemNewVersion = Add-ItemVersion -Path "master:$($datasource)"
                    $datasourceItem = Get-Item "$($datasource)"
                    $quoteInitiation = "{0dddddD0-FA49-445A-95FC-E3xxxxx31E3}"
                    if ($null -ne $dataSourceItem) {
                        $dataSourceItem.Editing.BeginEdit()
                        $dataSourceItem["quote"] = $quoteInitiation
                        $dataSourceItem["Link"] = ""
                        $dataSourceItem.Editing.EndEdit()
                        #$item = Get-Item -Path "master:$($dataSourceItem.FullPath)"
                        Publish-Item -Path "master:$($dataSourceItem.FullPath)" -PublishMode Smart -Target Edge
                        # Datasource item fields update - End
                    }
                    else {
                        Write-Host "Unable to process $($dataSourceItem.FullPath)"
                    }
                }    
       
                $defaultProductOptionItemId = "{Exxxx8D-5DD0-4188-ABED-5Axxxxx56}";
                if ([string]::IsNullOrEmpty($pageItem["prodOption"])) {
                    $pageItem.Editing.BeginEdit()
                    $pageItem["prodOption"] = $defaultProductOptionItemId
                    $pageItem.Editing.EndEdit()
                    Publish-Item -Path "master:$($pageItem.FullPath)" -PublishMode Smart -Target Edge
                }
           
            }
            catch [System.Net.WebException], [System.IO.IOException] {
                Write-Host "Unable to process item " $pageItem.FullPath
            }

            $pageItem
        }
    }
}
$items = ProcessProductLocationPage_Auto

if ($items.Count -eq 0) {
    Write-Host "Nothing found."
}
else {
    $props = @{
        InfoTitle       = "Quote Initiation."
        InfoDescription = "Your description here."
        PageSize        = 25
    }

    $items |
    Show-ListView @props -Property @{Label = "Name"; Expression = { $_.DisplayName } },
    @{Label = "Id"; Expression = { $_.Id } },
    @{Label = "Template Name"; Expression = { $_.TemplateName } },
    @{Label = "Path"; Expression = { $_.ItemPath } }
}

Write-Host "Script execution completed!"


Thanks!

1 comment:

  1. https://sitecorepeanuts.blogspot.com/2024/07/sitecore-powershell-script-to-update.html

    ReplyDelete

Creating Solr core for sitecore using command prompt

We setup the solr cores using command “C:\solr8985\sc103solr-8.11.2\bin>solr.cmd create -c sitecore_sxa_web_index -d sitecore_configset” ...