From 2c3b98cd243611ae2be776c0216b9020f222967f Mon Sep 17 00:00:00 2001 From: Behzad Alizadeh Date: Thu, 18 Dec 2025 15:36:14 +0330 Subject: [PATCH] Add Property WorkflowStash in WorkflowModel --- .../appsettings.json | 2 +- .../Models/WorkflowModel.cs | 7 +- .../Utility/ConversionExtensions.cs | 66 ++++++++++++++++++- src/apps/Elsa.Server.Web/appsettings.json | 2 +- 4 files changed, 71 insertions(+), 6 deletions(-) diff --git a/src/apps/Caspian.WorkflowFramework.Sample/appsettings.json b/src/apps/Caspian.WorkflowFramework.Sample/appsettings.json index f2b3c6a..1d3c077 100644 --- a/src/apps/Caspian.WorkflowFramework.Sample/appsettings.json +++ b/src/apps/Caspian.WorkflowFramework.Sample/appsettings.json @@ -39,6 +39,6 @@ }, "ConnectionStrings": { //"DefaultConnection": "Data Source=.;Initial Catalog=WfDb;User ID=sa;Password=123456;Integrated Security=false;TrustServerCertificate=True;" - "DefaultConnection": "Server=.;Database=WfDb;User Id=sa;Password=123456;TrustServerCertificate=True;" + "DefaultConnection": "Server=.;Database=CaspianWfDb;User Id=sa;Password=123456;TrustServerCertificate=True;" } } diff --git a/src/apps/Caspian.WorkflowFramework/Models/WorkflowModel.cs b/src/apps/Caspian.WorkflowFramework/Models/WorkflowModel.cs index 33b8cf2..53bd483 100644 --- a/src/apps/Caspian.WorkflowFramework/Models/WorkflowModel.cs +++ b/src/apps/Caspian.WorkflowFramework/Models/WorkflowModel.cs @@ -41,7 +41,7 @@ public class WorkflowModel /// فعلا استفاده ای نداریم /// /// - public string? NextPageData { get; set; } + public JsonElement? NextPageData { get; set; } /// /// آدرس صفحه بعدی @@ -52,4 +52,9 @@ public class WorkflowModel /// رویدادی که باید پس از سابمیت صفحه بعدی منتشر شود /// public string? NextPageEventName { get; set; } + + /// + /// جای ذخیره‌ی موقت برای استفاده های بعدی + /// + public JsonElement? WorkflowStash { get; set; } } diff --git a/src/apps/Caspian.WorkflowFramework/Utility/ConversionExtensions.cs b/src/apps/Caspian.WorkflowFramework/Utility/ConversionExtensions.cs index 27f65a6..abad0ca 100644 --- a/src/apps/Caspian.WorkflowFramework/Utility/ConversionExtensions.cs +++ b/src/apps/Caspian.WorkflowFramework/Utility/ConversionExtensions.cs @@ -72,9 +72,39 @@ public static class ConversionExtensions // ? (object?)dictionary[nameof(workflowModel.NextPageData)] // : null; - workflowModel.NextPageData = dictionary.ContainsKey(nameof(workflowModel.NextPageData)) - ? dictionary[nameof(workflowModel.NextPageData)]?.ToString() - : null; + //workflowModel.NextPageData = dictionary.ContainsKey(nameof(workflowModel.NextPageData)) + // ? dictionary[nameof(workflowModel.NextPageData)]?.ToString() + // : null; + + if (dictionary.TryGetValue(nameof(workflowModel.NextPageData), out var nextPageDataObj) && + nextPageDataObj is not null) + { + switch (nextPageDataObj) + { + case JsonElement je: + workflowModel.NextPageData = je; + break; + + case JsonNode node: + // .NET 6+ + workflowModel.NextPageData = JsonSerializer.SerializeToElement(node); + break; + + case string s: + // اگر به صورت string JSON ذخیره شده + workflowModel.NextPageData = JsonSerializer.Deserialize(s); + break; + + default: + // هر نوع دیگری: serialize و تبدیل به JsonElement + workflowModel.NextPageData = JsonSerializer.SerializeToElement(nextPageDataObj); + break; + } + } + else + { + workflowModel.NextPageData = null; + } workflowModel.NextPageUrl = dictionary.ContainsKey(nameof(workflowModel.NextPageUrl)) ? dictionary[nameof(workflowModel.NextPageUrl)]?.ToString() @@ -84,6 +114,36 @@ public static class ConversionExtensions ? dictionary[nameof(workflowModel.NextPageEventName)]?.ToString() : null; + if (dictionary.TryGetValue(nameof(workflowModel.WorkflowStash), out var workflowStashObj) && + workflowStashObj is not null) + { + switch (workflowStashObj) + { + case JsonElement je: + workflowModel.WorkflowStash = je; + break; + + case JsonNode node: + // .NET 6+ + workflowModel.WorkflowStash = JsonSerializer.SerializeToElement(node); + break; + + case string s: + // اگر به صورت string JSON ذخیره شده + workflowModel.WorkflowStash = JsonSerializer.Deserialize(s); + break; + + default: + // هر نوع دیگری: serialize و تبدیل به JsonElement + workflowModel.WorkflowStash = JsonSerializer.SerializeToElement(workflowStashObj); + break; + } + } + else + { + workflowModel.WorkflowStash = null; + } + return workflowModel; } } diff --git a/src/apps/Elsa.Server.Web/appsettings.json b/src/apps/Elsa.Server.Web/appsettings.json index 4f1fe5a..017921a 100644 --- a/src/apps/Elsa.Server.Web/appsettings.json +++ b/src/apps/Elsa.Server.Web/appsettings.json @@ -39,7 +39,7 @@ "ConnectionStrings": { "Sqlite": "", //"Data Source=App_Data/elsa.sqlite.db;Cache=Shared;", //"SqlServer": "Server=localhost,1433;Initial Catalog=Elsa;User=sa;Password=!Elsa2025@;Encrypt=false;PersistSecurityInfo=false", - "SqlServer": "Server=.;Database=WfDb;User Id=sa;Password=123456;TrustServerCertificate=True;", + "SqlServer": "Server=.;Database=CaspianWfDb;User Id=sa;Password=123456;TrustServerCertificate=True;", "MySql": "", //"Server=localhost;Database=elsa;Uid=admin;Pwd=password;", "PostgreSql": "", //"Server=localhost;Username=elsa;Database=elsa;Port=5432;Password=elsa;SSLMode=Prefer;MaxPoolSize=2000;Timeout=60", "Citus": "", //"Server=localhost;Username=citus;Database=citus;Port=9700;Password=citus;SSLMode=Prefer;MaxPoolSize=2000;Timeout=60",