/// <summary> /// /// </summary> /// <param name="xml"></param> /// <param name="token"></param> /// <param name="element"></param> public override void Enter(BpmContext context) { Context = context; DateTime dt = DateTime.Now; ZUserTask userTask = context.Element as ZUserTask; RtActivity activity = new RtActivity(); activity.ActivityGuid = Guid.NewGuid(); activity.ActivityID = context.Element.ID; activity.TaskPage = new Guid(userTask.TaskPage); activity.InstanceGuid = context.InstanceID; activity.StartTime = dt; AntApi.DB.RtActivitys.Add(activity); RtTask task = new RtTask(); task.TaskGuid = Guid.NewGuid(); task.InstanceGuid = context.InstanceID; task.ActivityGuid = activity.ActivityGuid; task.TaskTitle = userTask.TaskTitle; task.Owner = userTask.Candidates; task.CreateTime = dt; AntApi.DB.RtTasks.Add(task); AntApi.DB.SaveChanges(); }
public override void Execute(BpmContext context) { Context = context; ZStartEvent starter = Context.Element as ZStartEvent; Catching(starter); Leave(Context); logger.Info("执行" + Context.Element.ID); }
/// <summary> /// 发送Token /// </summary> /// <param name="context"></param> public void SendToken(BpmContext context) { Exchange exchange = outSequence.Exchange; BpmContext iContext = new BpmContext(); iContext.Element = outSequence; iContext.Token = context.Token; iContext.ProcessXml = context.ProcessXml; exchange.Enter(iContext); }
// 向后传递Token,多实例节点先合并所有实例节点,然后根据后面的连线分发1至多个Token public void Leave(BpmContext context) { ZElement element = fParser.FindRightNode(context.ProcessXml, context.Element.ID) as ZElement; Exchange exchange = element.Exchange; BpmContext iContext = new BpmContext(); iContext = context; iContext.Element = element; exchange.Enter(context); }
/// <summary> /// 具体业务逻辑 /// </summary> /// <param name="context"></param> public override void Execute(BpmContext context) { ZEndEvent ender = Context.Element as ZEndEvent; Throwing(ender); //结束 流程 或 流程中一个分支 FinishProcess(context); logger.Info("执行" + Context.Element.ID); }
/// <summary> /// 从流程定义的开始事件启动流程 /// </summary> /// <param name="context"></param> public void Start(BpmContext context) { List <ZStartEvent> starters = fParser.FindStartNode(context.ProcessXml); foreach (ZStartEvent starter in starters) { context.Element = starter; exchange = starter.Exchange; exchange.Execute(context); } }
/// <summary> /// 执行条件表达式 /// </summary> /// <param name="args"></param> public new bool Execute(BpmContext context) { ZSequence sequence = context.Element as ZSequence; bool result = this.eParser.GetResult <bool>(sequence.Express); if (!exeExpress || (exeExpress && result)) { Leave(context); return(true); } else { DestroyToken(context.Token); return(false); } }
/// <summary> /// 分支顺序流的处理 /// </summary> /// <param name="context"></param> public void SplitExecute(BpmContext context) { //获取网关所有输入连线 List <ZSequence> lines = fParser.FindOneSideLines(context.ProcessXml, context.Element.ID, true) as List <ZSequence>; bool exeResult = false; //连线上表达式的执行结果 foreach (ZSequence line in lines) { if (string.IsNullOrEmpty(line.Express)) { exeResult = eParser.GetResult <bool>(line.Express); if (exeResult) { outSequence = line; break; } } } }
/// <summary> /// 获取流程中所有定义的字段 /// </summary> /// <returns></returns> public string GetAllProcessFieldsByContext(BpmContext context = null) { Stream xml = null; List <ZParam> paramList = new List <ZParam>(); if (context == null) { xml = Context.ProcessXml; } else { xml = context.ProcessXml; } FlowObjParser fParser = new FlowObjParser(); paramList = fParser.GetElementList <ZParam>(xml, "Param"); return(JsonConvert.SerializeObject(paramList)); }
public void Next(Guid InstanceGuid, Guid TaskGuid) { RtInstance instance = AntApi.DB.RtInstances.First(o => o.InstanceGuid == InstanceGuid); RtTask task = AntApi.DB.RtTasks.First(o => o.TaskGuid == TaskGuid); string ActivityID = AntApi.DB.RtActivitys.First(o => o.ActivityGuid == task.ActivityGuid).ActivityID; Stream xml = StreamUtil.StreamFromString(instance.ProcessXml); FlowObjParser fParser = new FlowObjParser(); ZUserTask zUserTask = fParser.FindNode <ZUserTask>(xml, "UserTask", ActivityID); BpmContext context = new BpmContext(); context.InstanceID = InstanceGuid; context.ProcessXml = xml; context.Element = zUserTask; Exchange userTask = zUserTask.Exchange; userTask.Leave(context); }
/// <summary> /// 节点寻找右端所有连接线,重新赋值Context /// </summary> /// <param name="iContext"></param> /// <param name="exeExpress"></param> public void FindNextLines(BpmContext context, bool exeExpress = false) { List <ZSequence> lines = fParser.FindRightLines(context.ProcessXml, context.Element.ID) as List <ZSequence>; Token token = null; foreach (ZSequence line in lines) { Exchange exchange = line.Exchange; BpmContext iContext = new BpmContext(); token = new Token(); token.InstanceID = context.InstanceID; token.TokenID = Guid.NewGuid(); token.ElementID = context.Element.ID; token.Status = TokenStatus.Waiting; iContext.Element = line; iContext.Token = token; iContext.ProcessXml = context.ProcessXml; exchange.Enter(iContext); } }
/// <summary> /// 获取Token /// </summary> /// <param name="token"></param> public override void Enter(BpmContext context) { Context = context; Execute(Context); }
private void FinishProcess(BpmContext context) { context.Token = null; }
/// <summary> /// 从流程定义的任意节点启动流程:非开始事件节点 /// </summary> /// <param name="context"></param> public void StartFromAny(BpmContext context) { }
// 执行节点内容 public virtual void Execute(BpmContext context) { Leave(Context); }
/// <summary> /// 创建任务 /// </summary> /// <param name="context"></param> public override void Execute(BpmContext context) { }
public BaseService() { this.Context = new BpmContext(); }
public override void Execute(BpmContext context) { MergeExecute(context); SplitExecute(context); Leave(context); }
// 向后传递Token,多实例节点先合并所有实例节点,然后根据后面的连线分发1至多个Token public virtual void Leave(BpmContext context) { }
public override void Execute(BpmContext context) { MergeExecute(context); SplitExecute(context); SendToken(context); }
// 获取Token,如果节点是多实例的则分发成多个Token public virtual void Enter(BpmContext context) { Context = context; Execute(Context); }
/// <summary> /// 重写发送事件 /// </summary> public override void Leave(BpmContext context) { FindNextLines(context, false); }
//#region 解释过程定义 //#endregion #region 控制过程实例-创建、激活、挂起、终止等 /// <summary> /// 启动/激活流程实例 /// </summary> public void Start(BpmContext context) { Transfer transfer = new Transfer(); transfer.Start(context); }