9

私たちが取り組んでいるリファクタリングの演習では、選択した Web サイトのページ テンプレートを変更する必要があります。ほとんどのページはローカライズされ、以下のコードによってページ テンプレートが更新されますが、一部のページでは次のエラーが発生します。

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

2 に答える 2

14

過去のある時点で、ページのメタデータ スキーマに「description」というフィールドがあったようです (これは後で現在の「DescriptionSEO」に変更されたと思われます)。エラーの原因となるこれらのいくつかのページは、おそらく変更以降更新されていないため、XML に古いメタデータ フィールドが含まれているため、ページ テンプレートを変更する際に検証の問題が発生します。

数ページしかない場合は、ページを開いて説明を追加するか、何かを変更して保存し、コードをもう一度試してください。

数が多い場合は、おそらく既存のデータをプログラムで検出して削除する必要があります。

于 2013-01-23T17:07:02.740 に答える
4

使用している SDL Tridion のバージョンはわかりませんが、SDL Tridion 2011 の一部の初期バージョンでは、メタデータが以前にオブジェクトに追加されていた場合、オブジェクトのメタデータ スキーマを空に変更してもクリアされませんでした。そのため、アイテムを保存する前にコードで Metadata 値を NULL に設定する必要があることがわかりました。これで問題が解決する場合があります。

于 2013-01-23T18:45:54.007 に答える