/// <summary>
        /// 获取指定工作流、角色、时间段的实例集合
        /// </summary>
        /// <param name="workflowName">流程名称</param>
        /// <param name="userIdentity">用户身份</param>
        /// <param name="role">审批角色</param>
        /// <param name="startDate">时间段起始时间</param>
        /// <param name="endDate">时间段截止时间</param>
        /// <returns></returns>
        public InstanceCollection Distill(string workflowName, IUserIdentity userIdentity, ApprovalRole role, DateTime startDate, DateTime endDate)
        {
            //提取实例集合的过程,先遍历每一个提取者对象进行实例提取,后遍历每个过滤器进行实例过滤,最后返回剩余的实例的集合
            InstanceCollection   instances = new InstanceCollection();
            StateMachineWorkflow workflow  = (StateMachineWorkflow)WorkflowRuntime.Current.GetService <IWorkFlowDefinePersistService>().GetWorkflowDefine(workflowName);

            foreach (InstanceDistiller distiller in InstanceDistillers)
            {
                instances.AddRange(distiller.InternalDistill(workflowName, userIdentity, role, startDate, endDate));
            }
            if (Filters != null)
            {
                foreach (InstanceFilter filter in Filters)
                {
                    if (filter is IInstanceCollectionFilter)
                    {
                        IInstanceCollectionFilter collFilter = (IInstanceCollectionFilter)filter;
                        collFilter.Filter(instances, role, userIdentity);
                    }
                    else
                    {
                        for (int i = instances.Count - 1; i >= 0; i--)
                        {
                            if (filter.InternalIsMatch(instances[i].Instance, role, userIdentity))
                            {
                                instances.RemoveAt(i);
                            }
                        }
                    }
                }
            }
            return(instances);
        }
Beispiel #2
0
        /// <summary>
        /// 对一个工作流实例集合进行过滤,将满足条件的去处
        /// </summary>
        /// <param name="instances">需要被过滤的实例集合</param>
        /// <param name="role">角色对象</param>
        /// <param name="userIdentity">身份识别标志</param>
        /// <returns>满足过滤条件的实例排除后的实例集合对象.</returns>
        public InstanceCollection Filter(InstanceCollection instances, ApprovalRole role, IUserIdentity userIdentity)
        {
            List <ApprovalAssignment> assignmentList = WorkflowRuntime.Current.GetService <IApprovalSaveService>().GetAssignment(instances.InstanceIDs);

            for (int i = instances.Count - 1; i >= 0; i--)
            {
                if (IsOthers(userIdentity, GetAssignment(instances[i], assignmentList)))
                {
                    instances.RemoveAt(i);
                }
            }
            return(instances);
        }