2012-12-03 12 views
7

Sto scrivendo un codice eventi personalizzati in SDL Tridion 2011 SP 1-1 che modifica campo di un componente su salvare o localizzare, durante la fase di inizializzazione:personalizzato codice di eventi per aggiornare un componente Localizzare

var localize = EventSystem.Subscribe<Component, LocalizeEventArgs>(OnComponentLocalize, EventPhases.Initiated); 
var save = EventSystem.Subscribe<Component, SaveEventArgs>(OnComponentSave, EventPhases.Initiated); 
_subscriptions.Add(localize); 
_subscriptions.Add(save); 

L'evento di salvataggio funziona correttamente, ma lo stesso codice non funziona sull'evento localize: tutte le modifiche apportate all'XML del componente vengono eliminate. Sto utilizzando il codice piuttosto semplice:

var fields = new ItemFields(component.Content, component.Schema); 
var translatedSummary = fields["summary"] as MultiLineTextField; 
translatedSummary.Value = translation; 
component.Content = fields.ToXml(); 

L'unico modo per ottenere le modifiche persistono sulla localizzazione è che se lo faccio in un post/Commit fase e fare un check-out/aggiornamento & salvare/check-in Questo non è eccezionale poiché ci vogliono alcuni secondi per eseguire & in una transazione separata dopo che il componente è stato localizzato. Qualcuno sa di un modo più elegante per fare questo?

+0

Il codice scatta quando si verifica l'evento localize? –

+0

Sì, sto registrando un sacco di output, incluso il componente XML che sembra corretto. – richeym

risposta

5

Penso che l'azione di localizzazione cambierà solo lo stato del modello dell'elemento e forniremo la versione n. 1 dell'articolo nella nuova pubblicazione. Non penso che tu possa apportare modifiche a quell'elemento senza creare una nuova versione (ad esempio la versione 2).

Questo sembra essere quello che hai trovato. Penso che la tua unica opzione (che hai già scoperto) sarà quella di modificare e ri-salvare l'oggetto dopo che si è verificata la localizzazione.

Problemi correlati