以编程方式将自定义内容类型和列从一个Web复制到另一个Web

时间:2010-05-10 05:24:33

标签: sharepoint sharepoint-2007 content-type

在同一网站中将自定义内容类型及其列从一个网页复制到另一个网页时,我遇到了一个非常顽固的问题。基本上,这是我的代码:

foreach (SPField field in existingWeb.Fields)
{
    if (!destinationWeb.Fields.ContainsField(field.Title))
    {
        destinationWeb.Fields.AddFieldAsXml(field.SchemaXml);
        destinationWeb.Update();
    }
}

foreach (SPContentType existingWebCt in existingWeb.ContentType)
{
    SPContentType newContentType = new SPContentType(existingWebCt.Parent, destinationWeb.ContentTypes, existingWebCt.Name);
    foreach (SPFieldLink fieldLink in existingWebCt.FieldLinks)
    {
        SPField sourceField = existingWebCt.Fields[fieldLink.Id];
        if (destinationWeb.Fields.ContainsField(sourceField.Title))
        {
            SPFieldLink destinationWebFieldLink = new SPFieldLink(destinationWeb.Fields[sourceField.Title]);
            newContentType.FieldLinks.Add(destinationWebFieldLink);
        }
    }
}

existingWeb和destinationWeb是同一站点内的2个Web。代码运行正常。但问题是,在SITE内容类型屏幕(在网站设置下),当我单击自定义内容类型中的自定义列链接时,我收到错误消息:

Invalid field name {UID}.

UID与现有站点中的自定义列相同。完成后我检查了我的网页设置。我可以看到自定义列表(我用一个用于测试目的的项目创建),但自定义列已从视图中消失(尽管实际数据仍然存在...只需选中该框以显示它) 。但我认为这不太重要......更多的是fyi。

如果我错误地复制错误,我也会遇到各种不同的例外情况。谷歌未能帮助我解决这个问题。

有没有人知道我缺少什么才能让这个链接再次运作?

感谢。

1 个答案:

答案 0 :(得分:0)

Gary lapointe已经解决了内容类型复制问题,结果证明这是一个很糟糕的问题:http://stsadm.blogspot.com/2007/08/copy-content-types.html

检查一下,看看是否有任何遗漏