シナリオ:共有ドキュメントライブラリのデフォルトビュー「すべてのドキュメント」に追加された2つのフィールドがあります。home.aspxページの共有ドキュメントXsltListViewWebPartビューは、これがOOTBに存在していたため、変更を反映していません。XsltListViewWebPartビューに2つのフィールドを追加する必要があります。これは、いくつかのサイトがすでに存在し、手動で変更することは問題外だからです。
XsltListViewWebPartのすべてのViewFieldを削除してから、ライブラリのビューからフィールドを追加するリソースを見つけました。 http://spblog.net/post/2011/04/26/Changing-default-view-for-ListViewWebPart-programmatically.aspx
私の環境で動作するように少し変更する必要がありましたが、ここにソースがあります
# Add SharePoint cmdlets reference
Add-PSSnapin microsoft.sharepoint.powershell -ErrorAction SilentlyContinue
$web = Get-SPWeb -Identity "http://myServer/sites/Test_Site04_18_03-03-49"
$file = $web.GetFile("SitePages/Home.aspx");
$wpMngr = $file.GetLimitedWebPartManager([System.Web.UI.WebControls.Webparts.PersonalizationScope]::Shared);
$sharedDocList = $web.Lists["Shared Documents"]
$sharedDocViewFields = $list.Views["All Documents"].ViewFields
$foundWebPart = $false
:webPartLoop foreach($webPart in $wpMngr.WebParts)
{
:viewLoop foreach($view in $sharedDocList.Views)
{
if($webPart.ViewGuid -eq $view.ID.ToString("B"))
{
$foundWebPart = $true
$view.ViewFields.DeleteAll()
#loop through all the fields in the shared doc view and add them
foreach($field in $sharedDocViewFields)
{
write-host "field: " $field
$view.ViewFields.Add($field)
}
$view.Update();
break viewLoop
}
}
#break out of the loop because we already found the webpart and modified the view
if ($foundWebPart)
{
break webPartLoop
}
}
私はそれを実行し、エラーが表示されます:
Exception calling "Add" with "1" argument(s): "Column 'ColumnName' does not exist. It may have been deleted by another user."
+ $view.ViewFields.Add <<<< ($field)
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
私は何が間違っているのですか?DocLibの元のフィールドの方法に問題があるのではないかと思います。画面に書き出すことができるのは非常に奇妙ですが、新しいビューに追加しようとすると、存在しないと表示されます。ビューをライブラリで使用されているのと同じビューに変更するという観点からもこれにアプローチしようとしましたが、成功しませんでした。私が読んでいた記事は、隠されたビューについて何か言及していました.....