2012-02-29 3 views
6

これはTridion 2011 SP1です。Tridion:イベントシステムでページのメタデータスキーマを設定する際のエラー

Tridionイベントシステムのコンポーネント保存イベントを使用して、対応するページを作成し、そのページにいくつかのメタデータを関連付けます。スキーマを指定するときに、スキーマのUUIDが見つからないことを示すイベントログが取得されています。

エラーになっているUUIDは、使用したいメタデータスキーマのもので、メタデータスキーマにもローカルのTcmUriを使用しています。私は現時点では少し損失があります。

.NETおよび結果の誤差は以下の通りです:

コード

public static TcmUri CreatePage(TcmUri parentSgId, Component component, TcmUri componentTemplateUri, TcmUri metaDataSchemaUri = null) 
    { 
     Logging.Debug("Attempting to create page in " + parentSgId.ToString()); 
     Page page = new Page(component.Session, parentSgId); 
     page.Title = component.Title; 
     page.FileName = component.Title; 
     // Add a metadata schema 
     if (metaDataSchemaUri != null) 
     { 
      TcmUri localMetaDataSchemaUri = TransformTcmUri(metaDataSchemaUri, parentSgId); 
      page.MetadataSchema = (Schema)page.Session.GetObject(localMetaDataSchemaUri); 
     } 
     // Add the CP 
     TcmUri localComponentUri = Helpers.TransformTcmUri(component.Id, parentSgId); 
     TcmUri localComponentTemplateUri = Helpers.TransformTcmUri(componentTemplateUri, parentSgId); 
     page.ComponentPresentations.Add(new ComponentPresentation(new Component(localComponentUri, component.Session), new ComponentTemplate(localComponentTemplateUri, component.Session))); 
     try 
     { 
      page.Save(true); 
      Logging.Debug("Created page successfully " + page.Id.ToString()); 
      return page.Id; 
     } 
     catch (Exception ex) 
     { 
      throw new Exception(ex.Message); 
     } 

    } 

エラー

Unable to find uuid:C42EE4FC-D2A2-49F5-92C7-BF6DCB014343:Metadata. 
Component: Tridion.ContentManager Errorcode: 0 User: EMAKINA\MTSUser 
StackTrace Information Details: at 
Bair.Tridion.Events.Utilities.Helpers.CreatePage(TcmUri parentSgId, 
Component component, TcmUri componentTemplateUri, TcmUri 
metaDataSchemaUri) [...] 

答えて

6

Quirijinによって指摘されているように、問題を保存する前にページのメタデータを設定していないという問題がありました。作業コードは以下の通りです。ページのメタデータ

if (metaDataSchemaUri != null) 
      { 
       Helpers.SetPageMetaData(metaDataSchemaUri, parentSgId, component, ref page); 
      } 

SetPageMetaData方法

protected static void SetPageMetaData(TcmUri metaDataSchemaUri, TcmUri parentSgId, Component component, ref Page page) 
     { 
     TcmUri localMetaDataSchemaUri = TransformTcmUri(metaDataSchemaUri, parentSgId); 
     page.MetadataSchema = (Schema)page.Session.GetObject(localMetaDataSchemaUri); 
     ItemFields metaFields = new ItemFields((Schema)page.Session.GetObject(localMetaDataSchemaUri)); 
     Logging.Debug("Schema title: " + page.MetadataSchema.Title); 
     // Set the page metadata 

      TextField pageTitle = (TextField)metaFields["pagetitle"]; 
      pageTitle.Value = "The page title"; 
[...] 
      KeywordField showbreadcrumb = (KeywordField)metaFields["showbreadcrumb"]; 
      showbreadcrumb.Value = new Keyword(TransformTcmUri(new TcmUri("tcm:134-12018-1024"), parentSgId), page.Session); 
[...] 
     } 
     page.Metadata = metaFields.ToXml(); 
     Logging.Debug("Page metadata set"); 
    } 
5

私は自分のイメージであなたのエラーを再現することができました。何らかの調査の後、私はその問題を理解することができました。 「uuidを見つけることができません:C42EE4FC-D2A2-49F5-92C7-BF6DCB014343:メタデータ」というエラーは、スキーマの設定はOKですが、その要素がページのXMLで見つからないことを意味します。 .Metadataも明示的に設定する必要があります!ページを保存してメタデータスキーマを追加する方法は次のとおりです。

private void SetMetadata(Page page, SaveEventArgs eventArgs, EventPhases phases) 
    { 
     try 
     { 
      Schema schema = (Schema)page.Session.GetObject("tcm:3-5806-8"); 

      if (page.MetadataSchema == null) 
      { 
       page.MetadataSchema = schema; 
       ItemFields metadata = new ItemFields(schema); 
       TextField showInNav = (TextField)metadata["showinmenu"]; 
       showInNav.Value = "No"; 
       page.Metadata = metadata.ToXml(); 
       SetPageMetadata.LogMessage("Set Page Metadata"); 
      } 
     } 
     catch (Exception e) 
     { 
      SetPageMetadata.LogMessage("An error occurred while rsetting the Page metadata:\n" + e.Message); 
     } 
    } 
+1

を設定

また、私はこれを試してみましたが、残念ながら同じエラー結果にしました。 –

+1

私の解決策を投稿する前に、あなたはそれを理解していた。/ –

+0

申し訳ありません。これを掘り下げてくれてありがとう。私はしばらくの間、私の頭を叩いただけで、解決策が出てきた;) –

1

スキーマを確認しましたか?その名前空間の値(uuid:C42EE4FC-D2A2-49F5-92C7-BF6DCB014343:メタデータ)を含んでいますか?時には、最新のスキーマを確認するために、ブラウザのキャッシュをクリアしてCMEを再起動する価値があります。

+0

名前空間の値が存在する。私は、新しいページのメタデータスキーマを作成し、代わりにこのエラー結果を使用してみました(エラーのUUIDは新しいスキーマの1つになりました)。 –

関連する問題