This question is locked. New answers and comments are not allowed.
Hi,
What is the best way to implement an audit trail for my application. I have tried the tracker class but i cannot manage to save any object type class field. could there be a better way to approach this..
Please advice.
Thanks
What is the best way to implement an audit trail for my application. I have tried the tracker class but i cannot manage to save any object type class field. could there be a better way to approach this..
Please advice.
Thanks
9 Answers, 1 is accepted
0
Hi Lafama,
What do you mean with 'tracker'?
You can hook into the IObjectScope.Tracking events. Inside the event you can collect the data and store the old values in a new table or make a copy of your old object.
Regards,
Jan Blessenohl
the Telerik team
What do you mean with 'tracker'?
You can hook into the IObjectScope.Tracking events. Inside the event you can collect the data and store the old values in a new table or make a copy of your old object.
Regards,
Jan Blessenohl
the Telerik team
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
0
Lafama
Top achievements
Rank 1
answered on 03 Sep 2010, 05:18 AM
hi Jan
Thanks for the quick reply..nway i have already tried that but am unable to save my objs states in a the database. apparently the orm does not support the object datatype. Do you have an example {code of how i can achieve this}
Example of one of my persistent class attributes
class BussCompany
{
private int _id;
private string _name;
private IList<Bus> _buses;
private User _createdBy;
}
if i try to save the changing state of each of the following attributes i get an error @ _buses and createdby fields. Please advice
It is really urgent
Thanks
Lafama
Thanks for the quick reply..nway i have already tried that but am unable to save my objs states in a the database. apparently the orm does not support the object datatype. Do you have an example {code of how i can achieve this}
Example of one of my persistent class attributes
class BussCompany
{
private int _id;
private string _name;
private IList<Bus> _buses;
private User _createdBy;
}
if i try to save the changing state of each of the following attributes i get an error @ _buses and createdby fields. Please advice
It is really urgent
Thanks
Lafama
0
Hi Lafama,
If you want to store information about changed references or collections you have to add special code. I have just made the following very simple event handler:
With a persistent class:
Where do you get errors and of which kind?
Regards,
Jan Blessenohl
the Telerik team
If you want to store information about changed references or collections you have to add special code. I have just made the following very simple event handler:
static void Tracking_Changed(object sender, ChangeEventArgs e) { var scope = Database.GetContext(e.PersistentObject) as IObjectScope; scope.Add( new AuditTrail() { PersistentObject = Database.OID.ToString(scope.GetObjectId(e.PersistentObject)), OldValue = e.OldValue.ToString(), NewValue = e.NewValue.ToString(), Changed = DateTime.Now, }); } With a persistent class:
class AuditTrail { public string PersistentObject; public string OldValue; public string NewValue; public DateTime Changed; } Where do you get errors and of which kind?
Regards,
Jan Blessenohl
the Telerik team
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
0
Lafama
Top achievements
Rank 1
answered on 06 Sep 2010, 06:43 PM
hi,
My main concern is will this help me to track references or collections.
I have tried your code above nothing seems to work. Could you please give me a sample code on how i can track the references or collections within a given object. It is really important
(Now 7++++ days and am still waiting for a clear answer )
Seriously ??
My main concern is will this help me to track references or collections.
I have tried your code above nothing seems to work. Could you please give me a sample code on how i can track the references or collections within a given object. It is really important
(Now 7++++ days and am still waiting for a clear answer )
Seriously ??
0
Hello Lafama,
There is no explicit audit trail implementation as part of OpenAccess, we are not able to do a common implementation because the requirements are too different. Some projects just need an entry that a field has been changed and by whom, some need before and after values and some need complete copies of the data. It depends what you want to do with the information.
OpenAccess gives you access to everything you need to do your own implementation. You are getting the collection with the content before your change and the collection content of the collection after your change. You have to decide and implement what you want to store, if you want to clone the old object, just do it inside the changed event.
Because I do not know what you need I cannot provide you with a complete example. Please give us more information and a first implementation from you also helps to understand your problems.
Jan Blessenohl
the Telerik team
There is no explicit audit trail implementation as part of OpenAccess, we are not able to do a common implementation because the requirements are too different. Some projects just need an entry that a field has been changed and by whom, some need before and after values and some need complete copies of the data. It depends what you want to do with the information.
OpenAccess gives you access to everything you need to do your own implementation. You are getting the collection with the content before your change and the collection content of the collection after your change. You have to decide and implement what you want to store, if you want to clone the old object, just do it inside the changed event.
Because I do not know what you need I cannot provide you with a complete example. Please give us more information and a first implementation from you also helps to understand your problems.
Jan Blessenohl
the Telerik team
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
0
La
Top achievements
Rank 1
answered on 07 Sep 2010, 10:38 AM
hi,
Please give examples on
1. tracking the Collections before and after change
2. Storing the entire object in a database
3.tracking the references before and after change events
thanks
Please give examples on
1. tracking the Collections before and after change
2. Storing the entire object in a database
3.tracking the references before and after change events
thanks
0
Hello La,
here is my example code:
Sincerely yours,
Jan Blessenohl
the Telerik team
here is my example code:
using System; using System.Collections.Generic; using Telerik.OpenAccess; namespace AuditTrail { class Program { static void Main(string[] args) { var db = Database.Get("DatabaseConnection1"); var scope = db.GetObjectScope(); scope.Tracking.Changed += Tracking_Changed; scope.Tracking.Changing += Tracking_Changing; A a = new A(); a.Name = "orig"; a.B = new B(); a.Cs = new List<C>(); a.Cs.Add(new C()); a.Cs.Add(new C()); scope.Transaction.Begin(); scope.Add(a); scope.Transaction.Commit(); scope.Transaction.Begin(); a.Name = "changed"; a.B = new B(); a.Cs.RemoveAt(0); a.Cs.Add(new C()); scope.Transaction.Commit(); } static void Tracking_Changing(object sender, ChangeEventArgs e) { var scope = Database.GetContext(e.PersistentObject) as IObjectScope; if (e.PersistentObject is A) { // make a clone of the old object and store it in a second table if (e.WasDirty == false) scope.Add(new AClone((A)e.PersistentObject)); // store old list content if (e.FieldName == "cs") e.Tag = new List<C>(((A)e.PersistentObject).Cs); } } static void Tracking_Changed(object sender, ChangeEventArgs e) { var scope = Database.GetContext(e.PersistentObject) as IObjectScope; if (e.PersistentObject is A) { if (e.FieldName == "cs") { var oldValue = e.Tag as List<C>; var newValue = new List<C>(((A)e.PersistentObject).Cs); // what do you want to do now with these lists? } else if (e.FieldName == "b") { var oldValue1 = e.OldValue as B ; var newValue1 = e.NewValue as B; // what do you want to do now with these references? } //... } } } [Persistent] class A { private string name; private B b; private IList<C> cs; public string Name { get { return name; } set { name = value; } } public B B { get { return b; } set { b = value; } } public IList<C> Cs { get { return cs; } set { cs = value; } } } [Persistent] class AClone { private string name; private B b; private IList<C> cs; private DateTime changed; public string Name { get { return name; } set { name = value; } } public B B { get { return b; } set { b = value; } } public IList<C> Cs { get { return cs; } set { cs = value; } } public DateTime Changed { get { return changed; } set { changed = value; } } public AClone() { } public AClone(A other) { Name = other.Name; B = other.B; Cs = new List<C>(other.Cs); Changed = DateTime.Now; } } [Persistent] class B { } [Persistent] class C { } } Sincerely yours,
Jan Blessenohl
the Telerik team
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
0
Muhammad
Top achievements
Rank 1
answered on 29 Aug 2012, 09:03 AM
I am making web using Telerik Controls and now i need to have all track of database updation, insertion, deletion etc....
how can i set the Audit Trail in Telerik....?
please tell me its urgent....
how can i set the Audit Trail in Telerik....?
please tell me its urgent....
0
Hi Muhammad,
Here is an audit example that demonstrates basic auditing with OpenAccess. Do have a look at it and get back in case you need further assistance.
All the best,
Ady
the Telerik team
Here is an audit example that demonstrates basic auditing with OpenAccess. Do have a look at it and get back in case you need further assistance.
All the best,
Ady
the Telerik team
Follow @OpenAccessORM Twitter channel to be the first one to get the latest updates on new releases, tips and tricks and sneak peeks at our product labs!