/// <summary>节点实例监听器</summary> public void onEdgeInstanceEventFired(EdgeInstanceEvent e) { if (e.EventType == EdgeInstanceEventEnum.ON_TAKING_THE_TOKEN) { IToken token = e.Token; // 计算token的alive值 ILoopInstance transInst = (ILoopInstance)e.getSource(); String condition = transInst.Loop.Condition; calculateTheAliveValue(token, condition); if (this.RuntimeContext.IsEnableTrace && token.IsAlive) { ProcessInstanceTrace trace = new ProcessInstanceTrace(); trace.ProcessInstanceId=e.Token.ProcessInstanceId; trace.StepNumber=e.Token.StepNumber + 1; trace.Type=ProcessInstanceTraceEnum.LOOP_TYPE; trace.FromNodeId=transInst.Loop.FromNode.Id; trace.ToNodeId=transInst.Loop.ToNode.Id; trace.EdgeId=transInst.Loop.Id; //TODO wmj2003 一旦token从当前边上经过,那么就保存流程运行轨迹,这里应该是insert RuntimeContext.PersistenceService.SaveOrUpdateProcessInstanceTrace(trace); } } }
public override Boolean take(IToken token) { EdgeInstanceEvent e = new EdgeInstanceEvent(this); e.Token=token; e.EventType = EdgeInstanceEventEnum.ON_TAKING_THE_TOKEN; for (int i = 0; this.eventListeners != null && i < this.eventListeners.Count; i++) { IEdgeInstanceEventListener listener = this.eventListeners[i]; listener.onEdgeInstanceEventFired(e);//调用TransitionInstanceExtension 来计算弧线上的条件表达式 } INodeInstance nodeInst = this.LeavingNodeInstance;//获取到流向哪个节点 token.Value = this.Weight;//获取到弧线上的权值 Boolean alive = token.IsAlive; nodeInst.fire(token);//节点触发 return alive; }
/// <summary>节点实例监听器</summary> public void onEdgeInstanceEventFired(EdgeInstanceEvent e) { if (e.EventType == EdgeInstanceEventEnum.ON_TAKING_THE_TOKEN) { IToken token = e.Token; ITransitionInstance transInst = (ITransitionInstance)e.getSource(); String condition = transInst.Transition.Condition; calculateTheAliveValue(token, condition); if (this.RuntimeContext.IsEnableTrace && token.IsAlive) { Transition transition = transInst.Transition; IWFElement fromNode = transition.FromNode; int minorNumber = 1; if (fromNode is Activity) { minorNumber = 2; } else { minorNumber = 1; } ProcessInstanceTrace trace = new ProcessInstanceTrace(); trace.ProcessInstanceId=e.Token.ProcessInstanceId; trace.StepNumber=e.Token.StepNumber; trace.Type = ProcessInstanceTraceEnum.TRANSITION_TYPE; trace.FromNodeId=transInst.Transition.FromNode.Id; trace.ToNodeId=transInst.Transition.ToNode.Id; trace.EdgeId=transInst.Transition.Id; trace.MinorNumber=minorNumber; //TODO wmj2003 这里应该是insert。一旦token从当前边上经过,那么就保存流程运行轨迹. RuntimeContext.PersistenceService.SaveOrUpdateProcessInstanceTrace(trace); } } }