Пример #1
0
        public override List <AmplaRecordChanges> DetectChanges()
        {
            List <AmplaRecordChanges> recordChanges = new List <AmplaRecordChanges>();

            if (amplaAuditRecord.Changes != null)
            {
                foreach (AmplaAuditSession session in amplaAuditRecord.Changes)
                {
                    List <string>          fieldList = new List <string>();
                    List <AmplaAuditField> fields    = new List <AmplaAuditField>();
                    foreach (var auditField in session.Fields.Where(IncludeField))
                    {
                        fields.Add(auditField);
                        fieldList.Add(viewProperties.GetFieldDisplayName(auditField.Name));
                    }
                    if (fields.Count > 0)
                    {
                        string             fieldNames = string.Join(", ", fieldList);
                        AmplaRecordChanges changes    = new AmplaRecordChanges
                        {
                            VersionDateTime = session.EditedTime,
                            User            = session.User,
                            Operation       = Operation,
                            Changes         = fields.ToArray(),
                            Display         = string.Format("{0} modified record ({1})", session.User, fieldNames)
                        };
                        recordChanges.Add(changes);
                    }
                }
            }
            return(recordChanges);
        }
        public override List <AmplaRecordChanges> DetectChanges()
        {
            List <AmplaRecordChanges> recordChanges = new List <AmplaRecordChanges>();

            if (amplaRecord.GetValueOrDefault(deletedDisplayName, false))
            {
                if (amplaAuditRecord.Changes != null)
                {
                    foreach (AmplaAuditSession session in amplaAuditRecord.Changes)
                    {
                        AmplaAuditField isDeleted = session.Fields.FirstOrDefault(f => f.Name == deletedName);
                        if (isDeleted != null)
                        {
                            AmplaRecordChanges changes = new AmplaRecordChanges
                            {
                                VersionDateTime = session.EditedTime,
                                User            = session.User,
                                Operation       = Operation,
                                Changes         = new [] { new AmplaAuditField()
                                                           {
                                                               Name          = deletedName,
                                                               OriginalValue = "False",
                                                               EditedValue   = "True"
                                                           } },
                                Display = string.Format("{0} deleted record", session.User)
                            };
                            recordChanges.Add(changes);
                        }
                    }
                }
            }
            return(recordChanges);
        }
        public bool Bind()
        {
            versions.ModelName = modelProperties.GetModelName();

            AmplaRecordHistory <TModel> history       = new AmplaRecordHistory <TModel>(amplaRecord, auditRecord, viewProperties);
            List <AmplaRecordChanges>   recordChanges = history.Reconstruct();

            ModelVersion <TModel>[] modelVersions = new ModelVersion <TModel> [recordChanges.Count];

            TModel clonedModel = modelProperties.CloneModel(currentModel);

            for (int i = 0; i < modelVersions.Length; i++)
            {
                AmplaRecordChanges recordChange = recordChanges[i];
                bool isCurrent = i == (modelVersions.Length - 1);
                modelVersions[i] = new ModelVersion <TModel>(isCurrent, clonedModel)
                {
                    Version     = i + 1,
                    User        = recordChange.User,
                    VersionDate = recordChange.VersionDateTime,
                    Display     = recordChange.Display
                };
            }

            TModel current = currentModel;

            for (int i = modelVersions.Length - 1; i >= 0; i--)
            {
                var modelVersion = modelVersions[i];
                modelVersion.Model = modelProperties.CloneModel(current);
                AmplaRecordChanges recordChange = recordChanges[i];

                foreach (var field in recordChange.Changes)
                {
                    viewProperties.UpdateModel(current, field.Name, field.OriginalValue, false);
                }
                if (i == 0)
                {
                    modelVersion.Model = modelProperties.CloneModel(current);
                }
            }

            foreach (var modelVersion in modelVersions)
            {
                versions.Versions.Add(modelVersion);
            }
            return(true);
        }