/// <summary> /// 执行失败 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public virtual void OnRunFail(Object sender, WorkFlowEventArgs e) { if (RunFail != null) { RunFail(this, e); } }
/// <summary> /// 执行成功 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public virtual void OnRunSuccess(Object sender, WorkFlowEventArgs e) { if (RunSuccess != null) { RunSuccess(this, e); //提交成功后触发成功事件 } }
/// <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); } }
/// <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); } }