2

我刚刚创建了几个通过 VS2010 引用它们的网站栏和内容类型。我更新了其中一个字段,然后尝试重新部署,但撤回后,部署失败,因为之前创建的站点列仍然存在。我尝试从 UI 中手动删除它们,并收到带有此消息的警报框:

不能删除内容类型中包含的网站栏。删除此网站栏之前,请删除所有对它的引用。

我在 SharePoint 管理器中四处搜寻,但没有找到任何引用,因此我使用 powershell 枚举所有内容类型和列表,以查找对我的网站栏的引用,但一无所获。

我尝试像这样使用 PowerShell 删除:

$web.Fields.Delete("StartTime")

这导致了这个错误:

Exception calling "Delete" with "1" argument(s): "Site columns which are included in 
content types or on lists cannot be deleted. Please remove all instances of this site 
column prior to deleting it."
At line:1 char:19
+ $web.Fields.Delete <<<< ("StartTime")
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

最后,对 PowerShell 中的列的简单检查显示以下内容:

Title                               Id                                                         CanBeDeleted ParentList                                                       Sealed ListsFieldUsedIn                   
-----                               --                                                         ------------ ----------                                                       ------ ----------------                   
Start Time OBE                      6fa0d85b-9af1-408b-835f-d4c66536...                                True                                                                   False {}                                 
Time Tracker Tags                   92bc866b-0415-45f0-b431-d4df69c4...                                True                                                                   False {}                                 

我对 MOSS 2007 和 SP2010 的新手很有经验,但我以前从未见过这种情况。有人有任何提示吗?

4

5 回答 5

2

也发生在 SharePoint 2010 上。尝试查看:

$field.AllowDeletion = $TRUE
$field.Update()

当我设置它时,似乎工作。现在我只是无法复制它,以证明我的观点。典型的。

于 2011-02-22T01:43:10.477 回答
2

我遇到了同样的问题,并且能够使用 SharePoint Designer 删除 - 不确定是否有人可以验证这是否适用于他们。

于 2012-02-18T21:43:29.297 回答
2

您需要查找并删除使用网站栏的内容类型以及使用您尝试删除的网站栏的任何列表或库。使用 PowerShell 获取网站栏对象,使用如下所示:

 $column = $web.Fields[“Column Display Name”]

然后找到所有使用它的地方,使用这样的东西:

$column.ListsFieldUsedIn()

它会吐出两个GUIDs-WebIDListID- 每个使用此内容类型的地方。

下面是一个 PowerShell 脚本,它遍历从 ListFieldUsedIn() 返回的所有列表 GUID,然后找到与该 GUID 匹配的子网站和列表,并为每个用法打印出列表名称和子网站 URL:

$site = Get-SPSite "http://sharepoint"
$rootweb = $site.rootweb
$siteColumnToRemove = "Column Display Name”
$sc = $rootweb.Fields[$siteColumnToRemove]
if ($sc)
{
    write-host "  Found Site Column '" $sc.Title "' in gallery" -ForegroundColor Gray
    foreach( $listusage in $sc.ListsFieldUsedIn() )
    {
        $listID = $listusage.ListID            
        foreach ($subweb in $site.allwebs)
        {
            foreach ($list in $subweb.lists)
            {
                if ($list.ID -eq $listID)
                {                     
                     write-host "    Site Column '" $sc.Title "' used in list '" $list.Title "' in site '" $subweb.Url "'" -BackgroundColor Yellow -ForegroundColor Black
                }
            }
        }
    }
}
于 2013-04-01T02:10:18.090 回答
0

已经有一段时间了,我早就摆脱了这个问题,但我认为最终的答案是,有些内容类型依赖于 SPM 没有选择的特定网站栏。

我想一旦我从网站上撤回了所有自定义内容,我就可以正常删除了。

于 2012-02-28T22:25:00.843 回答
0

我的指导是,一旦使用了网站栏,就永远不要删除它。我已经看到由于尝试删除网站栏或内容类型时出现问题,网站集变得完全无法使用。

如果您不再需要网站栏,只需将其隐藏即可。

于 2015-02-06T13:55:15.283 回答