public IdVersionModel AddNewWorkflow(WorkflowInfo model, WorkflowEngine workflowEngine, List <TaskNameModel> taskNames) { var xtasks = new XElement(xn + "Tasks"); if (model.Tasks != null) { foreach (var task in model.Tasks) { int taskId = task.Id; string taskName = string.IsNullOrEmpty(task.Name) ? string.Empty : task.Name; string taskDesc = string.IsNullOrEmpty(task.Description) ? string.Empty : task.Description; bool isTaskEnabled = task.IsEnabled; var xtask = new XElement(xn + "Task" , new XAttribute("id", taskId) , new XAttribute("name", taskName) , new XAttribute("description", taskDesc) , new XAttribute("enabled", isTaskEnabled.ToString().ToLower()) , new XAttribute("isCommon", task.IsCommon == null ? false : task.IsCommon) ); var settings = task.Settings; if (settings != null) { foreach (var setting in settings) { string settingName = string.IsNullOrEmpty(setting.Name) ? string.Empty : setting.Name; string settingValue = string.IsNullOrEmpty(setting.Value) ? string.Empty : setting.Value; var xsetting = new XElement(xn + "Setting" , new XAttribute("name", settingName) ); if (!string.IsNullOrEmpty(settingValue)) { xsetting.SetAttributeValue("value", settingValue); } if (settingName == "selectFiles" || settingName == "selectAttachments") { if (!string.IsNullOrEmpty(settingValue)) { xsetting.SetAttributeValue("value", settingValue); } } else { xsetting.SetAttributeValue("value", settingValue); } xtask.Add(xsetting); } } xtasks.Add(xtask); } } var xGraph = new XElement(xn + "ExecutionGraph"); if (model.Graph.NodeDataArray != null) { xGraph = new GraphCompatibility.GraphCompatibility( taskNames, model.Tasks, workflowEngine.WorkflowsFolder, model.Name) .DesignExecutionGraph(model.Graph); SaveJsonGraph(model.Graph, workflowEngine.WorkflowsFolder, model.Name + "_0"); } var xwf = new XElement(xn + "Workflow" , new XAttribute("id", (Convert.ToInt64(GetLastWorkflowId()) + 1).ToString()) , new XAttribute("name", model.Name) , new XAttribute("description", string.IsNullOrEmpty(model.Description) ? string.Empty : model.Description) , new XElement(xn + "Settings" , new XElement(xn + "Setting" , new XAttribute("name", "launchType") , new XAttribute("value", model.LaunchType.ToString().ToLower())) , new XElement(xn + "Setting" , new XAttribute("name", "enabled") , new XAttribute("value", model.IsEnabled.ToString().ToLower())) , new XElement(xn + "Setting" , new XAttribute("name", "period") , new XAttribute("value", TimeSpan.Parse(string.IsNullOrEmpty(model.Period) ? "00.00:00:00" : model.Period).ToString(@"dd\.hh\:mm\:ss"))) , new XElement(xn + "Setting" , new XAttribute("name", "version") , new XAttribute("value", 0)) , new XElement(xn + "Setting" , new XAttribute("name", "deadLine") , new XAttribute("value", model.DeadLine.ToString())) ) , xtasks, xGraph ); var xdoc = new XDocument(); xwf.Save(_configuration.WorkflowsHistoryFolder + model.Name + "_" + "0" + ".xml"); xwf.Save(_configuration.WorkflowsFolder + model.Name + "_" + "0" + ".xml"); return(new IdVersionModel { Version = "0", Id = GetLastWorkflowId() }); }
public IdVersionModel EditWorkflow(WorkflowInfo model, WorkflowEngine workflowEngine, List <TaskNameModel> taskNames) { var wf = workflowEngine.GetWorkflow(model.Id, model.Version); if (wf != null) { var xdoc = wf.XDoc; xdoc.Root.Attribute("id").Value = model.Id.ToString(); xdoc.Root.Attribute("name").Value = model.Name; xdoc.Root.Attribute("description").Value = model.Description == null ? string.Empty : model.Description; TimeSpan workflowPeriod = TimeSpan.Parse(string.IsNullOrEmpty(model.Period) ? "00.00:00:00" : model.Period); xdoc.Root.XPathSelectElement("wf:Settings/wf:Setting[@name='enabled']", wf.XmlNamespaceManager).Attribute("value").Value = model.IsEnabled.ToString().ToLower(); xdoc.Root.XPathSelectElement("wf:Settings/wf:Setting[@name='launchType']", wf.XmlNamespaceManager).Attribute("value").Value = model.LaunchType.ToString().ToLower(); xdoc.Root.XPathSelectElement("wf:Settings/wf:Setting[@name='version']", wf.XmlNamespaceManager).Attribute("value").Value = (model.Version).ToString(); xdoc.Root.XPathSelectElement("wf:Settings/wf:Setting[@name='deadLine']", wf.XmlNamespaceManager).Attribute("value").Value = model.DeadLine.ToString();; xdoc.Root.XPathSelectElement("wf:Settings/wf:Setting[@name='period']", wf.XmlNamespaceManager).Attribute("value").Value = workflowPeriod.ToString(@"dd\.hh\:mm\:ss"); var xtasks = xdoc.Root.Element(wf.XNamespaceWf + "Tasks"); xtasks.Elements(wf.XNamespaceWf + "Task").Remove(); if (model.Tasks != null) { foreach (var task in model.Tasks) { int taskId = task.Id; string taskName = string.IsNullOrEmpty(task.Name) ? string.Empty : task.Name; string taskDesc = string.IsNullOrEmpty(task.Description) ? string.Empty : task.Description; bool isTaskEnabled = task.IsEnabled; var xtask = new XElement(wf.XNamespaceWf + "Task" , new XAttribute("id", taskId) , new XAttribute("name", taskName) , new XAttribute("description", taskDesc) , new XAttribute("enabled", isTaskEnabled.ToString().ToLower()) , new XAttribute("isCommon", task.IsCommon) ); if (task.Settings != null) { foreach (var setting in task.Settings) { string settingName = string.IsNullOrEmpty(setting.Name) ? string.Empty : setting.Name; string settingValue = string.IsNullOrEmpty(setting.Value) ? string.Empty : setting.Value; var xsetting = new XElement(wf.XNamespaceWf + "Setting", new XAttribute("name", settingName)); xsetting.SetAttributeValue("value", settingValue); xtask.Add(xsetting); } } xtasks.Add(xtask); } } var xGraph = xdoc.Root.Element(xn + "ExecutionGraph"); if (model.Graph.NodeDataArray.Any()) { if (xGraph != null) { xGraph.Remove(); } xGraph = new GraphCompatibility.GraphCompatibility(taskNames, model.Tasks, workflowEngine.WorkflowsFolder, model.Name + "_" + (model.Version)) .DesignExecutionGraph(model.Graph); xdoc.Root.Add(xGraph); SaveJsonGraph(model.Graph, workflowEngine.WorkflowsFolder, model.Name + "_" + model.Version); } var outStream = System.IO.File.CreateText(model.Path); xdoc.Save(outStream); var path = workflowEngine.WorkflowsFolder + "\\" + model.Name + "_" + model.Version + ".xml"; var outStreamRoot = System.IO.File.CreateText(path); xdoc.Save(outStreamRoot); outStreamRoot.Close(); outStream.Close(); } return(new IdVersionModel { Id = model.Id.ToString(), Version = (model.Version).ToString() }); }