4

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

「名前、ファイル名は、構造グループ内のページとブループリントコンテキストのタイプのアイテムに対して一意である必要があります。競合のソースまたはソースtcm:121:3456-64」。

処理中の現在のページとエラーに記載されているページの両方を確認しましたが、どちらも一意の名前とファイル名を持っています。問題を引き起こしている可能性のあるアイデアはありますか?

PS質問に投稿された優れた提案で、以前のエラーを解決することができました。今回も同様の反応を期待しています。

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

1 に答える 1

4

コードにいくつかの間違いがあります。例外を呼び出しているかどうかはわかりませんが、とにかく修正する価値があります。まず第一に、あなたがそれを読んだとき、あなた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);
}  

そして最後に、それがすべて役に立たない場合は、スタックトレースも投稿できますか?

于 2013-01-24T19:23:46.927 に答える