예제 #1
0
        /// <summary>
        /// 读取节点的上一步节点信息
        /// </summary>
        /// <param name="runningNode">当前节点</param>
        /// <param name="isLookUpBackSource">是否退回</param>
        /// <param name="hasPassedGatewayNode">是否经由路由节点</param>
        /// <returns>活动实例列表</returns>
        internal IList <ActivityInstanceEntity> GetPreviousActivityInstanceList(ActivityInstanceEntity runningNode,
                                                                                bool isLookUpBackSource,
                                                                                out bool hasPassedGatewayNode)
        {
            hasPassedGatewayNode = false;
            var tim            = new TransitionInstanceManager();
            var transitionList = tim.GetTransitionInstanceList(runningNode.AppInstanceID,
                                                               runningNode.ProcessGUID,
                                                               runningNode.ProcessInstanceID).ToList();

            var backSrcActivityInstanceId = 0;

            if (isLookUpBackSource == true)
            {
                //退回情况下的处理
                if (runningNode.MIHostActivityInstanceID != null && runningNode.CompleteOrder.Value == 1)
                {
                    //多实例的第一个子节点,先找到主节点,再到transition记录表中找到上一步节点
                    backSrcActivityInstanceId = runningNode.MIHostActivityInstanceID.Value;
                }
                else if (runningNode.BackSrcActivityInstanceID != null)
                {
                    //节点时曾经发生退回的节点
                    backSrcActivityInstanceId = runningNode.BackSrcActivityInstanceID.Value;
                }
                else
                {
                    backSrcActivityInstanceId = runningNode.ID;
                }
            }
            else
            {
                backSrcActivityInstanceId = runningNode.ID;
            }

            var aim = new ActivityInstanceManager();
            var runningTransitionList = transitionList
                                        .Where(o => o.ToActivityInstanceID == backSrcActivityInstanceId)
                                        .ToList();

            IList <ActivityInstanceEntity> previousActivityInstanceList = new List <ActivityInstanceEntity>();

            foreach (var entity in runningTransitionList)
            {
                //如果是逻辑节点,则继续查找
                if (entity.FromActivityType == (short)ActivityTypeEnum.GatewayNode)
                {
                    GetPreviousOfGatewayActivityInstance(transitionList, entity.FromActivityInstanceID, previousActivityInstanceList);
                    hasPassedGatewayNode = true;
                }
                else
                {
                    previousActivityInstanceList.Add(aim.GetById(entity.FromActivityInstanceID));
                }
            }
            return(previousActivityInstanceList);
        }
예제 #2
0
        /// <summary>
        /// 获取转移实例记录
        /// </summary>
        /// <param name="query">查询实体</param>
        /// <returns>转移列表</returns>
        public IList <TransitionImage> GetTransitionInstanceList(TransitionInstanceQuery query)
        {
            IList <TransitionImage> imageList = new List <TransitionImage>();
            var tm   = new TransitionInstanceManager();
            var list = tm.GetTransitionInstanceList(query.AppInstanceID, query.ProcessGUID).ToList();

            foreach (TransitionInstanceEntity t in list)
            {
                imageList.Add(new TransitionImage
                {
                    ID             = t.ID,
                    TransitionGUID = t.TransitionGUID
                });
            }

            return(imageList);
        }