diff --git a/src/apps/Caspian.WorkflowFramework/Models/WorkflowModel.cs b/src/apps/Caspian.WorkflowFramework/Models/WorkflowModel.cs
index 53bd483..5d8b0a7 100644
--- a/src/apps/Caspian.WorkflowFramework/Models/WorkflowModel.cs
+++ b/src/apps/Caspian.WorkflowFramework/Models/WorkflowModel.cs
@@ -15,6 +15,14 @@ public class WorkflowModel
///
public string? InstanceId { get; set; }
+ ///
+ /// نوع نمونه
+ ///
+ /// exist, new, ...
+ ///
+ ///
+ public string? InstanceMode { get; set; } = "exist";
+
///
/// نام گردش کار
///
@@ -25,6 +33,7 @@ public class WorkflowModel
///
public bool IsComplete { get; set; }
+
///
/// برای کدام کاربر؟
///
@@ -48,6 +57,11 @@ public class WorkflowModel
///
public string? NextPageUrl { get; set; }
+ ///
+ /// شماره صفحه
+ ///
+ public int? PageNumber { get; set; }
+
///
/// رویدادی که باید پس از سابمیت صفحه بعدی منتشر شود
///
diff --git a/src/apps/Caspian.WorkflowFramework/Services/WorkflowService.cs b/src/apps/Caspian.WorkflowFramework/Services/WorkflowService.cs
index fd34559..98ba8d5 100644
--- a/src/apps/Caspian.WorkflowFramework/Services/WorkflowService.cs
+++ b/src/apps/Caspian.WorkflowFramework/Services/WorkflowService.cs
@@ -102,6 +102,7 @@ public class WorkflowService : IWorkflowService, ILoggable
var workflowModel = dictionary.ConvertToWorkflowModel();
workflowModel.InstanceId = workflowClient.WorkflowInstanceId;
workflowModel.UserId = input.UserId;
+ workflowModel.InstanceMode = "exist";
response = new WorkflowResponse()
{
@@ -194,6 +195,7 @@ public class WorkflowService : IWorkflowService, ILoggable
if (runningWorkflowInstance != null)
{
workflowInstanceId = runningWorkflowInstance.Id;
+
}
else
{
@@ -220,6 +222,7 @@ public class WorkflowService : IWorkflowService, ILoggable
var workflowModel = dictionary.ConvertToWorkflowModel();
workflowModel.InstanceId = workflowInstanceId;
workflowModel.UserId = input.UserId;
+ workflowModel.InstanceId = runningWorkflowInstance != null ? "exist" : "new";
response = new WorkflowResponse()
{
@@ -309,6 +312,7 @@ public class WorkflowService : IWorkflowService, ILoggable
var workflowModel = dictionary.ConvertToWorkflowModel();
workflowModel.InstanceId = instance.Id;
workflowModel.UserId = instance.ExternalUserId;
+ workflowModel.InstanceMode = "exist";
response = new WorkflowResponse()
{
@@ -379,6 +383,7 @@ public class WorkflowService : IWorkflowService, ILoggable
var workflowModel = dictionary.ConvertToWorkflowModel();
workflowModel.InstanceId = instance.Id;
workflowModel.UserId = instance.ExternalUserId;
+ workflowModel.InstanceMode = "exist";
response = new WorkflowResponse()
{
@@ -436,6 +441,7 @@ public class WorkflowService : IWorkflowService, ILoggable
var model = dict.ConvertToWorkflowModel();
model.InstanceId = instance.Id;
model.UserId = instance.ExternalUserId;
+ model.InstanceMode = "exist";
result.Add(model);
}
@@ -466,7 +472,7 @@ public class WorkflowService : IWorkflowService, ILoggable
}
}
#endregion
-
+
#region GetActiveInstanceIdsAsync
public async Task>> GetActiveInstanceIdsAsync(GetActiveInstancesModel input)
{
@@ -560,6 +566,7 @@ public class WorkflowService : IWorkflowService, ILoggable
var model = dict.ConvertToWorkflowModel();
model.InstanceId = latest.Id;
model.UserId = latest.ExternalUserId;
+ model.InstanceMode = "exist";
var response = new WorkflowResponse
{
@@ -587,7 +594,7 @@ public class WorkflowService : IWorkflowService, ILoggable
}
}
#endregion
-
+
#region GetLatestActiveInstanceIdAsync
public async Task> GetLatestActiveInstanceIdAsync(GetLatestActiveInstanceModel input)
{
@@ -714,7 +721,7 @@ public class WorkflowService : IWorkflowService, ILoggable
_logger.Log("Exception in CancelInstanceAsync", WFInstanceId: input.WorkflowInstanceId, response, sw.ElapsedMilliseconds, ex);
return response;
}
- }
+ }
#endregion
//#region EvictDefFromCacheAsync
diff --git a/src/apps/Caspian.WorkflowFramework/Utility/ConversionExtensions.cs b/src/apps/Caspian.WorkflowFramework/Utility/ConversionExtensions.cs
index abad0ca..7a205f4 100644
--- a/src/apps/Caspian.WorkflowFramework/Utility/ConversionExtensions.cs
+++ b/src/apps/Caspian.WorkflowFramework/Utility/ConversionExtensions.cs
@@ -1,149 +1,119 @@
-using System;
+using Caspian.WorkflowFramework.Models;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Threading.Tasks;
-using Caspian.WorkflowFramework.Models;
-namespace Caspian.WorkflowFramework.Utility;
-public static class ConversionExtensions
+namespace Caspian.WorkflowFramework.Utility
{
- public static WorkflowModel ConvertToWorkflowModel(this Dictionary dictionary)
+ public static class ConversionExtensions
{
- var workflowModel = new WorkflowModel();
+ public static WorkflowModel ConvertToWorkflowModel(this Dictionary dictionary)
+ {
+ var workflowModel = new WorkflowModel();
+
+ if (dictionary == null || dictionary.Count == 0)
+ return workflowModel;
+
+ //Map dictionary values to WorkflowModel properties
+ workflowModel.InstanceId = dictionary.ContainsKey(nameof(workflowModel.InstanceId))
+ ? dictionary[nameof(workflowModel.InstanceId)]?.ToString()
+ : null;
+
+ workflowModel.InstanceMode = dictionary.ContainsKey(nameof(workflowModel.InstanceMode))
+ ? dictionary[nameof(workflowModel.InstanceMode)]?.ToString()
+ : null;
+
+ workflowModel.Name = dictionary.ContainsKey(nameof(workflowModel.Name))
+ ? dictionary[nameof(workflowModel.Name)]?.ToString()
+ : null;
+
+ workflowModel.IsComplete = dictionary.ContainsKey(nameof(workflowModel.IsComplete))
+ ? bool.TryParse(dictionary[nameof(workflowModel.IsComplete)]?.ToString(), out var isComplete) && isComplete
+ : false;
+
+ workflowModel.UserId = dictionary.ContainsKey(nameof(workflowModel.UserId))
+ ? long.TryParse(dictionary[nameof(workflowModel.UserId)]?.ToString(), out var userId) ? userId : (long?)null
+ : null;
+
+ //CurrentPageData
+ if (dictionary.TryGetValue(nameof(workflowModel.CurrentPageData), out var currentPageDataObj) &&
+ currentPageDataObj is not null)
+ {
+ switch (currentPageDataObj)
+ {
+ case JsonElement je:
+ workflowModel.CurrentPageData = je;
+ break;
+
+ case JsonNode node:
+ // .NET 6+
+ workflowModel.CurrentPageData = JsonSerializer.SerializeToElement(node);
+ break;
+
+ case string s:
+ // اگر به صورت string JSON ذخیره شده
+ workflowModel.CurrentPageData = JsonSerializer.Deserialize(s);
+ break;
+
+ default:
+ // هر نوع دیگری: serialize و تبدیل به JsonElement
+ workflowModel.CurrentPageData = JsonSerializer.SerializeToElement(currentPageDataObj);
+ break;
+ }
+ }
+ else
+ {
+ workflowModel.CurrentPageData = null;
+ }
+
+ //NextPageData
+ 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()
+ : null;
+
+ workflowModel.PageNumber = dictionary.ContainsKey(nameof(workflowModel.PageNumber))
+ ? int.TryParse(dictionary[nameof(workflowModel.PageNumber)]?.ToString(), out var pageNumber) ? pageNumber : (int?)null
+ : null;
+
+ workflowModel.NextPageEventName = dictionary.ContainsKey(nameof(workflowModel.NextPageEventName))
+ ? dictionary[nameof(workflowModel.NextPageEventName)]?.ToString()
+ : null;
- if (dictionary == null || dictionary.Count == 0)
return workflowModel;
-
- //Map dictionary values to WorkflowModel properties
- workflowModel.InstanceId = dictionary.ContainsKey(nameof(workflowModel.InstanceId))
- ? dictionary[nameof(workflowModel.InstanceId)]?.ToString()
- : null;
-
- workflowModel.Name = dictionary.ContainsKey(nameof(workflowModel.Name))
- ? dictionary[nameof(workflowModel.Name)]?.ToString()
- : null;
-
- workflowModel.IsComplete = dictionary.ContainsKey(nameof(workflowModel.IsComplete))
- ? bool.TryParse(dictionary[nameof(workflowModel.IsComplete)]?.ToString(), out var isComplete) && isComplete
- : false;
-
- workflowModel.UserId = dictionary.ContainsKey(nameof(workflowModel.UserId))
- ? long.TryParse(dictionary[nameof(workflowModel.UserId)]?.ToString(), out var userId) ? userId : (long?)null
- : null;
-
- if (dictionary.TryGetValue(nameof(workflowModel.CurrentPageData), out var currentPageDataObj) &&
- currentPageDataObj is not null)
- {
- switch (currentPageDataObj)
- {
- case JsonElement je:
- workflowModel.CurrentPageData = je;
- break;
-
- case JsonNode node:
- // .NET 6+
- workflowModel.CurrentPageData = JsonSerializer.SerializeToElement(node);
- break;
-
- case string s:
- // اگر به صورت string JSON ذخیره شده
- workflowModel.CurrentPageData = JsonSerializer.Deserialize(s);
- break;
-
- default:
- // هر نوع دیگری: serialize و تبدیل به JsonElement
- workflowModel.CurrentPageData = JsonSerializer.SerializeToElement(currentPageDataObj);
- break;
- }
}
- else
- {
- workflowModel.CurrentPageData = null;
- }
-
- //workflowModel.CurrentPageData = dictionary.ContainsKey(nameof(workflowModel.CurrentPageData))
- // ? dictionary[nameof(workflowModel.CurrentPageData)]?.ToString()
- // : null;
-
- //workflowModel.NextPageData = dictionary.ContainsKey(nameof(workflowModel.NextPageData))
- // ? (object?)dictionary[nameof(workflowModel.NextPageData)]
- // : 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()
- : null;
-
- workflowModel.NextPageEventName = dictionary.ContainsKey(nameof(workflowModel.NextPageEventName))
- ? 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;
}
}