在我们正在做的重构练习中,我们必须更改选定网站的页面模板。大多数页面都进行了本地化,并通过下面的代码更新了其页面模板,但对于少数页面,我们收到以下错误:
"名称,文件名对于类型为:结构组及其蓝图上下文中的页面的项目必须是唯一的。冲突来源或来源 TCM:121:3456-64"。
我检查了正在处理的当前页面和错误中提到的页面,两者都具有唯一的名称和文件名。任何想法可能导致问题的原因?
附言我能够通过发布到我的问题中的出色建议来解决早期的错误。期待这次会有类似的回应。
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);
}
您的代码中存在一些错误,不确定它们是否调用异常,但无论如何都值得修复。首先,您并没有真正阅读该页面,因为当您阅读该页面时,您的ReadOptions
null
。其次,您应该从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);
}
最后,如果这一切都没有帮助,您也可以发布堆栈跟踪吗?