コード例 #1
0
        /// <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));
            }
        }
コード例 #2
0
        /// <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("当前状态不允许您进行撤销操作,或你不是该项目上次审批动作的执行者,没有权限进行撤销操作!只有执行者本人才能执行撤销");
            }
        }