示例#1
0
        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);
        }
示例#2
0
        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;
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
文件: Node.cs 项目: AyreYang/Workflow
        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));
                }
            }
        }
示例#6
0
 protected abstract IRWorkflow NewWorkflowData(IRTask task);