2012-07-17 8 views
6

¿Cómo se puede anular el valor de campo de un componente utilizando el controlador de eventos? Cuando tengo el fragmento de código a continuación, no hay ningún error al guardar el Componente. Pero los cambios de contenido realizados por el propietario del Evento no se reflejan en el Componente. Espero que el campo de valor único "tamaño" tenga "blabla ..." como el valor.Reemplazo del contenido del componente SDL Tridion mediante los controladores de eventos

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

Respuesta

9

necesita actualizar la propiedad de contenido con la cadena XML, de la siguiente manera:

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

la razón de esto es porque la colección ItemFields es una colección llamada individual, así que hacer un cambio en ese país no actualiza directamente el componente. –

+0

En las API heredadas, podría trabajar con una colección separada y luego usarla para volver a establecer la propiedad de colección relevante en el objeto 'principal'. Esto se ve como el enfoque equivalente usando el servicio central, ¿verdad? –

+1

Si te refieres a TOM, no creo que la colección de campos estuviera separada entonces. Algo así como 'Component.Fields ("heading"). Value (1) = "Test": Component.Save (True)' funcionaría. Ah, días dorados ... – Quirijn

Cuestiones relacionadas