diff --git a/src/scripting/Elsa.Scripting.JavaScript/Handlers/ConfigureJavaScriptEngine.cs b/src/scripting/Elsa.Scripting.JavaScript/Handlers/ConfigureJavaScriptEngine.cs index 8103a6091..563e3de97 100644 --- a/src/scripting/Elsa.Scripting.JavaScript/Handlers/ConfigureJavaScriptEngine.cs +++ b/src/scripting/Elsa.Scripting.JavaScript/Handlers/ConfigureJavaScriptEngine.cs @@ -25,27 +25,33 @@ namespace Elsa.Scripting.JavaScript.Handlers public Task Handle(EvaluatingJavaScriptExpression notification, CancellationToken cancellationToken) { - var activityContext = notification.ActivityExecutionContext; - var workflowExecutionContext = activityContext.WorkflowExecutionContext; + var activityExecutionContext = notification.ActivityExecutionContext; + var workflowExecutionContext = activityExecutionContext.WorkflowExecutionContext; var workflowBlueprint = workflowExecutionContext.WorkflowBlueprint; var workflowInstance = workflowExecutionContext.WorkflowInstance; var engine = notification.Engine; // Global functions. engine.SetValue("guid", (Func) (() => Guid.NewGuid().ToString())); - engine.SetValue("setVariable", (Action) ((name, value) => activityContext.SetVariable(name, value))); - engine.SetValue("getVariable", (Func) (name => activityContext.GetVariable(name))); + engine.SetValue("setVariable", (Action) ((name, value) => activityExecutionContext.SetVariable(name, value))); + engine.SetValue("getVariable", (Func) (name => activityExecutionContext.GetVariable(name))); engine.SetValue("getConfig", (Func) (name => _configuration.GetSection(name).Value)); engine.SetValue("isNullOrWhiteSpace", (Func) (string.IsNullOrWhiteSpace)); engine.SetValue("isNullOrEmpty", (Func) (string.IsNullOrEmpty)); - engine.SetValue("getWorkflowDefinitionIdByName", (Func) (name => GetWorkflowDefinitionIdByName(activityContext, name))); - engine.SetValue("getWorkflowDefinitionIdByTag", (Func) (tag => GetWorkflowDefinitionIdByTag(activityContext, tag))); + engine.SetValue("getWorkflowDefinitionIdByName", (Func) (name => GetWorkflowDefinitionIdByName(activityExecutionContext, name))); + engine.SetValue("getWorkflowDefinitionIdByTag", (Func) (tag => GetWorkflowDefinitionIdByTag(activityExecutionContext, tag))); // Global variables. - engine.SetValue("input", activityContext.Input); + engine.SetValue("activityExecutionContext", activityExecutionContext); + engine.SetValue("workflowExecutionContext", workflowExecutionContext); + engine.SetValue("workflowInstance", workflowInstance); + engine.SetValue("input", activityExecutionContext.Input); + engine.SetValue("workflowInstanceId", workflowInstance.Id); + engine.SetValue("workflowDefinitionId", workflowInstance.DefinitionId); + engine.SetValue("workflowDefinitionVersion", workflowInstance.Version); engine.SetValue("correlationId", workflowInstance.CorrelationId); engine.SetValue("currentCulture", CultureInfo.InvariantCulture); - engine.SetValue("workflowContext", activityContext.GetWorkflowContext()); + engine.SetValue("workflowContext", activityExecutionContext.GetWorkflowContext()); // NodaTime types. RegisterType(engine); diff --git a/src/scripting/Elsa.Scripting.Liquid/Handlers/ConfigureLiquidEngine.cs b/src/scripting/Elsa.Scripting.Liquid/Handlers/ConfigureLiquidEngine.cs index 7fc7411c2..1e0602d14 100644 --- a/src/scripting/Elsa.Scripting.Liquid/Handlers/ConfigureLiquidEngine.cs +++ b/src/scripting/Elsa.Scripting.Liquid/Handlers/ConfigureLiquidEngine.cs @@ -34,7 +34,10 @@ namespace Elsa.Scripting.Liquid.Handlers options.MemberAccessStrategy.Register(); options.MemberAccessStrategy.Register((x, name) => x.GetValueAsync(name)); options.MemberAccessStrategy.Register("Input", x => ToFluidValue(x.Input, options)); + options.MemberAccessStrategy.Register("WorkflowInstanceId", x => ToFluidValue(x.WorkflowInstance.Id, options)); options.MemberAccessStrategy.Register("CorrelationId", x => ToFluidValue(x.CorrelationId, options)); + options.MemberAccessStrategy.Register("WorkflowDefinitionId", x => ToFluidValue(x.WorkflowInstance.DefinitionId, options)); + options.MemberAccessStrategy.Register("WorkflowDefinitionVersion", x => ToFluidValue(x.WorkflowInstance.Version, options)); options.MemberAccessStrategy.Register("Variables", x => new LiquidPropertyAccessor(name => ToFluidValue(x.WorkflowExecutionContext.GetMergedVariables(), name, options))); options.MemberAccessStrategy.Register("Activities", x => new LiquidPropertyAccessor(name => ToFluidValue(GetActivityModelAsync(x, name), options)!)); options.MemberAccessStrategy.Register("Output", GetActivityOutput);