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); }
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(); }
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)); }
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)); }
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 }
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 }