/// <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 static ProcessInstanceTrace GetProcessInstanceTrace(IDataReader dr) { ProcessInstanceTrace processInstanceTrace = new ProcessInstanceTrace(); processInstanceTrace.Id = Convert.ToString(dr["id"]); processInstanceTrace.ProcessInstanceId = Convert.ToString(dr["processinstance_id"]); processInstanceTrace.StepNumber = Convert.ToInt32(dr["step_number"]); processInstanceTrace.MinorNumber = Convert.ToInt32(dr["minor_number"]); processInstanceTrace.Type = (ProcessInstanceTraceEnum)Enum.Parse(typeof(ProcessInstanceTraceEnum), Convert.ToString(dr["type"])); processInstanceTrace.EdgeId = Convert.ToString(dr["edge_id"]); processInstanceTrace.FromNodeId = Convert.ToString(dr["from_node_id"]); processInstanceTrace.ToNodeId = Convert.ToString(dr["to_node_id"]); return(processInstanceTrace); }
/// <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); } } }