Esempio n. 1
0
        public void signal()
        {
            var processInstance = _taskInstance.getProcessInstance();
            var bpmContext      = processInstance.getBpmContext();
            var task            = _taskInstance.getTask();
            var transitions     = task.LeavingTransitions;

            if (transitions.Count == 0)
            {
                _taskInstance.end().save();
                return;
            }

            //每次只走一条transition
            int excuteTransitionCount = 0;

            foreach (Transition transition in transitions)
            {
                //Token的Signal操作表示:实例需要离开当前token所在的节点,转移到下一个节点上。
                //因为Node与Node之间是“Transition”这个桥梁,
                //所以,在转移过程中,会首先把Token放入相关连的Transtion对象中,
                //再由Transition对象把Token交给下一个节点。
                var transitionInstance = transition.createTransitionInstance(_taskInstance);
                if (excuteTransitionCount == 0 && transitionInstance.validate())
                {
                    excuteTransitionCount++;
                    _taskInstance.leave(transitionInstance, this);
                }
            }

            //没有线满足时,默认无条件走第一条
            if (excuteTransitionCount == 0)
            {
                var firstTransition    = (Transition)transitions[0];
                var transitionInstance = firstTransition.createTransitionInstance(_taskInstance);
                _taskInstance.leave(transitionInstance, this);
            }
        }