public string Execute(IRTask task) { var queryResult = new List <Dictionary <string, object> >(); SqlScope.UsingConnection(task.ConnectionString, scope => { using (var reader = scope .CreateSimple(new QueryOptions(task.QueryTimeOut), $"{task.Query}") .ExecuteReader()) { while (reader.Read()) { var fields = new Dictionary <string, object>(); for (int i = 0; i < reader.FieldCount; i++) { fields.Add(reader.GetName(i), reader[i]); } queryResult.Add(fields); } } }); string jsString = JsonConvert.SerializeObject(queryResult); return(jsString); }
internal void LoadData(TaskAction action, IRTask task) { IRWorkflow workflow = null; if (action == TaskAction.Send) { workflow = NewWorkflowData(task); } else { if (!task.InstID.HasValue) { throw new ArgumentException("Argument(task.InstID) is null!", "task"); } workflow = FetchWorkflowData(task.InstID.Value); } if (workflow == null) { throw new ApplicationException("Laoding WorkFlow Data Failed!"); } ClearData(); Task = task; Data = workflow; }
protected override IRWorkflow NewWorkflowData(IRTask task) { var workflow = new WF_RT_Workflow(); workflow.ID = Guid.NewGuid(); workflow.WorkflowID = task.WorkflowID; workflow.BizCode = task.BizCode; workflow.OwnerID = task.CreatedBy; workflow.CreatedBy = task.CreatedBy; workflow.CreatedOn = task.CreatedOn; workflow.ProcStatus = 0; workflow.TaskID = null; workflow.LastModifiedBy = task.CreatedBy; workflow.LastModifiedOn = task.CreatedOn; return(workflow); }
public void ProcessTask(IRTask task) { if (task == null) { throw new ArgumentNullException("task", "Argument(task) is null!"); } if (!this.Id.Equals(task.WorkflowID)) { throw new ApplicationException(string.Format("Task data error, wrong workflow id(WorkflowID:{0}/{1})!", this.Id, task.WorkflowID)); } var user = task.CreatedBy; var action = task.Action == (int)TaskAction.Send ? task.InstID.HasValue ? TaskAction.Approve : TaskAction.Send : (TaskAction)task.Action; this.Context.LoadData(action, task); Context.SaveData(user, task.ID); if (WorkflowStatus == WorkflowStatus.Aborted || WorkflowStatus == WorkflowStatus.Error) { throw new ApplicationException(string.Format("Workflow status error, wrong task action(WorkflowID:{0};WorkflowStatus:{1})!", this.Id, WorkflowStatus)); } if (action == TaskAction.Abort) { //更新流程状态 Context.UpdateWorkflowStatus(user, WorkflowStatus.Aborted); } else { var node = (TaskAction)task.Action == TaskAction.Send ? StartNode : Nodes.FirstOrDefault(n => n.Id.Equals(Context.Nodes.First(rn => rn.ID.Equals(task.NodeID)).NodeID)); if (node == null) { throw new ApplicationException(string.Format("Task data error, no such node(RTNodeID:{0})!", task.NodeID)); } node.Process(action, task); //更新流程状态 Context.UpdateWorkflowStatus(user, WorkflowStatus); } //提交到数据库 Context.SaveData(user, null); }
internal void Process(TaskAction action, IRTask task) { if (task == null) { throw new ArgumentNullException("task", "Argument(task) is null!"); } if (!CanInput) { if (action != TaskAction.None) { throw new NodeProcessException(this, "不能进入该节点!"); } return; } var user = task.CreatedBy; var status0 = this.Status; switch (action) { case TaskAction.None: //自动生成的Task var approvers = GetApprovers(task.Variables); if (approvers.Length == 0) { //缺省审批 Context.CreateNormalNodeData(user, Id, null, null); } else { Context.CreateNormalNodeData(user, Id, null, null, approvers); } break; case TaskAction.Send: //首次发起 Context.CreateStartNodeData(user, Id, task.Comment, task.Parameter); break; case TaskAction.Approve: //外部生成task, 通过 case TaskAction.Reject: //外部生成task, 拒绝 switch (NodeStatus) { case NodeStatus.Processing: Context.UpdateDetailData(user, Data.ID, task.DetailID.Value, ConvertDetailStatusFromAction(action), task.Comment, task.Parameter); break; case NodeStatus.None: throw new NodeProcessException(this, "没到该节点审批!"); case NodeStatus.Disable: throw new NodeProcessException(this, "该节点处于无效状态,暂时不能审批!"); case NodeStatus.Approved: case NodeStatus.Rejected: throw new NodeProcessException(this, "该节点已经完成审批!"); case NodeStatus.Error: throw new NodeProcessException(this, "该节点状态目前有错误!"); } break; } //更新节点状态 var status = CalculateStatus(); if (status != status0) { ResetStatus(); } Context.UpdateNodeStatus(user, Data.ID, NodeStatus); //发邮件提醒用户当前操作处理情况 //走到一下节点 var nodes = GetOutputNodes(task.Variables); if (nodes != null && nodes.Length > 0) { foreach (var node in nodes) { node.Process(TaskAction.None, Context.CreateTaskData(user, TaskAction.None)); } } }
protected abstract IRWorkflow NewWorkflowData(IRTask task);