public void ReplaceAssigneeExecutorTestReplay() { IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateSimpleProcessDescriptor(); IWfActivityDescriptor normalActDesp = processDesp.Activities["NormalActivity"]; IUser originalApprover = (IUser)OguObjectSettings.GetConfig().Objects[OguObject.approver1.ToString()].Object; normalActDesp.Resources.Clear(); normalActDesp.Resources.Add(new WfUserResourceDescriptor(originalApprover)); IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp); WfProcessTestCommon.MoveToNextDefaultActivityWithExecutor(process); process = WfRuntime.GetProcessByProcessID(process.ID); IUser newApprover = (IUser)OguObjectSettings.GetConfig().Objects[OguObject.approver2.ToString()].Object; WfReplaceAssigneesExecutor executor = new WfReplaceAssigneesExecutor(process.CurrentActivity, process.CurrentActivity, originalApprover, new IUser[] { newApprover }); executor.Execute(); process = WfRuntime.GetProcessByProcessID(process.ID); UserTaskCollection tasks = UserTaskAdapter.Instance.LoadUserTasks(build => build.AppendItem("ACTIVITY_ID", process.CurrentActivity.ID)); Assert.AreEqual(1, tasks.Count); Assert.AreEqual(newApprover.ID, tasks[0].SendToUserID); }
public int DisplaceUserInProcess(string processID, string userID, string[] displacingUserIDArray) { IUser originalUser = OguMechanismFactory.GetMechanism().GetObjects <IUser>(SearchOUIDType.Guid, userID).FirstOrDefault(); OguObjectCollection <IUser> displacingUsers = OguMechanismFactory.GetMechanism().GetObjects <IUser>(SearchOUIDType.Guid, displacingUserIDArray); List <IUser> distinctUsers = new List <IUser>(); foreach (IUser user in displacingUsers) { if (distinctUsers.Exists(u => u.ID == user.ID) == false) { distinctUsers.Add(user); } } IWfProcess process = WfRuntime.GetProcessByProcessID(processID); int result = 0; foreach (IWfActivity activity in process.Activities) { bool needReplace = false; if (activity.Status != WfActivityStatus.Completed && activity.Status != WfActivityStatus.Aborted) { if (activity.Status == WfActivityStatus.Running || activity.Status == WfActivityStatus.Pending) { needReplace = activity.Assignees.Contains(originalUser.ID); } else { needReplace = activity.Candidates.Contains(originalUser.ID); } if (needReplace) { WfReplaceAssigneesExecutor executor = new WfReplaceAssigneesExecutor(null, activity, originalUser, distinctUsers); executor.ExecuteNotPersist(); result++; } } } using (TransactionScope scope = TransactionScopeFactory.Create()) { WfReplaceAssigneesExecutor.DoUserTaskOperations(); WfRuntime.PersistWorkflows(); scope.Complete(); } return(result); }
protected void changeAssignees_ExecuteStep(object data) { ChangeAssigneesParam cap = JSONSerializerExecute.Deserialize <ChangeAssigneesParam>(data); IWfProcess process = WfRuntime.GetProcessByProcessID(cap.ProcessID); CheckPermission(process); WfReplaceAssigneesExecutor executor = new WfReplaceAssigneesExecutor(null, process.CurrentActivity, null, cap.Users); executor.Execute(); }
public static void ExecuteReplace(ReplaceAssigneeHelperData rahd) { rahd.NullCheck("错误:传入参数为空"); //取原始待办人 IUser originalUser = (IUser)OguBase.CreateWrapperObject(rahd.OriginalUserID, SchemaType.Users); //取目的待办人 List <IUser> targetUsers = new List <IUser>(); foreach (string userID in rahd.TargetUsersID) { IUser targetUser = (IUser)OguBase.CreateWrapperObject(userID, SchemaType.Users); targetUsers.Add(targetUser); } //获取用户任务 UserTaskCollection tasks = UserTaskAdapter.Instance.LoadUserTasks( build => build.AppendItem("TASK_GUID", rahd.TaskID, "=")); (tasks.Count > 0).FalseThrow("指定的任务ID'{0}'不存在!", rahd.TaskID); //取出Activity string activityID = tasks[0].ActivityID; //待办人替换处理 try { IWfProcess process = WfRuntime.GetProcessByActivityID(activityID); IWfActivity activity = process.Activities[activityID]; //创建Executor并执行 WfReplaceAssigneesExecutor replaceExec = new WfReplaceAssigneesExecutor(activity, activity, originalUser, targetUsers); replaceExec.Execute(); } catch { } }
public string ChangeActivityAssignee(string userJsonStr, string activityID) { if (activityID.IsNullOrEmpty()) { return(Translator.Translate(Define.DefaultCulture, "请先选择相应的活动!")); } WfConverterHelper.RegisterConverters(); try { var userList = JSONSerializerExecute.Deserialize <List <OguUser> >(userJsonStr); var process = WfRuntime.GetProcessByActivityID(activityID); var activityInstance = process.Activities[activityID]; if (activityInstance == null) { return(Translator.Translate(Define.DefaultCulture, "未找到活动ID为{0}的流程!", activityID)); } WfReplaceAssigneesExecutor executor = new WfReplaceAssigneesExecutor( WfClientContext.Current.CurrentActivity, activityInstance, null, userList); WfClientContext.Current.Execute(executor); return(string.Empty); } catch (Exception ex) { ex = ExceptionHelper.GetRealException(ex); return(Translator.Translate(Define.DefaultCulture, "修改当前活动点操作人失败!失败原因:{0}", ex.Message)); } }
protected void changeCandidates_ExecuteStep(object data) { ChangeAssigneesParam cap = JSONSerializerExecute.Deserialize <ChangeAssigneesParam>(data); IWfProcess process = WfRuntime.GetProcessByProcessID(cap.ProcessID); CheckPermission(process); foreach (IWfActivity activity in process.Activities) { if (activity.Status != WfActivityStatus.Completed && activity.Status != WfActivityStatus.Aborted) { if (activity.Candidates.Contains(cap.OriginalUser.ID)) { WfReplaceAssigneesExecutor executor = new WfReplaceAssigneesExecutor(null, activity, cap.OriginalUser, cap.Users); executor.ExecuteNotPersist(); } } } WfRuntime.PersistWorkflows(); }