elsa-core/src/modules/Elsa.JavaScript/Activities/RunJavaScript.cs
Sipke Schoorstra 5f6454b59c
Workflow as Activity - input/output (#3699)
* Restructure component folders

* Restructure JavaScript module folders

* Remove ActivityType field from descriptor 

No longer necessary.

* Incremental work on synthetic properties

* Implement synthetic property persistence

* Add JS functions to return input from composed activity

* Cleanup

* Take into account versioning

* Fix versioning

* Add Output management

* Implement output handling
2023-02-13 12:15:20 +01:00

42 lines
1.3 KiB
C#

using System.Text.Json.Serialization;
using Elsa.Workflows.Core.Attributes;
using Elsa.Workflows.Core.Models;
using Elsa.Workflows.Management.Models;
using IJavaScriptEvaluator = Elsa.JavaScript.Contracts.IJavaScriptEvaluator;
namespace Elsa.JavaScript.Activities;
[Activity("Elsa", "Scripting", "Executes JavaScript code")]
public class RunJavaScript : CodeActivity<object?>
{
[JsonConstructor]
public RunJavaScript()
{
}
public RunJavaScript(string script)
{
Script = new Input<string>(script);
}
[Input(UIHint = InputUIHints.CodeEditor, OptionsProvider = typeof(RunJavaScriptOptionsProvider))]
public Input<string> Script { get; set; } = new("");
protected override async ValueTask ExecuteAsync(ActivityExecutionContext context)
{
var script = context.Get(Script);
// If no script was specified, there's nothing to do.
if (string.IsNullOrWhiteSpace(script))
return;
// Get a JavaScript evaluator.
var javaScriptEvaluator = context.GetRequiredService<IJavaScriptEvaluator>();
// Run the script.
var result = await javaScriptEvaluator.EvaluateAsync(script, typeof(object), context.ExpressionExecutionContext, cancellationToken: context.CancellationToken);
// Set the result as output, if any.
context.Set(Result, result);
}
}