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