2012-02-29 30 views
6

Đây là trên Tridion 2011 SP1.Tridion: Lỗi khi đặt lược đồ siêu dữ liệu của trang trong hệ thống sự kiện

Tôi đang sử dụng sự kiện lưu thành phần trong hệ thống sự kiện Tridion để tạo trang tương ứng và kết hợp một số siêu dữ liệu với trang đó. Khi xác định một lược đồ, tôi nhận được các bản ghi sự kiện chỉ ra rằng UUID của lược đồ không thể được tìm thấy.

UUID có lỗi là lược đồ siêu dữ liệu tôi muốn sử dụng và tôi cũng đang sử dụng TcmUri cục bộ cho lược đồ siêu dữ liệu. Tôi đang ở một chút mất mát vào lúc này.

.NET và kết quả là lỗi dưới:

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

    } 

Lỗi

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

Trả lời

6

Vấn đề, như được chỉ ra bởi Quirijin là tôi đã không đặt siêu dữ liệu cho trang trước khi cố gắng lưu nó. Mã hoạt động bên dưới.

Thiết lập trang metadata

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

Phương pháp 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

tôi đã có thể tái tạo lỗi của bạn trong hình ảnh của riêng tôi. Sau khi một số điều tra, tôi đã có thể tìm ra vấn đề. Lỗi "Không thể tìm thấy uuid: C42EE4FC-D2A2-49F5-92C7-BF6DCB014343: Siêu dữ liệu" có nghĩa là đặt lược đồ là ok, nhưng không thể tìm thấy phần tử đó trong XML của Trang. Bạn phải đặt rõ ràng .Metadata! Dưới đây là những gì tôi đã thực hiện để lưu thành công Trang và thêm lược đồ siêu dữ liệu:

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

tôi đã cố gắng này cũng có, nhưng với kết quả báo lỗi tương tự không may. –

+1

Chết tiệt, bạn đã tìm ra nó trước khi tôi đăng giải pháp của mình ...:/ –

+0

Xin lỗi. Cảm ơn rất nhiều vì đã đào sâu vào cái này. Tôi đập đầu vào nó một lúc và giải pháp vừa xuất hiện;) –

1

Bạn đã kiểm tra lược đồ cho bất kỳ sự cố nào chưa? Nó có chứa giá trị không gian tên đó không (uuid: C42EE4FC-D2A2-49F5-92C7-BF6DCB014343: Siêu dữ liệu). Đôi khi nó là giá trị thanh toán bù trừ bộ nhớ cache của trình duyệt của bạn và khởi động lại CME để chắc chắn bạn đang xem xét lược đồ mới nhất.

+0

Giá trị không gian tên tồn tại. Tôi đã thử tạo một lược đồ siêu dữ liệu trang mới và sử dụng lược đồ siêu dữ liệu này thay vào đó nhưng với cùng một kết quả lỗi (UUID trong lỗi giờ đây là một lược đồ mới). –

Các vấn đề liên quan