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(); }
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; }