public static Row PrepareAuditUpdate(string schema, AuditSaveRequest request) { var fld = IoC.Resolve <IAuditLogRow>(schema); var data = new AuditUpdateData <Row>(); var oldRow = (Row)request.OldEntity; var newRow = (Row)request.NewEntity; data.Old = oldRow.CreateNew(); data.Old.TrackAssignments = true; data.New = oldRow.CreateNew(); data.New.TrackAssignments = true; foreach (var field in request.AuditFields) { if (newRow.IsAssigned(field) && field.IndexCompare(oldRow, newRow) != 0) { var strField = field as StringField; if (strField == null || !strField[oldRow].IsTrimmedSame(strField[newRow])) { if (!field.IsNull(oldRow)) { field.Copy(oldRow, data.Old); } if (!field.IsNull(newRow)) { field.Copy(newRow, data.New); } } } } if (request.FileFieldInfos != null) { if (request.FilesToDelete == null) { throw new ArgumentNullException("FilesToDelete"); } foreach (var file in request.FileFieldInfos) { if (file.Filename[oldRow].IsTrimmedSame(file.Filename[newRow])) { continue; } if (!file.Filename[oldRow].IsTrimmedEmpty()) { file.OriginalName.Copy(oldRow, data.Old); file.Size.Copy(oldRow, data.Old); AuditFile(data.Old, file, request.FileSubFolder, request.FilesToDelete); } if (!file.Filename[newRow].IsTrimmedEmpty()) { file.OriginalName.Copy(newRow, data.New); file.Size.Copy(newRow, data.New); AuditFile(data.New, file, request.FileSubFolder, request.FilesToDelete); } } } if (!data.Old.IsAnyFieldAssigned) { data.Old = null; } if (!data.New.IsAnyFieldAssigned) { data.New = null; } string oldAuditData, newAuditData; if (data.Old == null) { oldAuditData = null; } else { oldAuditData = data.Old.ToJson(); } if (data.New == null) { newAuditData = null; } else { newAuditData = data.New.ToJson(); } var audit = ((Row)fld).CreateNew(); audit.TrackAssignments = true; fld.EntityTypeIdField[audit] = request.EntityType; fld.EntityIdField[audit] = request.OldEntity.IdField[oldRow]; fld.ParentTypeIdField[audit] = request.ParentTypeId; fld.OldParentIdField[audit] = request.OldParentId; fld.NewParentIdField[audit] = request.NewParentId; fld.DateField[audit] = DateTime.UtcNow; fld.AuditTypeIdField[audit] = (Int32)AuditType.Update; fld.OldAuditDataField[audit] = oldAuditData; fld.NewAuditDataField[audit] = newAuditData; var loggingRow = request.NewEntity as ILoggingRow; if (loggingRow != null) { fld.UserIdField[audit] = loggingRow.UpdateUserIdField[(Row)request.NewEntity]; } if (fld.UserIdField[audit] == null) { fld.UserIdField[audit] = (int)SecurityHelper.CurrentUserId; } return(audit); }
public static Row PrepareAuditUpdate(string schema, AuditSaveRequest request) { #if COREFX var fld = Dependency.Resolve<IAuditLogRow>(); #else var fld = Dependency.Resolve<IAuditLogRow>(schema); #endif var data = new AuditUpdateData<Row>(); var oldRow = (Row)request.OldEntity; var newRow = (Row)request.NewEntity; data.Old = oldRow.CreateNew(); data.Old.TrackAssignments = true; data.New = oldRow.CreateNew(); data.New.TrackAssignments = true; foreach (var field in request.AuditFields) { if (newRow.IsAssigned(field) && field.IndexCompare(oldRow, newRow) != 0) { var strField = field as StringField; if (ReferenceEquals(null, strField) || !strField[oldRow].IsTrimmedSame(strField[newRow])) { if (!field.IsNull(oldRow)) field.Copy(oldRow, data.Old); if (!field.IsNull(newRow)) field.Copy(newRow, data.New); } } } if (request.FileFieldInfos != null) { if (request.FilesToDelete == null) throw new ArgumentNullException("FilesToDelete"); foreach (var file in request.FileFieldInfos) { if (file.Filename[oldRow].IsTrimmedSame(file.Filename[newRow])) continue; if (!file.Filename[oldRow].IsTrimmedEmpty()) { file.OriginalName.Copy(oldRow, data.Old); file.Size.Copy(oldRow, data.Old); AuditFile(data.Old, file, request.FileSubFolder, request.FilesToDelete); } if (!file.Filename[newRow].IsTrimmedEmpty()) { file.OriginalName.Copy(newRow, data.New); file.Size.Copy(newRow, data.New); AuditFile(data.New, file, request.FileSubFolder, request.FilesToDelete); } } } if (!data.Old.IsAnyFieldAssigned) data.Old = null; if (!data.New.IsAnyFieldAssigned) data.New = null; string oldAuditData, newAuditData; if (data.Old == null) oldAuditData = null; else oldAuditData = data.Old.ToJson(); if (data.New == null) newAuditData = null; else newAuditData = data.New.ToJson(); var audit = ((Row)fld).CreateNew(); audit.TrackAssignments = true; fld.EntityTypeIdField[audit] = request.EntityType; fld.EntityIdField[audit] = request.OldEntity.IdField[oldRow]; fld.ParentTypeIdField[audit] = request.ParentTypeId; fld.OldParentIdField[audit] = request.OldParentId; fld.NewParentIdField[audit] = request.NewParentId; fld.DateField[audit] = DateTime.UtcNow; fld.AuditTypeIdField[audit] = (Int32)AuditType.Update; fld.OldAuditDataField[audit] = oldAuditData; fld.NewAuditDataField[audit] = newAuditData; var loggingRow = request.NewEntity as ILoggingRow; if (loggingRow != null) fld.UserIdField[audit] = loggingRow.UpdateUserIdField[(Row)request.NewEntity]; if (fld.UserIdField[audit] == null) fld.UserIdField[audit] = (long)Authorization.UserId.TryParseID(); return audit; }