예제 #1
0
        private void OnBookmarkCallback(NativeActivityContext context, Bookmark bookmark)
        {
            var log = context.Resolve <ILoggerFactory>() != null
                    ? context.Resolve <ILoggerFactory>().Create(typeof(SubProcess))
                    : null;

            var parser    = context.Resolve <IScriptParser>();
            var extension = context.GetExtension <DataFieldExtension>();

            //完成规则解析
            if (this.Result != null &&
                parser != null &&
                this.FinishRule != null &&
                this.FinishRule.Count > 0)
            {
                foreach (var i in this.FinishRule)
                {
                    if (parser.EvaluateRule(i.Value, extension))
                    {
                        this.Result.Set(context, i.Key);
                        if (log != null)
                        {
                            log.InfoFormat("SubProcess节点完成规则“{0}”测试通过,将进入节点“{1}”", i.Value, i.Key);
                        }
                        break;
                    }
                }
            }
            //所有逻辑完成才可删除,若上述逻辑失败则将此书签用于错误恢复
            context.RemoveBookmark(bookmark);
        }
예제 #2
0
        private void OnBookmarkCallback(NativeActivityContext context, Bookmark bookmark)
        {
            var log = context.Resolve<ILoggerFactory>() != null
                    ? context.Resolve<ILoggerFactory>().Create(typeof(SubProcess))
                    : null;
            var parser = context.Resolve<IScriptParser>();
            var extension = context.GetExtension<DataFieldExtension>();

            //完成规则解析
            if (this.Result != null
                && parser != null
                && this.FinishRule != null
                && this.FinishRule.Count > 0)
            {
                foreach (var i in this.FinishRule)
                    if (parser.EvaluateRule(i.Value, extension))
                    {
                        this.Result.Set(context, i.Key);
                        if (log != null)
                            log.InfoFormat("SubProcess节点完成规则“{0}”测试通过,将进入节点“{1}”", i.Value, i.Key);
                        break;
                    }
            }
            //所有逻辑完成才可删除,若上述逻辑失败则将此书签用于错误恢复
            context.RemoveBookmark(bookmark);
        }
예제 #3
0
        protected override void ExecuteBody(NativeActivityContext context)
        {
            var log = context.Resolve <ILoggerFactory>() == null
                ? null
                : context.Resolve <ILoggerFactory>().Create(typeof(Server));

            //创建server节点实例
            var server = context.GetExtension <ServerExtension>().AddServer(context, this.DisplayName, this.FlowNodeIndex);
            var data   = context.GetExtension <DataFieldExtension>();

            //设置当前节点索引
            data.SetCurrentNode(this.FlowNodeIndex);

            var serverScript = this.Script == null ? null : this.Script.Get(context);
            var parser       = context.Resolve <IScriptParser>();

            #region 执行内容解析
            if (!string.IsNullOrEmpty(serverScript))
            {
                var result = parser == null
                    ? serverScript
                    : parser.Evaluate(serverScript, context.GetExtension <DataFieldExtension>());
                if (this.To != null)
                {
                    this.To.Set(context, result);
                    //更新到流程变量中
                    data.Set(this._to, result);
                }

                log.InfoFormat("Server节点执行内容:{0},返回:{1} {2}"
                               , serverScript
                               , result
                               , this.To == null ? "" : "将返回值写入流程变量" + this._to);
            }
            #endregion

            #region 完成规则解析
            if (this.Result != null &&
                parser != null &&
                this.FinishRule != null &&
                this.FinishRule.Count > 0)
            {
                foreach (var i in this.FinishRule)
                {
                    if (parser.EvaluateRule(i.Value, data))
                    {
                        this.Result.Set(context, i.Key);
                        log.InfoFormat("Server节点完成规则“{0}”测试通过,将进入节点“{1}”", i.Value, i.Key);
                        break;
                    }
                }
            }
            #endregion

            //置为完成
            server.SetAsComplete();
        }
예제 #4
0
        protected override void ExecuteBody(NativeActivityContext context)
        {
            var log = context.Resolve<ILoggerFactory>() == null
                ? null
                : context.Resolve<ILoggerFactory>().Create(typeof(Server));

            //创建server节点实例
            var server = context.GetExtension<ServerExtension>().AddServer(context, this.DisplayName, this.FlowNodeIndex);
            var data = context.GetExtension<DataFieldExtension>();
            //设置当前节点索引
            data.SetCurrentNode(this.FlowNodeIndex);

            var serverScript = this.Script == null ? null : this.Script.Get(context);
            var parser = context.Resolve<IScriptParser>();

            #region 执行内容解析
            if (!string.IsNullOrEmpty(serverScript))
            {
                var result = parser == null
                    ? serverScript
                    : parser.Evaluate(serverScript, context.GetExtension<DataFieldExtension>());
                if (this.To != null)
                {
                    this.To.Set(context, result);
                    //更新到流程变量中
                    data.Set(this._to, result);
                }

                log.InfoFormat("Server节点执行内容:{0},返回:{1} {2}"
                    , serverScript
                    , result
                    , this.To == null ? "" : "将返回值写入流程变量" + this._to);
            }
            #endregion

            #region 完成规则解析
            if (this.Result != null
                && parser != null
                && this.FinishRule != null
                && this.FinishRule.Count > 0)
            {
                foreach (var i in this.FinishRule)
                    if (parser.EvaluateRule(i.Value, data))
                    {
                        this.Result.Set(context, i.Key);
                        log.InfoFormat("Server节点完成规则“{0}”测试通过,将进入节点“{1}”", i.Value, i.Key);
                        break;
                    }
            }
            #endregion

            //置为完成
            server.SetAsComplete();
        }
예제 #5
0
        protected override string[] Execute(NativeActivityContext context)
        {
            var parser    = context.Resolve <IScriptParser>();
            var extension = context.GetExtension <DataFieldExtension>();
            var users     = new List <string>();

            foreach (var script in this.Scripts)
            {
                //解析规则脚本
                var scriptUsers = parser.EvaluateUsers(script, extension);
                if (scriptUsers != null)
                {
                    users.AddRange(scriptUsers);
                }
            }
            //HACK:外部获取的用户不区分小写用户名
            return(users.Where(o => !string.IsNullOrWhiteSpace(o))
                   .Select(o => o.ToLower())
                   .Distinct()
                   .ToArray());
        }