2010-05-10 64 views
0

將同一網站中的自定義內容類型及其列從一個網站複製到另一個網站時,遇到了一個非常固執的問題。基本上,這是我有的代碼:以編程方式將自定義內容類型和列從一個網絡複製到另一個網頁

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個站點。代碼運行良好。但問題是,在網站內容類型的屏幕(在現場設置),當我點擊自定義內容類型的自定義列鏈接,我得到了一個錯誤說:

Invalid field name {UID}. 

UID是相同的UID現有網站中的自定義列。完成後我檢查了我的網頁設置。我可以看到自定義列表(我爲了測試目的而創建了一個項目),但是自定義列從視圖中消失了(儘管實際數據仍然存在......只需選中顯示框即可) 。但我認爲這不太重要...更多的是。

我也得到了各種不同的例外,如果我錯誤地複製的東西。谷歌沒有幫我解決這個問題。

有人知道我錯過了什麼,爲了讓該鏈接再次工作?

謝謝。

+0

東西,你在你的代碼一個錯字?我認爲它應該是foreach(SPContentType existingWebCt在existingWeb.ContentTypes),而不是destinationWeb.ContentType – desigeek 2010-05-12 21:48:29

+0

是的......對不起,我的印刷錯誤。其更新。 – BeraCim 2010-05-16 23:28:29

回答

0

加里·拉普安特解決內容類型的複製已經,而且事實證明這是一個謊言:http://stsadm.blogspot.com/2007/08/copy-content-types.html

檢查一下,看看是否有你可能已經錯過了

+0

再試一次。鏈接到自定義網站內容類型中的自定義列仍然會給我提供無效的字段名稱錯誤。不知何故鏈接不鏈接到列。 – BeraCim 2010-05-11 07:44:02

相關問題