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); }
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); }
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(); }
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(); }
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()); }