Compare commits
10
Commits
86a3e8c284
...
54b068d8e5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
54b068d8e5 | ||
|
|
6764991872 | ||
|
|
321effb4a0 | ||
|
|
9239d47401 | ||
|
|
3a56157097 | ||
|
|
b859e20a01 | ||
|
|
dcf3687b82 | ||
|
|
34c3d4e848 | ||
|
|
e52fb8f85c | ||
|
|
c6fa2bef4d |
@@ -15,7 +15,13 @@
|
||||
<PackageIcon>icon.png</PackageIcon>
|
||||
|
||||
<!-- For NuGet browsers that currently don't support <PackageIcon> yet -->
|
||||
<PackageIconUrl>https://v3.elsaworkflows.io/nuget-icon.png</PackageIconUrl>
|
||||
<!--<PackageIconUrl>https://v3.elsaworkflows.io/nuget-icon.png</PackageIconUrl>-->
|
||||
<PackageIcon>icon.png</PackageIcon>
|
||||
|
||||
<!-- Package output -->
|
||||
<PackageOutputPath>
|
||||
$(MSBuildThisFileDirectory)packages
|
||||
</PackageOutputPath>
|
||||
|
||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
<AnalysisModeDocumentation>Default</AnalysisModeDocumentation>
|
||||
|
||||
@@ -97,7 +97,8 @@ public class WorkflowController : Controller, ILoggable
|
||||
{
|
||||
_logger.Log("Start of Cancel action", WFInstanceId: input.WorkflowInstanceId, JsonConvert.SerializeObject(input));
|
||||
|
||||
var result = await _workflowService.CancelInstanceAsync(input);
|
||||
//var result = await _workflowService.CancelInstanceAsync(input);
|
||||
var result = await _workflowService.ForceCancelAsync(input);
|
||||
|
||||
_logger.Log("End of Cancel action", WFInstanceId: input.WorkflowInstanceId, JsonConvert.SerializeObject(result));
|
||||
|
||||
@@ -160,4 +161,25 @@ public class WorkflowController : Controller, ILoggable
|
||||
return Json(result);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GetNextPossibleEvents
|
||||
[HttpPost("GetNextPossibleEvents")]
|
||||
public async Task<ActionResult<WorkflowResponse<WorkflowModel>>> GetNextPossibleEvents(string workflowInstanceId)
|
||||
{
|
||||
var result = await _workflowService.GetNextPossibleEventsAsync(workflowInstanceId);
|
||||
return Ok(result);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ResetCache
|
||||
[HttpGet("ResetCache")]
|
||||
public async Task ResetCache([FromQuery] string key)
|
||||
{
|
||||
_logger.Log("Start of ResetCache action", key);
|
||||
|
||||
await _workflowService.EvictDefFromCacheAsync(key);
|
||||
|
||||
_logger.Log("End of ResetCache action", key);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
"ConnectionStrings": {
|
||||
//"DefaultConnection": "Data Source=.;Initial Catalog=WfDb;User ID=sa;Password=123456;Integrated Security=false;TrustServerCertificate=True;"
|
||||
//"DefaultConnection": "Server=.;Database=CaspianWfDb;User Id=sa;Password=123456;TrustServerCertificate=True;"
|
||||
//"DefaultConnection": "Server=.;Database=Workflow_Db;User Id=sa;Password=123456;TrustServerCertificate=True;"
|
||||
"DefaultConnection": "Server=192.168.251.161;Database=Workflow_Db;User Id=sa;Password=cLL{3N29D@n2;MultipleActiveResultSets=true;TrustServerCertificate=True"
|
||||
"DefaultConnection": "Server=.;Database=WfLive;User Id=sa;Password=123456;TrustServerCertificate=True;"
|
||||
//"DefaultConnection": "Server=192.168.251.161;Database=Workflow_Db;User Id=sa;Password=cLL{3N29D@n2;MultipleActiveResultSets=true;TrustServerCertificate=True"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration" />
|
||||
<PackageReference Include="San.MongoLogger" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -127,9 +127,9 @@ public static class DependencyInjection
|
||||
// engine.Execute("function sayHelloWorld() { return greet('World'); }");
|
||||
//});
|
||||
})
|
||||
// برای ثبت Activityهایی مانند Elsa.SendHttpRequest
|
||||
.UseHttp()
|
||||
.UseWorkflowContexts();
|
||||
|
||||
elsa.AddFastEndpointsAssembly<Program>();
|
||||
});
|
||||
|
||||
// Optionally configure recurring tasks using alternative schedules.
|
||||
@@ -172,7 +172,7 @@ public static class DependencyInjection
|
||||
// Captures unhandled exceptions and returns a JSON response.
|
||||
app.UseJsonSerializationErrorHandler();
|
||||
|
||||
//app.UseWorkflows();
|
||||
app.UseWorkflows();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -50,8 +50,12 @@ public interface IWorkflowService
|
||||
/// </summary>
|
||||
Task<WorkflowResponse<dynamic>> CancelInstanceAsync(CancelWorkflowInstanceModel input);
|
||||
|
||||
///// <summary>
|
||||
///// Evicts a workflow definition from cache (optional, commented out in service).
|
||||
///// </summary>
|
||||
//Task<WorkflowResponse<WorkflowModel>> EvictDefFromCacheAsync(string definitionId);
|
||||
Task<WorkflowResponse<dynamic>> ForceCancelAsync(CancelWorkflowInstanceModel input);
|
||||
|
||||
Task<WorkflowResponse<WorkflowModel>> GetNextPossibleEventsAsync(string workflowInstanceId);
|
||||
|
||||
/// <summary>
|
||||
/// Evicts a workflow definition from cache (optional, commented out in service).
|
||||
/// </summary>
|
||||
Task EvictDefFromCacheAsync(string name, CancellationToken cancellationToken = default);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
namespace Caspian.WorkflowFramework.Models;
|
||||
public sealed class PossibleEventDto
|
||||
{
|
||||
public string EventName { get; set; } = default!;
|
||||
public string? BookmarkId { get; set; }
|
||||
public string? ActivityId { get; set; }
|
||||
public string? ActivityNodeId { get; set; }
|
||||
public string? ActivityInstanceId { get; set; }
|
||||
public DateTimeOffset? CreatedAt { get; set; }
|
||||
public bool? AutoBurn { get; set; }
|
||||
public string? CallbackMethodName { get; set; }
|
||||
public IDictionary<string, string>? Metadata { get; set; }
|
||||
}
|
||||
@@ -19,4 +19,6 @@ public class PublishEventModel
|
||||
|
||||
[Required]
|
||||
public JsonElement EventData { get; set; }
|
||||
|
||||
public string? SessionId { get; set; }
|
||||
}
|
||||
|
||||
@@ -11,13 +11,18 @@ using Elsa.Workflows.Management;
|
||||
using Elsa.Workflows.Management.Filters;
|
||||
using Elsa.Workflows.Models;
|
||||
using Elsa.Workflows.Runtime;
|
||||
using Elsa.Workflows.Runtime.Filters;
|
||||
using Elsa.Workflows.Runtime.Messages;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using San.MongoLogger;
|
||||
|
||||
namespace Caspian.WorkflowFramework.Services;
|
||||
|
||||
public class WorkflowService : IWorkflowService, ILoggable
|
||||
{
|
||||
#region Fields
|
||||
@@ -30,6 +35,8 @@ public class WorkflowService : IWorkflowService, ILoggable
|
||||
private readonly IEventPublisher _eventPublisher;
|
||||
private readonly IWorkflowDefinitionCacheManager _workflowDefinitionCacheManager;
|
||||
private readonly IMdbLogger<WorkflowService> _logger;
|
||||
private readonly IBookmarkStore _bookmarkStore;
|
||||
private readonly IActivityExecutionStore _activityExecutionStore;
|
||||
#endregion
|
||||
|
||||
#region Ctor
|
||||
@@ -43,6 +50,9 @@ public class WorkflowService : IWorkflowService, ILoggable
|
||||
_workflowInstanceManager = _serviceProvider.GetRequiredService<IWorkflowInstanceManager>();
|
||||
_workflowInstanceStore = _serviceProvider.GetRequiredService<IWorkflowInstanceStore>();
|
||||
_eventPublisher = _serviceProvider.GetRequiredService<IEventPublisher>();
|
||||
_workflowDefinitionCacheManager = _serviceProvider.GetRequiredService<IWorkflowDefinitionCacheManager>();
|
||||
_bookmarkStore = _serviceProvider.GetRequiredService<IBookmarkStore>();
|
||||
_activityExecutionStore = _serviceProvider.GetRequiredService<IActivityExecutionStore>();
|
||||
_logger = logger;
|
||||
}
|
||||
#endregion
|
||||
@@ -102,7 +112,7 @@ public class WorkflowService : IWorkflowService, ILoggable
|
||||
var workflowModel = dictionary.ConvertToWorkflowModel();
|
||||
workflowModel.InstanceId = workflowClient.WorkflowInstanceId;
|
||||
workflowModel.UserId = input.UserId;
|
||||
workflowModel.InstanceMode = "exist";
|
||||
workflowModel.InstanceMode = "new";
|
||||
|
||||
response = new WorkflowResponse<WorkflowModel>()
|
||||
{
|
||||
@@ -128,6 +138,7 @@ public class WorkflowService : IWorkflowService, ILoggable
|
||||
|
||||
sw.Stop();
|
||||
|
||||
|
||||
_logger.Log("Exception occurs in CreateAndExecuteAsync", WFInstanceId: response.Data?.InstanceId, response, sw.ElapsedMilliseconds, ex);
|
||||
|
||||
return response;
|
||||
@@ -222,7 +233,7 @@ public class WorkflowService : IWorkflowService, ILoggable
|
||||
var workflowModel = dictionary.ConvertToWorkflowModel();
|
||||
workflowModel.InstanceId = workflowInstanceId;
|
||||
workflowModel.UserId = input.UserId;
|
||||
workflowModel.InstanceId = runningWorkflowInstance != null ? "exist" : "new";
|
||||
workflowModel.InstanceMode = runningWorkflowInstance != null ? "exist" : "new";
|
||||
|
||||
response = new WorkflowResponse<WorkflowModel>()
|
||||
{
|
||||
@@ -256,65 +267,122 @@ public class WorkflowService : IWorkflowService, ILoggable
|
||||
#endregion
|
||||
|
||||
#region PublishEventAsync
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task<WorkflowResponse<WorkflowModel>> PublishEventAsync(PublishEventModel input)
|
||||
public async Task<WorkflowResponse<WorkflowModel>> PublishEventAsync(
|
||||
PublishEventModel input)
|
||||
{
|
||||
var sw = Stopwatch.StartNew();
|
||||
|
||||
try
|
||||
{
|
||||
_logger.Log("Start of PublishEventAsync", WFInstanceId: input.WorkflowInstanceId, input);
|
||||
_logger.Log(
|
||||
"Start of PublishEventAsync",
|
||||
WFInstanceId: input.WorkflowInstanceId,
|
||||
input);
|
||||
|
||||
WorkflowResponse<WorkflowModel> response;
|
||||
|
||||
var instance = await _workflowInstanceManager.FindByIdAsync(input.WorkflowInstanceId);
|
||||
var instance = await _workflowInstanceManager.FindByIdAsync(
|
||||
input.WorkflowInstanceId);
|
||||
|
||||
if (instance == null)
|
||||
{
|
||||
var msg = $"Workflow instance with id '{input.WorkflowInstanceId}' not found";
|
||||
response = new WorkflowResponse<WorkflowModel>()
|
||||
var notFoundResponse = new WorkflowResponse<WorkflowModel>
|
||||
{
|
||||
Status = 1,
|
||||
Message = msg,
|
||||
Message =
|
||||
$"Workflow instance with id " +
|
||||
$"'{input.WorkflowInstanceId}' not found",
|
||||
Data = null
|
||||
};
|
||||
|
||||
sw.Stop();
|
||||
|
||||
_logger.Log("End of PublishEventAsync", WFInstanceId: input.WorkflowInstanceId, response, sw.ElapsedMilliseconds);
|
||||
_logger.Log(
|
||||
"End of PublishEventAsync",
|
||||
WFInstanceId: input.WorkflowInstanceId,
|
||||
notFoundResponse,
|
||||
sw.ElapsedMilliseconds);
|
||||
|
||||
return response;
|
||||
return notFoundResponse;
|
||||
}
|
||||
|
||||
dynamic payload = null;
|
||||
/*
|
||||
* مهم:
|
||||
* ساخت Payload را مانند نسخه قبلی نگه میداریم:
|
||||
*
|
||||
* JsonElement
|
||||
* ↓
|
||||
* ExpandoObject
|
||||
* ↓
|
||||
* اضافهشدن SessionId
|
||||
* ↓
|
||||
* PublishEvent
|
||||
*/
|
||||
|
||||
if (input.EventData.ValueKind != JsonValueKind.Undefined &&
|
||||
input.EventData.ValueKind != JsonValueKind.Null)
|
||||
ExpandoObject payload = new();
|
||||
|
||||
if (input.EventData.ValueKind is not JsonValueKind.Undefined
|
||||
and not JsonValueKind.Null)
|
||||
{
|
||||
if (input.EventData.ValueKind != JsonValueKind.Object)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"EventData must be a JSON object.");
|
||||
}
|
||||
|
||||
var json = input.EventData.GetRawText();
|
||||
|
||||
var settings = new JsonSerializerSettings
|
||||
var serializerSettings = new JsonSerializerSettings
|
||||
{
|
||||
Converters = { new ExpandoObjectConverter() }
|
||||
Converters =
|
||||
{
|
||||
new ExpandoObjectConverter()
|
||||
}
|
||||
};
|
||||
|
||||
// تبدیل JSON به object داینامیک
|
||||
payload = JsonConvert.DeserializeObject<ExpandoObject>(json, settings);
|
||||
payload =
|
||||
JsonConvert.DeserializeObject<ExpandoObject>(
|
||||
json,
|
||||
serializerSettings)
|
||||
?? new ExpandoObject();
|
||||
}
|
||||
|
||||
//await _eventPublisher.PublishAsync(input.EventName, null, input.WorkflowInstanceId, null, input.EventData, asynchronous: true);
|
||||
await _eventPublisher.PublishAsync(input.EventName, null, input.WorkflowInstanceId, null, payload);
|
||||
/*
|
||||
* ExpandoObject پیادهسازی IDictionary است؛
|
||||
* بنابراین بدون Serialize/Deserialize مجدد میتوانیم
|
||||
* SessionId را به Payload اضافه کنیم.
|
||||
*/
|
||||
if (!string.IsNullOrWhiteSpace(input.SessionId))
|
||||
{
|
||||
var payloadDictionary =
|
||||
(IDictionary<string, object?>)payload;
|
||||
|
||||
var variables = await _workflowInstanceVariableManager.GetVariablesAsync(input.WorkflowInstanceId);
|
||||
payloadDictionary["SessionId"] = input.SessionId;
|
||||
}
|
||||
|
||||
// تبدیل به دیکشنری
|
||||
var dictionary = variables.ToDictionary(a => a.Variable.Name, a => a.Value);
|
||||
await _eventPublisher.PublishAsync(
|
||||
eventName: input.EventName,
|
||||
correlationId: null,
|
||||
workflowInstanceId: input.WorkflowInstanceId,
|
||||
activityInstanceId: null,
|
||||
payload: payload,
|
||||
asynchronous: false);
|
||||
|
||||
var variables =
|
||||
await _workflowInstanceVariableManager.GetVariablesAsync(
|
||||
input.WorkflowInstanceId);
|
||||
|
||||
var dictionary = variables.ToDictionary(
|
||||
x => x.Variable.Name,
|
||||
x => x.Value);
|
||||
|
||||
var workflowModel = dictionary.ConvertToWorkflowModel();
|
||||
|
||||
workflowModel.InstanceId = instance.Id;
|
||||
workflowModel.UserId = instance.ExternalUserId;
|
||||
workflowModel.InstanceMode = "exist";
|
||||
|
||||
response = new WorkflowResponse<WorkflowModel>()
|
||||
var response = new WorkflowResponse<WorkflowModel>
|
||||
{
|
||||
Status = 0,
|
||||
Message = "Success",
|
||||
@@ -323,26 +391,36 @@ public class WorkflowService : IWorkflowService, ILoggable
|
||||
|
||||
sw.Stop();
|
||||
|
||||
_logger.Log("End of PublishEventAsync", WFInstanceId: input.WorkflowInstanceId, response, sw.ElapsedMilliseconds);
|
||||
_logger.Log(
|
||||
"End of PublishEventAsync",
|
||||
WFInstanceId: input.WorkflowInstanceId,
|
||||
response,
|
||||
sw.ElapsedMilliseconds);
|
||||
|
||||
return response;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var response = new WorkflowResponse<WorkflowModel>()
|
||||
sw.Stop();
|
||||
|
||||
var response = new WorkflowResponse<WorkflowModel>
|
||||
{
|
||||
Status = 100,
|
||||
Message = ex.Message,
|
||||
Data = null
|
||||
};
|
||||
|
||||
sw.Stop();
|
||||
|
||||
_logger.Log("Exception occurs in PublishEventAsync", WFInstanceId: input.WorkflowInstanceId, response, sw.ElapsedMilliseconds, ex);
|
||||
_logger.Log(
|
||||
"Exception occurs in PublishEventAsync",
|
||||
WFInstanceId: input.WorkflowInstanceId,
|
||||
response,
|
||||
sw.ElapsedMilliseconds,
|
||||
ex);
|
||||
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region InquiryStateAsync
|
||||
@@ -725,65 +803,280 @@ public class WorkflowService : IWorkflowService, ILoggable
|
||||
}
|
||||
#endregion
|
||||
|
||||
//#region EvictDefFromCacheAsync
|
||||
///// <inheritdoc />
|
||||
//public async Task<WorkflowResponse<WorkflowModel>> EvictDefFromCacheAsync(string definitionId)
|
||||
#region ForceCancelAsync
|
||||
public async Task<WorkflowResponse<dynamic>> ForceCancelAsync(CancelWorkflowInstanceModel input)
|
||||
{
|
||||
var sw = Stopwatch.StartNew();
|
||||
try
|
||||
{
|
||||
_logger.Log("Start ForceCancelAsync", WFInstanceId: input.WorkflowInstanceId, input);
|
||||
|
||||
var instance = await _workflowInstanceManager.FindByIdAsync(input.WorkflowInstanceId);
|
||||
|
||||
if (instance == null)
|
||||
return new WorkflowResponse<dynamic> { Status = 1, Message = "Instance not found", Data = false };
|
||||
|
||||
// جلوگری از Resume شدن دوباره
|
||||
instance.Status = WorkflowStatus.Finished;
|
||||
instance.SubStatus = WorkflowSubStatus.Cancelled;
|
||||
|
||||
// پاکسازی bookmarks از دیتابیس واقعی
|
||||
var bookmarkFilter = new BookmarkFilter()
|
||||
{
|
||||
WorkflowInstanceId = input.WorkflowInstanceId
|
||||
};
|
||||
await _bookmarkStore.DeleteAsync(bookmarkFilter);
|
||||
|
||||
// پاکسازی scheduled activities (در صورتی که runtime distributed باشد)
|
||||
var activityFilter = new ActivityExecutionRecordFilter()
|
||||
{
|
||||
WorkflowInstanceId = input.WorkflowInstanceId
|
||||
};
|
||||
await _activityExecutionStore.DeleteManyAsync(activityFilter);
|
||||
|
||||
//// پاکسازی incidents (در پروژههای بزرگ ضروری است)
|
||||
//await _incidentStore.DeleteManyAsync(
|
||||
// x => x.WorkflowInstanceId == input.WorkflowInstanceId
|
||||
//);
|
||||
|
||||
// ذخیره instance تغییر یافته
|
||||
await _workflowInstanceManager.SaveAsync(instance);
|
||||
|
||||
sw.Stop();
|
||||
|
||||
var response = new WorkflowResponse<dynamic>
|
||||
{
|
||||
Status = 0,
|
||||
Message = "Force cancel completed",
|
||||
Data = true
|
||||
};
|
||||
|
||||
_logger.Log("End ForceCancelAsync", WFInstanceId: instance.Id, response, sw.ElapsedMilliseconds);
|
||||
|
||||
return response;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
sw.Stop();
|
||||
|
||||
var response = new WorkflowResponse<dynamic>
|
||||
{
|
||||
Status = 100,
|
||||
Message = ex.Message,
|
||||
Data = false
|
||||
};
|
||||
|
||||
_logger.Log("Exception in ForceCancelAsync", WFInstanceId: input.WorkflowInstanceId, response, sw.ElapsedMilliseconds, ex);
|
||||
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region GetNextPossibleEventsAsync
|
||||
public async Task<WorkflowResponse<WorkflowModel>> GetNextPossibleEventsAsync(string workflowInstanceId)
|
||||
{
|
||||
var sw = Stopwatch.StartNew();
|
||||
try
|
||||
{
|
||||
_logger.Log("Start of GetNextPossibleEventsAsync", WFInstanceId: workflowInstanceId, workflowInstanceId);
|
||||
|
||||
var instance = await _workflowInstanceManager.FindByIdAsync(workflowInstanceId);
|
||||
if (instance == null)
|
||||
{
|
||||
sw.Stop();
|
||||
return new WorkflowResponse<WorkflowModel>
|
||||
{
|
||||
Status = 1,
|
||||
Message = $"Workflow instance with id '{workflowInstanceId}' not found",
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
|
||||
var variables = await _workflowInstanceVariableManager.GetVariablesAsync(workflowInstanceId);
|
||||
var dict = variables.ToDictionary(a => a.Variable.Name, a => a.Value);
|
||||
|
||||
var model = dict.ConvertToWorkflowModel();
|
||||
model.InstanceId = instance.Id;
|
||||
model.UserId = instance.ExternalUserId;
|
||||
model.InstanceMode = "exist";
|
||||
|
||||
var bookmarks = instance.WorkflowState?.Bookmarks ?? new List<Bookmark>();
|
||||
|
||||
var possible = bookmarks
|
||||
.Select(b => new PossibleEventDto
|
||||
{
|
||||
EventName = ExtractEventName(b) ?? "",
|
||||
BookmarkId = b.Id,
|
||||
ActivityId = b.ActivityId,
|
||||
ActivityNodeId = b.ActivityNodeId,
|
||||
ActivityInstanceId = b.ActivityInstanceId,
|
||||
CreatedAt = b.CreatedAt,
|
||||
AutoBurn = b.AutoBurn,
|
||||
CallbackMethodName = b.CallbackMethodName,
|
||||
Metadata = b.Metadata
|
||||
})
|
||||
.Where(x => !string.IsNullOrWhiteSpace(x.EventName))
|
||||
.GroupBy(x => x.EventName, StringComparer.OrdinalIgnoreCase)
|
||||
.Select(g => g.First())
|
||||
.ToList();
|
||||
|
||||
// fallback
|
||||
if (possible.Count == 0 && !string.IsNullOrWhiteSpace(model.NextPageEventName))
|
||||
{
|
||||
possible.Add(new PossibleEventDto
|
||||
{
|
||||
EventName = model.NextPageEventName!
|
||||
});
|
||||
}
|
||||
|
||||
model.NextPageData = System.Text.Json.JsonSerializer.SerializeToElement(new { possibleEvents = possible });
|
||||
|
||||
sw.Stop();
|
||||
_logger.Log("End of GetNextPossibleEventsAsync", WFInstanceId: workflowInstanceId, model, sw.ElapsedMilliseconds);
|
||||
|
||||
return new WorkflowResponse<WorkflowModel>
|
||||
{
|
||||
Status = 0,
|
||||
Message = "Success",
|
||||
Data = model
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
sw.Stop();
|
||||
_logger.Log("Exception in GetNextPossibleEventsAsync", WFInstanceId: workflowInstanceId, ex.Message, sw.ElapsedMilliseconds, ex);
|
||||
|
||||
return new WorkflowResponse<WorkflowModel>
|
||||
{
|
||||
Status = 100,
|
||||
Message = ex.Message,
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
}
|
||||
private static string? ExtractEventName(Elsa.Workflows.Models.Bookmark b)
|
||||
{
|
||||
// حالت غالب: خود Name همان eventName است
|
||||
//if (!string.IsNullOrWhiteSpace(b.Name))
|
||||
// return b.Name;
|
||||
//var eventName = ((Elsa.Workflows.Runtime.Stimuli.EventStimulus)b.Payload)?.EventName;
|
||||
|
||||
// اگر جایی Name خالی بود، از Payload هم تلاش میکنیم.
|
||||
var payload = b.Payload;
|
||||
if (payload == null) return null;
|
||||
|
||||
// اگر payload دیکشنری باشد:
|
||||
if (payload is IDictionary<string, object> dict)
|
||||
{
|
||||
if (dict.TryGetValue("EventName", out var v) && v is string s1 && !string.IsNullOrWhiteSpace(s1)) return s1;
|
||||
if (dict.TryGetValue("eventName", out v) && v is string s2 && !string.IsNullOrWhiteSpace(s2)) return s2;
|
||||
if (dict.TryGetValue("Name", out v) && v is string s3 && !string.IsNullOrWhiteSpace(s3)) return s3;
|
||||
}
|
||||
|
||||
// اگر payload شیء باشد و property داشته باشد (Reflection سبک):
|
||||
var t = payload.GetType();
|
||||
foreach (var prop in new[] { "EventName", "eventName", "Name" })
|
||||
{
|
||||
var p = t.GetProperty(prop);
|
||||
if (p?.GetValue(payload) is string s && !string.IsNullOrWhiteSpace(s))
|
||||
return s;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region EvictDefFromCacheAsync
|
||||
/// <inheritdoc />
|
||||
public async Task EvictDefFromCacheAsync(string name, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var sw = Stopwatch.StartNew();
|
||||
|
||||
try
|
||||
{
|
||||
_logger.Log("Start of EvictDefFromCacheAsync", name);
|
||||
|
||||
var defFilter = new WorkflowDefinitionFilter()
|
||||
{
|
||||
Name = name,
|
||||
VersionOptions = VersionOptions.Published
|
||||
};
|
||||
|
||||
var definition = await _workflowDefinitionService
|
||||
.FindWorkflowDefinitionAsync(defFilter);
|
||||
|
||||
//if (definition == null)
|
||||
//{
|
||||
// var sw = Stopwatch.StartNew();
|
||||
// try
|
||||
// {
|
||||
// _logger.Log("Start of EvictDefFromCacheAsync", definitionId);
|
||||
|
||||
// var key = _workflowDefinitionCacheManager.CreateWorkflowDefinitionChangeTokenKey(definitionId);
|
||||
// await _workflowDefinitionCacheManager.EvictWorkflowDefinitionAsync(definitionId);
|
||||
|
||||
// WorkflowResponse<WorkflowModel> response;
|
||||
|
||||
// if (instance == null)
|
||||
// {
|
||||
// var msg = $"Workflow instance with id '{input.WorkflowInstanceId}' not found";
|
||||
// response = new WorkflowResponse<WorkflowModel>()
|
||||
// {
|
||||
// Status = 1,
|
||||
// Message = msg,
|
||||
// Data = null
|
||||
// };
|
||||
|
||||
// sw.Stop();
|
||||
|
||||
// _logger.Log("End of InquiryStateAsync", WFInstanceId: input.WorkflowInstanceId, response, sw.ElapsedMilliseconds);
|
||||
|
||||
// return response;
|
||||
// }
|
||||
|
||||
// response = new WorkflowResponse<WorkflowModel>()
|
||||
// {
|
||||
// Status = 0,
|
||||
// Message = "Success",
|
||||
// Data = workflowModel
|
||||
// };
|
||||
|
||||
// sw.Stop();
|
||||
|
||||
// _logger.Log("End of InquiryStateAsync", WFInstanceId: input.WorkflowInstanceId, response, sw.ElapsedMilliseconds);
|
||||
|
||||
// return response;
|
||||
// }
|
||||
// catch (Exception ex)
|
||||
// {
|
||||
// var response = new WorkflowResponse<WorkflowModel>()
|
||||
// {
|
||||
// Status = 100,
|
||||
// Message = ex.Message,
|
||||
// Data = null
|
||||
// };
|
||||
|
||||
// sw.Stop();
|
||||
|
||||
// _logger.Log("Exception occurs in InquiryStateAsync", WFInstanceId: input.WorkflowInstanceId, response, sw.ElapsedMilliseconds, ex);
|
||||
|
||||
// return response;
|
||||
// }
|
||||
// _logger.Log("No definition found to evict", name);
|
||||
// return;
|
||||
//}
|
||||
//#endregion
|
||||
|
||||
//// 1. Evict definition cache
|
||||
//await _workflowDefinitionCacheManager.EvictWorkflowDefinitionAsync(definition.DefinitionId, cancellationToken);
|
||||
//_logger.Log($"Definition cache evicted for definitionId '{definition.DefinitionId}'", definition.DefinitionId);
|
||||
|
||||
//// 2. Re-index triggers (this rebuilds runtime cache)
|
||||
//await _triggerIndexer.IndexTriggersAsync(definition, cancellationToken);
|
||||
//_logger.Log($"Trigger indexing completed for definitionId '{definition.DefinitionId}'", definition.DefinitionId);
|
||||
|
||||
//var cacheKey = _workflowDefinitionCacheManager.CreateWorkflowFilterCacheKey(new WorkflowDefinitionFilter()
|
||||
//{
|
||||
// DefinitionHandle = WorkflowDefinitionHandle.ByDefinitionId(definition.DefinitionId, VersionOptions.Published)
|
||||
//});
|
||||
|
||||
//await workflowDefinitionCacheManager.EvictWorkflowDefinitionAsync(notification.WorkflowDefinition.DefinitionId, cancellationToken);
|
||||
//var cacheKey = cacheManager.CreateWorkflowDefinitionVersionCacheKey(definitionId, versionOptions);
|
||||
//var cacheKey = cacheManager.CreateWorkflowDefinitionVersionCacheKey(definitionVersionId);
|
||||
//var cacheKey = cacheManager.CreateWorkflowDefinitionFilterCacheKey(filter);
|
||||
//var cacheKey = cacheManager.CreateWorkflowVersionCacheKey(definitionId, versionOptions);
|
||||
//var cacheKey = cacheManager.CreateWorkflowVersionCacheKey(definitionVersionId);
|
||||
|
||||
|
||||
//Definition cache
|
||||
await _workflowDefinitionCacheManager.EvictWorkflowDefinitionAsync(definition.DefinitionId);
|
||||
|
||||
//Runtime Workflow Graph Cache
|
||||
//await _notificationSender.SendAsync(new InvalidateWorkflowsCache());
|
||||
//await _workflowDefinitionsReloader.ReloadWorkflowDefinitionsAsync();
|
||||
|
||||
//Trigger Cache
|
||||
//await _workflowDefinitionCacheManager.Cache.TriggerTokenAsync(CachingTriggerStore.CacheInvalidationTokenKey, cancellationToken);
|
||||
//await _triggerIndexer.IndexTriggersAsync(definition);
|
||||
|
||||
//_workflowDefinitionCacheManager.Cache.Remove("WorkflowDefinition:B0196B2A1FCF07CE8730A48F3E0238C6D8F52F7DB4C79A3C3B44A97C2BB10DB4");
|
||||
|
||||
var workflowDefinitionFilter = new WorkflowDefinitionFilter()
|
||||
{
|
||||
DefinitionHandle = WorkflowDefinitionHandle.ByDefinitionId(definition.DefinitionId, VersionOptions.Published)
|
||||
};
|
||||
|
||||
var createWorkflowDefinitionFilterCacheKey = _workflowDefinitionCacheManager.CreateWorkflowDefinitionFilterCacheKey(workflowDefinitionFilter);
|
||||
_workflowDefinitionCacheManager.Cache.Remove(createWorkflowDefinitionFilterCacheKey);
|
||||
//await _workflowDefinitionCacheManager.Cache.TriggerTokenAsync(createWorkflowDefinitionFilterCacheKey);
|
||||
|
||||
|
||||
var createWorkflowFilterCacheKey = _workflowDefinitionCacheManager.CreateWorkflowFilterCacheKey(workflowDefinitionFilter);
|
||||
_workflowDefinitionCacheManager.Cache.Remove(createWorkflowFilterCacheKey);
|
||||
//await _workflowDefinitionCacheManager.Cache.TriggerTokenAsync(createWorkflowFilterCacheKey);
|
||||
|
||||
//_workflowDefinitionCacheManager.Cache.Remove("WorkflowDefinition:FAFFD28A8B17585222747A0B10C16311BCCAF7744F1C41274BBDC652356D99A6");
|
||||
//_workflowDefinitionCacheManager.Cache.Remove("Workflow:FAFFD28A8B17585222747A0B10C16311BCCAF7744F1C41274BBDC652356D99A6");
|
||||
|
||||
//_workflowDefinitionCacheManager.Cache.Remove("WorkflowDefinition:49B1E9FD1A0244512E8D2916B0A1B880E4473AA9F4E9341F6A69D331C9843B22");
|
||||
//_workflowDefinitionCacheManager.Cache.Remove("Workflow:49B1E9FD1A0244512E8D2916B0A1B880E4473AA9F4E9341F6A69D331C9843B22");
|
||||
|
||||
//_workflowDefinitionCacheManager.Cache.Remove("Workflow:398a80072c638a83");
|
||||
|
||||
|
||||
}
|
||||
finally
|
||||
{
|
||||
sw.Stop();
|
||||
_logger.Log("End of EvictDefFromCacheAsync", name, sw.ElapsedMilliseconds, null);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -18,6 +18,9 @@ namespace Caspian.WorkflowFramework.Utility
|
||||
if (dictionary == null || dictionary.Count == 0)
|
||||
return workflowModel;
|
||||
|
||||
// قبل از تبدیل به مدل خروجی، sessionId حذف میشود.
|
||||
dictionary.RemoveSessionId();
|
||||
|
||||
//Map dictionary values to WorkflowModel properties
|
||||
workflowModel.InstanceId = dictionary.ContainsKey(nameof(workflowModel.InstanceId))
|
||||
? dictionary[nameof(workflowModel.InstanceId)]?.ToString()
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
namespace Caspian.WorkflowFramework.Utility;
|
||||
|
||||
public static class WorkflowVariableExtensions
|
||||
{
|
||||
private const string SessionIdKey = "SessionId";
|
||||
|
||||
/// <summary>
|
||||
/// SessionId را فقط از سطح اول دیکشنری متغیرهای Workflow حذف میکند.
|
||||
/// مقایسه نام کلید به حروف بزرگ و کوچک حساس نیست.
|
||||
/// </summary>
|
||||
public static Dictionary<string, object?> RemoveSessionId(
|
||||
this Dictionary<string, object?> variables)
|
||||
{
|
||||
if (variables is null || variables.Count == 0)
|
||||
return variables!;
|
||||
|
||||
var sessionIdKey = variables.Keys.FirstOrDefault(
|
||||
key => string.Equals(
|
||||
key,
|
||||
SessionIdKey,
|
||||
StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
if (sessionIdKey is not null)
|
||||
variables.Remove(sessionIdKey);
|
||||
|
||||
return variables;
|
||||
}
|
||||
}
|
||||
@@ -12,7 +12,7 @@
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"launchBrowser": true,
|
||||
"applicationUrl": "https://localhost:5001;http://localhost:5072",
|
||||
"applicationUrl": "https://localhost:5002;http://localhost:5072",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
|
||||
@@ -40,8 +40,8 @@
|
||||
"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=CaspianWfDb;User Id=sa;Password=123456;TrustServerCertificate=True;",
|
||||
//"SqlServer": "Server=.;Database=Workflow_Db;User Id=sa;Password=123456;TrustServerCertificate=True;",
|
||||
"SqlServer": "Server=192.168.251.161;Database=Workflow_Db;User Id=sa;Password=cLL{3N29D@n2;MultipleActiveResultSets=true;TrustServerCertificate=True",
|
||||
"SqlServer": "Server=.;Database=WfLive;User Id=sa;Password=123456;TrustServerCertificate=True;",
|
||||
//"SqlServer": "Server=192.168.251.161;Database=Workflow_Db;User Id=sa;Password=cLL{3N29D@n2;MultipleActiveResultSets=true;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",
|
||||
|
||||
@@ -39,7 +39,8 @@
|
||||
"Sqlite": "", //"Data Source=elsa.sqlite.db;Cache=Shared;",
|
||||
"RabbitMq": "", //"rabbitmq://guest:guest@localhost:5672",
|
||||
"MySql": "", //"Server=localhost;Database=elsa;Uid=user;Pwd=password;",
|
||||
"SqlServer": "Server=.;Database=WfDb;User Id=sa;Password=123456;TrustServerCertificate=True;",
|
||||
//"SqlServer": "Server=.;Database=WfDb;User Id=sa;Password=123456;TrustServerCertificate=True;",
|
||||
"SqlServer": "Server=192.168.251.161;Database=Workflow_Db;User Id=sa;Password=cLL{3N29D@n2;MultipleActiveResultSets=true;TrustServerCertificate=True",
|
||||
"PostgreSql": "" //"Server=localhost;Username=elsa;Database=elsa;Port=5432;Password=elsa;SSLMode=Prefer;MaxPoolSize=2000;Timeout=60"
|
||||
},
|
||||
"DatabaseProvider": "SqlServer", //"Sqlite",
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Api.Client</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides HTTP clients for the Elsa Workflows REST API.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Api.Common</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides common features to modules that expose API endpoints.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.DropIns.Core</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Reference this package when developing drop-ins for Elsa Workflows.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.DropIns</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides drop-in features for Elsa workflows.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Features</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides utilities to turn your class library into a module that provides features.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Mediator</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides a mediator service inspired by MediatR.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Testing.Shared.Component</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides common utilities that are helpful when writing component tests against Elsa Workflows functionality.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Testing.Shared.Integration</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides common utilities that are helpful when writing integration tests against Elsa Workflows functionality.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Testing.Shared</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides common utilities that are helpful when writing tests against Elsa Workflows functionality.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Alterations.Core</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides core interfaces, models and services that support the alteration engine.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Alterations.MassTransit</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides alteration background job runners using MassTransit.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Alterations</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides alterations for workflow instances.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.CSharp</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides a CSharp expression provider.
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Caching.Distributed.MassTransit</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides distributed caching services leveraging MassTransit for transport of signals.
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Caching.Distributed.ProtoActor</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides distributed caching services leveraging Proto.Actor for transport of signals.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Caching.Distributed</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides distributed caching services and utility functions common to Elsa modules.
|
||||
|
||||
@@ -29,4 +29,10 @@ public interface ICacheManager
|
||||
/// Gets an item from the cache, or creates it if it doesn't exist.
|
||||
/// </summary>
|
||||
Task<TItem?> GetOrCreateAsync<TItem>(object key, Func<ICacheEntry, Task<TItem>> factory);
|
||||
|
||||
/// <summary>
|
||||
/// remove an item from the cache
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
void Remove(string key);
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Caching</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides caching services and utility functions common to Elsa modules.
|
||||
|
||||
@@ -26,6 +26,13 @@ public class CacheManager(IMemoryCache memoryCache, IChangeTokenSignaler changeT
|
||||
/// <inheritdoc />
|
||||
public async Task<TItem?> GetOrCreateAsync<TItem>(object key, Func<ICacheEntry, Task<TItem>> factory)
|
||||
{
|
||||
return await memoryCache.GetOrCreateAsync(key, async entry => await factory(entry));
|
||||
var result = await memoryCache.GetOrCreateAsync(key, async entry => await factory(entry));
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public void Remove(string key)
|
||||
{
|
||||
memoryCache.Remove(key);
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Common</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides services and utility functions common to Elsa modules.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Connections.Api</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>Provides Activity Connection API endpoints</Description>
|
||||
<PackageTags>elsa module activity connection abstraction api</PackageTags>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Connections.Core</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>Provides an connection framework to use connection abtraction in activities</Description>
|
||||
<PackageTags>elsa module connection abstratction</PackageTags>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Connections.Models</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>Provides models that can be shared between the API and API clients</Description>
|
||||
<PackageTags>elsa module connections api</PackageTags>
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>Provides an EF Core migrations for SQLite for the Connection Persistence module.</Description>
|
||||
<PackageTags>elsa module persistence efcore entity framework core sqlite</PackageTags>
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Connections.Persistence.EntityFrameworkCore</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>Provides an Entity Framework Core provider for the persistence layer of the Connection module</Description>
|
||||
<PackageTags>elsa connection persistence efcore entity framework core</PackageTags>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Connections.Persistence</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>Provides Connections persistence services</Description>
|
||||
<PackageTags>elsa module connections persistence </PackageTags>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Dapper.Migrations</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides Dapper migrations for Dapper perisstence providers from various modules.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Dapper</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides Dapper implementations of various persistence abstractions from various modules.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Dsl</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides a custom DSL to write workflows with in a syntax similar to JavaScript but with native keywords translating to workflow functionality.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Elasticsearch</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides Elasticsearch implementation for workflow state persistence.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Email</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides a SendEmail activity that lets you send emails from a workflow.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.EntityFrameworkCore.Common</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides common Entity Framework Core types for implementing EF Core persistence of varipus ELsa modules.
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<PackageId>Caspian.Elsa.EntityFrameworkCore.MySql</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides MySQL EF Core migrations for various modules.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.EntityFrameworkCore.Oracle</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides Oracle EF Core migrations for various modules.
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.EntityFrameworkCore.PostgreSql</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides PostgreSQL EF Core migrations for various modules.
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.EntityFrameworkCore.SqlServer</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides SQL Server EF Core migrations for various modules.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.EntityFrameworkCore.Sqlite</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides SQLite EF Core migrations for various modules.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.EntityFrameworkCore</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides Entity Framework Core implementations of various abstractions from various modules.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Environments</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides API endpoints for client applications to enumerate available environments.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Expressions</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides infrastructure for registering and executing workflow expressions.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.FileStorage</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides activities to save and load files to and from a confogurable storage provider.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Hangfire</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides Hangfire integration and an implementation of Elsa's IJobQueue implementation.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Hosting.Management</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides hosting management functionality.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Http</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides HTTP activities to listen for and send out HTTP requests.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.IO.Compression</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides compression and archiving activities for Elsa Workflows.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.IO.Http</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides http capabilities to IO modules in Elsa Workflows.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.IO</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides IO services for resolving various content types to streams.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Identity</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides a default identity solution.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.JavaScript.Libraries</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides the following JavaScript libraries for Elsa:
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.JavaScript</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides a JavaScript expression provider.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Kafka</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides Apache Kafka integration and activities.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.KeyValues</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides a store for holding key value records.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Labels</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides funtionality to tag workflows with labels and filter by them.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Liquid</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides a Liquid expression provider.
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.MassTransit.AzureServiceBus</PackageId>
|
||||
<Company>Caspian.</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides integration of Azure Service Bus with MassTransit's integration of Elsa.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.MassTransit.RabbitMq</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides integration of RabbitMQ with MassTransit's integration of Elsa.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.MassTransit</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides integration with MassTransit and comes with a MassTransit implementation of Elsa's IServiceBus abstraction.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.MongoDb</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides MongoDB implementations of various abstractions from various modules.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.OpenTelemetry</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides OpenTelemetry sources for tracing workflow and activity execution.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.ProtoActor.Core</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides ProtoActor services to the system. Other modules can add actors to the ActorSystem.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Python</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides a Python expression provider.
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
<PackageId>Caspian.Elsa.Quartz.EntityFrameworkCore.MySql</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides EF Core migrations for Quartz.NET.
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Quartz.EntityFrameworkCore.PostgreSql</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides EF Core migrations for Quartz.NET.
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Quartz.EntityFrameworkCore.SqlServer</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides EF Core migrations for Quartz.NET.
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Quartz.EntityFrameworkCore.Sqlite</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides EF Core migrations for Quartz.NET.
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<PackageId>Caspian.Elsa.Quartz</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides integration with the Quartz.NET library and provide am implementation of Elsa's IJobScheduler using Quartz.NET.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Resilience.Core</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides core services and types for implementing resilient services and activities.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Resilience</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides features and services for implementing resilient services and activities.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Retention</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides retention options for workflows.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.SasTokens</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides services to generate SAS tokens.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Scheduling</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides scheduling activities such as Timer, Delay and StartAt.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Secrets.Api</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>Provides Secrets API endpoints</Description>
|
||||
<PackageTags>elsa module secrets api</PackageTags>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Secrets.Core</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides services to get secrets.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Secrets.Management</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides services to manage secrets.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Secrets.Models</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>Provides models that can be shared between the API and API clients</Description>
|
||||
<PackageTags>elsa module secrets api</PackageTags>
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Secrets.Persistence.EntityFrameworkCore.PostgreSql</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>Provides PostgreSql persistence for the Elsa Secrets module using Entity Framework Core.</Description>
|
||||
<PackageTags>elsa module secrets persistence efcore PostgreSql</PackageTags>
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Secrets.Persistence.EntityFrameworkCore.SqlServer</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>Provides SqlServer persistence for the Elsa Secrets module using Entity Framework Core.</Description>
|
||||
<PackageTags>elsa module secrets persistence efcore SqlServer</PackageTags>
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Secrets.Persistence.EntityFrameworkCore.Sqlite</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>Provides SQLite persistence for the Elsa Secrets module using Entity Framework Core.</Description>
|
||||
<PackageTags>elsa module secrets persistence efcore sqlite</PackageTags>
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Secrets.Persistence.EntityFrameworkCore</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>Provides an Entity Framework Core provider for the persistence layer of the Secrets module</Description>
|
||||
<PackageTags>elsa module security secrets persistence efcore entity framework core</PackageTags>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Secrets.Scripting</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>Provides scripting integration with various languages like JavaScript, C#, Python and Liquid.</Description>
|
||||
<PackageTags>elsa module secrets scripting</PackageTags>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Sql.MySql</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides client implementations for interacting with MySql databases.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Sql.PostgreSql</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides client implementations for interacting with PostgreSql databases.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Sql.SqlServer</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides client implementations for interacting with Microsoft SQL Server databases.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Sql.Sqlite</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides client implementations for interacting with Sqlite databases.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Sql</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides activities to interact with sql databases.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageId>Caspian.Elsa.Tenants.AspNetCore</PackageId>
|
||||
<Company>Caspian</Company>
|
||||
<Authors>Behzad Alizadeh</Authors>
|
||||
<Version>1.1.0-preview.4</Version>
|
||||
<Version>1.1.0-preview.8</Version>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<Description>
|
||||
Provides multitenancy middleware
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user