2013-01-23 47 views
9

在我們正在進行的重構練習中,我們必須更改選定網站的頁面模板。大多數頁面獲取本地化,並有自己的網頁模板,通過下面的代碼,但幾,我們得到以下錯誤更新:Tridion核心服務更新錯誤

XML validation error. Reason: The element 'Metadata' in namespace 'uuid:940d95aa-fcce-481c-8de5-c61d06c74f46' has invalid child element 'description' in namespace 'uuid:940d95aa-fcce-481c-8de5-c61d06c74f46'. 

List of possible elements expected: 'TitleSEO, KeywordsSEO, DescriptionSEO, omniture' in namespace 'uuid:940d95aa-fcce-481c-8de5-c61d06c74f46'. 

有一個在我們的元數據架構TitleSEO,KeywordsSEO,DescriptionSEO,Omniture的任何說明字段均可選字段不會被代碼更改。

try 
{ 
    pData = client.Read(page.Attribute("ID").Value, null) as PageData; 
    //Localize Page 
    if (!(bool)pData.BluePrintInfo.IsLocalized) 
    { 
     client.Localize(pData.Id, new ReadOptions()); 
     if (dTemplateIDs.ContainsKey(pData.PageTemplate.IdRef.ToString())) 
     { 
      pData.IsPageTemplateInherited = false; 
      pData.PageTemplate.IdRef = dTemplateIDs[pData.PageTemplate.IdRef]; 
      client.Update(pData, new ReadOptions()); 
     } 
    } 
} 
catch (Exception ex) 
{ 
    Console.WriteLine("Error Inner " + ex.Message); 
} 
+4

完全偏離主題,但祝賀您在Stackoverflow上發佈第1000個Tridion問題! –

+0

不錯的問題,我們可以讓你感興趣的是承諾[區域51 Tridion具體提案](http://area51.stackexchange.com/proposals/38335/tridion?referrer=gPujQMxthNCNn9xqeeO2NA2)。如果您有時間,請使用同一個SO帳戶註冊。 –

+0

感謝David的建議,我能夠從元數據中刪除描述。現在出現新的錯誤。 「名稱,文件名必須是唯一的類型的項目:在其結構組及其藍圖上下文中的頁面。源或衝突源tcm:121:3456-64」。我檢查了正在處理的當前頁面和錯誤中提到的頁面,並且都有唯一的名稱和文件名。任何想法可能會導致這個問題? – user1949001

回答

14

這聽起來像在過去某個時候在被稱爲「說明」你的頁面的元數據架構中的字段(我懷疑後來改爲現在的「DescriptionSEO」)。這些導致錯誤的頁面可能在更改後沒有更新,因此在XML中有舊的元數據字段,因此在更改頁面模板時會出現驗證問題。

如果只有幾頁,只需打開頁面,添加一些說明或以其他方式更改內容,保存它們然後再次嘗試您的代碼。

如果超過幾個,您可能需要以編程方式檢測並刪除現有數據。

+0

David,感謝您的建議,我能夠從元數據中刪除說明。現在出現新的錯誤。 「名稱,文件名必須是唯一的類型的項目:在其結構組及其藍圖上下文中的頁面。源或衝突源tcm:121:3456-64」。我檢查了正在處理的當前頁面和錯誤中提到的頁面,並且都有唯一的名稱和文件名。任何想法可能會導致這個問題? – user1949001

4

我不確定您使用的是哪個版本的SDL Tridion,但在SDL Tridion 2011的某些早期版本中,如果以前元數據已添加到任何對象,則不會通過將Metadata Schema更改爲空來清除它物體。因此,我發現在保存項目之前,必須使用代碼將元數據值設置爲NULL。這可能會解決您的問題。

相關問題