예제 #1
0
        private void SaveExecute()
        {
            if (SelectType == null)
            {
                MessageHelper.ShowMessageBox("请选择类型!");
                return;
            }

            NSTemplateInfo template = new NSTemplateInfo();

            template.Id           = Guid.NewGuid();
            template.TemplateName = TemplateName;
            template.TemplateText = TemplateXML;
            template.TemplateType = SelectType.TemplateType;
            string msg = _client.NewTemplate(template);

            if (string.IsNullOrEmpty(msg))
            {
                MessageHelper.ShowMessageBox("保存成功!");
                if (WindowAction != null)
                {
                    WindowAction();
                }
            }
            else
            {
                MessageHelper.ShowMessageBox(msg);
            }
        }
예제 #2
0
        public string NewTemplate(NSTemplateInfo nsTemplateInfo)
        {
            if (string.IsNullOrEmpty(nsTemplateInfo.TemplateName) ||
                string.IsNullOrWhiteSpace(nsTemplateInfo.TemplateText) ||
                string.IsNullOrWhiteSpace(nsTemplateInfo.TemplateType))
            {
                return("模板名称/模板内容/模板类型不能为空!");
            }


            TemplateRepository templateRespository = new TemplateRepository(Context);


            string version        = templateRespository.GetTemplateVersion(nsTemplateInfo.TemplateName, nsTemplateInfo.TemplateType);
            int    tempateVersion = -1;

            int.TryParse(version, out tempateVersion);
            nsTemplateInfo.Version = "1.0.0.1";//  (++tempateVersion).ToString();


            if (templateRespository != null)
            {
                templateRespository.Add(nsTemplateInfo);
                templateRespository.SaveChage();
            }

            return(string.Empty);
        }
        private void btnSelectTemplate_Click(object sender, RoutedEventArgs e)
        {
            var templateInfo = grdTemplates.SelectedItem as EntityCheckedHelperGeneric <NSTemplateInfo>;

            if (templateInfo != null)
            {
                this.SelectTemplateInfo = templateInfo.TEntity;
                DialogResultExt         = true;
                this.Close();
            }
            else
            {
                MessageHelper.ShowMessageBox("请选择要调试的模板!");
            }
        }
예제 #4
0
        protected override void Seed(MainWorkflowUnitOfWork unitOfWork)
        {
            // {"列名 'Id' 无效。\r\n列名 'TemplteName' 无效。\r\n列名 'TemplateType' 无效。"}
            var book = new NSTemplateInfo(Guid.NewGuid(), "测试", "<xml ?>");

            unitOfWork.NSTemplateInfos.Add(book);
            unitOfWork.Database.CompatibleWithModel(false);
            unitOfWork.NSTemplateTypes.Add(new NSTemplateType()
            {
                Id = Guid.NewGuid(), TemplateType = "Test", TemplateDes = "Test Des", Version = "1.0.0.1"
            });
            unitOfWork.NSNodeInfos.Add(new NSNodeInfo()
            {
                Id = Guid.NewGuid()
            });
            unitOfWork.SaveChanges();
        }
예제 #5
0
        public override void EndBuiness(TransInfoDto transInfoDto)
        {
            // 启动新流程,记录到流程的ID,任务ID等信息
            IPersistence p = transInfoDto.Persistence;
            // 结束当前点状态
            NSNodeInfo     nsNodeInfo = p.GetActivityByID(transInfoDto.InstanceNodeId);
            NSInstanceInfo nsInstance = p.GetInsanceInfo(nsNodeInfo.InstanceId);
            NSTemplateInfo nsTemplate = p.GetTemplateInfo(nsInstance.TemplateId);

            p.FinishActivity(nsNodeInfo);
            //TODO: 产生新的节点,如果在回归之后继续执行逻辑,则要有全局的传递,以后在进行添加
            var nextActivities = XmlHelper.GetAllNextActivities(nsTemplate.TemplateText, nsNodeInfo.NodeId);

            if (nextActivities != null)
            {
                new RoutingHost().RoutingFactory(nextActivities.ToList(), transInfoDto);
            }
            base.EndBuiness(transInfoDto);
        }
예제 #6
0
        public Guid StartWorkflowInfo(StartInfo_DTO startInfo, ref string errorInfos)
        {
            try
            {
                HashSet <Guid> newActivities = new HashSet <Guid>();

                NSTaskInfo nsTaskInfo = new NSTaskInfo();
                nsTaskInfo.Id         = Guid.NewGuid();
                nsTaskInfo.TaskName   = startInfo.TaskName;
                nsTaskInfo.TaskType   = startInfo.TaskType;
                nsTaskInfo.RunState   = RunStateConst.RUNNING;
                nsTaskInfo.CreateTime = DateTime.Now;

                NSInstanceInfo nsIntanceInfo = new NSInstanceInfo();
                nsIntanceInfo.Id           = Guid.NewGuid();
                nsIntanceInfo.TaskId       = nsTaskInfo.Id;
                nsIntanceInfo.StartTime    = DateTime.Now;
                nsIntanceInfo.TemplateId   = startInfo.TemplateId;
                nsIntanceInfo.TemplateName = startInfo.TemplateName;
                nsIntanceInfo.RunState     = RunStateConst.RUNNING;

                // StartWorkflow
                TemplateRepository t            = new TemplateRepository(Context);
                NSTemplateInfo     templateInfo = t.Get(startInfo.TemplateId);
                if (templateInfo == null)
                {
                    errorInfos = "模板不能为空!";
                    return(Guid.Empty);
                }

                string   templateXML = templateInfo.TemplateText;
                XElement doc         = XElement.Parse(templateInfo.TemplateText);
                var      nodeInfos   = from c in doc.Elements("DesignerItems").Elements("DesignerItem")
                                       where c.Element("BType").Value == "Start"
                                       select c;
                // start node
                var startNode = nodeInfos.First();
                // start node id
                string id = startNode.Element("ID").Value;
                // start node next nodes
                var custs = from c in doc.Elements("Connections").First().Elements("Connection")
                            where c.Element("SourceID").Value == id
                            select c.Element("SinkID").Value;

                // get all nodes startnode link
                foreach (var item in custs)
                {
                    // get nodeinfo
                    var nodeInfo = from c in doc.Elements("DesignerItems").Elements("DesignerItem")
                                   where c.Element("ID").Value == item
                                   select c;

                    //  create node info if need
                    if (TransRouting.CreateNodeInfo(nodeInfo.First()))
                    {
                        NSNodeInfo nsNodeInfo = new NSNodeInfo();
                        nsNodeInfo.Id         = Guid.NewGuid();
                        nsNodeInfo.InstanceId = nsIntanceInfo.Id;
                        nsNodeInfo.TaskId     = nsTaskInfo.Id;
                        nsNodeInfo.NodeId     = Guid.Parse(item.ToString());
                        nsNodeInfo.NodeName   = nodeInfo.First().Element("Name").Value;
                        nsNodeInfo.NodeId     = Guid.Parse(nodeInfo.First().Element("ID").Value);
                        nsNodeInfo.RunState   = RunStateConst.RUNNING;
                        nsNodeInfo.CreateTime = DateTime.Now;
                        Context.NSNodeInfos.Add(nsNodeInfo);
                    }
                    else
                    {
                        // only prepare taskid and instanceid
                        NSNodeInfo nsNodeInfo = new NSNodeInfo();
                        nsNodeInfo.Id         = Guid.NewGuid();
                        nsNodeInfo.InstanceId = nsIntanceInfo.Id;
                        nsNodeInfo.TaskId     = nsTaskInfo.Id;
                        // running routting
                        TransRouting.Routing(doc, nodeInfo.First(), nsNodeInfo, Context, newActivities);
                    }
                }

                Context.NsInstanceInfos.Add(nsIntanceInfo);
                Context.NsTaskInfos.Add(nsTaskInfo);
                Context.SaveChanges();

                errorInfos = string.Empty;
                return(nsTaskInfo.Id);
            }
            catch (Exception e)
            {
                errorInfos = e.ToString();
                return(Guid.Empty);
            }

            return(Guid.Empty);
        }