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); }
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); }
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; } }