From 3083a400d8fa1ae210d170cc0ad11d7a249a72e4 Mon Sep 17 00:00:00 2001 From: jdevillard Date: Fri, 30 Aug 2024 12:01:44 +0200 Subject: [PATCH] Add Variable available in dropdown when configuring a activity input (#5918) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Sample to provide a ExpressionDescriptorProvider * fix variable accessor in VariableExpressionHandler * remove Variable Expression to use default one * Change the Variable Expression Provider to handle Variable Expression correctly * need to check on UI Side and Server side is valid JSON is sent. For example, if a use change from a literal value to a Variable value, the value is sent to the API and result in an exception, we cannot handle invalid json without using Try/Catch --------- Co-authored-by: Jérémie DEVILLARD Co-authored-by: Sipke Schoorstra --- .../Program.cs | 12 +++++++----- .../DefaultExpressionDescriptorProvider.cs | 18 ++++++++++++++---- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/samples/aspnet/Elsa.Samples.AspNet.CustomUIHandler/Program.cs b/samples/aspnet/Elsa.Samples.AspNet.CustomUIHandler/Program.cs index ea1ed15dd..c53d22c15 100644 --- a/samples/aspnet/Elsa.Samples.AspNet.CustomUIHandler/Program.cs +++ b/samples/aspnet/Elsa.Samples.AspNet.CustomUIHandler/Program.cs @@ -1,3 +1,4 @@ +using Elsa.EntityFrameworkCore.Extensions; using Elsa.EntityFrameworkCore.Modules.Management; using Elsa.EntityFrameworkCore.Modules.Runtime; using Elsa.Extensions; @@ -7,8 +8,8 @@ var builder = WebApplication.CreateBuilder(args); builder.Services.AddElsa(elsa => { - elsa.UseWorkflowManagement(management => management.UseEntityFrameworkCore()); - elsa.UseWorkflowRuntime(runtime => runtime.UseEntityFrameworkCore()); + elsa.UseWorkflowManagement(management => management.UseEntityFrameworkCore(ef => ef.UseSqlite())); + elsa.UseWorkflowRuntime(runtime => runtime.UseEntityFrameworkCore(ef=>ef.UseSqlite())); elsa.UseWorkflowsApi(); elsa.UseHttp(); @@ -26,12 +27,12 @@ builder.Services.AddElsa(elsa => }); elsa.UseDefaultAuthentication(); - elsa.AddActivity(); + elsa.AddActivity(); }); builder.Services.AddSingleton(); builder.Services.AddCors(cors => cors.AddDefaultPolicy(policy => policy.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin())); - + var app = builder.Build(); // Configure the HTTP request pipeline. @@ -41,4 +42,5 @@ app.UseAuthentication(); app.UseAuthorization(); app.UseWorkflowsApi(); app.Map("/test",c=> c.UseWorkflows()); -app.Run(); \ No newline at end of file +app.Run(); + diff --git a/src/modules/Elsa.Workflows.Management/Providers/DefaultExpressionDescriptorProvider.cs b/src/modules/Elsa.Workflows.Management/Providers/DefaultExpressionDescriptorProvider.cs index e85742a7c..67d1994f8 100644 --- a/src/modules/Elsa.Workflows.Management/Providers/DefaultExpressionDescriptorProvider.cs +++ b/src/modules/Elsa.Workflows.Management/Providers/DefaultExpressionDescriptorProvider.cs @@ -49,13 +49,23 @@ public class DefaultExpressionDescriptorProvider : IExpressionDescriptorProvider return CreateDescriptor( "Variable", "Variable", - isBrowsable: false, + isBrowsable: true, memoryBlockReferenceFactory: () => new Variable(), deserialize: context => { - var valueElement = context.JsonElement.TryGetProperty("value", out var v) ? v : default; - var value = valueElement.Deserialize(context.MemoryBlockType, context.Options); - return new Expression("Variable", value); + var valueElement = context.JsonElement.TryGetProperty("value", out var v) ? v : default; + var valueString = valueElement.GetValue()?.ToString(); + try + { + var value = JsonSerializer.Deserialize(valueString, context.MemoryBlockType, context.Options); + return new Expression("Variable", value); + } + catch (Exception) + { + + return new Expression("Variable", null); + } + } ); }