/// <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); }
/// <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); }
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; }
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; }
/// <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; }
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); }
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); }
/// <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; } } }
/// <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); }
public static WfClientBranchProcessBlockingType ToClientBranchProcessBlockingType(this WfBranchProcessBlockingType blockingType) { return((WfClientBranchProcessBlockingType)blockingType); }
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; }
/// <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; }