Add JavaScript functions to resolve workflow definition ID by tag and name

This commit is contained in:
Sipke Schoorstra 2021-04-26 12:32:16 +02:00
parent be1102c3aa
commit ad61ed480c

View file

@ -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<string, object?>) (name => _configuration.GetSection(name).Value));
engine.SetValue("isNullOrWhiteSpace", (Func<string, bool>) (string.IsNullOrWhiteSpace));
engine.SetValue("isNullOrEmpty", (Func<string, bool>) (string.IsNullOrEmpty));
engine.SetValue("getWorkflowDefinitionIdByName", (Func<string, string?>) (name => GetWorkflowDefinitionIdByName(activityContext, name)));
engine.SetValue("getWorkflowDefinitionIdByTag", (Func<string, string?>) (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<IWorkflowBlueprint, bool> filter)
{
var workflowRegistry = activityExecutionContext.GetService<IWorkflowRegistry>();
var workflowBlueprint = workflowRegistry.FindAsync(filter).Result;
return workflowBlueprint?.Id;
}
private void RegisterType<T>(Engine engine) => engine.SetValue(typeof(T).Name, TypeReference.CreateTypeReference(engine, typeof(T)));
}
}