2012-02-29 6 views
6

Questo è su Tridion 2011 SP1.Tridion: errori durante l'impostazione dello schema di metadati di una pagina nel sistema eventi

Sto utilizzando l'evento di salvataggio del componente nel sistema di eventi Tridion per creare una pagina corrispondente e associare alcuni metadati a tale pagina. Quando si specifica uno schema, vengono visualizzati registri eventi che indicano che non è possibile trovare l'UUID dello schema.

L'UUID che si trova nell'errore è lo schema dei metadati che desidero utilizzare e sto anche utilizzando un TcmUri locale per lo schema dei metadati. Al momento sono un po 'in perdita.

Il NET e di errore risultante sono di seguito:

Codice

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

    } 

errore

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

risposta

6

Il problema, come sottolineato da Quirijin, era che non stavo impostando i metadati per la pagina prima di tentare di salvarlo. Il codice di lavoro è sotto.

Impostazione della pagina di metadati

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

Il metodo 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

sono stato in grado di replicare l'errore a mia immagine. Dopo alcune indagini sono stato in grado di capire quale fosse il problema. L'errore "Impossibile trovare uuid: C42EE4FC-D2A2-49F5-92C7-BF6DCB014343: Metadata" significa che l'impostazione dello schema è ok, ma non è in grado di trovare quell'elemento nell'XML della pagina. Devi anche impostare esplicitamente .Metadata! Ecco cosa ho fatto per salvare correttamente una pagina e aggiungere lo schema dei metadati:

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

ho provato anche questo, ma con lo stesso risultato di errore, purtroppo. –

+1

Dannazione, l'hai capito prima che riuscissi a pubblicare la mia soluzione ...:/ –

+0

Mi dispiace. Grazie mille per aver scavato in questo. Ho sbattuto la testa contro di esso per un po 'e la soluzione è saltata fuori;) –

1

Avete controllato lo schema per eventuali problemi? Contiene quel valore del namespace (uuid: C42EE4FC-D2A2-49F5-92C7-BF6DCB014343: Metadata). A volte vale la pena di svuotare la cache del browser e riavviare la CME per accertarsi che si stia guardando all'ultimo schema.

+0

Il valore dello spazio dei nomi esiste. Ho provato a creare uno schema di metadati di una nuova pagina e ad usarlo, ma con lo stesso risultato di errore (l'UUID nell'errore è ora quello del nuovo schema). –

Problemi correlati