diff --git a/src/scripting/Elsa.Scripting.JavaScript/Handlers/ConfigureJavaScriptEngine.cs b/src/scripting/Elsa.Scripting.JavaScript/Handlers/ConfigureJavaScriptEngine.cs index 2aa9d7fae..8103a6091 100644 --- a/src/scripting/Elsa.Scripting.JavaScript/Handlers/ConfigureJavaScriptEngine.cs +++ b/src/scripting/Elsa.Scripting.JavaScript/Handlers/ConfigureJavaScriptEngine.cs @@ -4,6 +4,8 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using Elsa.Scripting.JavaScript.Messages; +using Elsa.Services; +using Elsa.Services.Models; using Jint; using Jint.Runtime.Interop; using MediatR; @@ -36,6 +38,8 @@ namespace Elsa.Scripting.JavaScript.Handlers 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))); // Global variables. engine.SetValue("input", activityContext.Input); @@ -67,6 +71,16 @@ namespace Elsa.Scripting.JavaScript.Handlers return Task.CompletedTask; } + private string? GetWorkflowDefinitionIdByTag(ActivityExecutionContext activityExecutionContext, string tag) => GetWorkflowDefinitionId(activityExecutionContext, x => string.Equals(x.Tag, tag, StringComparison.OrdinalIgnoreCase)); + private string? GetWorkflowDefinitionIdByName(ActivityExecutionContext activityExecutionContext, string name) => GetWorkflowDefinitionId(activityExecutionContext, x => string.Equals(x.Name, name, StringComparison.OrdinalIgnoreCase)); + + private string? GetWorkflowDefinitionId(ActivityExecutionContext activityExecutionContext, Func filter) + { + var workflowRegistry = activityExecutionContext.GetService(); + var workflowBlueprint = workflowRegistry.FindAsync(filter).Result; + return workflowBlueprint?.Id; + } + private void RegisterType(Engine engine) => engine.SetValue(typeof(T).Name, TypeReference.CreateTypeReference(engine, typeof(T))); } } \ No newline at end of file