2012-12-03 8 views
7

Ich schreibe einige benutzerdefinierte Ereignisse Code in SDL Tridion 2011 SP 1-1 zu aktualisieren, die auf speichern oder lokalisieren, während der Initialisierungsphase eine Komponente des Feldes modifiziert:Benutzerdefinierte Ereignisse Code eine Komponente auf localize

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

Das Ereignis save funktioniert einwandfrei, aber derselbe Code funktioniert nicht beim Ereignis localize - Änderungen am XML der Komponente werden verworfen. Ich bin mit ziemlich einfach Code:

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

Die einzige Art, wie ich die Änderungen auf die Lokalisierung bestehen bekommen kann, ist, wenn ich es in einem Beitrag tun/Phase Commit und einen Scheck tun out/update & speichern/Check in Dies ist nicht großartig, da es einige Sekunden dauert, um es auszuführen & tut es in einer separaten Transaktion, nachdem die Komponente lokalisiert wurde. Kennt jemand eine elegantere Weise, dies zu tun?

+0

Wird der Code ausgelöst, wenn das Ereignis localize auftritt? –

+0

Ja, ich protokolliere eine Menge Ausgaben, einschließlich der XML-Komponente, die korrekt aussieht. – richeym

Antwort

5

Ich denke, die Aktion der Lokalisierung ändert nur den Blueprint-Status des Elements, und geben Sie Version # 1 des Elements in der neuen Publikation. Ich glaube nicht, dass Sie Änderungen an diesem Objekt vornehmen können, ohne eine neue Version (d. H. Version 2) zu erstellen.

Dies scheint zu sein, was Sie gefunden haben. Ich denke, Ihre einzige Option (die Sie bereits entdeckt haben) besteht darin, das Objekt zu modifizieren und erneut zu speichern, nachdem die Lokalisierung stattgefunden hat.