コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <summary>
        /// 获取指定用户Id的审批角色列表
        /// </summary>
        /// <param name="workflowName">工作流名称</param>
        /// <param name="userId">用户Id</param>
        /// <returns>用户所在的审批角色</returns>
        public static List <ApprovalRole> GetUserRoles(string workflowName, string userId)
        {
            List <ApprovalRole> rolesList = new List <ApprovalRole>();

            //如果用户id为空,那么返回空角色集合
            if (string.IsNullOrEmpty(userId))
            {
                return(rolesList);
            }

            IUserInRole          userInRole = WorkflowRuntime.Current.GetService <IIdentityService>().GetUserInRole();
            StateMachineWorkflow workflow   = (StateMachineWorkflow)WorkflowRuntime.Current.GetService <IWorkFlowDefinePersistService>().GetWorkflowDefine(workflowName);

            foreach (ApprovalRole approvalRole in workflow.Roles)
            {
                if (userInRole.IsUserInRole(userId, approvalRole.Name))
                {
                    if (!rolesList.Contains(approvalRole))
                    {
                        rolesList.Add(approvalRole);
                    }
                }
            }
            return(rolesList);
        }
コード例 #3
0
		/// <summary>
		/// Gets the proceed list.
		/// </summary>
		/// <param name="startDate">The start date.</param>
		/// <param name="endDate">The end date.</param>
		/// <param name="userId">The user id.</param>
		/// <returns></returns>
		protected List<StateMachineWorkflowInstance> GetProceedList(DateTime startDate, DateTime endDate, string userId)
		{
			List<ApprovalRecord> recordList = new List<ApprovalRecord>();
			string[] workflowNames = WorkflowRuntime.Current.DefineService.GetAllWorkflowDefineName(applicationName);
			foreach (string workflowName in workflowNames)
			{
				WorkflowRuntime.Current.GetService<IApprovalSaveService>().GetRecord(workflowName, startDate, endDate, userId);
			}
			
			List<int> eaIds = new List<int>();
			foreach (ApprovalRecord record in recordList)
			{
				if (!eaIds.Contains(record.EaId))
					eaIds.Add(record.EaId);
			}
			List<StateMachineWorkflowInstance> instanceList = new List<StateMachineWorkflowInstance>();
			foreach (int eaid in eaIds)
			{
				List<StateMachineWorkflowInstance> instances = WorkflowRuntime.Current.GetInstance(applicationName, eaid, false);
				foreach (StateMachineWorkflowInstance instance in instances)
				{
					StateMachineWorkflow workflow = (StateMachineWorkflow)instance.Workflow;
					if (instance.ParentId == null || instance.ParentId == Guid.Empty)
					{
						instanceList.Add(instance);
						break;
					}
				}
			}
			return instanceList;
		}
コード例 #4
0
        /// <summary>
        /// 启动工作流
        /// </summary>
        public override void Start()
        {
            StateMachineWorkflow o         = (StateMachineWorkflow)this.Workflow;
            ApprovalState        initState = o.GetStateByName(o.InitState);

            this.stateName   = initState.Name;
            this.persistTime = DateTime.Now;
            WorkflowRuntime.Current.GetService <IWorkflowPersistService>().InsertWorkflowInstance(this);
        }
コード例 #5
0
 /// <summary>
 /// 根据工作流名称创建一个过程对象
 /// </summary>
 /// <param name="workflowName">工作流名称</param>
 /// <param name="rules">审批规则</param>
 /// <param name="userIdentity">用户省份</param>
 public ApprovalProcess(string workflowName, IApprovalRules rules, IUserIdentity userIdentity)
 {
     this.approvalService        = WorkflowRuntime.Current.GetService <IApprovalSaveService>();
     this.workflowPersistService = WorkflowRuntime.Current.GetService <IWorkflowPersistService>();
     this.workflow     = (StateMachineWorkflow)WorkflowRuntime.Current.GetService <IWorkFlowDefinePersistService>().GetWorkflowDefine(workflowName);
     this.rules        = rules;
     this.userIdentity = userIdentity;
     this.unitCode     = userIdentity.GetUserUnitCode();
     this.userId       = userIdentity.GetUserId();
 }
コード例 #6
0
		/// <summary>
		/// 递归获取所有流程的所有审批状态
		/// </summary>
		/// <param name="workflowName">流程名称</param>
		/// <param name="dicStates">状态字典</param>
		protected void AddApprovalStates(string workflowName, Dictionary<string, string> dicStates)
		{
			StateMachineWorkflow stateMachine = WorkflowRuntime.Current.GetService<IWorkFlowDefinePersistService>().GetWorkflowDefine(workflowName) as StateMachineWorkflow;
			foreach (ApprovalState state in stateMachine.States)
			{
				if (state.IsApprovalState && !dicStates.ContainsKey(state.Description))
					dicStates.Add(state.Description, state.Name);
				else
					continue;
			}
		}
コード例 #7
0
        /// <summary>
        /// 获取指定工作流、角色、时间段的实例集合
        /// </summary>
        /// <param name="workflowName">流程名称</param>
        /// <param name="userIdentity">用户身份</param>
        /// <param name="role">审批角色</param>
        /// <param name="startDate">时间段起始时间</param>
        /// <param name="endDate">时间段截止时间</param>
        /// <returns></returns>
        protected override InstanceCollection Distill(string workflowName, IUserIdentity userIdentity, ApprovalRole role, DateTime startDate, DateTime endDate)
        {
            StateMachineWorkflow workflow = (StateMachineWorkflow)WorkflowRuntime.Current.GetService <IWorkFlowDefinePersistService>().GetWorkflowDefine(workflowName);
            List <StateMachineWorkflowInstance> instances = WorkflowRuntime.Current.GetInstance(workflowName, startDate, endDate, new string[] { workflow.EndState }, userIdentity.GetUserUnitCode());
            InstanceCollection collection = new InstanceCollection();

            foreach (StateMachineWorkflowInstance instance in instances)
            {
                collection.Add(new InstanceWithRole(instance, role, false));
            }
            return(collection);
        }
コード例 #8
0
        /// <summary>
        /// 获取指定工作流、角色、时间段的实例集合
        /// </summary>
        /// <param name="workflowName">流程名称</param>
        /// <param name="userIdentity">用户身份</param>
        /// <param name="role">审批角色</param>
        /// <param name="startDate">时间段起始时间</param>
        /// <param name="endDate">时间段截止时间</param>
        /// <returns></returns>
        protected override InstanceCollection Distill(string workflowName, IUserIdentity userIdentity, ApprovalRole role, DateTime startDate, DateTime endDate)
        {
            List <StateMachineWorkflowInstance> instances = new List <StateMachineWorkflowInstance>();
            string userName   = "";
            string fromUserId = "";
            //找到代理条目给获取授权人Id和授权人姓名
            List <ApprovalAgent> agentList = WorkflowRuntime.Current.GetService <IApprovalSaveService>().GetAgentInfoByToUser(userIdentity.GetUserId());

            foreach (ApprovalAgent agent in agentList)
            {
                if (agent.BeginDate == startDate && agent.EndDate == endDate)
                {
                    userName   = string.Format("{0}(代{1})", agent.ToUserName, agent.SetUserName);
                    fromUserId = agent.SetUserId;
                }
            }
            //获取用户时间段内的审批记录,找到符合代理信息的记录,获取相应的实例
            StateMachineWorkflow  workflow = WorkflowRuntime.Current.GetService <IWorkFlowDefinePersistService>().GetWorkflowDefine(workflowName) as StateMachineWorkflow;
            List <ApprovalRecord> records  = WorkflowRuntime.Current.GetService <IApprovalSaveService>().GetRecord(workflowName, startDate, endDate, fromUserId);
            List <Guid>           ids      = new List <Guid>();

            foreach (ApprovalRecord record in records)
            {
                if (record.OperatorName == userName)
                {
                    ids.Add(record.WorkflowInstanceId);
                }
            }
            instances = new List <StateMachineWorkflowInstance>();
            foreach (Guid id in ids)
            {
                instances.Add((StateMachineWorkflowInstance)WorkflowRuntime.Current.GetInstance(id));
            }
            InstanceCollection collection = new InstanceCollection();

            foreach (StateMachineWorkflowInstance instance in instances)
            {
                if (instance.WorkflowName == workflowName)
                {
                    collection.Add(new InstanceWithRole(instance, role, false));
                }
            }
            return(collection);
        }
コード例 #9
0
		/// <summary>
		/// 按最后操作时间范围获取正在审批中的所有项目任务列表
		/// </summary>
		/// <param name="mainWorkflowName">Name of the main workflow.</param>
		/// <param name="isByUnit">if set to <c>true</c> [is by unit].</param>
		/// <returns></returns>
		public virtual TaskList[] GetProcessingLists(string mainWorkflowName, bool isByUnit)
		{
			string unitCode = "";
			if (isByUnit)
				unitCode = userIdentity.GetUserUnitCode();
			List<TaskList> result = new List<TaskList>();
			Dictionary<string, string> stateNames = new Dictionary<string, string>();
			string[] workflows = WorkflowRuntime.Current.GetService<IWorkFlowDefinePersistService>().GetAllWorkflowDefineName(applicationName);
			StateMachineWorkflow stateMachine = WorkflowRuntime.Current.GetService<IWorkFlowDefinePersistService>().GetWorkflowDefine(mainWorkflowName) as StateMachineWorkflow;
			AddApprovalStates(mainWorkflowName, stateNames);
			foreach (string stateDes in stateNames.Keys)
			{
				string stateName = stateNames[stateDes];
				List<StateMachineWorkflowInstance> instanceList = new List<StateMachineWorkflowInstance>();
				instanceList.AddRange(WorkflowRuntime.Current.GetInstance(mainWorkflowName, DateTime.Now.AddYears(-5), DateTime.Now.AddDays(1), new string[] { stateName }, unitCode));
				result.Add(new TaskList("a." + stateDes, ItemProcessor.GenerateTaskTable(instanceList, true)));
			}
			return result.ToArray();
		}
コード例 #10
0
        /// <summary>
        /// 获取指定工作流、角色、时间段的实例集合
        /// </summary>
        /// <param name="workflowName">流程名称</param>
        /// <param name="userIdentity">用户身份</param>
        /// <param name="role">审批角色</param>
        /// <param name="startDate">时间段起始时间</param>
        /// <param name="endDate">时间段截止时间</param>
        /// <returns></returns>
        protected override InstanceCollection Distill(string workflowName, IUserIdentity userIdentity, ApprovalRole role, DateTime startDate, DateTime endDate)
        {
            StateMachineWorkflow workflow = WorkflowRuntime.Current.GetService <IWorkFlowDefinePersistService>().GetWorkflowDefine(workflowName) as StateMachineWorkflow;
            string userId, unitCode, roleName;

            userId = unitCode = roleName = "";
            if (isMatchUser)
            {
                userId = userIdentity.GetUserId();
            }
            if (isMatchUnit)
            {
                unitCode = userIdentity.GetUserUnitCode();
            }
            if (isMatchRole)
            {
                roleName = role.Name;
            }
            List <ApprovalRecord> records = WorkflowRuntime.Current.GetService <IApprovalSaveService>().GetRecord(workflowName, startDate, endDate, userId, unitCode, roleName);
            List <Guid>           ids     = new List <Guid>();

            foreach (ApprovalRecord record in records)
            {
                if (!ids.Contains(record.WorkflowInstanceId))
                {
                    ids.Add(record.WorkflowInstanceId);
                }
            }
            List <StateMachineWorkflowInstance> instances = new List <StateMachineWorkflowInstance>();

            foreach (Guid id in ids)
            {
                instances.Add((StateMachineWorkflowInstance)WorkflowRuntime.Current.GetInstance(id));
            }
            InstanceCollection collection = new InstanceCollection();

            foreach (StateMachineWorkflowInstance instance in instances)
            {
                collection.Add(new InstanceWithRole(instance, role, false));
            }
            return(collection);
        }
コード例 #11
0
		/// <summary>
		/// Gets the batch process list.
		/// </summary>
		/// <param name="workflowName">Name of the workflow.</param>
		/// <param name="batchProcessType">Type of the batch process.</param>
		/// <returns></returns>
		public virtual TaskList GetBatchProcessList(string workflowName, BatchProcessType batchProcessType)
		{
			StateMachineWorkflow workflow = (StateMachineWorkflow)WorkflowRuntime.Current.GetService<IWorkFlowDefinePersistService>().GetWorkflowDefine(workflowName);
			string stateName = string.Empty;
			ApprovalRole role = null;
			if (batchProcessType == BatchProcessType.Receive)
			{
				//获取操作为“接收”所在的状态名称
				foreach (ApprovalState state in workflow.States)
				{
					foreach (ApprovalEvent approvalEvent in state.Events)
					{
						if (approvalEvent.Name == "接收")
						{
							role = WorkflowUtility.GetUserRoleByName(workflowName, approvalEvent.Roles[0].Name);
							stateName = state.Name;
						}
					}
				}
			}
			else if (batchProcessType == BatchProcessType.Approve)
			{
				//遍历工作流状态,找到下一状态为工作流终止状态的状态名
				foreach (ApprovalState state in workflow.States)
				{
					foreach (ApprovalEvent approvalEvent in state.Events)
					{
						if (approvalEvent.NextStateNames != null && approvalEvent.NextStateNames.Length > 0 && approvalEvent.NextStateNames[0] == workflow.EndState)
						{
							role = WorkflowUtility.GetUserRoleByName(workflowName, approvalEvent.Roles[0].Name);
							stateName = state.Name;
						}
					}
				}
			}
			else
				throw new ArgumentException("batchProcessType");
			ApprovalProcess process = CreateProcess(workflowName, role);
			//获取所有在该状态下的工作流实例 
			List<StateMachineWorkflowInstance> instanceList = process.GetList(new string[] { stateName });
			return new TaskList("a." + batchProcessType.ToString(), new List<ITaskItem>(ItemProcessor.GenerateTaskTable(instanceList)));
		}
コード例 #12
0
        /// <summary>
        ///根据文件名读取工作流定义对象
        /// </summary>
        /// <param name="app">The app.</param>
        /// <param name="fileName">Name of the file.</param>
        /// <returns></returns>
        private WorkFlowDefine ReadFromFile(WorkflowApplication app, string fileName)
        {
            StateMachineWorkflow stateMachine  = new StateMachineWorkflow();
            XmlSerializer        xmlSerializer = new XmlSerializer(typeof(StateMachineWorkflow));

            using (XmlReader reader = XmlReader.Create(fileName))
            {
                stateMachine = (StateMachineWorkflow)xmlSerializer.Deserialize(reader);
            }
            string errorMsg;

            if (!stateMachine.Validate(out errorMsg))
            {
                throw new ApplicationException(errorMsg);
            }

            //设置其应用程序对象
            stateMachine.Application = app;
            return(stateMachine);
        }
コード例 #13
0
        /// <summary>
        /// 获取指定工作流、角色、时间段的实例集合
        /// </summary>
        /// <param name="workflowName">流程名称</param>
        /// <param name="userIdentity">用户身份</param>
        /// <param name="role">审批角色</param>
        /// <param name="startDate">时间段起始时间</param>
        /// <param name="endDate">时间段截止时间</param>
        /// <returns></returns>
        protected override 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);
            //遍历工作流中的每一个状态,获取可以处理的状态对应的实例.
            List <string> canDoStates = new List <string>();

            foreach (ApprovalState oneState in workflow.States)
            {
                if (oneState.IsApprovalState && InstanceDistillerHelper.IsMineICanDo(oneState, role))
                {
                    canDoStates.Add(oneState.Name);
                }
            }

            if (canDoStates.Count == 0)
            {
                return(instances);
            }
            string unitCode = userIdentity.GetUserUnitCode();

            unitCode = string.IsNullOrEmpty(unitCode)?"  ":(unitCode.Trim() + "%");
            List <StateMachineWorkflowInstance> list = WorkflowRuntime.Current.GetUnitList(workflowName, canDoStates.ToArray(), unitCode);

            //获取指定给本单位办理的实例
            foreach (StateMachineWorkflowInstance instance in list)
            {
                if (instance.PersistTime >= startDate &&
                    instance.PersistTime <= endDate)
                {
                    instances.Add(new InstanceWithRole(instance, role, true));
                }
            }

            return(instances);
        }
コード例 #14
0
        /// <summary>
        /// Gets all roles.
        /// </summary>
        /// <param name="workflowName">Name of the workflow.</param>
        /// <returns></returns>
        public static List <ApprovalRole> GetAllWorkflowRoles(string workflowName)
        {
            StateMachineWorkflow workflow = (StateMachineWorkflow)WorkflowRuntime.Current.GetService <IWorkFlowDefinePersistService>().GetWorkflowDefine(workflowName);

            return(new List <ApprovalRole>(workflow.Roles));
        }
コード例 #15
0
        /// <summary>
        /// Gets the name of the user role by.
        /// </summary>
        /// <param name="define">The define.</param>
        /// <param name="roleName">Name of the role.</param>
        /// <returns></returns>
        public static ApprovalRole GetUserRoleByName(WorkFlowDefine define, string roleName)
        {
            StateMachineWorkflow workflow = define as StateMachineWorkflow;

            return(workflow.GetRoleByName(roleName));
        }