Пример #1
0
        /// <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);
        }
Пример #3
0
        /// <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);
                }
            }
        }