2012-07-17 60 views
6

如何使用事件處理程序重寫組件的字段值?當我有下面的代碼片段時,保存組件時沒有錯誤。但Event hanlder完成的內容更改不會反映回Component中。我期望單值字段「size」具有「blabla ...」作爲值。使用事件處理程序重寫SDL Tridion組件的內容

// 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..."; 
    } 
} 

回答

9

您需要更新XML字符串的內容屬性,如下所示:

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

這樣做的原因是因爲ItemFields集合是一個所謂的分離採集,所以使得在那裏的變化不直接更新組件。 – 2012-07-17 07:53:16

+0

在傳統的API中,您可以使用分離的集合,然後使用它在「父」對象上再次設置相關的集合屬性。這看起來像使用核心服務的等效方法,對嗎? – 2012-07-18 12:58:26

+1

如果你的意思是TOM,那麼我認爲字段集合是分離的。就像'Component.Fields(「heading」)。Value(1)=「Test」:Component.Save(True)'就會起作用。啊,金色的日子.. – Quirijn 2012-07-19 12:45:38

相關問題