Changing the page for a SharePoint Library View

Views are easily created by end users, and can be created through automation. I recently had to change the underlying aspx page for an existing view. First I tried using the SPView method SetViewXml(), however that does not work, as many other programmers have discovered to their chagrin.

The approach that works is to clone the view, then rename the title. In this case, I am trying to create AllItems.aspx, so I clone the view to that name then rename it:

$NewView = $SourceView.clone("AllItems",100,$true,$true)
$NewView.title = "All Documents";
$NewView.update();
$Views.delete($SourceView.id);

The script below goes one better. It finds the extra “All Documents” views, and deletes all the ones that are duplicate, preserving the original (latest) View. It iterates through the collection downward deleting as it goes.

Add-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue
$mylogfile="ongoinglogfile.txt"
$envGUID = $(Get-SPFarm).id
if		($envGUID -eq  "c25ca1f1-6d8f-4c59-86e3-d64821a3bcbb" )	{$env = "Dev"}
elseif	($envGUID -eq "8e51b3e2-1ed7-4549-ad51-c5c43b065d2c" )	{$env = "Prod"}
else
{
$env = "Unknown"
Write-Host -ForegroundColor darkred "UKNOWN FARM in $($MyInvocation.MyCommand.Definition)"
Add-Content $mylogfile "UKNOWN FARM in $($MyInvocation.MyCommand.Definition)"
exit
}
elseif ($env -eq "Dev")
{
#$MatchStr="ht tp://sharepointdev/Sites/*"  
$MatchStr="ht tp://sharepointdev/Sites/2015"  
$sitesArrNames = "ht tp://sharepointdev/Sites/2015"
$sitesArr = $sitesArrNames.split(",");
}
elseif ($env -eq "Prod")
{
$MatchStr="ht tp://sharepoint/Sites/2015"  
$sitesArrNames = "ht tp://sharepoint/Sites/2015"
$sitesArr = $sitesArrNames.split(",");
}
else
{
$waName = $MatchStr = $waName = $null;
}
$libsArrStr="Lib1,lib2,Documents,Shared Documents"
$LibsArr=$libsArrStr.split(",")
write-host  "STARTING: $(get-date) Script: $($MyInvocation.MyCommand.Definition)"
Add-Content $mylogfile "STARTING: $(get-date) Script: $($MyInvocation.MyCommand.Definition)"
foreach ($SiteName in $sitesArr)
{
$site = get-spsite $SiteName
if ($site.url -like $MatchStr)
{
$webs=$Site.AllWebs
$webcount = $Site.AllWebs.Count
for ($i=0; $i -lt $webcount; $i++)
{
$TargetWeb=$web=$webs[$i]  #$TargetWeb is used by my standard routines
Write-Host "==>working in $($web.url)"
Add-Content $mylogfile "==>working in $($web.url)"
$lists=$web.lists;
write-host -f green "The Library $($listName) exists in the site $($web.url), about to tune the view"  #not going to try to config it either
Add-Content $mylogfile "The Library $($listName) exists in the site $($web.url), about to tune the view"  
for ($k=0; $k -lt $LibsArr.count; $k++)
{
$libstr = $LibsArr[$k];
$JPLib = $web.Lists.TryGetList($libStr)  #Extra JPFolder is for the override on routines with lib
if($JPLib -ne $null)  #optional, can filter to ensure ($JPLib.ContentTypesEnabled)
{
write-host "Analyzing $($JPLib.title) in $($web.url)"
Add-Content $mylogfile "Analyzing $($JPLib.title) in $($web.url)"
$Views = $JPLib.views;
$foundOne=$false;
for ($vi=$views.count-1; $vi -ge 0; $vi--)
{
$View = $views[$vi];
if ($View.title -eq "All Documents")
{
if ($foundOne -eq $true)  #there was one found earlier
{
$views.Delete($view.id);
write-host "Deleted a view in $($JPLib.title) in $($web.url)"
Add-Content $mylogfile "Deleted a view in $($JPLib.title) in $($web.url)"
}
else
{
$foundOne=$true;
$SourceView = $view;
}
}
}
if ($FoundOne)
{
if ($SourceView.schemaxml.contains("Documents.aspx"))
{
$NewView = $SourceView.clone("AllItems",100,$true,$true)
$NewView.title = "All Documents";
$NewView.update();
$Views.delete($SourceView.id);
write-host "Cloned and deleted a view in $($JPLib.title) in $($web.url)"
Add-Content $mylogfile "Cloned and deleted a view in $($JPLib.title) in $($web.url)"
}
}
}
}
$web.Dispose()
} #SPWeb processing
} #if $true/Siteurl is not null, if environment setup is valid
$site.Dispose()
} #foreach site
0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *