diff --git a/e-suite.API/eSuite.API/Controllers/WorkflowTemplateController.cs b/e-suite.API/eSuite.API/Controllers/WorkflowTemplateController.cs index d1221a7..0c06e60 100644 --- a/e-suite.API/eSuite.API/Controllers/WorkflowTemplateController.cs +++ b/e-suite.API/eSuite.API/Controllers/WorkflowTemplateController.cs @@ -167,7 +167,7 @@ public class WorkflowTemplateController : ESuiteControllerBase [ProducesResponseType(StatusCodes.Status400BadRequest, Type = typeof(ProblemDetails))] [AccessKey(SecurityAccess.DeleteWorkflowTemplate)] public async Task GetAllowedTaskMetadataList( - [FromQuery] string taskType, + [FromQuery] string? taskType, CancellationToken cancellationToken = default! ) { diff --git a/e-suite.Modules.WorkflowTemplatesManager/WorkflowTemplateManager.cs b/e-suite.Modules.WorkflowTemplatesManager/WorkflowTemplateManager.cs index f66f88e..70384d9 100644 --- a/e-suite.Modules.WorkflowTemplatesManager/WorkflowTemplateManager.cs +++ b/e-suite.Modules.WorkflowTemplatesManager/WorkflowTemplateManager.cs @@ -170,7 +170,7 @@ public class WorkflowTemplateManager : IWorkflowTemplateManager return $"{genericName}<{formattedArgs}>"; } - public Task> GetAllowedTaskMetadataList(string taskType, CancellationToken cancellationToken) + public Task> GetAllowedTaskMetadataList(string? taskType, CancellationToken cancellationToken) { var taskTypeAttribute = StageExtensions.GetTaskAttributeType(taskType); diff --git a/e-suite.Workflow.Core/Extensions/StageExtensions.cs b/e-suite.Workflow.Core/Extensions/StageExtensions.cs index 823a62f..cb4ec2d 100644 --- a/e-suite.Workflow.Core/Extensions/StageExtensions.cs +++ b/e-suite.Workflow.Core/Extensions/StageExtensions.cs @@ -32,10 +32,10 @@ public static class StageExtensions StringComparer.OrdinalIgnoreCase ); - public static Type GetTaskAttributeType(string taskType) + public static Type? GetTaskAttributeType(string taskType) { - if (taskType == null) - throw new ArgumentNullException(nameof(taskType)); + if (string.IsNullOrWhiteSpace(taskType)) + return null; var key = taskType.Trim(); @@ -51,7 +51,7 @@ public static class StageExtensions } - private static readonly ConcurrentDictionary> AllowedTasksCache = new(); + private static readonly ConcurrentDictionary> AllowedTasksCache = new(); [System.Diagnostics.CodeAnalysis.SuppressMessage( "Style", "IDE0305:Collection initialization can be simplified", @@ -61,9 +61,21 @@ public static class StageExtensions Justification = "parameter required for extension method definition")] - public static IEnumerable GetAllowedTaskTypes(Type attributeType) + public static IEnumerable GetAllowedTaskTypes(Type? attributeType) { - return AllowedTasksCache.GetOrAdd(attributeType, _ => + if (attributeType == null) + { + return AllowedTasksCache.GetOrAdd("__NULL__", _ => + { + var generalTasks = GetAllowedTaskTypes(typeof(GeneralTaskAttribute)); + var approvalTasks = GetAllowedTaskTypes(typeof(ApprovalTaskAttribute)); + + return generalTasks.Concat(approvalTasks).ToArray(); + }); + } + + + return AllowedTasksCache.GetOrAdd(attributeType!.FullName!, _ => { return AppDomain.CurrentDomain .GetAssemblies()