/// <summary> /// Executes the specified instance. /// </summary> /// <param name="instance">The instance.</param> /// <param name="activity">The activity.</param> public void Execute(WorkflowInstance instance, ActivityBase activity) { if (instance == null) { throw new ArgumentNullException("instance"); } if (activity == null) { throw new ArgumentNullException("activity"); } if (string.IsNullOrEmpty(activity.UserId)) { activity.UserId = GetService <IIdentityService>().GetUserIdentity().GetUserId(); } IWorkflowSecurityService service = GetService <IWorkflowSecurityService>(); ApprovalRole role = service.GetActionRole(instance, activity.UserId, activity.EventName); activity.UserApprovalRole = role.Name; if (service.CanDoAction(instance, activity.EventName)) { ITransactionService transactionService = GetService <ITransactionService>(); transactionService.BeginTransaction(); try { instance.InternalExecute(activity); transactionService.CommitTransaction(); } catch (Exception ep) { transactionService.RollbackTransaction(); throw ep; } } else { throw new WorkflowExecuteExeception(string.Format("不能执行本次操作:流程当前状态\"{0}\"不能进行\"{1}\"操作,或您不具备执行该操作的权限.", ((StateMachineWorkflowInstance)instance).CurrentState.Description)); } }
/// <summary> /// Undoes the specified instance. /// </summary> /// <param name="instance">The instance.</param> public void Undo(WorkflowInstance instance) { ITransactionService transactionService = GetService <ITransactionService>(); IWorkflowSecurityService security = GetService <IWorkflowSecurityService>(); if (security.CanCancel(instance)) { transactionService.BeginTransaction(); try { instance.InternalUndo(); } catch (Exception ep) { transactionService.RollbackTransaction(); throw ep; } } else { throw new WorkflowExecuteExeception("当前状态不允许您进行撤销操作,或你不是该项目上次审批动作的执行者,没有权限进行撤销操作!只有执行者本人才能执行撤销"); } }