Skip to main content
Fixed grammar, improved formatting and added relevant tag.
Source Link
Sumit Helaiya
  • 3.2k
  • 2
  • 12
  • 23

I need to update the Datasource Item PathDatasource Item Path in Item Presentation DetailsPresentation Details using PowerShellPowerShell for Sitecore. 

Since there are over 100 items, I want to avoid doing this manually. I've written a PowerShell script for this purpose, but it's not working correctly. Here's

Here's my PowerShell script:

Is there any other way to set a Presentation.?

I need to update the Datasource Item Path in Item Presentation Details using PowerShell for Sitecore. Since there are over 100 items, I want to avoid doing this manually. I've written a PowerShell script for this purpose, but it's not working correctly. Here's my PowerShell script:

Is there any other way to set Presentation.

I need to update the Datasource Item Path in Item Presentation Details using PowerShell for Sitecore. 

Since there are over 100 items, I want to avoid doing this manually. I've written a PowerShell script for this purpose, but it's not working correctly.

Here's my PowerShell script:

Is there any other way to set a Presentation?

Source Link
jammy
  • 77
  • 7

Update Datasource Item Path in Item Presentation Details using PowerShell in Sitecore

I need to update the Datasource Item Path in Item Presentation Details using PowerShell for Sitecore. Since there are over 100 items, I want to avoid doing this manually. I've written a PowerShell script for this purpose, but it's not working correctly. Here's my PowerShell script:

# Define the base path where the items are located
$basePath = "/sitecore/content/jss-app/Home/News/socialNews/"

# Define the template GUID for the "socialNews" item
$socialResponsibilityTemplateId = "{42CE662C-173F-4597-A3FB-5DE1C9E724C8}"

# Define the template GUID for the datasource item
$datasourceTemplateId = "{391E2206-916E-415C-A985-E21652337AB8}"

# Get all items under the base path and its descendants that are of the "socialNews" template
$items = Get-ChildItem -Path "master:$basePath" -Recurse | Where-Object {
    $_.TemplateID -eq $socialResponsibilityTemplateId
}

# Iterate through each of the found "socialNews" items
foreach ($item in $items) {
    Write-Host "Processing 'socialNews' item: $($item.Paths.FullPath)"
    
    # Now find the matching datasource item under this item (recursively)
    $datasourceItem = Get-ChildItem -Path $item.Paths.FullPath -Recurse | Where-Object {
        $_.TemplateID -eq $datasourceTemplateId
    }
    
    if ($datasourceItem) {
        Write-Host "Found matching datasource item: $($datasourceItem.Paths.FullPath)"
        
        # Access the Presentation settings of the item
       $defaultLayout = Get-LayoutDevice -Default       
       $presentationList = Get-Rendering -Item $item -Device $defaultLayout -FinalLayout

        # Iterate through each rendering applied to the item
        foreach ($rendering in $presentationList) {
            # Check if the rendering is the "ContentBlock" rendering
            if ($rendering.ItemID -eq "{59A3CE49-41E1-47A8-9EE5-023F1011722D}") {
                Write-Host "Found 'ContentBlock' rendering for item: $($item.Paths.FullPath)"
                
                # Update the datasource for the ContentBlock rendering
                $newDatasourcePath = $datasourceItem.Paths.FullPath
                Write-Host "Updating datasource to: $newDatasourcePath"
                
                # Update the datasource field in the rendering settings
                $rendering.Datasource = $newDatasourcePath
                
                # Save the changes to the presentation
                $item.Editing.BeginEdit()
                $item.Presentation.SetRenderings($presentationList, $false)
                # Save the updated renderings back
                $item.Editing.EndEdit()

                Write-Host "Datasource updated for 'ContentBlock' rendering in the layout."
            }
        }
    }
}

Write-Host "Datasource update complete."

here in this line I'm getting error $item.Presentation.SetRenderings($presentationList, $false).

Is there any other way to set Presentation.