Tridion: ошибки при настройке схемы метаданных страницы в системе событий - PullRequest
6 голосов
/ 29 февраля 2012

Это на Tridion 2011 SP1.

Я использую событие сохранения компонента в системе событий 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) [...]

Ответы [ 3 ]

6 голосов
/ 01 марта 2012

Проблема, как указал Кириджин, заключалась в том, что я не устанавливал метаданные для страницы, прежде чем пытаться ее сохранить. Рабочий код ниже.

Настройка метаданных страницы

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 голосов
/ 29 февраля 2012

Мне удалось повторить вашу ошибку в моем собственном изображении. После некоторого расследования мне удалось выяснить, в чем проблема. Ошибка «Невозможно найти uuid: C42EE4FC-D2A2-49F5-92C7-BF6DCB014343: Метаданные» означает, что настройка схемы выполнена успешно, но не удается найти этот элемент в 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 голос
/ 29 февраля 2012

Вы проверили схему на наличие проблем? Содержит ли это значение пространства имен (uuid: C42EE4FC-D2A2-49F5-92C7-BF6DCB014343: метаданные). Иногда стоит очистить кеш браузера и перезапустить CME, чтобы убедиться, что вы смотрите последнюю схему.

...