/// <summary> /// 处理审批通过的方法 /// </summary> /// <param name="toDoWork"></param> /// <param name="Actioner"></param> private void DoApproval(ToDoWork toDoWork, User Actioner) { var allOfTheNextProcessNodeInstances = toDoWork.ProcessNodeInstance.NextProcessNodeInstances; //能够被指向的下个节点 var canBeActiveNextNodes = allOfTheNextProcessNodeInstances.Where( allOfTheNextNode => allOfTheNextNode.Expression.Compile().Invoke(allOfTheNextNode.BizContext)); //判断当前提交的这个节点的可被激活的下一级节点是否是会签节点,如果是会签节点,就要判断它会签的那些节点是否是审批通过状态 foreach (var canBeActiveNextNode in canBeActiveNextNodes) { //判断某一个节点是否是会签节点 if (this.IsCounterSignature(canBeActiveNextNode)) { } else { //如果非会签节点,那么就得到Linkage var linkages = canBeActiveNextNode.Linkages.Where( linkage => linkage.Expression.Compile().Invoke(canBeActiveNextNode.BizContext)); //生成待办 foreach (var linkage in linkages) { this.HibernateClass.BuildToDo(linkage); } //关闭当前待办 this.HibernateClass.CloseToDoWork(toDoWork); } } }
public object Submit(ToDoWork toDoWork, User Actioner) { //得到该流程实例下所有的流程节点实例 var processNodeInstances = this.HibernateClass.GetProcessNodeInstancesByProcessInstanceID(toDoWork.ProcessNodeInstance.ProcessInstance.ID); switch (toDoWork.Action) { case Action.Approve: this.DoApproval(toDoWork, Actioner); break; case Action.Return: this.DoReturn(toDoWork, Actioner); break; } return new object(); }
/// <summary> /// 处理退回的方法 /// </summary> /// <param name="toDoWork"></param> /// <param name="Actioner"></param> private void DoReturn(ToDoWork toDoWork, User Actioner) { var canBeActivePreProcessNodeInstances = toDoWork.ProcessNodeInstance.PreProcessNodeInstances.Where( preProcessNodeInstance => preProcessNodeInstance.Expression.Compile().Invoke(preProcessNodeInstance.BizContext)); foreach (var canBeActivePreProcessNodeInstance in canBeActivePreProcessNodeInstances) { var linkages = canBeActivePreProcessNodeInstance.Linkages.Where(linkage => linkage.Expression.Compile().Invoke(canBeActivePreProcessNodeInstance.BizContext)); foreach (var linkage in linkages) { this.HibernateClass.BuildToDo(linkage); } this.HibernateClass.CloseToDoWork(toDoWork); } }
public object Start(Process process, User creator, string processInstanceName) { this.HibernateClass.NewProcessInstance(this.BuildProcessInstance(process, processInstanceName)); return new object(); }