Implement activity output JS support
This commit is contained in:
parent
cae0bf9968
commit
aa176222df
|
|
@ -1,5 +1,7 @@
|
|||
using Elsa.Management.Services;
|
||||
using Elsa.Mediator.Extensions;
|
||||
using Elsa.Scripting.JavaScript.Expressions;
|
||||
using Elsa.Scripting.JavaScript.Handlers;
|
||||
using Elsa.Scripting.JavaScript.Implementations;
|
||||
using Elsa.Scripting.JavaScript.Providers;
|
||||
using Elsa.Scripting.JavaScript.Services;
|
||||
|
|
@ -14,6 +16,7 @@ public static class ServiceCollectionExtensions
|
|||
return services
|
||||
.AddSingleton<IExpressionSyntaxProvider, JavaScriptExpressionSyntaxProvider>()
|
||||
.AddSingleton<IJavaScriptEvaluator, JintJavaScriptEvaluator>()
|
||||
.AddNotificationHandlersFrom<ConfigureJavaScriptEngineWithActivityOutput>()
|
||||
.AddExpressionHandler<JavaScriptExpressionHandler, JavaScriptExpression>();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
using Elsa.Mediator.Services;
|
||||
using Elsa.Models;
|
||||
using Elsa.Scripting.JavaScript.Notifications;
|
||||
using Elsa.Services;
|
||||
|
||||
namespace Elsa.Scripting.JavaScript.Handlers;
|
||||
|
||||
/// <summary>
|
||||
/// Makes available activity output to the JavaScript runtime environment.
|
||||
/// </summary>
|
||||
public class ConfigureJavaScriptEngineWithActivityOutput : INotificationHandler<EvaluatingJavaScript>
|
||||
{
|
||||
private readonly IActivityWalker _activityWalker;
|
||||
|
||||
public ConfigureJavaScriptEngineWithActivityOutput(IActivityWalker activityWalker)
|
||||
{
|
||||
_activityWalker = activityWalker;
|
||||
}
|
||||
|
||||
public Task HandleAsync(EvaluatingJavaScript notification, CancellationToken cancellationToken)
|
||||
{
|
||||
var engine = notification.Engine;
|
||||
var workflow = notification.Context.Workflow;
|
||||
var graph = _activityWalker.Walk(workflow.Root).Flatten();
|
||||
var register = notification.Context.Register;
|
||||
var jsActivities = new Dictionary<string, object>();
|
||||
|
||||
foreach (var node in graph)
|
||||
{
|
||||
var properties = node.Activity.GetOutputs().ToList();
|
||||
var jsActivity = new Dictionary<string, object?>();
|
||||
|
||||
foreach (var property in properties)
|
||||
{
|
||||
if (register.TryGetLocation(property.Value.LocationReference.Id, out var location))
|
||||
jsActivity[property.Name] = location.Value;
|
||||
}
|
||||
|
||||
jsActivities[node.NodeId] = jsActivity;
|
||||
}
|
||||
|
||||
engine.SetValue("activities", jsActivities);
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue