2012-07-17 13 views
6

Come è possibile sovrascrivere un valore di campo di un componente utilizzando Event Handler? Quando ho il frammento di codice qui sotto, non c'è errore durante il salvataggio del componente. Tuttavia, le modifiche del contenuto apportate dall'hander dell'evento non vengono riflesse nel componente. Prevedo che la "dimensione" del campo del valore singolo abbia "blabla ..." come valore.Sovrascrittura del contenuto del componente Tridion SDL utilizzando i gestori di eventi

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

risposta

9

è necessario aggiornare la proprietà Content con la stringa XML, come segue:

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

la ragione di questo è perché la collezione ItemFields è un cosiddetto indipendente di raccolta, in modo da fare un cambiamento in là non aggiorna direttamente il componente. –

+0

Nelle API legacy è possibile lavorare con una raccolta indipendente e quindi utilizzarla per impostare nuovamente la proprietà della raccolta pertinente sull'oggetto "padre". Questo sembra l'approccio equivalente che utilizza il servizio principale, giusto? –

+1

Se intendi il TOM, non penso che la raccolta dei campi sia stata staccato. Qualcosa come "Component.Fields (" heading "). Value (1) =" Test ": Component.Save (True)" funzionerebbe. Ah, giorni d'oro .. – Quirijn

Problemi correlati