Tridion核心服务更新错误 - 续

时间:2013-01-24 18:28:39

标签: tridion tridion-2011

在我们正在进行的重构练习中,我们必须更改所选网站的页面模板。大多数页面都已本地化,并且通过下面的代码更新了页面模板,但是对于少数页面我们会收到以下错误:

“名称,文件名对于类型的项目必须是唯一的:其结构组中的页面及其蓝图上下文。冲突的来源或来源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);
} 

1 个答案:

答案 0 :(得分: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);
}  

最后,如果一切都没有帮助,你也可以发布堆栈跟踪吗?