我正在尝试从Sharepoint 2010文档库中删除密封字段。有问题的字段最初是默认的Sharepoint Title字段,此字段已被重命名。我在Sharepoint Management Shell中,但是当我尝试将Sealed
属性更新为false时,我收到以下错误消息:
异常设置“密封”:“由于对象的当前状态,操作无效。”
请注意,我能够使用相同的方法在同一列表中成功解除其他字段。
这是我正在使用的完整命令集:
$web = Get-SPweb("myurl")
$list = $web.Lists["mylist"]
$field = $list.Fields["column to delete"]
$field.AllowDeletion = $true
$field.Sealed = $false -->Here's where I get the error
如果我能够更新Sealed
属性,我会继续以下内容:
$field.Delete()
$list.Update()
$web.Dispose()
为了更新Sealed
,是否还需要更改其他任何属性? Title字段是否受到唯一保护?
答案 0 :(得分:0)
以下是关于密封目的的摘录:
有时,您希望确保有人无法通过Windows SharePoint Services用户界面进入并更改您的内容类型。如果管理员要删除或重命名内容类型中的列,则可能会导致各种问题,因为可能会或可能不会将这些问题归结为子类型。您可能还希望确保仅使用功能和CAML创建/修改内容类型。要解决此问题,可以将内容类型标记为已密封,并且只能通过对象模型将其标记为已密封。这可以防止通过用户界面对内容类型进行任何随意更改。
答案 1 :(得分:0)
我用这段代码解决了这类问题(我们直接更新字段的xml架构):
$web = Get-SPWeb http://my-web-url
$list = $web.Lists["myList"]
$field = $list.Fields.GetFieldByInternalName("myField")
$fxml = [xml]$field.SchemaXml
$fxml.Field.Sealed = "FALSE"
$field.SchemaXml = $fxml.InnerXml
$field.Update();
$web = Get-SPWeb http://my-web-url
$list = $web.Lists["myList"]
$field = $list.Fields.GetFieldByInternalName("myField")
$field.Sealed = $false;
$field.Update();
也许在您的情况下,您也应该更新网站字段。
答案 2 :(得分:0)
我可以通过这种方法解决此问题:
答案 3 :(得分:-2)
此脚本可以帮助您更改密封内容类型的字段:
param([string]$webUrl="http://spdev", [string]$contentTypeName="myContenttype", [string]$fieldName="myTitle", [boolean]$required=$true)
if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue) -eq $null) {
Add-PSSnapin Microsoft.SharePoint.PowerShell
}
clear
$web = Get-SPWeb $webUrl
$ct = $web.ContentTypes[$contentTypeName];
$oldSealedValue = $ct.Sealed;
Write-Host "content type Sealed Property $($ct.Sealed)"
if($ct.Sealed)
{
$ct.Sealed = $false;
}
$field = $ct.FieldLinks[$fieldName];
$field.Required = $required;
Write-Host "set field $($fieldName) Required $($ct.Required)"
if($oldSealedValue)
{
$ct.Sealed = $true;
}
$ct.Update($true);
$web.Update();
$web.Dispose();