Пример #1
0
        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()
            });
        }
Пример #2
0
        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()
            });
        }