Add JS functions to access activity properties
This commit is contained in:
parent
58af0c7ca0
commit
7f420f4f42
|
|
@ -10,6 +10,7 @@ using Jint;
|
|||
using Jint.Runtime.Interop;
|
||||
using MediatR;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NodaTime;
|
||||
|
||||
namespace Elsa.Scripting.JavaScript.Handlers
|
||||
|
|
@ -41,6 +42,8 @@ namespace Elsa.Scripting.JavaScript.Handlers
|
|||
engine.SetValue("isNullOrEmpty", (Func<string, bool>) (string.IsNullOrEmpty));
|
||||
engine.SetValue("getWorkflowDefinitionIdByName", (Func<string, string?>) (name => GetWorkflowDefinitionIdByName(activityExecutionContext, name)));
|
||||
engine.SetValue("getWorkflowDefinitionIdByTag", (Func<string, string?>) (tag => GetWorkflowDefinitionIdByTag(activityExecutionContext, tag)));
|
||||
engine.SetValue("getActivity", (Func<string, object?>) (idOrName => GetActivityModel(activityExecutionContext, idOrName)));
|
||||
engine.SetValue("getInboundActivity", (Func<object?>) (() => GetInboundActivityModel(activityExecutionContext)));
|
||||
|
||||
// Global variables.
|
||||
engine.SetValue("activityExecutionContext", activityExecutionContext);
|
||||
|
|
@ -68,6 +71,7 @@ namespace Elsa.Scripting.JavaScript.Handlers
|
|||
foreach (var variable in variables.Data)
|
||||
engine.SetValue(variable.Key, variable.Value);
|
||||
|
||||
// TODO: Deprecated. Remove with next breaking version.
|
||||
// Add activity outputs.
|
||||
foreach (var activity in workflowBlueprint.Activities.Where(x => x.Name is not null and not "" && workflowInstance.ActivityOutput.ContainsKey(x.Id)))
|
||||
{
|
||||
|
|
@ -87,6 +91,19 @@ namespace Elsa.Scripting.JavaScript.Handlers
|
|||
var workflowBlueprint = workflowRegistry.FindAsync(filter).Result;
|
||||
return workflowBlueprint?.Id;
|
||||
}
|
||||
|
||||
private object? GetActivityModel(ActivityExecutionContext context, string idOrName)
|
||||
{
|
||||
var workflowExecutionContext = context.WorkflowExecutionContext;
|
||||
var activity = workflowExecutionContext.GetActivityBlueprintByName(idOrName) ?? workflowExecutionContext.GetActivityBlueprintById(idOrName);
|
||||
return activity == null ? null : workflowExecutionContext.WorkflowInstance.ActivityData[activity.Id];
|
||||
}
|
||||
|
||||
private object? GetInboundActivityModel(ActivityExecutionContext context)
|
||||
{
|
||||
var inboundActivityId = context.WorkflowExecutionContext.GetInboundActivityPath(context.ActivityId).FirstOrDefault();
|
||||
return inboundActivityId == null ? null : GetActivityModel(context, inboundActivityId);
|
||||
}
|
||||
|
||||
private void RegisterType<T>(Engine engine) => engine.SetValue(typeof(T).Name, TypeReference.CreateTypeReference(engine, typeof(T)));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,16 +62,6 @@ namespace Elsa.Scripting.Liquid.Handlers
|
|||
private Task<FluidValue> ToFluidValue(Variables dictionary, string key, TemplateOptions options) => Task.FromResult(!dictionary.Has(key) ? NilValue.Instance : FluidValue.Create(dictionary.Get(key), options));
|
||||
private LiquidActivityModel GetActivityModelAsync(ActivityExecutionContext context, string name) => new(context, name, null);
|
||||
|
||||
private object? GetInboundActivityModelPropertyAsync(ActivityExecutionContext context, string propertyName)
|
||||
{
|
||||
var activityModel = GetInboundActivityModelAsync(context);
|
||||
|
||||
if (activityModel == null)
|
||||
return null;
|
||||
|
||||
return GetActivityProperty(activityModel, propertyName);
|
||||
}
|
||||
|
||||
private LiquidActivityModel? GetInboundActivityModelAsync(ActivityExecutionContext context)
|
||||
{
|
||||
var inboundActivityId = context.WorkflowExecutionContext.GetInboundActivityPath(context.ActivityId).FirstOrDefault();
|
||||
|
|
|
|||
Loading…
Reference in a new issue