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
 public CustomAuditDataItem(AuditDataItemPersistent sourceAuditDataItem, string targetObjectName)
 {
     this.sourceAuditDataItem = sourceAuditDataItem;
     this.targetObjectName    = targetObjectName;
 }