Example #1
0
        /// <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();
        }
Example #2
0
        public override void Execute(BpmContext context)
        {
            Context = context;
            ZStartEvent starter = Context.Element as ZStartEvent;

            Catching(starter);
            Leave(Context);

            logger.Info("执行" + Context.Element.ID);
        }
Example #3
0
        /// <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);
        }
Example #4
0
        // 向后传递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);
        }
Example #5
0
        /// <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);
        }
Example #6
0
        /// <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);
            }
        }
Example #7
0
        /// <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);
            }
        }
Example #8
0
        /// <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;
                    }
                }
            }
        }
Example #9
0
        /// <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));
        }
Example #10
0
        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);
        }
Example #11
0
        /// <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);
            }
        }
Example #12
0
 /// <summary>
 /// 获取Token
 /// </summary>
 /// <param name="token"></param>
 public override void Enter(BpmContext context)
 {
     Context = context;
     Execute(Context);
 }
Example #13
0
 private void FinishProcess(BpmContext context)
 {
     context.Token = null;
 }
Example #14
0
 /// <summary>
 /// 从流程定义的任意节点启动流程:非开始事件节点
 /// </summary>
 /// <param name="context"></param>
 public void StartFromAny(BpmContext context)
 {
 }
Example #15
0
 // 执行节点内容
 public virtual void Execute(BpmContext context)
 {
     Leave(Context);
 }
Example #16
0
 /// <summary>
 /// 创建任务
 /// </summary>
 /// <param name="context"></param>
 public override void Execute(BpmContext context)
 {
 }
Example #17
0
 public BaseService()
 {
     this.Context = new BpmContext();
 }
Example #18
0
 public override void Execute(BpmContext context)
 {
     MergeExecute(context);
     SplitExecute(context);
     Leave(context);
 }
Example #19
0
 // 向后传递Token,多实例节点先合并所有实例节点,然后根据后面的连线分发1至多个Token
 public virtual void Leave(BpmContext context)
 {
 }
Example #20
0
 public override void Execute(BpmContext context)
 {
     MergeExecute(context);
     SplitExecute(context);
     SendToken(context);
 }
Example #21
0
 // 获取Token,如果节点是多实例的则分发成多个Token
 public virtual void Enter(BpmContext context)
 {
     Context = context; Execute(Context);
 }
Example #22
0
 /// <summary>
 /// 重写发送事件
 /// </summary>
 public override void Leave(BpmContext context)
 {
     FindNextLines(context, false);
 }
Example #23
0
        //#region 解释过程定义
        //#endregion

        #region 控制过程实例-创建、激活、挂起、终止等
        /// <summary>
        /// 启动/激活流程实例
        /// </summary>
        public void Start(BpmContext context)
        {
            Transfer transfer = new Transfer();

            transfer.Start(context);
        }