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>
<Nullable>enable</Nullable>
<PackageId>Caspian.WorkflowFramework</PackageId>
<Version>1.1.0-preview.1</Version>
<Version>1.1.0-preview.3</Version>
<Authors>Digital banking team</Authors>
<Company>Caspian</Company>
<Product>Caspian.WorkflowFramework</Product>
@@ -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; }
}
}
@@ -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<ExpandoObject>(json, settings);
}
await _eventPublisher.PublishAsync(input.EventName, null, input.WorkflowInstanceId, null, payload);
var variables = await _workflowInstanceVariableManager.GetVariablesAsync(input.WorkflowInstanceId);