Gracefully handle null EventData during event publishing

This commit is contained in:
Behzad Alizadeh
2025-12-10 11:07:12 +03:30
parent 175b7b9288
commit 9b5412f33e
3 changed files with 32 additions and 17 deletions
@@ -5,7 +5,7 @@
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<PackageId>Caspian.WorkflowFramework</PackageId> <PackageId>Caspian.WorkflowFramework</PackageId>
<Version>1.1.0-preview.1</Version> <Version>1.1.0-preview.3</Version>
<Authors>Digital banking team</Authors> <Authors>Digital banking team</Authors>
<Company>Caspian</Company> <Company>Caspian</Company>
<Product>Caspian.WorkflowFramework</Product> <Product>Caspian.WorkflowFramework</Product>
@@ -1,10 +1,6 @@
using System; using JetBrains.Annotations;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Text.Json;
using System.Text;
using System.Threading.Tasks;
using JetBrains.Annotations;
namespace Caspian.WorkflowFramework.Models namespace Caspian.WorkflowFramework.Models
{ {
@@ -18,6 +14,6 @@ namespace Caspian.WorkflowFramework.Models
public string EventName { get; set; } public string EventName { get; set; }
[Required] [Required]
public string? EventData { get; set; } public JsonElement EventData { get; set; }
} }
} }
@@ -1,16 +1,19 @@
using Caspian.WorkflowFramework.Models; using Caspian.WorkflowFramework.Contracts;
using Caspian.WorkflowFramework.Contracts; using Caspian.WorkflowFramework.Models;
using Newtonsoft.Json; using Caspian.WorkflowFramework.Utility;
using Elsa.Workflows.Runtime; using Elsa.Common.Models;
using Microsoft.Extensions.DependencyInjection;
using Elsa.Workflows.Management; using Elsa.Workflows.Management;
using Elsa.Workflows.Management.Filters; using Elsa.Workflows.Management.Filters;
using Elsa.Workflows.Runtime.Messages;
using Elsa.Workflows.Models; using Elsa.Workflows.Models;
using Elsa.Common.Models; using Elsa.Workflows.Runtime;
using Caspian.WorkflowFramework.Utility; using Elsa.Workflows.Runtime.Messages;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using San.MongoLogger; using San.MongoLogger;
using System.Diagnostics; using System.Diagnostics;
using System.Dynamic;
using System.Text.Json;
namespace Caspian.WorkflowFramework.Services namespace Caspian.WorkflowFramework.Services
{ {
@@ -157,7 +160,23 @@ namespace Caspian.WorkflowFramework.Services
return response; 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<ExpandoObject>(json, settings);
}
await _eventPublisher.PublishAsync(input.EventName, null, input.WorkflowInstanceId, null, payload);
var variables = await _workflowInstanceVariableManager.GetVariablesAsync(input.WorkflowInstanceId); var variables = await _workflowInstanceVariableManager.GetVariablesAsync(input.WorkflowInstanceId);