Tridion核心服务更新错误

时间:2013-01-23 16:54:38

标签: tridion tridion-2011

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

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

2 个答案:

答案 0 :(得分:14)

听起来在过去的某个时刻,您的页面元数据架构中有一个名为“description”的字段(我怀疑它后来改为现在的“DescriptionSEO”)。导致错误的这几个页面可能在更改后未更新,因此XML中的旧元数据字段也是如此,因此当您更改页面模板时会出现验证问题。

如果它只有几页,只需打开页面,添加一些描述或以其他方式更改内容,保存它们,然后再次尝试使用代码。

如果它不止一些,您可能需要以编程方式检测并删除现有数据。

答案 1 :(得分:4)

我不确定您使用的是哪个版本的SDL Tridion,但在SDL Tridion 2011的某些早期版本中,如果先前已将元数据添加到任何对象,则不会通过将元数据架构更改为空来清除它。宾语。因此,我发现在保存项目之前必须使用代码将Metadata值设置为NULL。这可以解决您的问题。