Tridion: errores al configurar el esquema de metadatos de una página en el sistema de eventos

StackOverflow https://stackoverflow.com/questions/9502077

  •  14-11-2019
  •  | 
  •  

Pregunta

Esto está en tridion 2011 SP1.

Estoy usando el evento Guardar componente en el sistema de eventos de tridion para crear una página correspondiente y asociar algunos metadatos con esa página.Al especificar un esquema, recibo registros de eventos que indican que no se puede encontrar el UUID del esquema.

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

El error .NET y el error resultante están 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) [...]

¿Fue útil?

Solución

El problema, como lo señaló Quirijin fue que no estaba estableciendo los metadatos para la página antes de intentar salvarlo.El código de trabajo está a continuación.

Configuración de la página metadata

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

Otros consejos

Pude replicar su error en mi propia imagen.Después de alguna investigación pude averiguar cuál es el tema.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.Tienes que configurar explícitamente. Metadata también!Esto es lo que hice para guardar 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);
        }
    }

¿Ha revisado el esquema para cualquier problema?¿Contiene ese valor de espacio de nombres (UUID: C42EE4FC-D2A2-49F5-92C7-BF6DCB014343: metadatos).A veces vale la pena eliminar la memoria caché de su navegador y reiniciar la CME para asegurarse de que está mirando el esquema más reciente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top