/// <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); }
/// <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); }