This question is locked. New answers and comments are not allowed.
I have successfully implemented IInstanceCallbacks, and it is working perfectly for my logging purposes, but it would be nice to build a description based upon the fields that changed. Is there a way to access the original values for each field in during the PreStore() and PreRemove()?
3 Answers, 1 is accepted
0
Hi Tom,
You cannot access the old values of the changed fields in the PreStore() method. However you can subscribe to one of the IObjectScope events (in your case Changing) and there you can populate a list of changes that will be traversed later by the PreStore() method. For example if you need a to know the property that has been changed, the old and the new value you can have one helper class defined like this:
Now in your program you can subscribe to the changing event and implement a simple logic like this:
Now you will have a list filled with the changes you have made during your transaction. Later when you call Commit() you can traverse that list and extract those changes. When you are done you should clear the list at the end of the PreStore() method.
Greetings,
Petar
the Telerik team
Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
You cannot access the old values of the changed fields in the PreStore() method. However you can subscribe to one of the IObjectScope events (in your case Changing) and there you can populate a list of changes that will be traversed later by the PreStore() method. For example if you need a to know the property that has been changed, the old and the new value you can have one helper class defined like this:
public class HistoryHelperClass { private string propertyThatChanged; public string PropertyThatChanged { get { return propertyThatChanged; } set { propertyThatChanged = value; } } private object oldValue; public object OldValue { get { return oldValue; } set { oldValue = value; } } private object newValue; public object NewValue { get { return newValue; } set { newValue = value; } } }public static List<HistoryHelperClass> listOfChanges = new List<HistoryHelperClass>(); static void Main(string[] args) { IObjectScope scope = ObjectScopeProvider1.ObjectScope(); scope.Tracking.Changing += new ChangeEventHandler(Tracking_Changing); scope.Transaction.Begin(); //some logic performed scope.Transaction.Commit(); } static void Tracking_Changing(object sender, ChangeEventArgs e) { listOfChanges.Add(new HistoryHelperClass { PropertyThatChanged = e.FieldName, OldValue = e.OldValue, NewValue = e.NewValue }); }Greetings,
Petar
the Telerik team
Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
0
Tom
Top achievements
Rank 1
answered on 11 Nov 2009, 05:17 AM
Petar,
I understand hooking the Tracking_Changing and building the list of changes, but I am a little unclear as to when I would traverse the list. It doesn't appear to be available in the PreStore methods of any persistent classes that have been changed.
I understand hooking the Tracking_Changing and building the list of changes, but I am a little unclear as to when I would traverse the list. It doesn't appear to be available in the PreStore methods of any persistent classes that have been changed.
0
Hello Tom,
You will need to apply the correct access modifiers for your list (depending on the project setup). If you have defined your list as static you should be able to access it via the [name of the class in which the list is defined].[the name of the list].
If you are still facing difficulties please contact us and we will prepare a sample project for you.
Greetings,
Petar
the Telerik team
Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
You will need to apply the correct access modifiers for your list (depending on the project setup). If you have defined your list as static you should be able to access it via the [name of the class in which the list is defined].[the name of the list].
If you are still facing difficulties please contact us and we will prepare a sample project for you.
Greetings,
Petar
the Telerik team
Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.