private void WriteAuditRecord(AuditTrailOperations action, string description, string error = null) { if (!string.IsNullOrWhiteSpace(currentUserId)) { _auditTrailMgr.CreateAuditRecord(action, description ?? "Execute", DateTime.Now, error, currentUserId); } }
/// <summary> /// Execute <paramref name="executor"/> synchronously. /// </summary> /// <param name="useTransaction">Use transaction to execute the operation. It will automatically rollback if error occurs</param> /// <param name="operation">The audit trail action</param> /// <param name="unitOfWork"></param> /// <param name="executor"></param> /// <param name="operationDescription"></param> /// <returns></returns> protected void ExecuteVoid(bool useTransaction, AuditTrailOperations operation, IUnitOfWork unitOfWork, Func <Task> executor, string operationDescription = null) { Execute <object>(useTransaction, operation, unitOfWork, () => { executor(); return(null); }, operationDescription); }
public void CreateAuditRecord(AuditTrailOperations operation, string operationDescription, DateTime operationDateTime, string error, string userId) { AuditTrail auditRecord = new AuditTrail() { Error = error, Operation = operation.ToString(), OperationDate = operationDateTime, OperationDescription = operationDescription, UserId = userId }; InsertAuditRecord(auditRecord); }
/// <summary> /// Execute <paramref name="executor"/> /// </summary> /// <typeparam name="TResult"></typeparam> /// <param name="useTransaction">Use transaction to execute the operation. It will automatically rollback if error occurs</param> /// <param name="operation">The audit trail action</param> /// <param name="unitOfWork"></param> /// <param name="executor"></param> /// <param name="operationDescription"></param> /// <returns></returns> protected async Task <TResult> ExecuteAsync <TResult>(bool useTransaction, AuditTrailOperations operation, IUnitOfWork unitOfWork, Func <Task <TResult> > executor, string operationDescription = null) { TResult tResult; try { try { if (useTransaction) { unitOfWork.BeginTransaction(); } TResult tResult1 = await executor(); await unitOfWork.SaveChangesAsync(); if (useTransaction) { unitOfWork.Commit(); } tResult = tResult1; } catch (Exception ex) { if (useTransaction && unitOfWork.GetCurrentTransaction() != null) { unitOfWork.Rollback(); } errorText = ex.Message; throw new ApplicationException(ex.Message); } } finally { try { WriteAuditRecord(operation, operationDescription, errorText); } catch (Exception ex) { Debug.WriteLine(ex.Message); Console.Write(ex.Message); Trace.WriteLine(ex.Message); } } return(tResult); }