默认的OOBX EditForm对于SharePoint文档库消失了。我们试图在SharePoint设计器中创建一个新的编辑表单,但是出现了错误[。然后尝试另一种方法,转到“所有文件/文档库/表格”-出现列表视图阈值错误。我们的图书馆中有超过1万个项目,无法打开表格文件夹。
请提出如何找回默认编辑表单的建议。$webpartTemplate = @"
<WebPart xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/WebPart/v2">
<Assembly>Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>
<TypeName>Microsoft.SharePoint.WebPartPages.ListFormWebPart</TypeName>
<ListName xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">{{{LIST_ID}}}</ListName>
<ListId xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">{{LIST_ID}}</ListId>
<PageType xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">{{PAGE_TYPE}}</PageType>
<FormType xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">{{FORM_TYPE}}</FormType>
<ControlMode xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">{{CONTROL_MODE}}</ControlMode>
<ViewFlag xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">1048576</ViewFlag>
<ViewFlags xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">Default</ViewFlags>
<ListItemId xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">0</ListItemId>
</WebPart>
"@
Function Create-DefaultListForm
{
param(
[parameter(Mandatory=$true)]$List,
[parameter(Mandatory=$true)][string]$FormUrl,
[parameter(Mandatory=$true)][ValidateSet("Display", "Edit", "New")]$FormType
)
begin { }
process
{
$webpartXml = $webpartTemplate -replace "{{LIST_ID}}", $List.Id.ToString()
switch ($FormType)
{
"Display" {
$webpartXml = $webpartXml -replace "{{PAGE_TYPE}}", "PAGE_DISPLAYFORM"
$webpartXml = $webpartXml -replace "{{FORM_TYPE}}", "4"
$webpartXml = $webpartXml -replace "{{CONTROL_MODE}}", "Display"
break;
}
"Edit" {
$webpartXml = $webpartXml -replace "{{PAGE_TYPE}}", "PAGE_EDITFORM"
$webpartXml = $webpartXml -replace "{{FORM_TYPE}}", "6"
$webpartXml = $webpartXml -replace "{{CONTROL_MODE}}", "Edit"
break;
}
"New" {
$webpartXml = $webpartXml -replace "{{PAGE_TYPE}}", "PAGE_NEWFORM"
$webpartXml = $webpartXml -replace "{{FORM_TYPE}}", "8"
$webpartXml = $webpartXml -replace "{{CONTROL_MODE}}", "New"
break;
}
}
try
{
#Check if form page already exists
$listPages = Get-PnPProperty -ClientObject $List.RootFolder -Property Files
$formPage = $listPages | Where-Object { $_.ServerRelativeUrl.ToLower() -eq $FormUrl.ToLower() }
if ($null -eq $formPage) {
Write-Output " [Creating Form Page] $FormUrl"
#Create Form
Remove-PnPFile -ServerRelativeUrl $FormUrl -Force
$formPage = $List.RootFolder.Files.AddTemplateFile($FormUrl, [Microsoft.SharePoint.Client.TemplateFileType]::FormPage)
}
else {
#Form page exists, check if form is recognized by list (i.e. form page has a form webpart on it)
$listForms = Get-PnPProperty -ClientObject $List -Property Forms
if ($null -ne $listForms -and $listForms.Count -gt 0) {
$existingForm = $list.Forms | Where-Object { $_.ServerRelativeUrl.ToLower() -eq $FormUrl.ToLower() }
if ($null -ne $existingForm) {
Write-Warning " [Form Already Exists] $FormUrl"
return;
}
}
}
Write-Output " [Adding Form Webpart] $FormUrl"
#Get Webpart Manager for Form
$wpm = $formPage.GetLimitedWebPartManager([Microsoft.SharePoint.Client.WebParts.PersonalizationScope]::Shared)
#Import Webpart on page
$wp = $wpm.ImportWebPart($webpartXml)
#Add webpart to Form
$wpm.AddWebPart($wp.WebPart, "Main", 1) | Out-Null
#Execute changes
$List.Context.ExecuteQuery()
}
catch
{
Write-Error "Error creating form $FormType at $FormUrl. Error: $($_.Exception)"
}
}
end { }
}
使用类似这样的脚本。如果只需要还原EditForm,则显然可以跳过下面的Upload,New和DispForms:
Connect-PnPOnline -Url $problemSiteUrl -UseWebLogin $list = Get-PnPList $problemlistTitle $listUrl = $list.RootFolder.ServerRelativeUrl # Handle Document Library Types if ($list.BaseType -eq [Microsoft.SharePoint.Client.BaseType]::DocumentLibrary) { Write-Host " > Processing Library: $listUrl" Create-DefaultListForm -List $list -FormUrl "$listUrl/Forms/Upload.aspx" -FormType New Create-DefaultListForm -List $list -FormUrl "$listUrl/Forms/DispForm.aspx" -FormType Display Create-DefaultListForm -List $list -FormUrl "$listUrl/Forms/EditForm.aspx" -FormType Edit } # Handle Generic List Types else { Write-Host " > Processing List: $listUrl" Create-DefaultListForm -List $list -FormUrl "$listUrl/NewForm.aspx" -FormType New Create-DefaultListForm -List $list -FormUrl "$listUrl/DispForm.aspx" -FormType Display Create-DefaultListForm -List $list -FormUrl "$listUrl/EditForm.aspx" -FormType Edit }