2012-02-29 9 views
6

Esto está en Tridion 2011 SP1.Tridion: errores al establecer el esquema de metadatos de una página en el sistema de eventos

Estoy utilizando el evento de guardar componentes en el sistema de eventos Tridion para crear una página correspondiente y asociar algunos metadatos con esa página. Al especificar un esquema, obtengo registros de eventos que indican que no se puede encontrar el UUID del esquema.

El UUID que está en el error es para el esquema de metadatos que quiero usar, y también estoy usando un TcmUri local para el esquema de metadatos. Estoy un poco perdido en este momento.

El .NET y error resultantes son a continuación:

Código

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

    } 

error

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) [...] 

Respuesta

6

El problema, como lo señaló Quirijin fue que no estaba configurando los metadatos de la página antes de intentar guardarla. El código de trabajo está abajo.

Configuración de la página de metadatos

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

El método 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

yo era capaz de replicar su error en mi propia imagen. Después de algunas investigaciones, pude descubrir cuál era el problema. El error "No se puede encontrar uuid: C42EE4FC-D2A2-49F5-92C7-BF6DCB014343: metadatos" significa que la configuración del esquema está bien, pero no puede encontrar ese elemento en el XML de la página. ¡También debe establecer explícitamente .Metadata! Esto es lo que hice para salvar con éxito una página y agregar el esquema de metadatos:

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

He intentado esto también, pero con el mismo resultado de error por desgracia. –

+1

Maldita sea, lo descubriste antes de que lograra publicar mi solución ...:/ –

+0

Lo siento. Muchas gracias por profundizar en este. Golpeé mi cabeza contra eso por un tiempo y la solución acaba de aparecer;) –

1

¿Ha revisado el esquema de ningún problema? ¿Contiene ese valor de espacio de nombres (uuid: C42EE4FC-D2A2-49F5-92C7-BF6DCB014343: metadatos). A veces vale la pena borrar el caché de su navegador y reiniciar el CME para asegurarse de que está viendo el último esquema.

+0

El valor del espacio de nombres existe. Intenté crear un nuevo esquema de metadatos de página y usar este en su lugar pero con el mismo resultado de error (El UUID en el error ahora es el del nuevo esquema). –

Cuestiones relacionadas