Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        private void UndeleteObject(object obj)
        {
            if (obj == null || RestoredObjects.Contains(obj))
            {
                return;
            }

            ITypeInfo objinfo = XafTypesInfo.Instance.FindTypeInfo(obj.GetType());

            UndeleteObjectCore(obj, objinfo);
            XPCollection <AuditDataItemPersistent> originalcollection = AuditedObjectWeakReference.GetAuditTrail((ObjectSpace as XPObjectSpace).Session, obj);

            if (originalcollection != null)
            {
                XPCollection <AuditDataItemPersistent> oldobjaudit = new XPCollection <AuditDataItemPersistent>(originalcollection, new BinaryOperator("OperationType", "ObjectDeleted"));
                if (oldobjaudit.Count > 0)
                {
                    RestoreObject(oldobjaudit.OrderByDescending(x => x.ModifiedOn).First());
                }
            }
        }
Ejemplo n.º 3
0
 public void Dispose()
 {
     aggregateChecked.Clear();
     RestoredObjects.Clear();
     ObjectSpace = null;
 }