Пример #1
0
        /// <summary>
        /// 创建一个缺省的审批流模板
        /// </summary>
        /// <param name="key"></param>
        /// <param name="processDespKey">流程描述的Key</param>
        /// <param name="execSequence"></param>
        /// <param name="blockingType"></param>
        /// <param name="users"></param>
        /// <returns></returns>
        public static IWfBranchProcessTemplateDescriptor CreateDefaultApprovalTemplate(
            string key,
            string processDespKey,
            WfBranchProcessExecuteSequence execSequence,
            WfBranchProcessBlockingType blockingType,
            IEnumerable <IUser> users)
        {
            key.CheckStringIsNullOrEmpty("key");
            users.NullCheck("users");

            WfBranchProcessTemplateDescriptor template = new WfBranchProcessTemplateDescriptor(key);

            template.BranchProcessKey = WfProcessDescriptorManager.DefaultApprovalProcessKey;
            template.ExecuteSequence  = execSequence;
            template.BlockingType     = blockingType;

            users = users.Distinct(new OguObjectIDEqualityComparer <IUser>());

            foreach (IUser user in users)
            {
                template.Resources.Add(new WfUserResourceDescriptor(user));
            }

            return(template);
        }
Пример #2
0
        /// <summary>
        /// 判断阻塞状态
        /// </summary>
        /// <param name="blockingType"></param>
        /// <returns></returns>
        public bool IsBlocking(WfBranchProcessBlockingType blockingType)
        {
            bool result = true;

            switch (blockingType)
            {
            case WfBranchProcessBlockingType.WaitAllBranchProcessesComplete:
                result = this.Completed + this.Aborted < this.Total;
                break;

            case WfBranchProcessBlockingType.WaitNoneOfBranchProcessComplete:
                result = false;
                break;

            case WfBranchProcessBlockingType.WaitAnyoneBranchProcessComplete:
                result = this.Completed == 0;
                break;

            case WfBranchProcessBlockingType.WaitSpecificBranchProcessesComplete:
                //todo://确定当前组中的所有流程,某些特定流程中的分支完成了,就算完成
                break;

            default:
                break;
            }

            return(result);
        }
Пример #3
0
        public WfConsignExecutor(IWfActivity operatorActivity,
                                 IWfActivity targetActivity,
                                 WfAssigneeCollection assignees,
                                 IEnumerable <IUser> consignUsers,
                                 IEnumerable <IUser> circulateUsers,
                                 WfBranchProcessBlockingType blockingType,
                                 WfBranchProcessExecuteSequence sequence)
            : base(operatorActivity, targetActivity, WfControlOperationType.Consign)
        {
            assignees.NullCheck("assignees");
            consignUsers.NullCheck("users");

            (consignUsers.Count() > 0).FalseThrow <WfRuntimeException>("参与会签的用户数必须大于零");

            this.Assignees.CopyFrom(assignees);
            this.ConsignUsers   = consignUsers;
            this.CirculateUsers = circulateUsers;
            this.BlockingType   = blockingType;
            this.Sequence       = sequence;
        }
Пример #4
0
		public WfConsignExecutor(IWfActivity operatorActivity,
								IWfActivity targetActivity,
								WfAssigneeCollection assignees,
								IEnumerable<IUser> consignUsers,
								IEnumerable<IUser> circulateUsers,
								WfBranchProcessBlockingType blockingType,
								WfBranchProcessExecuteSequence sequence)
			: base(operatorActivity, targetActivity, WfControlOperationType.Consign)
		{
			assignees.NullCheck("assignees");
			consignUsers.NullCheck("users");

			(consignUsers.Count() > 0).FalseThrow<WfRuntimeException>("参与会签的用户数必须大于零");

			this.Assignees.CopyFrom(assignees);
			this.ConsignUsers = consignUsers;
			this.CirculateUsers = circulateUsers;
			this.BlockingType = blockingType;
			this.Sequence = sequence;
		}
Пример #5
0
		/// <summary>
		/// 构造缺省的会签模板
		/// </summary>
		/// <param name="key"></param>
		/// <param name="blockingType"></param>
		/// <returns></returns>
		public static IWfBranchProcessTemplateDescriptor CreateDefaultConsignTemplate(
			string key, 
			WfBranchProcessExecuteSequence execSequence,
			WfBranchProcessBlockingType blockingType,
			IEnumerable<IUser> users)
		{
			key.CheckStringIsNullOrEmpty("key");
			users.NullCheck("users");

			WfBranchProcessTemplateDescriptor template = new WfBranchProcessTemplateDescriptor(key);

			template.BranchProcessKey = WfProcessDescriptorManager.DefaultConsignProcessKey;
			template.ExecuteSequence = execSequence;
			template.BlockingType = blockingType;

			users = users.Distinct(new OguObjectIDEqualityComparer<IUser>());

			foreach (IUser user in users)
				template.Resources.Add(new WfUserResourceDescriptor(user));
			
			return template;
		}
		/// <summary>
		/// 判断阻塞状态
		/// </summary>
		/// <param name="blockingType"></param>
		/// <returns></returns>
		public bool IsBlocking(WfBranchProcessBlockingType blockingType)
		{
			bool result = true;

			switch (blockingType)
			{
				case WfBranchProcessBlockingType.WaitAllBranchProcessesComplete:
					result = this.Completed + this.Aborted < this.Total;
					break;
				case WfBranchProcessBlockingType.WaitNoneOfBranchProcessComplete:
					result = false;
					break;
				case WfBranchProcessBlockingType.WaitAnyoneBranchProcessComplete:
					result = this.Completed == 0;
					break;
				case WfBranchProcessBlockingType.WaitSpecificBranchProcessesComplete:
					//todo://确定当前组中的所有流程,某些特定流程中的分支完成了,就算完成
					break;
				default:
					break;
			}

			return result;
		}
Пример #7
0
        private static IWfBranchProcessTemplateDescriptor CreateConsignTemplate(WfBranchProcessExecuteSequence execSequence, WfBranchProcessBlockingType blockingType)
        {
            string key = "WfBranchProcessTemplateDescriptorKey";

            WfBranchProcessTemplateDescriptor template = new WfBranchProcessTemplateDescriptor(key);

            template.BranchProcessKey = WfProcessDescriptorManager.DefaultConsignProcessKey;
            template.ExecuteSequence  = execSequence;
            template.BlockingType     = blockingType;

            return(template);
        }
Пример #8
0
        private static IWfProcess GetProcessInstanceWithBranchProcessRunning(WfBranchProcessExecuteSequence sequence, WfBranchProcessBlockingType blockingType)
        {
            IWfProcess       process = WfProcessTestCommon.StartupProcessWithAssignee();
            WfTransferParams tp      = ProcessTestHelper.GetInstanceOfWfTransferParams(process, sequence, blockingType);

            process.MoveTo(tp);

            WfRuntime.PersistWorkflows();

            return(WfRuntime.GetProcessByProcessID(process.ID));
        }
		private static IWfProcess GetProcessInstanceWithBranchProcessRunning(WfBranchProcessExecuteSequence sequence, WfBranchProcessBlockingType blockingType)
		{
			IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();
			WfTransferParams tp = ProcessTestHelper.GetInstanceOfWfTransferParams(process, sequence, blockingType);

			process.MoveTo(tp);

			WfRuntime.PersistWorkflows();

			return WfRuntime.GetProcessByProcessID(process.ID);
		}
Пример #10
0
        /// <summary>
        /// 保证主流程继续执行,使某个节点的所有子流程达到一定条件
        /// </summary>
        /// <param name="procGroupColl"></param>
        public static void CompleteActivityBranchProcessesByBlockingType(IWfActivity activity, WfBranchProcessBlockingType blockingType)
        {
            WfBranchProcessGroupCollection procGroupColl = activity.BranchProcessGroups;

            foreach (WfBranchProcessGroup procGroup in procGroupColl)
            {
                switch (blockingType)
                {
                case WfBranchProcessBlockingType.WaitAllBranchProcessesComplete:
                    activity.CompleteBranchProcesses(true);
                    break;

                case WfBranchProcessBlockingType.WaitNoneOfBranchProcessComplete:
                    break;

                case WfBranchProcessBlockingType.WaitAnyoneBranchProcessComplete:
                    activity.BranchProcessGroups[0].Branches[0].CompleteProcess(true);
                    break;

                case WfBranchProcessBlockingType.WaitSpecificBranchProcessesComplete:
                    //todo:暂时未实现
                    break;

                default:
                    break;
                }
            }
        }
Пример #11
0
        /// <summary>
        /// 获取参数实例,即设置即将流转的节点为带分支流程
        /// </summary>
        /// <param name="process"></param>
        /// <param name="sequence"></param>
        /// <param name="blockingType"></param>
        /// <returns></returns>
        public static WfTransferParams GetInstanceOfWfTransferParams(IWfProcess process, WfBranchProcessExecuteSequence sequence, WfBranchProcessBlockingType blockingType)
        {
            WfTransferParams tp = new WfTransferParams(process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity);

            tp.Assignees.Add((IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object);

            tp.BranchTransferParams.Add(new WfBranchProcessTransferParams(
                                            CreateConsignTemplate(sequence, blockingType),
                                            new IUser[] { (IUser)OguObjectSettings.GetConfig().Objects["approver1"].Object,
                                                          (IUser)OguObjectSettings.GetConfig().Objects["approver2"].Object }));

            return(tp);
        }
Пример #12
0
 public static WfClientBranchProcessBlockingType ToClientBranchProcessBlockingType(this WfBranchProcessBlockingType blockingType)
 {
     return((WfClientBranchProcessBlockingType)blockingType);
 }
Пример #13
0
		private static IWfBranchProcessTemplateDescriptor CreateConsignTemplate(WfBranchProcessExecuteSequence execSequence, WfBranchProcessBlockingType blockingType)
		{
			string key = "WfBranchProcessTemplateDescriptorKey";

			WfBranchProcessTemplateDescriptor template = new WfBranchProcessTemplateDescriptor(key);

			template.BranchProcessKey = WfProcessDescriptorManager.DefaultConsignProcessKey;
			template.ExecuteSequence = execSequence;
			template.BlockingType = blockingType;

			return template;
		}
Пример #14
0
		/// <summary>
		/// 保证主流程继续执行,使某个节点的所有子流程达到一定条件
		/// </summary>
		/// <param name="procGroupColl"></param>
		public static void CompleteActivityBranchProcessesByBlockingType(IWfActivity activity, WfBranchProcessBlockingType blockingType)
		{
			WfBranchProcessGroupCollection procGroupColl = activity.BranchProcessGroups;

			foreach (WfBranchProcessGroup procGroup in procGroupColl)
			{
				switch (blockingType)
				{
					case WfBranchProcessBlockingType.WaitAllBranchProcessesComplete:
						activity.CompleteBranchProcesses(true);
						break;
					case WfBranchProcessBlockingType.WaitNoneOfBranchProcessComplete:
						break;
					case WfBranchProcessBlockingType.WaitAnyoneBranchProcessComplete:
						activity.BranchProcessGroups[0].Branches[0].CompleteProcess(true);
						break;
					case WfBranchProcessBlockingType.WaitSpecificBranchProcessesComplete:
						//todo:暂时未实现
						break;
					default:
						break;
				}
			}
		}
Пример #15
0
		/// <summary>
		/// 获取参数实例,即设置即将流转的节点为带分支流程
		/// </summary>
		/// <param name="process"></param>
		/// <param name="sequence"></param>
		/// <param name="blockingType"></param>
		/// <returns></returns>
		public static WfTransferParams GetInstanceOfWfTransferParams(IWfProcess process, WfBranchProcessExecuteSequence sequence, WfBranchProcessBlockingType blockingType)
		{
			WfTransferParams tp = new WfTransferParams(process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity);

			tp.Assignees.Add((IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object);

			tp.BranchTransferParams.Add(new WfBranchProcessTransferParams(
					CreateConsignTemplate(sequence, blockingType),
					new IUser[] {(IUser)OguObjectSettings.GetConfig().Objects["approver1"].Object,
						(IUser)OguObjectSettings.GetConfig().Objects["approver2"].Object}));

			return tp;
		}