Ejemplo n.º 1
0
        private void CreateNextInstanceTask(WfRunner runner, WfResult result, WF_Task nextTask)
        {
            var iTask = new WF_InstanceTask();

            iTask.InitializeId();
            iTask.DCreate       = DateTime.Now;
            iTask.Prev_Id       = result.InstanceTask.Id;
            iTask.AppInstanceId = runner.AppInstanceId;
            iTask.Process_Id    = result.Process.Id;
            iTask.Process_Name  = result.Process.Name;
            iTask.Task_Id       = nextTask.Id;
            iTask.Task_Name     = nextTask.Name;
            iTask.Status        = WfTaskStatus.Pending;
            iTask.Audit         = WfAuditState.Pending;
            iTask.Action        = WfActionType.Forward;
            iTask.CreateUser_Id = runner.AC.User.Id;
            iTaskService.Insert(iTask);
        }
Ejemplo n.º 2
0
        private void CreateNextInstanceTask(WfRunner runner, WfResult result, WF_Task backTask)
        {
            var iTask = new WF_InstanceTask();

            iTask.InitializeId();
            iTask.DCreate       = DateTime.Now;
            iTask.Prev_Id       = result.InstanceTask.Id;
            iTask.AppInstanceId = runner.AppInstanceId;
            iTask.Process_Id    = result.Process.Id;
            iTask.Process_Name  = result.Process.Name;
            iTask.Task_Id       = backTask.Id;
            iTask.Task_Name     = backTask.Name;
            iTask.Status        = WfTaskStatus.Dealing;
            iTask.DFetch        = DateTime.Now;
            iTask.Audit         = result.Instance.StartTask_Id == backTask.Id ? WfAuditState.UnSend : WfAuditState.Pending;
            iTask.Action        = WfActionType.Backward;
            iTask.CreateUser_Id = runner.AC.User.Id;
            iTask.User_Id       = result.BackInstanceTask.User_Id;
            iTask.User_Name     = result.BackInstanceTask.User_Name;
            iTaskService.Insert(iTask);
        }
Ejemplo n.º 3
0
        public void Save(long id, string xml)
        {
            var xmlDoc = new XmlDocument();

            xml = HttpUtility.UrlDecode(xml);
            xmlDoc.LoadXml(xml);

            // 定义根元素
            var root = xmlDoc.DocumentElement;

            Session.BeginTransaction();
            try
            {
                // 获得当前流程并保存流程图
                var process = Get(id);
                process.Xml = xml;
                Update(process);

                // 清除该流程之前配置的跳帧
                routeService.Delete(process.Id);

                // 保存工作流的节点(活动
                var taskIds = new List <long>();
                var tasks   = root.SelectNodes("//Task");
                foreach (XmlNode node in tasks)
                {
                    var taskNo = int.Parse(node.Attributes["id"].Value);
                    var task   = taskService.Get(process.Id, taskNo);
                    var isNew  = false;
                    if (task == null)
                    {
                        isNew = true;
                        task  = new WF_Task();
                        task.InitializeId();
                        task.DCreate    = DateTime.Now;
                        task.Process_Id = process.Id;
                        task.TaskNo     = taskNo;
                    }

                    task.Name      = node.Attributes.GetValue("label", "");
                    task.Url       = node.Attributes.GetValue("url", "");
                    task.TaskType  = node.Attributes.GetValue("type", WfTaskType.Default);
                    task.RouteIn   = node.Attributes.GetValue("in", WfRouteType.Default);
                    task.RouteOut  = node.Attributes.GetValue("out", WfRouteType.Default);
                    task.AutoFetch = node.Attributes.GetValue("fetch", 1) > 0;

                    // 保存
                    if (isNew)
                    {
                        taskService.Insert(task);
                    }
                    else
                    {
                        taskService.Update(task);
                    }
                    taskIds.Add(task.Id);

                    // 保存工作流单元权限配置
                    //foreach (XmlElement roleNode in node.SelectNodes("//role"))
                    //{
                    //    var taskRole = new WF_TaskRole();
                    //    taskRole.InitializeId();
                    //    taskRole.Task_Id = task.Id;
                    //    taskRole.Role_Id = roleNode.Attributes.GetValue<long>("role");
                    //    taskRoleService.Insert(taskRole);
                    //}
                }

                // 保存工作流的步骤
                var lines = root.SelectNodes("//Line");
                foreach (XmlNode node in lines)
                {
                    // 创建
                    var route = new WF_Route();
                    route.InitializeId();
                    route.DCreate    = DateTime.Now;
                    route.Process_Id = process.Id;
                    route.FromTask   = node.FirstChild.Attributes.GetValue <int>("source");
                    route.ToTask     = node.FirstChild.Attributes.GetValue <int>("target");
                    route.RuleSql    = node.Attributes.GetValue("rule", "");
                    routeService.Insert(route);
                }

                // 清除要删除的节点
                taskService.Delete(process.Id, taskIds);

                Session.Commit();
            }
            catch
            {
                Session.Rollback();
                throw;
            }
        }