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?
Wird der Code ausgelöst, wenn das Ereignis localize auftritt? –
Ja, ich protokolliere eine Menge Ausgaben, einschließlich der XML-Komponente, die korrekt aussieht. – richeym