public ApiScript Execute(ApiGlobalParent global) { ApiScript script = new ApiScript(); try { if (this.EvaluatorVersion == EvaluatorVersion.Version_1) { Script evaluator = GetScriptEvaluatorV1(); ScriptState result = evaluator.RunAsync(global as ApiGlobals).Result; if (result.ReturnValue != null) { script.Data = JsonConvert.SerializeObject(result.ReturnValue); } else { script.Data = "script executed without any return"; } } else { evaluator.Context = global as ApiGlobalsCoreBase; evaluator.EvaluateVariable += EvaluateVariable; object o = evaluator.Execute(this.Script.Code.Trim()); script.Data = JsonConvert.SerializeObject(o); } } catch (Exception e) { if (e.InnerException is ExplicitExitException) { throw e.InnerException; } else { throw new Exception("Execution Error: " + e.Message); } } return(script); }
public object ExecuteScript(EbApi Api, RabbitMqProducer mqp, Service service, EbStaticFileClient Fileclient) { ApiGlobalParent global; if (this.EvaluatorVersion == EvaluatorVersion.Version_1) { global = new ApiGlobals(Api.GlobalParams); } else { global = new ApiGlobalsCoreBase(Api.GlobalParams); } global.ResourceValueByIndexHandler += (index) => { object resourceValue = Api.Resources[index].Result; if (resourceValue != null && resourceValue is string converted) { if (converted.StartsWith("{") && converted.EndsWith("}") || converted.StartsWith("[") && converted.EndsWith("]")) { string formated = converted.Replace(@"\", string.Empty); return(JObject.Parse(formated)); } } return(resourceValue); }; global.ResourceValueByNameHandler += (name) => { int index = Api.Resources.GetIndex(name); object resourceValue = Api.Resources[index].Result; if (resourceValue != null && resourceValue is string converted) { if (converted.StartsWith("{") && converted.EndsWith("}") || converted.StartsWith("[") && converted.EndsWith("]")) { string formated = converted.Replace(@"\", string.Empty); return(JObject.Parse(formated)); } } return(resourceValue); }; global.GoToByIndexHandler += (index) => { Api.Step = index; Api.Resources[index].Result = EbApiHelper.GetResult(Api.Resources[index], Api, mqp, service, Fileclient); }; global.GoToByNameHandler += (name) => { int index = Api.Resources.GetIndex(name); Api.Step = index; Api.Resources[index].Result = EbApiHelper.GetResult(Api.Resources[index], Api, mqp, service, Fileclient); }; global.ExitResultHandler += (obj) => { ApiScript script = new ApiScript { Data = JsonConvert.SerializeObject(obj), }; Api.ApiResponse.Result = script; Api.Step = Api.Resources.Count - 1; }; ApiResources lastResource = Api.Step == 0 ? null : Api.Resources[Api.Step - 1]; if (this.EvaluatorVersion == EvaluatorVersion.Version_1 && lastResource?.Result is EbDataSet dataSet) { (global as ApiGlobals).Tables = dataSet.Tables; } ApiScript result; try { result = this.Execute(global); } catch (Exception ex) { throw ex; } return(result); }