2012-02-29 10 views
6

To jest na systemie Tridion 2011 SP1.Tridion: Błędy podczas ustawiania schematu metadanych strony w systemie zdarzeń

Używam zdarzenia składowania komponentu w systemie zdarzeń Tridion do utworzenia odpowiedniej strony i powiązania niektórych metadanych z tą stroną. Podczas określania schematu otrzymuję dzienniki zdarzeń wskazujące, że nie można znaleźć identyfikatora UUID schematu.

Identyfikator UUID, którego dotyczy błąd, dotyczy schematu metadanych, którego chcę użyć, a także korzystam z lokalnego schematu TcmUri dla schematu metadanych. W tej chwili jestem trochę zagubiony.

.NET i wynikające błędu są poniżej:

Kod

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

    } 

Błąd

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

Odpowiedz

6

Problem, jak zauważyłem w Quirijin, polegał na tym, że nie ustawiałem metadanych strony przed próbą jej zapisania. Działający kod znajduje się poniżej.

Ustawienie sposobu 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

udało mi się powtórzyć swój błąd w moim obrazie. Po pewnym dochodzeniu udało mi się ustalić, o co chodzi. Błąd "Nie można znaleźć uuid: C42EE4FC-D2A2-49F5-92C7-BF6DCB014343: Metadata" oznacza, że ​​ustawienie schematu jest prawidłowe, ale nie może znaleźć tego elementu w kodzie XML strony. Musisz również jawnie ustawić .Metadata! Oto co zrobiłem, aby pomyślnie zapisać stronę i dodać schemat metadanych:

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

Próbowałem to również, ale z takim samym skutkiem błędu niestety metadanych strona

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

. –

+1

Cholera, wymyśliłeś to zanim zdążyłem opublikować moje rozwiązanie ...:/ –

+0

Przepraszam. Wielkie dzięki za wkopanie się w tę. Uderzyłem w nią głową przez chwilę, a rozwiązanie właśnie się pojawiło;) –

1

Czy sprawdziłeś schemat dla jakichkolwiek problemów? Czy zawiera tę wartość przestrzeni nazw (uuid: C42EE4FC-D2A2-49F5-92C7-BF6DCB014343: Metadata). Czasami warto wyczyścić pamięć podręczną przeglądarki i zrestartować CME, aby mieć pewność, że patrzysz na najnowszy schemat.

+0

Istnieje przestrzeń nazw. Próbowałem już utworzyć nowy schemat metadanych strony i użyć tego zamiast tego, ale z tym samym wynikiem błędu (UUID w błędzie jest teraz jednym z nowego schematu). –

Powiązane problemy