Exemple #1
0
 /// <summary>
 /// 执行失败
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 public virtual void OnRunFail(Object sender, WorkFlowEventArgs e)
 {
     if (RunFail != null)
     {
         RunFail(this, e);
     }
 }
Exemple #2
0
 /// <summary>
 /// 执行成功
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 public virtual void OnRunSuccess(Object sender, WorkFlowEventArgs e)
 {
     if (RunSuccess != null)
     {
         RunSuccess(this, e); //提交成功后触发成功事件
     }
 }
Exemple #3
0
        /// <summary>
        /// 流程启动,草稿和启动两种状态
        /// </summary>
        public string Start()
        {
            try
            {
                if (string.IsNullOrEmpty(WorkFlowInstanceId))
                {
                    WorkFlowInstanceId = BusinessLogic.NewGuid();
                }
                if (string.IsNullOrEmpty(WorkTaskInstanceId))
                {
                    WorkTaskInstanceId = BusinessLogic.NewGuid();
                }
                if (string.IsNullOrEmpty(OperatorInstanceId))
                {
                    OperatorInstanceId = BusinessLogic.NewGuid();
                }
                if (string.IsNullOrEmpty(UserId))
                {
                    return(WorkFlowConst.IsNullUserIdCode);
                }
                if (CurrentUser == null)
                {
                    return(WorkFlowConst.IsNullUser);
                }
                if (string.IsNullOrEmpty(WorkFlowId))
                {
                    return(WorkFlowConst.IsNullWorkFlowIdCode);
                }
                if (string.IsNullOrEmpty(WorkTaskId))
                {
                    return(WorkFlowConst.IsNullWorkTaskIdCode);
                }
                if (string.IsNullOrEmpty(CommandName))
                {
                    return(WorkFlowConst.IsNullCommandNameCode);
                }
                if (string.IsNullOrEmpty(WorkFlowNo))
                {
                    return(WorkFlowConst.IsNullWorkFlowNoCode);
                }
                if (string.IsNullOrEmpty(WorkflowInsCaption))
                {
                    return(WorkFlowConst.IsNullWorkflowInsCaption);
                }

                if (RDIFrameworkService.Instance.WorkFlowHelperService.IsTaskInsCompleted(this.CurrentUser, WorkTaskInstanceId))
                {
                    return(WorkFlowConst.InstanceIsCompletedCode);//流程实例已完成,不能重复提交
                }
                //检查是否已经保存过草稿。如果已经保存过则不需要再创建实例,只保存业务表单数据,
                //此处的处理与交互节点的处理不同,需要加判断。

                if (RDIFrameworkService.Instance.WorkFlowInstanceService.WorkTaskInstanceExist(this.CurrentUser, WorkTaskInstanceId) == false)//实例不存在,说明未保存过
                {
                    //创建流程实例
                    var workflowInstance = new WorkFlowInstanceEntity()
                    {
                        WorkFlowId        = WorkFlowId,
                        WorkFlowInsId     = WorkFlowInstanceId,
                        WorkFlowNo        = WorkFlowNo,
                        FlowInsCaption    = WorkflowInsCaption,
                        Description       = Description,
                        Priority          = Priority,
                        Status            = Status,
                        NowTaskId         = WorkTaskId,//当前流程所处流程模板的位置
                        IsSubWorkflow     = IsSubWorkflow ? 1: 0,
                        MainWorkflowInsId = MainWorkflowInsId,
                        MainWorktaskId    = MainWorktaskId,
                        MainWorkflowId    = MainWorkflowId,
                        MainWorktaskInsId = MainWorktaskInsId
                    };

                    RDIFrameworkService.Instance.WorkFlowInstanceService.CreateWorkFlowInstance(this.CurrentUser, workflowInstance);

                    //创建启动节点的任务实例
                    var workTaskInstance = new WorkTaskInstanceEntity
                    {
                        WorkFlowId     = WorkFlowId,
                        WorkTaskId     = WorkTaskId,
                        WorkFlowInsId  = WorkFlowInstanceId,
                        WorkTaskInsId  = WorkTaskInstanceId,
                        TaskInsCaption = RDIFrameworkService.Instance.WorkFlowTemplateService.GetWorkTaskCaption(this.CurrentUser, WorkTaskId)
                    };

                    if (IsSubWorkflow)//是子流程调用,需要放到未认领任务中
                    {
                        workTaskInstance.PreviousTaskId = WorkTaskInstanceId;
                        workTaskInstance.Status         = "1";
                    }
                    else//不是子流程调用,启动节点直接放入已认领任务中
                    {
                        workTaskInstance.PreviousTaskId = WorkTaskInstanceId;//开始节点的前一节点等于自己
                        workTaskInstance.Status         = "2";
                    }

                    RDIFrameworkService.Instance.WorkFlowInstanceService.CreateWorkTaskInstance(this.CurrentUser, workTaskInstance);

                    //创建启动节点的处理人实例
                    var operatorInstance = new OperatorInstanceEntity
                    {
                        OperatorInsId = OperatorInstanceId,
                        WorkFlowId    = WorkFlowId,
                        WorkTaskId    = WorkTaskId,
                        WorkFlowInsId = WorkFlowInstanceId,
                        WorkTaskInsId = WorkTaskInstanceId,
                        UserId        = UserId,
                        OperRealtion  = 0,
                        OperContent   = UserId
                    };
                    var userEnity = RDIFrameworkService.Instance.UserService.GetEntity(this.CurrentUser, UserId);
                    var userName  = userEnity == null || string.IsNullOrEmpty(userEnity.UserName)
                        ? "未找到处理人"
                        : userEnity.UserName;

                    operatorInstance.OperContentText = userName;
                    operatorInstance.OperType        = 3;
                    if (IsSubWorkflow) //是子流程调用,需要放到未认领任务中
                    {
                        operatorInstance.OperStatus = "0";
                    }
                    else //不是子流程调用,启动节点直接放入已认领任务中
                    {
                        operatorInstance.OperStatus = "3";
                    }
                    RDIFrameworkService.Instance.WorkFlowInstanceService.CreateOperatorInstance(this.CurrentUser, operatorInstance);
                }

                if (!IsDraft)//不是草稿状态,提交任务
                {
                    var result = RDIFrameworkService.Instance.WorkFlowHelperService.CreateNextTaskInstance(this.CurrentUser, UserId, WorkFlowId, WorkTaskId, WorkFlowInstanceId, WorkTaskInstanceId, OperatorInstanceId, CommandName);
                    if (result != WorkFlowConst.SuccessCode)
                    {
                        var e = new WorkFlowEventArgs(this)
                        {
                            ResultMsg = result
                        };
                        OnRunFail(this, e);
                        return(result);
                    }
                    else
                    {
                        var e = new WorkFlowEventArgs(this)
                        {
                            ResultMsg = WorkFlowConst.SuccessMsg
                        };
                        OnRunSuccess(this, e);
                    }
                }
                return(WorkFlowConst.SuccessCode);
            }
            catch (Exception ex)
            {
                var msg = string.Format(WorkFlowConst.EngineErrorMsg, ex.Message);
                var e   = new WorkFlowEventArgs(this)
                {
                    ResultMsg = msg
                };
                OnRunFail(this, e);
                return(WorkFlowConst.OtherErrorCode);
            }
        }
Exemple #4
0
        /// <summary>
        /// 任务提交
        /// </summary>
        /// <returns></returns>
        public string Run()
        {
            try
            {
                if (string.IsNullOrEmpty(UserId))
                {
                    return(WorkFlowConst.IsNullUserIdCode);
                }
                if (string.IsNullOrEmpty(WorkFlowId))
                {
                    return(WorkFlowConst.IsNullWorkFlowIdCode);
                }
                if (string.IsNullOrEmpty(WorkTaskId))
                {
                    return(WorkFlowConst.IsNullWorkTaskIdCode);
                }
                if (string.IsNullOrEmpty(WorkFlowInstanceId))
                {
                    return(WorkFlowConst.IsNullWorkFlowInsIdCode);
                }
                if (string.IsNullOrEmpty(WorkTaskInstanceId))
                {
                    return(WorkFlowConst.IsNullWorkTaskInsIdCode);
                }
                if (string.IsNullOrEmpty(OperatorInstanceId))
                {
                    return(WorkFlowConst.IsNullOperatorInsIdCode);
                }
                if (string.IsNullOrEmpty(CommandName))
                {
                    return(WorkFlowConst.IsNullCommandNameCode);
                }

                if (RDIFrameworkService.Instance.WorkFlowHelperService.IsTaskInsCompleted(this.CurrentUser, WorkTaskInstanceId))
                {
                    return(WorkFlowConst.InstanceIsCompletedCode);                                                                                                            //流程实例已完成,不能重复提交
                }
                var result = RDIFrameworkService.Instance.WorkFlowHelperService.CreateNextTaskInstance(this.CurrentUser, UserId, WorkFlowId, WorkTaskId, WorkFlowInstanceId, WorkTaskInstanceId, OperatorInstanceId, CommandName);
                if (result != WorkFlowConst.SuccessCode)
                {
                    var e = new WorkFlowEventArgs(this)
                    {
                        ResultMsg = result
                    };
                    OnRunFail(this, e);
                    return(result);
                }
                else
                {
                    var e = new WorkFlowEventArgs(this)
                    {
                        ResultMsg = WorkFlowConst.SuccessMsg
                    };
                    OnRunSuccess(this, e);
                }
                return(WorkFlowConst.SuccessCode);
            }
            catch (Exception ex)
            {
                var msg = string.Format(WorkFlowConst.EngineErrorMsg, ex.Message);
                var e   = new WorkFlowEventArgs(this)
                {
                    ResultMsg = msg
                };
                OnRunFail(this, e);
                return(WorkFlowConst.OtherErrorCode);
            }
        }