Example #1
0
        /// <summary>
        /// 获取第一可办理节点的执行人
        /// </summary>
        /// <param name="processId"></param>
        /// <returns></returns>
        public IList <Participant> GetFirstActivityParticipants(string processId, string billUid)
        {
            _processModel = new ProcessModel(_dataAccessor, _loggerFactory, processId, billUid);
            var firstActivity = _processModel.GetFirstActivity();

            return(_processModel.GetActivityParticipants(firstActivity.ActivityID));
        }
Example #2
0
        /// <summary>
        /// 获取第一可办理节点的执行人
        /// </summary>
        /// <param name="processId"></param>
        /// <returns></returns>
        public IList <Participant> GetFirstActivityParticipants(string processId, string billUid)
        {
            _processModel = new ProcessModel(_serviceProvider, processId, billUid);
            var firstActivity = _processModel.GetFirstActivity();

            return(_processModel.GetActivityParticipants(firstActivity.ActivityID));
        }
Example #3
0
        public ActivityEntity GetFirstActivity(string processId, string billUid)
        {
            _processModel = new ProcessModel(_dataAccessor, _loggerFactory, processId, billUid);
            var firstActivity = _processModel.GetFirstActivity();

            return(firstActivity);
        }
Example #4
0
        public ActivityEntity GetFirstActivity(string processId, string billUid)
        {
            _processModel = new ProcessModel(_serviceProvider, processId, billUid);
            var firstActivity = _processModel.GetFirstActivity();

            return(firstActivity);
        }
Example #5
0
        /// <summary>
        /// 根据应用获取流程下一步节点列表,包含角色用户
        /// </summary>
        /// <param name="resourceService">资源服务</param>
        /// <param name="runner">应用执行人</param>
        /// <param name="condition">条件</param>
        /// <returns>节点列表</returns>
        internal IList <NodeView> GetNextActivityRoleUserTree(IResourceService resourceService,
                                                              WfAppRunner runner,
                                                              IDictionary <string, string> condition = null)
        {
            //判断应用数据是否缺失
            if (string.IsNullOrEmpty(runner.AppInstanceID) ||
                string.IsNullOrEmpty(runner.ProcessGUID))
            {
                throw new WorkflowException(LocalizeHelper.GetEngineMessage("nextstepparser.getnextactivityroleusertree.error"));
            }

            //条件参数一致
            if (condition == null && runner.Conditions != null)
            {
                condition = runner.Conditions;
            }

            IList <NodeView> nextSteps    = new List <NodeView>();
            IProcessModel    processModel = ProcessModelFactory.Create(runner.ProcessGUID, runner.Version);

            using (var session = SessionFactory.CreateSession())
            {
                var pim = new ProcessInstanceManager();
                var processInstanceList = pim.GetProcessInstance(session.Connection,
                                                                 runner.AppInstanceID,
                                                                 runner.ProcessGUID,
                                                                 session.Transaction).ToList();
                var processInstanceEntity = EnumHelper.GetFirst <ProcessInstanceEntity>(processInstanceList);

                //判断流程是否创建还是已经运行
                if (processInstanceEntity != null &&
                    processInstanceEntity.ProcessState == (short)ProcessStateEnum.Running)
                {
                    //运行状态的流程实例
                    var            tm       = new TaskManager();
                    TaskViewEntity taskView = tm.GetTaskOfMine(session.Connection, runner, session.Transaction);

                    //获取下一步列表
                    nextSteps = processModel.GetNextActivityTree(taskView.ActivityGUID, condition);

                    foreach (var ns in nextSteps)
                    {
                        if (ns.ReceiverType == ReceiverTypeEnum.ProcessInitiator)       //下一步执行人为流程发起人
                        {
                            ns.Users = AppendUserList(ns.Users, pim.GetProcessInitiator(session.Connection,
                                                                                        taskView.ProcessInstanceID,
                                                                                        session.Transaction)); //获取流程发起人
                        }
                        else
                        {
                            var roleIDs = ns.Roles.Select(x => x.ID).ToArray();
                            if (roleIDs.Count() > 0)
                            {
                                ns.Users = resourceService.GetUserListByRoleReceiverType(roleIDs, runner.UserID, (int)ns.ReceiverType);     //增加转移前置过滤条件
                            }
                        }
                    }
                }
                else
                {
                    //流程准备启动,获取第一个办理节点的用户列表
                    var firstActivity = processModel.GetFirstActivity();
                    nextSteps = processModel.GetNextActivityTree(firstActivity.ActivityGUID,
                                                                 condition);

                    foreach (var ns in nextSteps)
                    {
                        var roleIDs = ns.Roles.Select(x => x.ID).ToArray();
                        ns.Users = resourceService.GetUserListByRoleReceiverType(roleIDs, runner.UserID, (int)ns.ReceiverType);     //增加转移前置过滤条件
                    }
                }
            }

            return(nextSteps);
        }