2012-07-17 36 views
6

Giá trị trường của thành phần có thể được ghi đè bằng Trình xử lý sự kiện như thế nào? Khi tôi có đoạn mã dưới đây, không có lỗi trong khi lưu thành phần. Nhưng những thay đổi nội dung do Event hanlder thực hiện không được phản ánh lại trong Component. Tôi mong đợi trường giá trị đơn "size" có giá trị "blabla ...".Nội dung ghi đè của thành phần SDL Tridion bằng Trình xử lý sự kiện

// Call to Subscribe the events 
EventSystem.Subscribe<Component, SaveEventArgs>(ComponentSaveInitiatedHandler, 
               EventPhases.Initiated); 

private void ComponentSaveInitiatedHandler(Component component, 
              SaveEventArgs args, EventPhases phases) 
{ 
    if (component.Schema.Title == "XYZ") 
    { 
     ItemFields Fields = new ItemFields(component.Content, component.Schema); 
     SingleLineTextField textField = (SingleLineTextField)Fields["size"]; 
     textField.Value = "blabla..."; 
    } 
} 

Trả lời

9

Bạn cần phải cập nhật thuộc tính Tự tin với chuỗi XML, như sau:

ItemFields Fields = new ItemFields(component.Content, component.Schema); 
SingleLineTextField textField = (SingleLineTextField)Fields["size"]; 
textField.Value = "blabla..."; 
component.Content = Fields.ToXml(); 
+2

lý do cho điều này là bởi vì bộ sưu tập ItemFields là một bộ sưu tập cái gọi là tách ra, vì vậy làm cho một sự thay đổi trong đó không cập nhật trực tiếp thành phần. –

+0

Trong các API cũ, bạn có thể làm việc với một bộ sưu tập tách rời và sau đó sử dụng nó để đặt thuộc tính bộ sưu tập liên quan một lần nữa trên đối tượng 'cha mẹ'. Điều này giống như cách tiếp cận tương đương bằng cách sử dụng dịch vụ cốt lõi, phải không? –

+1

Nếu bạn có nghĩa là TOM, tôi không nghĩ rằng bộ sưu tập các lĩnh vực đã được tách ra sau đó. Một cái gì đó như 'Component.Fields ("tiêu đề") .Giá trị (1) = "Test": Component.Save (True)' sẽ chỉ hoạt động. Ah, ngày vàng .. – Quirijn

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