コード例 #1
0
 public WFNodeDefInst GetStartNode()
 {
     //if (WFNodeDefInst.Count(a => a.WFNodeType == WFNodeType.Start.ToString()) != 1)
     //{
     //    Logger.GetCurMethodLog().Debug("流程id" + Id + ",开始节点不为1");
     //}
     return(WFNodeDefInst.FirstOrDefault(a => a.WFNodeType == WFNodeType.Start.ToString()));
 }
コード例 #2
0
        public WFDefInst CreateInst()
        {
            WFDefInst defInst = new WFDefInst();
            var       dic     = this.ToDictionary();

            ConvertHelper.UpdateEntity(defInst, dic);
            defInst.Id               = GuidHelper.CreateTimeOrderID();
            defInst.WFDefId          = this.Id;
            defInst.WFNodeDefInst    = new List <WFNodeDefInst>();
            defInst.WFRoutingDefInst = new List <WFRoutingDefInst>();

            foreach (var node in WFNodeDef)
            {
                WFNodeDefInst nDefInst = new WFNodeDefInst();
                var           tmp      = node.ToDictionary();
                ConvertHelper.UpdateEntity(nDefInst, tmp, false);
                nDefInst.WFDefInstId = defInst.Id; //不需要,否则反而加不进去
                nDefInst.WFDefInst   = defInst;    // 不需要,否则反而加不进去
                defInst.WFNodeDefInst.Add(nDefInst);
            }

            foreach (var routine in WFRoutingDef)
            {
                WFRoutingDefInst rDefInst = new WFRoutingDefInst();
                var tmp = routine.ToDictionary();
                ConvertHelper.UpdateEntity(rDefInst, tmp, false);
                rDefInst.SNodeDefInstId = routine.SNodeDefId;
                rDefInst.ENodeDefInstId = routine.ENodeDefId;
                rDefInst.WFDefInstId    = defInst.Id;
                rDefInst.WFDefInst      = defInst;
                defInst.WFRoutingDefInst.Add(rDefInst);
            }

            //id处理,避免多个WFNodeDefInst都有同一个id造成主键冲突
            foreach (var node in defInst.WFNodeDefInst)
            {
                string nGuid = GuidHelper.CreateTimeOrderID();
                defInst.WFRoutingDefInst.Where(a => a.SNodeDefInstId == node.Id)
                .ToList().ForEach(a => a.SNodeDefInstId = nGuid);
                defInst.WFRoutingDefInst.Where(a => a.ENodeDefInstId == node.Id)
                .ToList().ForEach(a => a.ENodeDefInstId    = nGuid);
                defInst.WFRoutingDefInst.ForEach(a => a.Id = a.SNodeDefInstId + "_" + a.ENodeDefInstId);
                node.Id = nGuid;
            }

            return(defInst);
        }