/// <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>(); StateMachineWorkflow workflow = (StateMachineWorkflow)WorkflowRuntime.Current.GetService <IWorkFlowDefinePersistService>().GetWorkflowDefine(workflowName); Dictionary <string, int> stateIndex = new Dictionary <string, int>(); List <string> allStates = new List <string>(); for (int i = 0; i < workflow.States.Length; i++) { ApprovalState state = workflow.States[i]; if (state.IsApprovalState && !state.Name.Equals(workflow.InitState)) { stateIndex.Add(state.Name, i); allStates.Add(state.Name); } } if (allStates.Count == 0) { return(new InstanceCollection()); } instances.AddRange(WorkflowRuntime.Current.GetListByState(workflowName, allStates.ToArray())); InstanceCollection collection = new InstanceCollection(); foreach (StateMachineWorkflowInstance one in instances) { InstanceWithRole o = new InstanceWithRole(one, role, true); o.TaskName = ((char)((int)'a' + stateIndex[one.CurrentState.Name])) + "." + one.CurrentState.Description; collection.Add(o); } return(collection); }
/// <summary> /// Moves the on. /// </summary> /// <param name="stateName">Name of the state.</param> public void MoveOn(string stateName) { ApprovalState nextState = ((StateMachineWorkflow)Workflow).GetStateByName(stateName); this.stateRecordNames.Add(this.stateName); this.stateName = nextState.Name; }
/// <summary> /// 是否是当前用户的代理任务 /// </summary> /// <param name="instance">The instance.</param> /// <param name="userId">The user id.</param> /// <returns></returns> public virtual bool IsMyAgentInstance(WorkflowInstance instance, string userId) { if (instance == null) { throw new ArgumentNullException("instance"); } if (string.IsNullOrEmpty(userId)) { throw new ArgumentNullException("userId"); } ApprovalState currentState = ((StateMachineWorkflowInstance)instance).CurrentState; IApprovalSaveService approvalService = WorkflowRuntime.Current.GetService <IApprovalSaveService>(); List <ApprovalAgent> agentList = approvalService.GetValidAgentInfoByToUser(userId); if (agentList != null && agentList.Count > 0) { foreach (ApprovalAgent agentInfo in agentList) { foreach (ApprovalEvent approvalEvent in currentState.Events) { if (IsMyTaskInstance(instance, agentInfo.SetUserId)) { return(true); } } } } return(false); }
/// <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); }
/// <summary> /// Gets the sub unit role list. /// </summary> /// <param name="taskStateList">The task state list.</param> /// <param name="taskName">Name of the task.</param> /// <returns></returns> protected override List <StateMachineWorkflowInstance> GetSubUnitRoleList(List <string> taskStateList, string taskName) { List <StateMachineWorkflowInstance> instanceList = new List <StateMachineWorkflowInstance>(); foreach (string stateName in taskStateList) { ApprovalEvent taskEvent = new ApprovalEvent(); ApprovalState state = Workflow.GetStateByName(stateName); if (state != null) { foreach (ApprovalEvent approvalEvent in state.Events) { foreach (EventRole role in approvalEvent.Roles) { if (role.Name == Rules.UserRole.Name && taskName == role.TaskName) { taskEvent = approvalEvent; break; } } } //如果用户为二级单位专办员 if (Rules.IsCreator()) { //如果该任务只允许立项创建者办理 if (taskEvent.Authorization != Authorization.DenyOwner.ToString()) { instanceList.AddRange(GetOwnerList(new string[] { stateName })); } } else { instanceList.AddRange(GetUnitList(new string[] { stateName })); } //非用户创建,但是属于指定专办的实例,且实例为指定状态 if (taskEvent.Authorization == Authorization.DenyOwner.ToString()) { //其它二级单位专办员获得专办立项列表 List <ApprovalAssignment> assignmentList = WorkflowRuntime.Current.GetService <IApprovalSaveService>().GetAssignmentByToUnit(this.Workflow.Name, UnitCode); foreach (ApprovalAssignment assignment in assignmentList) { StateMachineWorkflowInstance assignInstance = (StateMachineWorkflowInstance)WorkflowRuntime.Current.GetInstance(assignment.WorkflowInstanceId); if (assignInstance.StateName == stateName) { instanceList.Add(assignInstance); } } } } } return(instanceList); }
internal static bool IsMineICanDo(ApprovalState state, ApprovalRole role) { foreach (ApprovalEvent oneEvent in state.Events) { foreach (EventRole one in oneEvent.Roles) { if (one.Name.Equals(role.Name, StringComparison.OrdinalIgnoreCase) && (oneEvent.Authorization == Authorization.OwnerOnly.ToString() || oneEvent.Authorization == Authorization.All.ToString())) { return(true); } } } return(false); }
/// <summary> /// 是否是当前用户的任务 /// </summary> /// <param name="instance">工作流实例</param> /// <param name="userId">用户Id</param> /// <returns>是返回True 不是返回False</returns> public virtual bool IsMyTaskInstance(WorkflowInstance instance, string userId) { if (instance == null) { throw new ArgumentNullException("instance"); } if (string.IsNullOrEmpty(userId)) { throw new ArgumentNullException("userId"); } IApprovalSaveService service = WorkflowRuntime.Current.GetService <IApprovalSaveService>(); ApprovalState currentState = ((StateMachineWorkflowInstance)instance).CurrentState; List <ApprovalAssignment> assignments = service.GetAssignmentByAssignState(instance.Id, currentState.Name); if (assignments.Count == 0) { foreach (ApprovalEvent approvalEvent in currentState.Events) { if (IsAuthorized(userId, approvalEvent, instance)) { return(true); } } } else { IUserIdentity userIdentity = WorkflowRuntime.Current.GetService <IIdentityService>().GetUserIdentity(userId); foreach (ApprovalAssignment assignment in assignments) { if (assignment.ToUserId == userId) { return(true); } if (assignment.ToUserId == null && assignment.ToUnitCode.Equals(userIdentity.GetUserUnitCode(), StringComparison.OrdinalIgnoreCase)) { return(true); } } } return(false); }
/// <summary> /// Initializes a new instance of the <see cref="OnInstanceEndArg"/> class. /// </summary> public OnInstanceEndArg(int eaid, Activity lastActivity, ApprovalState lastState) { this.groupId = eaid; this.lastActivity = lastActivity; this.lastState = lastState; }