2013-01-24 57 views
4

在我們正在進行的重構練習中,我們必須更改選定網站的頁面模板。大多數頁面已被本地化,並通過下面的代碼更新其頁面模板,但是對於少數我們會收到以下錯誤:Tridion核心服務更新錯誤 - 續

「名稱,文件名在其結構組及其藍圖上下文中必須是唯一的類型項。來源或衝突來源tcm:121:3456-64「。

我檢查了正在處理的當前頁面和錯誤中提到的頁面,並且都有唯一的名稱和文件名。任何想法可能會導致這個問題?

P.S.我能夠通過發佈給我的問題的出色建議來解決早期的錯誤。期待類似的迴應。

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); 
} 
+2

「這次期待類似的迴應。」很高的期望! :) –

+0

對不起,我並沒有潛伏在SO之前,以便與上次一樣快地回答你的問題! :) –

+0

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

回答

4

你的代碼存在一些錯誤,不確定他們是否調用異常,但無論如何值得修復。首先,當你閱讀它時,你並沒有真正閱讀該頁面,因爲你的ReadOptionsnull。其次,你應該從Localize方法得到你的頁面,然後更新頁面的本地化版本。像這樣:

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

最後,如果這一切都沒有幫助,你可以發佈堆棧跟蹤嗎?

相關問題