Beispiel #1
0
 void Postdicate(ProcessContext processContext, ITransaction trans = null)
 {
     // 已处理,且状态有变化的才能执行结束检查
     if (this.Status != ActivityStates.Dealed || !this.statesChanged || results == null)
     {
         return;
     }
     if (!this.Action.Postdicate(this, processContext))
     {
         return;
     }
     this.Status          = ActivityStates.Done;
     this.Entity.DoneTime = DateTime.Now;
     if (this.Graph.Exports != null && this.Graph.Exports.Count > 0)
     {
         var parent       = this.Parent as Activity;
         var parentStates = parent.States as JObject;
         foreach (var pair in this.Graph.Exports)
         {
             var value = JSON.GetPathValue(this.states, pair.Key);
             JSON.SetPathValue(parentStates, pair.Value, value);
             parent.statesChanged = true;
         }
         parent.SaveChanges(trans);
         this.Todo(parent, null);
     }
     this.SaveChanges(trans);
 }
Beispiel #2
0
 void Postdicate(IActivity activity, object results, Context context)
 {
     // 已处理,且状态有变化的才能执行结束检查
     if (this.Status != ActivityStates.Dealed || !this.statesChanged || results == null)
     {
         return;
     }
     if (!activity.Postdicate(results, this, context))
     {
         return;
     }
     this.Status = ActivityStates.Done;
     if (this.Graph.Exports != null && this.Graph.Exports.Count > 0)
     {
         var parent       = this.Parent;
         var parentStates = parent.States as JObject;
         foreach (var pair in this.Graph.Exports)
         {
             var value = JSON.GetPathValue(this.states, pair.Key);
             JSON.SetPathValue(parentStates, pair.Value, value);
             parent.statesChanged = true;
         }
         parent.SaveChanges();
         this.DelayExecute((context) => {
             parent.Deal(null, context.Dealer, context);
         });
     }
     this.SaveChanges();
 }
Beispiel #3
0
 public object State(string path)
 {
     if (this.states == null)
     {
         if (!string.IsNullOrWhiteSpace(this.Entity.States))
         {
             this.states = JObject.Parse(this.Entity.States);
         }
     }
     return(JSON.GetPathValue(this.states, path));
 }
Beispiel #4
0
 public T State <T>(string key)
 {
     if (this.states == null)
     {
         if (!string.IsNullOrWhiteSpace(this.Entity.States))
         {
             this.states = JSON.Parse <JObject>(this.Entity.States);
         }
     }
     return(JSON.GetPathValue <T>(this.states, key));
 }
Beispiel #5
0
        public Activity(Engine engine, Activity parent, INode node, string version, object inputs, IUser creator, IUser owner, ProcessContext processContext)
        {
            this.Engine = engine;
            this.graph  = node;
            this.parent = parent;


            #region init entity
            var entity = new ActivityEntity()
            {
                Id          = Guid.NewGuid(),
                NodeName    = node.Name,
                NodePath    = parent == null ? node.Name : parent.NodePath + "/" + node.Name,
                Status      = ActivityStates.Creating,
                Version     = version ?? parent?.Version,
                Domain      = engine.Name,
                ActionType  = node.InstanceType ?? engine.DefaultActionType,
                Graph       = JSON.Stringify(node),
                HasChildren = node.Nodes != null && node.Nodes.Count > 0,
                Inputs      = JSON.Stringify(inputs),
                CreateTime  = DateTime.Now,
                CreatorId   = creator.Id,
                CreatorName = creator.Name
            };

            this.entity = entity;
            this.Owner  = owner;
            #endregion

            if (parent != null)
            {
                this.FlowRepository = parent.FlowRepository;
                this.AddChild(this);
            }
            else
            {
                this.FlowRepository = engine.ResolveFlowRepository(processContext);
            }

            #region init states
            var states = new JObject();
            var metas  = (node as Node).Metas;
            if (metas != null)
            {
                foreach (var pair in metas)
                {
                    states.Add(pair.Key, pair.Value.DeepClone());
                }
            }
            if (parent != null && node.Imports != null)
            {
                var pStates = parent.States as JObject;
                foreach (var pair in node.Imports)
                {
                    var value = JSON.GetPathValue(pStates, pair.Value);
                    JSON.SetPathValue(states, pair.Key, value);
                }
            }

            this.entity.States = states.ToString();
            this.states        = states;
            #endregion
        }
Beispiel #6
0
        public Action(Engine engine, Action parent, Node node, string version, object inputs, IUser creator, IUser dealer = null)
        {
            this.Engine = engine;
            this.graph  = node;
            this.parent = parent;

            #region init entity
            var entity = new ActivityEntity()
            {
                Id           = Guid.NewGuid(),
                NodeName     = node.Name,
                NodePath     = parent == null?node.Name:parent.NodePath + "/" + node.Name,
                Status       = ActivityStates.Created,
                Version      = version ?? parent?.Version,
                Domain       = engine.Name,
                ActivityType = node.InstanceType ?? engine.DefaultActivityInstanceType,
                Graph        = JSON.Stringify(node),
                HasChildren  = node.Nodes != null && node.Nodes.Count > 0,
                Inputs       = JSON.Stringify(inputs),
                CreateTime   = DateTime.Now,
                CreatorId    = creator.Id,
                CreatorName  = creator.Name
            };

            this.entity = entity;
            if (dealer != null)
            {
                this.dealer       = dealer;
                entity.DealerId   = dealer.Id;
                entity.DealerName = dealer.Name;
            }
            #endregion
            #region init states
            var states = new JObject();
            if (node.Meta != null)
            {
                foreach (var pair in node.Meta)
                {
                    states.Add(pair.Key, pair.Value.DeepClone());
                }
            }
            if (parent != null && node.Imports != null)
            {
                var pStates = parent.States as JObject;
                foreach (var pair in node.Imports)
                {
                    var value = JSON.GetPathValue(pStates, pair.Value);
                    JSON.SetPathValue(states, pair.Key, value);
                }
            }
            if (inputs != null)
            {
                var inputObj = JObject.FromObject(inputs);
                foreach (var pair in inputObj)
                {
                    states[pair.Key] = pair.Value;
                }
            }
            this.entity.States = states.ToString();
            this.states        = states;
            #endregion
        }