public void RestoreObject(AuditDataItemPersistent audit) { object currentobj = audit.AuditedObject.Target; if (!RestoredObjects.Contains(currentobj)) { RestoredObjects.Add(currentobj); } else { return; } ITypeInfo currenttypeinfo = XafTypesInfo.Instance.FindTypeInfo(currentobj.GetType()); foreach (AuditDataItemPersistent item in ObjectSpace.CreateCollection(typeof(AuditDataItemPersistent), CriteriaOperator.Parse("(AuditedObject = ? OR OldObject.TargetKey = ?) AND ModifiedOn >= ? AND (OperationType = 'ObjectDeleted' OR OperationType = 'RemovedFromCollection')", audit.AuditedObject, XPWeakReference.KeyToString(currenttypeinfo.KeyMember.GetValue(currentobj)), audit.ModifiedOn), new List <SortProperty>() { new SortProperty("ModifiedOn", DevExpress.Xpo.DB.SortingDirection.Ascending) })) { if (item.OperationType == "ObjectDeleted") { UndeleteObjectCore(currentobj, currenttypeinfo); } else if (item.OperationType == "RemovedFromCollection") { object oldobj = item.OldObject.Target; UndeleteObject(oldobj); object associatedobject = item.AuditedObject.Target; UndeleteObject(associatedobject); ITypeInfo associatedobjectinfo = XafTypesInfo.Instance.FindTypeInfo(associatedobject.GetType()); IList collection = associatedobjectinfo.FindMember(item.PropertyName).GetValue(associatedobject) as IList; collection.Add(oldobj); RestoreAggregateObjects(oldobj); RestoreAggregateObjects(associatedobject); } } RestoreAggregateObjects(currentobj); }
public CustomAuditDataItem(AuditDataItemPersistent sourceAuditDataItem, string targetObjectName) { this.sourceAuditDataItem = sourceAuditDataItem; this.targetObjectName = targetObjectName; }