From 9b5412f33e12bf6613fc0b627dca09ce311a57d2 Mon Sep 17 00:00:00 2001 From: Behzad Alizadeh Date: Wed, 10 Dec 2025 11:07:12 +0330 Subject: [PATCH] Gracefully handle null EventData during event publishing --- .../Caspian.WorkflowFramework.Package.csproj | 2 +- .../Models/PublishEventModel.cs | 10 ++--- .../Services/WorkflowService.cs | 37 ++++++++++++++----- 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/Caspian.WorkflowFramework.Package/Caspian.WorkflowFramework.Package.csproj b/Caspian.WorkflowFramework.Package/Caspian.WorkflowFramework.Package.csproj index b8be202..e6856d5 100644 --- a/Caspian.WorkflowFramework.Package/Caspian.WorkflowFramework.Package.csproj +++ b/Caspian.WorkflowFramework.Package/Caspian.WorkflowFramework.Package.csproj @@ -5,7 +5,7 @@ enable enable Caspian.WorkflowFramework - 1.1.0-preview.1 + 1.1.0-preview.3 Digital banking team Caspian Caspian.WorkflowFramework diff --git a/Caspian.WorkflowFramework.Package/Models/PublishEventModel.cs b/Caspian.WorkflowFramework.Package/Models/PublishEventModel.cs index cab9a9e..66b8bc5 100644 --- a/Caspian.WorkflowFramework.Package/Models/PublishEventModel.cs +++ b/Caspian.WorkflowFramework.Package/Models/PublishEventModel.cs @@ -1,10 +1,6 @@ -using System; -using System.Collections.Generic; +using JetBrains.Annotations; using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using JetBrains.Annotations; +using System.Text.Json; namespace Caspian.WorkflowFramework.Models { @@ -18,6 +14,6 @@ namespace Caspian.WorkflowFramework.Models public string EventName { get; set; } [Required] - public string? EventData { get; set; } + public JsonElement EventData { get; set; } } } diff --git a/Caspian.WorkflowFramework.Package/Services/WorkflowService.cs b/Caspian.WorkflowFramework.Package/Services/WorkflowService.cs index ffafbea..4feca20 100644 --- a/Caspian.WorkflowFramework.Package/Services/WorkflowService.cs +++ b/Caspian.WorkflowFramework.Package/Services/WorkflowService.cs @@ -1,16 +1,19 @@ -using Caspian.WorkflowFramework.Models; -using Caspian.WorkflowFramework.Contracts; -using Newtonsoft.Json; -using Elsa.Workflows.Runtime; -using Microsoft.Extensions.DependencyInjection; +using Caspian.WorkflowFramework.Contracts; +using Caspian.WorkflowFramework.Models; +using Caspian.WorkflowFramework.Utility; +using Elsa.Common.Models; using Elsa.Workflows.Management; using Elsa.Workflows.Management.Filters; -using Elsa.Workflows.Runtime.Messages; using Elsa.Workflows.Models; -using Elsa.Common.Models; -using Caspian.WorkflowFramework.Utility; +using Elsa.Workflows.Runtime; +using Elsa.Workflows.Runtime.Messages; +using Microsoft.Extensions.DependencyInjection; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; using San.MongoLogger; using System.Diagnostics; +using System.Dynamic; +using System.Text.Json; namespace Caspian.WorkflowFramework.Services { @@ -157,7 +160,23 @@ namespace Caspian.WorkflowFramework.Services return response; } - await _eventPublisher.PublishAsync(input.EventName, null, input.WorkflowInstanceId, null, input.EventData); + dynamic payload = null; + + if (input.EventData.ValueKind != JsonValueKind.Undefined && + input.EventData.ValueKind != JsonValueKind.Null) + { + var json = input.EventData.GetRawText(); + + var settings = new JsonSerializerSettings + { + Converters = { new ExpandoObjectConverter() } + }; + + // تبدیل JSON به object داینامیک + payload = JsonConvert.DeserializeObject(json, settings); + } + + await _eventPublisher.PublishAsync(input.EventName, null, input.WorkflowInstanceId, null, payload); var variables = await _workflowInstanceVariableManager.GetVariablesAsync(input.WorkflowInstanceId);