private static void FillStatusAndAssignees(WfClientMainStreamActivityDescriptor client, IWfMainStreamActivityDescriptor server) { IWfActivity actInstance = server.Activity.ProcessInstance.Activities. FindActivityByDescriptorKey(server.Activity.Key); if (actInstance != null) { client.Status = actInstance.Status.ToClientActivityStatus(); client.Elapsed = server.Elapsed; client.ActivityInstanceID = actInstance.ID; client.Operator = (WfClientUser)actInstance.Operator.ToClientOguObject(); client.BranchProcessGroupsCount = actInstance.BranchProcessGroups.Count; client.FromTransitionDescriptor = ConvertServerTransitionToClient(actInstance.FromTransitionDescriptor); client.ToTransitionDescriptor = ConvertServerTransitionToClient(actInstance.ToTransitionDescriptor); if (actInstance.Assignees.Count != 0) { WfClientAssigneeCollectionConverter.Instance.ServerToClient(actInstance.Assignees, client.Assignees); } else { WfAssigneeCollection candidates = actInstance.Candidates.GetSelectedAssignees(); WfClientAssigneeCollectionConverter.Instance.ServerToClient(candidates, client.Assignees); } } }
/// <summary> /// 当前用户是否在Assignee中,同时也会检查Url /// </summary> /// <returns></returns> private bool IsUserInAssignees(WfAssigneeCollection currentActivityAssignees) { bool result = false; IList <WfAssignee> assignees = currentActivityAssignees.FindAll(a => string.Compare(a.User.ID, this.User.ID, true) == 0); if (assignees.Count > 0) { int urlEmptyCount = 0; foreach (WfAssignee assignee in assignees) { if (assignee.Url.IsNullOrEmpty()) { urlEmptyCount++; } else if (AssigneeUriIsSameAsEntryUri(new Uri(assignee.Url, UriKind.RelativeOrAbsolute))) { result = true; break; } } //如果所有assignees的url都是空,则不比较url了。 if (result == false && urlEmptyCount == assignees.Count) { result = true; } } return(result); }
public WfControlNextStep(IWfActivity toActivity) { toActivity.NullCheck("toActivity"); this.ActivityDescriptor = toActivity.Descriptor; this._Candidates = toActivity.Candidates.GetSelectedAssignees(); }
private Control GetCandidatesOrAssigneesControl(WfAssigneeCollection assignees, string defaultValue) { HtmlGenericControl userNames = new HtmlGenericControl("span"); string splitter = ","; if (this.EnableUserPresence) { splitter = " "; } if (assignees != null && assignees.Count > 0) { for (int i = 0; i < assignees.Count; i++) { if (i > 0) { userNames.Controls.Add(new LiteralControl(splitter)); } userNames.Controls.Add(GetUserNameControl(assignees[i].User)); } } else { userNames.Controls.Add(new LiteralControl(HttpUtility.HtmlEncode(defaultValue))); } return(userNames); }
protected override WfExecutorBase CreateExecutor() { WfAssigneeCollection wfac = new WfAssigneeCollection(); wfac.Add(this.selectedUsers); return new WfAddApproverExecutor(WfClientContext.Current.OriginalCurrentActivity, WfClientContext.Current.OriginalCurrentActivity, wfac) { AddApproverMode = this.AddApproverMode }; }
private static bool IsUserInAssignees(string userID, WfAssigneeCollection currentActivityAssignees) { return(currentActivityAssignees.Exists(a => string.Compare(a.User.ID, userID, true) == 0)); //bool result = false; //IList<WfAssignee> assignees = currentActivityAssignees.FindAll(a => a.User.ID == userID); //if (assignees.Count > 0) //{ // int urlEmptyCount = 0; // foreach (WfAssignee assignee in assignees) // { // if (assignee.Url.IsNullOrEmpty()) // { // urlEmptyCount++; // } // else // { // if (AssigneeUriIsSameAsEntryUri(new Uri(assignee.Url, UriKind.RelativeOrAbsolute))) // { // result = true; // break; // } // } // } // //如果所有assignees的url都是空,则不比较url了。 // if (result == false && urlEmptyCount == assignees.Count) // result = true; //} //return result; }
public WfAddApproverExecutor(IWfActivity operatorActivity, IWfActivity targetActivity, WfAssigneeCollection assignees) : base(operatorActivity, targetActivity, WfControlOperationType.AddApprover) { assignees.NullCheck("assingees"); this.Assignees.CopyFrom(assignees); }
private Control GetActivityPeopleNameDisplayControl(IWfActivity wfActivity, IWfMainStreamActivityDescriptor mainStreamActivity) { Control userNames = null; if (wfActivity.Operator != null && wfActivity.Status != WfActivityStatus.NotRunning) { userNames = GetUserNameControl(wfActivity.Operator); } else if (wfActivity.Assignees.Count != 0) { userNames = GetCandidatesOrAssigneesControl(wfActivity.Assignees, mainStreamActivity.Activity.Name); } else { WfAssigneeCollection candidates = wfActivity.Candidates.GetSelectedAssignees(); if (candidates.Count != 0) { userNames = GetCandidatesOrAssigneesControl(candidates, mainStreamActivity.Activity.Name); } else { userNames = new HtmlGenericControl("span") { InnerText = string.Empty } }; } return(userNames); }
public string GetActivityRelatedUsers(string activityID) { var activityInstance = WfClientContext.Current.CurrentActivity.Process.Activities[activityID]; if (activityInstance == null) { return(string.Empty); } if (activityInstance.Assignees.Count > 0) { WfConverterHelper.RegisterConverters(); var userList = activityInstance.Assignees.ToUsers(); return(JSONSerializerExecute.Serialize(userList)); } WfAssigneeCollection candidates = activityInstance.Candidates.GetSelectedAssignees(); if (candidates.Count > 0) { WfConverterHelper.RegisterConverters(); IEnumerable <IUser> userList = candidates.ToUsers(); return(JSONSerializerExecute.Serialize(userList)); } return(string.Empty); }
private static void SyncActivityAssigneesUrl(UserTask task, WfAssigneeCollection assignees) { foreach (WfAssignee assignee in assignees) { if (assignee.User != null && string.Compare(assignee.User.ID, task.SendToUserID, true) == 0) assignee.Url = task.Url; } }
public WfControlNextStep(IWfTransitionDescriptor transition, IWfActivity toActivity) { transition.NullCheck("transition"); toActivity.NullCheck("toActivity"); this.ActivityDescriptor = toActivity.Descriptor; this._Candidates = toActivity.Candidates.GetSelectedAssignees();; this.TransitionDescriptor = transition; }
public static void AreSame(this WfClientAssigneeCollection expected, WfAssigneeCollection actual) { Assert.AreEqual(expected.Count, actual.Count); for (int i = 0; i < expected.Count; i++) { expected[i].AreSame(actual[i]); } }
private int Find(WfAssigneeCollection wfAssigneeCollection, string id) { int i = 0; foreach (var assignee in wfAssigneeCollection) { if (string.Compare(assignee.User.ID, id) == 0) { i++; } } return(i); }
private static void ConsignExecutorWithCondition(IWfProcess process, out List <IUser> users) { WfAssigneeCollection assignees = new WfAssigneeCollection(); assignees.Add((IUser)OguObjectSettings.GetConfig().Objects[OguObject.approver1.ToString()].Object); users = new List <IUser>(); users.Add((IUser)OguObjectSettings.GetConfig().Objects[OguObject.requestor.ToString()].Object); users.Add((IUser)OguObjectSettings.GetConfig().Objects[OguObject.approver2.ToString()].Object); WfConsignExecutor exec = new WfConsignExecutor(process.CurrentActivity, process.CurrentActivity, assignees, users, new List <IUser>(), WfBranchProcessBlockingType.WaitAllBranchProcessesComplete, WfBranchProcessExecuteSequence.Parallel); exec.Execute(); }
public WfExecutorBase CreateExecutor() { WfExecutorBase executor = null; switch (this.OperationType) { case WfControlOperationType.MoveTo: executor = new WfMoveToExecutor( WfClientContext.Current.OriginalActivity, WfClientContext.Current.OriginalActivity, ToTransferParams(), WfClientContext.Current.Locks); break; case WfControlOperationType.Consign: { WfAssigneeCollection assignees = new WfAssigneeCollection(); WfAssignee assignee = new WfAssignee(WfClientContext.Current.User); assignees.Add(assignee); executor = new WfConsignExecutor( WfClientContext.Current.OriginalActivity, WfClientContext.Current.OriginalActivity, assignees, this.Assignees.ToUsers(), this.Circulators.ToUsers(), BlockingType, SequenceType); } break; case WfControlOperationType.Return: if (this._RejectMode == WfRejectMode.LikeAddApprover) { executor = new WfAddApproverExecutor(WfClientContext.Current.CurrentActivity, WfClientContext.Current.CurrentActivity.Process.Activities.FindActivityByDescriptorKey(TargetActivityDescriptor.Key)); } else { executor = new WfReturnExecutor(WfClientContext.Current.CurrentActivity, WfClientContext.Current.CurrentActivity.Process.Activities.FindActivityByDescriptorKey(TargetActivityDescriptor.Key)); } break; default: throw new WfRuntimeException(Translator.Translate(Define.DefaultCulture, "不能处理操作类型为{0}", this.OperationType)); } return(executor); }
public void AddApproverExecutorTest() { //Initial NormalActivity NormalActivity1 NormalActivity2 NormalActivity3 Completed IUser user = (IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object; IWfProcessDescriptor procDesp = WfProcessTestCommon.CreateProcessDescriptor(); WfUserResourceDescriptor userDesp = new WfUserResourceDescriptor(user); procDesp.InitialActivity.Resources.Add(userDesp); WfProcessStartupParams startParams = WfProcessTestCommon.GetInstanceOfWfProcessStartupParams(procDesp); WfStartWorkflowExecutor exec = new WfStartWorkflowExecutor(null, startParams); IWfProcess proc = exec.Execute(); //启动流程 IWfProcess wfp = WfRuntime.GetProcessByProcessID(proc.ID); MoveToExecutor(wfp); //流转一步 ,即第2个节点 IWfProcess p = WfRuntime.GetProcessByProcessID(proc.ID); WfAssigneeCollection assignees = new WfAssigneeCollection(); assignees.Add((IUser)OguObjectSettings.GetConfig().Objects[OguObject.approver1.ToString()].Object); WfAddApproverExecutor addExec = new WfAddApproverExecutor(p.CurrentActivity, p.CurrentActivity, assignees); addExec.Execute(); //加签,即流转到加签点上 IWfProcess process = WfRuntime.GetProcessByProcessID(p.ID); Assert.AreEqual(process.Descriptor.GetMainStreamActivities().Count, process.Activities.Count - 2, "动态添加两个活动,因被加签人要回到加签人"); Assert.AreEqual(2, process.ElapsedActivities.Count); Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Ban)); Assert.IsTrue(process.CurrentActivity.Descriptor.ToTransitions.Count == 1); Assert.IsNotNull(process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity); IWfProcess wfProcess9 = WfRuntime.GetProcessByProcessID(process.ID); WfWithdrawExecutor withdrawExec = new WfWithdrawExecutor(wfProcess9.CurrentActivity, wfProcess9.CurrentActivity); withdrawExec.Execute(); IWfProcess wfProcess1 = WfRuntime.GetProcessByProcessID(wfProcess9.ID); Assert.AreEqual(wfProcess1.Activities.Count, wfProcess1.Descriptor.GetMainStreamActivities().Count, "此处应该撤回到加签的活动点上,同时被加签的两个点都应该移除"); Assert.AreEqual(1, wfProcess1.ElapsedActivities.Count); Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(wfProcess1.CurrentActivity.ID, TaskStatus.Ban)); Assert.IsTrue(wfProcess1.CurrentActivity.Descriptor.ToTransitions.Count == 1); }
public void ClientToServer(WfClientAssigneeCollection client, WfAssigneeCollection server) { client.NullCheck("client"); server.NullCheck("server"); server.Clear(); foreach (WfClientAssignee c in client) { WfAssignee s = null; WfClientAssigneeConverter.Instance.ClientToServer(c, ref s); server.Add(s); } }
public void ServerToClient(WfAssigneeCollection server, WfClientAssigneeCollection client) { server.NullCheck("server"); client.NullCheck("client"); client.Clear(); foreach (WfAssignee s in server) { WfClientAssignee c = null; WfClientAssigneeConverter.Instance.ServerToClient(s, ref c); client.Add(c); } }
private static string GetAssigneesName(WfAssigneeCollection assignees) { StringBuilder strB = new StringBuilder(); foreach (WfAssignee assignee in assignees) { if (strB.Length > 0) { strB.Append(","); } strB.Append(assignee.User.DisplayName); } return(strB.ToString()); }
private string GetCandidatesOrAssigneesText(WfAssigneeCollection assignees, string defaultValue) { StringBuilder strB = new StringBuilder(); if (assignees != null && assignees.Count > 0) { for (int i = 0; i < assignees.Count; i++) { strB.Append(assignees[i].User.DisplayName + (i < assignees.Count - 1 ? "," : "")); } } else { strB.Append(defaultValue); } return(strB.ToString()); }
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 override object Deserialize(IDictionary <string, object> dictionary, Type type, JavaScriptSerializer serializer) { WfMoveToSelectedResult result = new WfMoveToSelectedResult(); result.OperationType = DictionaryHelper.GetValue(dictionary, "OperationType", WfControlOperationType.MoveTo); result.BlockingType = DictionaryHelper.GetValue(dictionary, "BlockingType", WfBranchProcessBlockingType.WaitAllBranchProcessesComplete); result.SequenceType = DictionaryHelper.GetValue(dictionary, "SequenceType", WfBranchProcessExecuteSequence.Parallel); result.RejectMode = DictionaryHelper.GetValue(dictionary, "RejectMode", WfRejectMode.SelectRejectStep); result.TargetActivityDescriptor = JSONSerializerExecute.Deserialize <IWfActivityDescriptor>(dictionary["TargetActivityDescriptor"]); result.FromTransitionDescriptor = JSONSerializerExecute.Deserialize <IWfTransitionDescriptor>(dictionary["FromTransitionDescriptor"]); result.BranchTemplate = JSONSerializerExecute.Deserialize <IWfBranchProcessTemplateDescriptor>(dictionary["BranchTemplate"]); WfAssigneeCollection assignees = JSONSerializerExecute.Deserialize <WfAssigneeCollection>(dictionary["Assignees"]); result.Assignees.CopyFrom(assignees); WfAssigneeCollection circulators = JSONSerializerExecute.Deserialize <WfAssigneeCollection>(dictionary["Circulators"]); result.Circulators.CopyFrom(circulators); return(result); }
private string GetActivityPeopleNameDisplayText(IWfActivity wfActivity, IWfMainStreamActivityDescriptor mainStreamActivity) { string result = string.Empty; if (wfActivity.Operator != null && wfActivity.Status != WfActivityStatus.NotRunning) { result = wfActivity.Operator.DisplayName; } else if (wfActivity.Assignees.Count != 0) { result = GetCandidatesOrAssigneesText(wfActivity.Assignees, mainStreamActivity.Activity.Name); } else { WfAssigneeCollection candidates = wfActivity.Candidates.GetSelectedAssignees(); if (candidates.Count != 0) { result = GetCandidatesOrAssigneesText(candidates, mainStreamActivity.Activity.Name); } } return(result); }
public static void AreSame(this WfClientAssigneeCollection expected, WfAssigneeCollection actual) { Assert.AreEqual(expected.Count, actual.Count); for (int i = 0; i < expected.Count; i++) expected[i].AreSame(actual[i]); }
//private bool CanTransit(IWfActivity targetActivity) //{ // //广度遍历。。。找最近的目标点。 // bool result = false; // string key= targetActivity.Descriptor.Key; // if (targetActivity.Descriptor.AssociatedActivityKey != null) // key = targetActivity.Descriptor.AssociatedActivityKey; // foreach (var trans in this.Descriptor.ToTransitions) // { // if (trans.ToActivity.Key == key) // { // result = true; // break; // } // } // return result; //} private static IEnumerable<WfResourceDescriptor> GetResources(WfAssigneeCollection wfAssignees) { List<WfResourceDescriptor> list = new List<WfResourceDescriptor>(); foreach (WfAssignee item in wfAssignees) { list.Add(new WfUserResourceDescriptor(item.User)); } return list; }
public WfExecutorBase CreateExecutor() { WfExecutorBase executor = null; switch (this.OperationType) { case WfControlOperationType.MoveTo: executor = new WfMoveToExecutor( WfClientContext.Current.OriginalActivity, WfClientContext.Current.OriginalActivity, ToTransferParams(), WfClientContext.Current.Locks); break; case WfControlOperationType.Consign: { WfAssigneeCollection assignees = new WfAssigneeCollection(); WfAssignee assignee = new WfAssignee(WfClientContext.Current.User); assignees.Add(assignee); executor = new WfConsignExecutor( WfClientContext.Current.OriginalActivity, WfClientContext.Current.OriginalActivity, assignees, this.Assignees.ToUsers(), this.Circulators.ToUsers(), BlockingType, SequenceType); } break; case WfControlOperationType.Return: if (this._RejectMode == WfRejectMode.LikeAddApprover) executor = new WfAddApproverExecutor(WfClientContext.Current.CurrentActivity, WfClientContext.Current.CurrentActivity.Process.Activities.FindActivityByDescriptorKey(TargetActivityDescriptor.Key)); else executor = new WfReturnExecutor(WfClientContext.Current.CurrentActivity, WfClientContext.Current.CurrentActivity.Process.Activities.FindActivityByDescriptorKey(TargetActivityDescriptor.Key)); break; default: throw new WfRuntimeException(Translator.Translate(Define.DefaultCulture, "不能处理操作类型为{0}", this.OperationType)); } return executor; }
/// <summary> /// 得到被委托的人员 /// </summary> /// <param name="sourceAssignees"></param> /// <returns></returns> private static WfAssigneeCollection GetDelegatedAssignees(WfAssigneeCollection sourceAssignees, IWfProcess process) { WfAssigneeCollection result = new WfAssigneeCollection(); foreach (WfAssignee sourceAssignee in sourceAssignees) { WfDelegationCollection delegations = WfDelegationSettings.GetConfig().Reader.GetUserActiveDelegations(sourceAssignee.User, process); foreach (WfDelegation delegation in delegations) { OguUser user = new OguUser(delegation.DestinationUserID); user.DisplayName = delegation.DestinationUserName; user.Name = delegation.DestinationUserName; OguUser delegator = new OguUser(delegation.SourceUserID); delegator.DisplayName = delegation.SourceUserName; delegator.Name = delegation.SourceUserName; WfAssignee assignee = new WfAssignee(user); assignee.AssigneeType = WfAssigneeType.Delegated; assignee.Delegator = delegator; result.Add(assignee); } } return result; }
private string GetCandidatesOrAssigneesText(WfAssigneeCollection assignees, string defaultValue) { StringBuilder strB = new StringBuilder(); if (assignees != null && assignees.Count > 0) { for (int i = 0; i < assignees.Count; i++) { strB.Append(assignees[i].User.DisplayName + (i < assignees.Count - 1 ? "," : "")); } } else { strB.Append(defaultValue); } return strB.ToString(); }
/// <summary> /// 当前用户是否在Assignee中,同时也会检查Url /// </summary> /// <returns></returns> private bool IsUserInAssignees(WfAssigneeCollection currentActivityAssignees) { bool result = false; IList<WfAssignee> assignees = currentActivityAssignees.FindAll(a => string.Compare(a.User.ID, this.User.ID, true) == 0); if (assignees.Count > 0) { int urlEmptyCount = 0; foreach (WfAssignee assignee in assignees) { if (assignee.Url.IsNullOrEmpty()) { urlEmptyCount++; } else if (AssigneeUriIsSameAsEntryUri(new Uri(assignee.Url, UriKind.RelativeOrAbsolute))) { result = true; break; } } //如果所有assignees的url都是空,则不比较url了。 if (result == false && urlEmptyCount == assignees.Count) result = true; } return result; }
private int Find(WfAssigneeCollection wfAssigneeCollection, string id) { int i = 0; foreach (var assignee in wfAssigneeCollection) { if (string.Compare(assignee.User.ID, id) == 0) { i++; } } return i; }
private static bool IsUserInAssignees(string userID, WfAssigneeCollection currentActivityAssignees) { return currentActivityAssignees.Exists(a => string.Compare(a.User.ID, userID, true) == 0); //bool result = false; //IList<WfAssignee> assignees = currentActivityAssignees.FindAll(a => a.User.ID == userID); //if (assignees.Count > 0) //{ // int urlEmptyCount = 0; // foreach (WfAssignee assignee in assignees) // { // if (assignee.Url.IsNullOrEmpty()) // { // urlEmptyCount++; // } // else // { // if (AssigneeUriIsSameAsEntryUri(new Uri(assignee.Url, UriKind.RelativeOrAbsolute))) // { // result = true; // break; // } // } // } // //如果所有assignees的url都是空,则不比较url了。 // if (result == false && urlEmptyCount == assignees.Count) // result = true; //} //return result; }
private static string GetAssigneesName(WfAssigneeCollection assignees) { StringBuilder strB = new StringBuilder(); foreach (WfAssignee assignee in assignees) { if (strB.Length > 0) strB.Append(","); strB.Append(assignee.User.DisplayName); } return strB.ToString(); }
private Control GetCandidatesOrAssigneesControl(WfAssigneeCollection assignees, string defaultValue) { HtmlGenericControl userNames = new HtmlGenericControl("span"); string splitter = ","; if (this.EnableUserPresence) splitter = " "; if (assignees != null && assignees.Count > 0) { for (int i = 0; i < assignees.Count; i++) { if (i > 0) userNames.Controls.Add(new LiteralControl(splitter)); userNames.Controls.Add(GetUserNameControl(assignees[i].User)); } } else { userNames.Controls.Add(new LiteralControl(HttpUtility.HtmlEncode(defaultValue))); } return userNames; }
private void ReplaceResources(WfAssigneeCollection collection) { this.TargetActivity.Descriptor.Resources.Clear(); foreach (IUser user in collection.ToUsers()) this.TargetActivity.Descriptor.Resources.Add(new WfUserResourceDescriptor(user)); }
private void ReplaceAssignees(WfAssigneeCollection collection) { foreach (IUser user in this._OriginalAssignees) collection.Remove(a => string.Compare(a.User.ID, user.ID, true) == 0); collection.Add(this.TargetAssignees); }