2012-02-29 29 views
6

這是Tridion 2011 SP1上的錯誤。Tridion:在事件系統中設置頁面元數據模式時出錯

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

回答

6

正如Quirijin指出的那樣,問題在於我沒有在嘗試保存頁面之前設置頁面的元數據。工作代碼如下。

設置頁面的元數據

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

我可以複製你的錯誤在我自己的形象。經過一番調查後,我能夠弄清楚問題所在。錯誤「無法找到uuid:C42EE4FC-D2A2-49F5-92C7-BF6DCB014343:元數據」表示設置架構正常,但無法在頁面的XML中找到該元素。您還必須明確設置。元數據!以下是我爲成功保存頁面並添加元數據模式所做的操作:

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

我也試了這一點,但遺憾的是具有相同的錯誤結果。 – 2012-03-01 09:26:28

+1

該死的,你想出來之前,我設法發佈我的解決方案...:/ – 2012-03-01 11:38:15

+0

對不起。非常感謝你深入挖掘這一個。我猛撞了一會兒,解決方案剛剛彈出;) – 2012-03-01 15:24:51

1

您是否檢查過架構中的任何問題?它是否包含該名稱空間值(uuid:C42EE4FC-D2A2-49F5-92C7-BF6DCB014343:元數據)。有時候值得清理瀏覽器緩存並重新啓動CME以確保您正在查看最新的模式。

+0

命名空間值存在。我已經嘗試創建一個新的頁面元數據模式,並使用這一個,而是使用相同的錯誤結果(錯誤中的UUID現在是新模式之一)。 – 2012-03-01 09:27:34

相關問題